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
ConstructorsConstructorDescriptionAgentJobServiceImpl(DataServices dataServices, JobResolverService jobResolverService, AgentFilterService agentFilterService, AgentConfigurationService agentConfigurationService, io.micrometer.core.instrument.MeterRegistry meterRegistry) Constructor. -
Method Summary
Modifier and TypeMethodDescriptionvoidclaimJob(@NotBlank String id, @Valid com.netflix.genie.common.internal.dtos.AgentClientMetadata agentClientMetadata) Set a job identified byidto be owned by the agent identified byagentClientMetadata.com.netflix.genie.common.internal.dtos.JobSpecificationdryRunJobSpecificationResolution(@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.JobSpecificationgetJobSpecification(@NotBlank String id) Get a job specification if has been resolved.com.netflix.genie.common.internal.dtos.JobStatusgetJobStatus(@NotBlank String id) Retrieve the status of the job identified withid.voidhandshake(@Valid com.netflix.genie.common.internal.dtos.AgentClientMetadata agentClientMetadata) Shake hands and allow a client or reject it based on the suppliedAgentClientMetadata.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 suppliedJobRequest.com.netflix.genie.common.internal.dtos.JobSpecificationresolveJobSpecification(@NotBlank String id) Resolve the job specification for job identified by the given id.voidupdateJobArchiveStatus(@NotBlank String id, com.netflix.genie.common.internal.dtos.ArchiveStatus newArchiveStatus) Update the archive status status of the job identified withidto benewStatus.voidupdateJobStatus(@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 withidto benewStatusprovided that the current status of the job matchesnewStatus.
-
Constructor Details
-
AgentJobServiceImpl
public AgentJobServiceImpl(DataServices dataServices, JobResolverService jobResolverService, AgentFilterService agentFilterService, AgentConfigurationService agentConfigurationService, io.micrometer.core.instrument.MeterRegistry meterRegistry) Constructor.- Parameters:
dataServices- TheDataServicesinstance to usejobResolverService- The specification service to useagentFilterService- The agent filter service to useagentConfigurationService- The agent configuration servicemeterRegistry- 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 suppliedAgentClientMetadata.- Specified by:
handshakein interfaceAgentJobService- 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:
getAgentPropertiesin interfaceAgentJobService- 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 suppliedJobRequest.- Specified by:
reserveJobIdin interfaceAgentJobService- Parameters:
jobRequest- The job request containing all the metadata needed to reserve a job idagentClientMetadata- 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:
resolveJobSpecificationin interfaceAgentJobService- 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 statecom.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:
getJobSpecificationin interfaceAgentJobService- 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:
dryRunJobSpecificationResolutionin interfaceAgentJobService- 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 byidto be owned by the agent identified byagentClientMetadata. The job status in the system will be set toJobStatus.CLAIMED- Specified by:
claimJobin interfaceAgentJobService- 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 withidto benewStatusprovided that the current status of the job matchesnewStatus. Optionally a status message can be provided to provide more details to users. If thenewStatusisJobStatus.RUNNINGthe start time will be set. If thenewStatusis a member ofJobStatus.getFinishedStatuses()and the job had a started time set the finished time of the job will be set.- Specified by:
updateJobStatusin interfaceAgentJobService- 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 hasnewStatus- The new status the caller would like to update the status tonewStatusMessage- An optional status message to associate with this change
-
getJobStatus
Retrieve the status of the job identified withid.- Specified by:
getJobStatusin interfaceAgentJobService- 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 withidto benewStatus. Notice this is a 'blind write', the currently persisted value will always be overwritten.- Specified by:
updateJobArchiveStatusin interfaceAgentJobService- 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
-