Class BuildQueueManagerImpl
- All Implemented Interfaces:
AgentQueueAccessor,BuildQueueManager
-
Nested Class Summary
Nested classes/interfaces inherited from interface com.atlassian.bamboo.v2.build.queue.AgentQueueAccessor
AgentQueueAccessor.QueueAccessResultNested classes/interfaces inherited from interface com.atlassian.bamboo.v2.build.queue.BuildQueueManager
BuildQueueManager.QueuedResultKey, BuildQueueManager.QueueingResult, BuildQueueManager.QueueItemView<T> -
Field Summary
Fields inherited from interface com.atlassian.bamboo.v2.build.queue.BuildQueueManager
DISABLE_BUILD_SYSTEM_PROPERTY -
Constructor Summary
ConstructorsConstructorDescriptionBuildQueueManagerImpl(@NotNull AgentManager agentManager, @NotNull com.atlassian.event.api.EventPublisher eventPublisher, @NotNull com.atlassian.plugin.PluginAccessor pluginAccessor, @NotNull ErrorUpdateHandler errorUpdateHandler, @NotNull ExecutableAgentsHelper executableAgentsHelper, @NotNull CustomVariableContextRunner customVariableContextRunner, @NotNull ExecutionPhaseService executionPhaseService, @NotNull XStreamFactory xStreamFactory, @NotNull org.springframework.transaction.support.TransactionTemplate transactionTemplate, @NotNull EphemeralAgentsLaunchRequestRegistry ephemeralAgentsLaunchRequestRegistry, @NotNull EphemeralAgentsService ephemeralAgentsService) -
Method Summary
Modifier and TypeMethodDescriptionvoidaddToQueue(@NotNull CommonContext context) Attempts to add the build to a queue.addToQueueWithResult(@NotNull CommonContext context) Attempts to add the build to a queue.getExecutorsForQueuedExecutable(@NotNull ResultKey resultKey) @Nullable Collection<ElasticImageConfiguration>getImagesForQueuedExecutable(@NotNull ResultKey resultKey) @Nullable Collection<ElasticImageConfiguration>getNonDedicatedImagesForQueuedExecutable(@NotNull ResultKey resultKey) Returns the images that can execute the given executable.@NotNull Iterable<BuildQueueManager.QueuedResultKey>@NotNull BuildQueuePositiongetQueuePosition(@NotNull ResultKey resultKey) Returns information on position of plan result in the queue.@Nullable Collection<EphemeralAgentTemplate>getTemplatesForQueueExecutable(@NotNull ResultKey resultKey) Returns the ephemeral agents templates currently considered to be eligible for building resultKey.longgetTimeSpentOnRecalculatingAllExecutors(long durationTillNowInMillis) The method returns the number of milliseconds spent on recalculating all executors for a time duration until now.voidinvalidateExecutables(@NotNull BuildAgent buildAgent) Updates all agent-executable mappings for a given agent.voidinvalidateExecutors(@NotNull Key key) voidinvalidateExecutors(@NotNull String reason) voidlaunchDedicatedAgentsForTemplate(@NotNull EphemeralAgentTemplate template) Launches dedicated agents for the given template and executables present in the queue at the moment of this method call.@Nullable BuildQueueManager.QueueItemView<CommonContext>peekContext(@NotNull ResultKey resultKey) Returns a queued CommonContext for given resultKey.removeBuildFromQueue(@NotNull ResultKey resultKey) Removes theCommonContextassociated with the resultKey to be removed from the queue.voidremoveDedicationTimestamp(@NotNull ResultKey resultKey) Remove the dedication timestamp for the given result key if the one exists.booleanreorderInQueue(ResultKey resultKey, int index) Reorders the build queue.voidrestoreState(Set<ResultKey> resultsToRestore) Restore state after server restart.@Nullable CommonContexttakeBuildContext(long agentId) Takes aCommonContextfrom the queue, blocking until one is available.@Nullable AgentQueueAccessor.QueueAccessResulttakeContext(long agentId) Takes aCommonContextfrom the queue, blocking until one is available.@NotNull AgentQueueAccessor.QueueAccessResulttakeContext(long agentId, @Nullable ResultKey resultKey) If resultKey is not null, takes a specificCommonContextfrom the queue or nothing if there's no job with specified key in the queue.
-
Constructor Details
-
BuildQueueManagerImpl
@Inject public BuildQueueManagerImpl(@NotNull @NotNull AgentManager agentManager, @NotNull @NotNull com.atlassian.event.api.EventPublisher eventPublisher, @NotNull @NotNull com.atlassian.plugin.PluginAccessor pluginAccessor, @NotNull @NotNull ErrorUpdateHandler errorUpdateHandler, @NotNull @NotNull ExecutableAgentsHelper executableAgentsHelper, @NotNull @NotNull CustomVariableContextRunner customVariableContextRunner, @NotNull @NotNull ExecutionPhaseService executionPhaseService, @NotNull @NotNull XStreamFactory xStreamFactory, @NotNull @NotNull org.springframework.transaction.support.TransactionTemplate transactionTemplate, @NotNull @NotNull EphemeralAgentsLaunchRequestRegistry ephemeralAgentsLaunchRequestRegistry, @NotNull @NotNull EphemeralAgentsService ephemeralAgentsService)
-
-
Method Details
-
addToQueue
Description copied from interface:BuildQueueManagerAttempts to add the build to a queue. A com.atlassian.bamboo.v2.build.events.BuildQueuedEvent is fired if queuing was successfulA lock on the build is obtained from the
BuildExecutionManager.- Specified by:
addToQueuein interfaceBuildQueueManager
-
addToQueueWithResult
public BuildQueueManager.QueueingResult addToQueueWithResult(@NotNull @NotNull CommonContext context) Description copied from interface:BuildQueueManagerAttempts to add the build to a queue. A com.atlassian.bamboo.v2.build.events.BuildQueuedEvent is fired if queuing was successfulA lock on the build is obtained from the
BuildExecutionManager.- Specified by:
addToQueueWithResultin interfaceBuildQueueManager- Returns:
- operation status
-
removeBuildFromQueue
Description copied from interface:BuildQueueManagerRemoves theCommonContextassociated with the resultKey to be removed from the queue.The lock on the build is not released. The caller should call
com.atlassian.bamboo.build.BuildExecutionManager#finishBuild(PlanResultKey)to release this lock when ready. This method should not be called directly useLocalResultProcessor.removeFromQueue(ResultKey)instead.- Specified by:
removeBuildFromQueuein interfaceBuildQueueManager
-
reorderInQueue
Description copied from interface:BuildQueueManagerReorders the build queue.CommonContextassociated with the resultKey is moved to new position in the queue indicated by the zero-based index parameter. If index is < 0 or >= size of queue thenCommonContextis positioned at the beginning or at the end of the queue respectively.- Specified by:
reorderInQueuein interfaceBuildQueueManager- Parameters:
resultKey- Result key of the build that shall be repositioned in the queue.index- New position of aCommonContextassociated with the planKey in the queue.
-
getQueuePosition
Description copied from interface:BuildQueueManagerReturns information on position of plan result in the queue.- Specified by:
getQueuePositionin interfaceBuildQueueManager- Parameters:
resultKey- identifies plan result- Returns:
- the [@link BuildQueuePosition} object
-
invalidateExecutors
- Specified by:
invalidateExecutorsin interfaceBuildQueueManager
-
invalidateExecutors
- Specified by:
invalidateExecutorsin interfaceBuildQueueManager
-
invalidateExecutables
Description copied from interface:BuildQueueManagerUpdates all agent-executable mappings for a given agent.- Specified by:
invalidateExecutablesin interfaceBuildQueueManager
-
getQueuedExecutables
- Specified by:
getQueuedExecutablesin interfaceBuildQueueManager- Returns:
- the currently queued executables.
-
getImagesForQueuedExecutable
@Nullable public @Nullable Collection<ElasticImageConfiguration> getImagesForQueuedExecutable(@NotNull @NotNull ResultKey resultKey) - Specified by:
getImagesForQueuedExecutablein interfaceBuildQueueManager- Returns:
- the images that can execute the given executable. returns null if the executable is unknown.
-
getNonDedicatedImagesForQueuedExecutable
@Nullable public @Nullable Collection<ElasticImageConfiguration> getNonDedicatedImagesForQueuedExecutable(@NotNull @NotNull ResultKey resultKey) Description copied from interface:BuildQueueManagerReturns the images that can execute the given executable. If the executable is not found, null is returned. If the executable is dedicated at the moment of check, the empty list will be returned.- Specified by:
getNonDedicatedImagesForQueuedExecutablein interfaceBuildQueueManager- Parameters:
resultKey- executable- Returns:
- list of elastic image configurations
-
getTemplatesForQueueExecutable
@Nullable public @Nullable Collection<EphemeralAgentTemplate> getTemplatesForQueueExecutable(@NotNull @NotNull ResultKey resultKey) Description copied from interface:BuildQueueManagerReturns the ephemeral agents templates currently considered to be eligible for building resultKey. If the resultKey is not found the null is returned.- Specified by:
getTemplatesForQueueExecutablein interfaceBuildQueueManager- Parameters:
resultKey- result key to look for- Returns:
- ephemeral agents templates.
-
getExecutorsForQueuedExecutable
@Nullable public @Nullable Set<Long> getExecutorsForQueuedExecutable(@NotNull @NotNull ResultKey resultKey) - Specified by:
getExecutorsForQueuedExecutablein interfaceBuildQueueManager- Returns:
- the ids of agents that can execute the given executable. returns null if the executable is unknown.
-
peekContext
@Nullable public @Nullable BuildQueueManager.QueueItemView<CommonContext> peekContext(@NotNull @NotNull ResultKey resultKey) Description copied from interface:BuildQueueManagerReturns a queued CommonContext for given resultKey. Consider using com.atlassian.bamboo.v2.build.queue.QueueManagerView for your build queue viewing needs}- Specified by:
peekContextin interfaceBuildQueueManager- Returns:
-
restoreState
Description copied from interface:BuildQueueManagerRestore state after server restart.- Specified by:
restoreStatein interfaceBuildQueueManager- Parameters:
resultsToRestore- keys of results that it makes sense to restore
-
removeDedicationTimestamp
Description copied from interface:BuildQueueManagerRemove the dedication timestamp for the given result key if the one exists. The dedication timestamp works as a due-to-date, to which the build queue holds the related executable for a dedicated agent. After the date pass, every executor can grab the executable. Removing the dedication timestamp means that the executable is no longer dedicated.- Specified by:
removeDedicationTimestampin interfaceBuildQueueManager- Parameters:
resultKey- of the related executable
-
launchDedicatedAgentsForTemplate
Description copied from interface:BuildQueueManagerLaunches dedicated agents for the given template and executables present in the queue at the moment of this method call. The dedicated agent will be launched if the corresponding executable is not already waiting for any dedicated agent.- Specified by:
launchDedicatedAgentsForTemplatein interfaceBuildQueueManager- Parameters:
template- the template to launch dedicated agents for
-
getTimeSpentOnRecalculatingAllExecutors
public long getTimeSpentOnRecalculatingAllExecutors(long durationTillNowInMillis) Description copied from interface:BuildQueueManagerThe method returns the number of milliseconds spent on recalculating all executors for a time duration until now. Important: If the subsequent method calls have a bigger durationTillNowInMillis than the previous one, it can lead to an underestimated result.- Specified by:
getTimeSpentOnRecalculatingAllExecutorsin interfaceBuildQueueManager- Parameters:
durationTillNowInMillis- the time duration until now in milliseconds- Returns:
- the number of milliseconds spent on recalculating all executors
-
takeBuildContext
Description copied from interface:AgentQueueAccessorTakes aCommonContextfrom the queue, blocking until one is available.The lock on the build is not released. The caller should call
com.atlassian.bamboo.build.BuildExecutionManager#finishBuild(PlanResultKey)to release this lock when ready.- Specified by:
takeBuildContextin interfaceAgentQueueAccessor- Parameters:
agentId- the id of the agent that is taking the build context.- Returns:
- The
CommonContext, null in case of timeout on retrieval. - Throws:
InterruptedException- if the callingThreadis interrupted.
-
takeContext
@Nullable public @Nullable AgentQueueAccessor.QueueAccessResult takeContext(long agentId) throws InterruptedException Description copied from interface:AgentQueueAccessorTakes aCommonContextfrom the queue, blocking until one is available.The lock on the build is not released. The caller should call
com.atlassian.bamboo.build.BuildExecutionManager#finishBuild(PlanResultKey)to release this lock when ready.- Specified by:
takeContextin interfaceAgentQueueAccessor- Parameters:
agentId- the id of the agent that is taking the build context.- Returns:
- The
AgentQueueAccessor.QueueAccessResultcontaining:CommonContexton success, error message on error, nulls in case of timeout on retrieval. - Throws:
InterruptedException- if the callingThreadis interrupted.
-
takeContext
@NotNull public @NotNull AgentQueueAccessor.QueueAccessResult takeContext(long agentId, @Nullable @Nullable ResultKey resultKey) throws InterruptedException Description copied from interface:AgentQueueAccessorIf resultKey is not null, takes a specificCommonContextfrom the queue or nothing if there's no job with specified key in the queue. If resultKey is null, behaved identically toAgentQueueAccessor.takeContext(long).The lock on the build is not released. The caller should call
com.atlassian.bamboo.build.BuildExecutionManager#finishBuild(PlanResultKey)to release this lock when ready.- Specified by:
takeContextin interfaceAgentQueueAccessor- Parameters:
agentId- the id of the agent that is taking the build context.resultKey- of the job that agent expects to receive- Returns:
- The
AgentQueueAccessor.QueueAccessResultcontaining:CommonContexton success, error message on error, nulls in case of timeout on retrieval. - Throws:
InterruptedException- if the callingThreadis interrupted.
-