Class AgentJobServiceImpl

java.lang.Object
com.netflix.genie.web.agent.services.impl.AgentJobServiceImpl
All Implemented Interfaces:
AgentJobService

@Validated @Transactional public class AgentJobServiceImpl extends Object implements AgentJobService
Default implementation of AgentJobService.
Since:
4.0.0
  • Constructor Summary

    Constructors
    Constructor
    Description
    AgentJobServiceImpl(DataServices dataServices, JobResolverService jobResolverService, AgentFilterService agentFilterService, AgentConfigurationService agentConfigurationService, io.micrometer.core.instrument.MeterRegistry meterRegistry)
    Constructor.
  • Method Summary

    Modifier and Type
    Method
    Description
    void
    claimJob(@NotBlank String id, @Valid com.netflix.genie.common.internal.dtos.AgentClientMetadata agentClientMetadata)
    Set a job identified by id to be owned by the agent identified by agentClientMetadata.
    com.netflix.genie.common.internal.dtos.JobSpecification
    dryRunJobSpecificationResolution(@Valid com.netflix.genie.common.internal.dtos.JobRequest jobRequest)
    Run the job specification resolution algorithm on the given input but save nothing in the system.
    getAgentProperties(@Valid com.netflix.genie.common.internal.dtos.AgentClientMetadata agentClientMetadata)
    Provide configuration properties for an agent that is beginning to execute a job.
    com.netflix.genie.common.internal.dtos.JobSpecification
    Get a job specification if has been resolved.
    com.netflix.genie.common.internal.dtos.JobStatus
    getJobStatus(@NotBlank String id)
    Retrieve the status of the job identified with id.
    void
    handshake(@Valid com.netflix.genie.common.internal.dtos.AgentClientMetadata agentClientMetadata)
    Shake hands and allow a client or reject it based on the supplied AgentClientMetadata.
    reserveJobId(@Valid com.netflix.genie.common.internal.dtos.JobRequest jobRequest, @Valid com.netflix.genie.common.internal.dtos.AgentClientMetadata agentClientMetadata)
    Reserve a job id and persist job details in the database based on the supplied JobRequest.
    com.netflix.genie.common.internal.dtos.JobSpecification
    Resolve the job specification for job identified by the given id.
    void
    updateJobArchiveStatus(@NotBlank String id, com.netflix.genie.common.internal.dtos.ArchiveStatus newArchiveStatus)
    Update the archive status status of the job identified with id to be newStatus.
    void
    updateJobStatus(@NotBlank String id, com.netflix.genie.common.internal.dtos.JobStatus currentStatus, com.netflix.genie.common.internal.dtos.JobStatus newStatus, String newStatusMessage)
    Update the status of the job identified with id to be newStatus provided that the current status of the job matches newStatus.

    Methods inherited from class java.lang.Object

    clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait
  • Constructor Details

    • AgentJobServiceImpl

      public AgentJobServiceImpl(DataServices dataServices, JobResolverService jobResolverService, AgentFilterService agentFilterService, AgentConfigurationService agentConfigurationService, io.micrometer.core.instrument.MeterRegistry meterRegistry)
      Constructor.
      Parameters:
      dataServices - The DataServices instance to use
      jobResolverService - The specification service to use
      agentFilterService - The agent filter service to use
      agentConfigurationService - The agent configuration service
      meterRegistry - The metrics registry to use
  • Method Details

    • handshake

      public void handshake(@Valid @Valid com.netflix.genie.common.internal.dtos.AgentClientMetadata agentClientMetadata) throws com.netflix.genie.common.internal.exceptions.unchecked.GenieAgentRejectedException
      Shake hands and allow a client or reject it based on the supplied AgentClientMetadata.
      Specified by:
      handshake in interface AgentJobService
      Parameters:
      agentClientMetadata - The metadata about the agent starting to run a given job
      Throws:
      com.netflix.genie.common.internal.exceptions.unchecked.GenieAgentRejectedException - If the server rejects the client based on its metadata
    • getAgentProperties

      public Map<String,String> getAgentProperties(@Valid @Valid com.netflix.genie.common.internal.dtos.AgentClientMetadata agentClientMetadata)
      Provide configuration properties for an agent that is beginning to execute a job.
      Specified by:
      getAgentProperties in interface AgentJobService
      Parameters:
      agentClientMetadata - The metadata about the agent starting to run a given job
      Returns:
      a map of properties for the agent
    • reserveJobId

      public String reserveJobId(@Valid @Valid com.netflix.genie.common.internal.dtos.JobRequest jobRequest, @Valid @Valid com.netflix.genie.common.internal.dtos.AgentClientMetadata agentClientMetadata)
      Reserve a job id and persist job details in the database based on the supplied JobRequest.
      Specified by:
      reserveJobId in interface AgentJobService
      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
    • resolveJobSpecification

      public com.netflix.genie.common.internal.dtos.JobSpecification resolveJobSpecification(@NotBlank @NotBlank String id) throws com.netflix.genie.common.internal.exceptions.checked.GenieJobResolutionException, com.netflix.genie.common.internal.exceptions.unchecked.GenieJobResolutionRuntimeException
      Resolve the job specification for job identified by the given id. This method will persist the job specification details to the database.
      Specified by:
      resolveJobSpecification in interface AgentJobService
      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:
      com.netflix.genie.common.internal.exceptions.checked.GenieJobResolutionException - On error resolving the job given the input parameters and system state
      com.netflix.genie.common.internal.exceptions.unchecked.GenieJobResolutionRuntimeException - If job resolution fails due to a runtime error (as opposed to unsatisfiable constraints)
    • getJobSpecification

      @Transactional(readOnly=true) public com.netflix.genie.common.internal.dtos.JobSpecification getJobSpecification(@NotBlank @NotBlank String id)
      Get a job specification if has been resolved.
      Specified by:
      getJobSpecification in interface AgentJobService
      Parameters:
      id - the id of the job to retrieve the specification for
      Returns:
      The job specification for the job
    • dryRunJobSpecificationResolution

      @Transactional(readOnly=true) public com.netflix.genie.common.internal.dtos.JobSpecification dryRunJobSpecificationResolution(@Valid @Valid com.netflix.genie.common.internal.dtos.JobRequest jobRequest) throws com.netflix.genie.common.internal.exceptions.checked.GenieJobResolutionException
      Run the job specification resolution algorithm on the given input but save nothing in the system.
      Specified by:
      dryRunJobSpecificationResolution in interface AgentJobService
      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:
      com.netflix.genie.common.internal.exceptions.checked.GenieJobResolutionException - On error resolving the job given the input parameters and system state
    • claimJob

      public void claimJob(@NotBlank @NotBlank String id, @Valid @Valid com.netflix.genie.common.internal.dtos.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
      Specified by:
      claimJob in interface AgentJobService
      Parameters:
      id - The id of the job to claim. Must exist in the system.
      agentClientMetadata - The metadata about the client claiming the job
    • updateJobStatus

      public void updateJobStatus(@NotBlank @NotBlank String id, com.netflix.genie.common.internal.dtos.JobStatus currentStatus, com.netflix.genie.common.internal.dtos.JobStatus newStatus, @Nullable 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.
      Specified by:
      updateJobStatus in interface AgentJobService
      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
    • getJobStatus

      public com.netflix.genie.common.internal.dtos.JobStatus getJobStatus(@NotBlank @NotBlank String id)
      Retrieve the status of the job identified with id.
      Specified by:
      getJobStatus in interface AgentJobService
      Parameters:
      id - The id of the job to look up.
      Returns:
      the current status of the job, as seen by this node
    • updateJobArchiveStatus

      public void updateJobArchiveStatus(@NotBlank @NotBlank String id, com.netflix.genie.common.internal.dtos.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.
      Specified by:
      updateJobArchiveStatus in interface AgentJobService
      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