floci-io/floci · error · AwsException

InvalidJobStateException

InvalidJobStateException

Error message

Job has already been acknowledged

What it means

Error "Job has already been acknowledged" thrown in floci-io/floci.

Source

Thrown at src/main/java/io/github/hectorvent/floci/services/codepipeline/CodePipelineService.java:575

            if (requested.equals(data.path("actionTypeKey").asText())
                    && thirdParty == data.path("thirdParty").asBoolean(false)) {
                jobs.add(data.path("job"));
            }
        }
        ObjectNode response = mapper.createObjectNode();
        response.set("jobs", jobs);
        return response;
    }

    private ObjectNode acknowledgeJob(JsonNode request, String region, String account) {
        CodePipelineStoredItem job = requireItem(
                account, region, "job", text(request, "jobId"), "JobNotFoundException");
        String nonce = text(request, "nonce");
        if (!nonce.equals(job.getData().path("nonce").asText())) {
            throw new AwsException("InvalidNonceException", "Invalid job nonce", 400);
        }
        if (!"Created".equals(job.getStatus())) {
            throw new AwsException("InvalidJobStateException", "Job has already been acknowledged", 400);
        }
        job.setStatus("InProgress");
        job.setUpdated(now());
        putItem(job);
        return mapper.createObjectNode().put("status", "InProgress");
    }

    private ObjectNode getJobDetails(JsonNode request, String region, String account) {
        CodePipelineStoredItem job = requireItem(
                account, region, "job", text(request, "jobId"), "JobNotFoundException");
        return mapper.createObjectNode().set("jobDetails", job.getData().path("job"));
    }

    private ObjectNode completeJob(JsonNode request, String region, String account, boolean success) {
        CodePipelineStoredItem job = requireItem(
                account, region, "job", text(request, "jobId"), "JobNotFoundException");
        if (!List.of("Created", "InProgress").contains(job.getStatus())) {
            throw new AwsException("InvalidJobStateException", "Job is already complete", 400);

View on GitHub (pinned to 62ff490619)

Solutions

  1. Do not acknowledge a job twice; poll for a new job instead.

When it happens

Trigger: Thrown at src/main/java/io/github/hectorvent/floci/services/codepipeline/CodePipelineService.java:575 when the library encounters an invalid state.

Common situations: Occurs when AcknowledgeJob is called twice for the same job. Only acknowledge a job once after polling it.


AI-assisted analysis of floci-io/floci@62ff490619 (2026-08-14). Data as JSON: /api/errors/c1e254056c03624f. Report an issue: GitHub.