Interface AgentJobService

  • All Known Implementing Classes:
    AgentJobServiceImpl

    @Validated
    public interface AgentJobService
    A Service to collect the logic for implementing calls from the Agent when a job is launched via the CLI.
    Since:
    4.0.0
    • Method Detail

      • handshake

        void handshake​(@Valid
                       @Valid AgentClientMetadata agentMetadata)
        Shake hands and allow a client or reject it based on the supplied AgentClientMetadata.
        Parameters:
        agentMetadata - The metadata about the agent starting to run a given job
        Throws:
        GenieAgentRejectedException - If the server rejects the client based on its metadata
        javax.validation.ConstraintViolationException - If the arguments fail validation
      • getAgentProperties

        java.util.Map<java.lang.String,​java.lang.String> getAgentProperties​(@Valid
                                                                                  @Valid AgentClientMetadata agentMetadata)
        Provide configuration properties for an agent that is beginning to execute a job.
        Parameters:
        agentMetadata - The metadata about the agent starting to run a given job
        Returns:
        a map of properties for the agent
        Throws:
        javax.validation.ConstraintViolationException - If the arguments fail validation
      • reserveJobId

        java.lang.String reserveJobId​(@Valid
                                      @Valid JobRequest jobRequest,
                                      @Valid
                                      @Valid AgentClientMetadata agentClientMetadata)
        Reserve a job id and persist job details in the database based on the supplied JobRequest.
        Parameters:
        jobRequest - The job request containing all the metadata needed to reserve a job id
        agentClientMetadata - The metadata about the agent driving this job request
        Returns:
        The unique id of the job which was saved in the database
        Throws:
        GenieIdAlreadyExistsException - If the id requested along with the job request is already in use
        javax.validation.ConstraintViolationException - If the arguments fail validation
      • resolveJobSpecification

        JobSpecification resolveJobSpecification​(@NotBlank
                                                 @NotBlank java.lang.String id)
                                          throws GenieJobResolutionException,
                                                 GenieJobResolutionRuntimeException
        Resolve the job specification for job identified by the given id. This method will persist the job specification details to the database.
        Parameters:
        id - The id of the job to resolve the specification for. Must already have a reserved an id in the database
        Returns:
        The job specification if one could be resolved
        Throws:
        GenieJobResolutionException - On error resolving the job given the input parameters and system state
        javax.validation.ConstraintViolationException - If the arguments fail validation
        GenieJobResolutionRuntimeException - If job resolution fails due to a runtime error (as opposed to unsatisfiable constraints)
      • getJobSpecification

        JobSpecification getJobSpecification​(@NotBlank
                                             @NotBlank java.lang.String id)
        Get a job specification if has been resolved.
        Parameters:
        id - the id of the job to retrieve the specification for
        Returns:
        The job specification for the job
        Throws:
        GenieJobNotFoundException - If the job has not yet had its ID reserved and/or can't be found
        GenieJobSpecificationNotFoundException - If the job exists but the specification hasn't been resolved or saved yet
        javax.validation.ConstraintViolationException - If the arguments fail validation
      • dryRunJobSpecificationResolution

        JobSpecification dryRunJobSpecificationResolution​(@Valid
                                                          @Valid JobRequest jobRequest)
                                                   throws GenieJobResolutionException
        Run the job specification resolution algorithm on the given input but save nothing in the system.
        Parameters:
        jobRequest - The job request containing all the metadata needed to resolve a job specification
        Returns:
        The job specification that would have been resolved for the given input
        Throws:
        GenieJobResolutionException - On error resolving the job given the input parameters and system state
        javax.validation.ConstraintViolationException - If the arguments fail validation
      • claimJob

        void claimJob​(@NotBlank
                      @NotBlank java.lang.String id,
                      @Valid
                      @Valid AgentClientMetadata agentClientMetadata)
        Set a job identified by id to be owned by the agent identified by agentClientMetadata. The job status in the system will be set to JobStatus.CLAIMED
        Parameters:
        id - The id of the job to claim. Must exist in the system.
        agentClientMetadata - The metadata about the client claiming the job
        Throws:
        GenieJobNotFoundException - if no job with the given id exists
        GenieJobAlreadyClaimedException - if the job with the given id already has been claimed
        GenieInvalidStatusException - if the current job status is not JobStatus.RESOLVED
        javax.validation.ConstraintViolationException - If the arguments fail validation
      • updateJobStatus

        void updateJobStatus​(@NotBlank
                             @NotBlank java.lang.String id,
                             JobStatus currentStatus,
                             JobStatus newStatus,
                             @Nullable
                             java.lang.String newStatusMessage)
        Update the status of the job identified with id to be newStatus provided that the current status of the job matches newStatus. Optionally a status message can be provided to provide more details to users. If the newStatus is JobStatus.RUNNING the start time will be set. If the newStatus is a member of JobStatus.getFinishedStatuses() and the job had a started time set the finished time of the job will be set.
        Parameters:
        id - The id of the job to update status for. Must exist in the system.
        currentStatus - The status the caller to this API thinks the job currently has
        newStatus - The new status the caller would like to update the status to
        newStatusMessage - An optional status message to associate with this change
        Throws:
        GenieJobNotFoundException - if no job with the given id exists
        GenieInvalidStatusException - if the current status of the job identified by id in the system doesn't match the supplied currentStatus. Also if the currentStatus equals the newStatus.
        javax.validation.ConstraintViolationException - If the arguments fail validation
      • getJobStatus

        JobStatus getJobStatus​(@NotBlank
                               @NotBlank java.lang.String id)
        Retrieve the status of the job identified with id.
        Parameters:
        id - The id of the job to look up.
        Returns:
        the current status of the job, as seen by this node
        Throws:
        GenieJobNotFoundException - if no job with the given id exists
        javax.validation.ConstraintViolationException - If the arguments fail validation
      • updateJobArchiveStatus

        void updateJobArchiveStatus​(@NotBlank
                                    @NotBlank java.lang.String id,
                                    ArchiveStatus newArchiveStatus)
        Update the archive status status of the job identified with id to be newStatus. Notice this is a 'blind write', the currently persisted value will always be overwritten.
        Parameters:
        id - The id of the job to update status for. Must exist in the system.
        newArchiveStatus - The new archive status the caller would like to update the status to
        Throws:
        GenieJobNotFoundException - if no job with the given id exists
        javax.validation.ConstraintViolationException - If the arguments fail validation