Class AbstractQueueOfExecutables

java.lang.Object
com.atlassian.bamboo.v2.build.queue.queues.AbstractQueueOfExecutables
All Implemented Interfaces:
QueueOfExecutables
Direct Known Subclasses:
OffloadingQueueOfExecutables, SimpleQueueOfExecutables

public abstract class AbstractQueueOfExecutables extends Object implements QueueOfExecutables
  • Constructor Details

    • AbstractQueueOfExecutables

      protected AbstractQueueOfExecutables(ExecutorCalculator executorCalculator, CommonContextMap map, com.atlassian.event.api.EventPublisher eventPublisher)
  • Method Details

    • inflight

      @Nullable public @Nullable CommonContext inflight(@NotNull @NotNull ResultKey resultKey)
      Description copied from interface: QueueOfExecutables
      Called when a given executable is en route to agent. May be implemented as a simple remove(). Executables in flight should be treated as removed, but may be put back into a queue if an agent fails to acknolwedge that it received the executable.
      Specified by:
      inflight in interface QueueOfExecutables
      Returns:
      the removed context
    • remove

      @Nullable public @Nullable CommonContext remove(@NotNull @NotNull ResultKey resultKey)
      Description copied from interface: QueueOfExecutables
      Called when an executable should be removed from the queue. will not be called concurrently
      Specified by:
      remove in interface QueueOfExecutables
      Returns:
      the removed context
    • enqueue

      public boolean enqueue(@NotNull @NotNull CommonContext context, @Nullable @Nullable MinimalRequirementSet requirements)
      Description copied from interface: QueueOfExecutables
      Adds a new executable to store. Will not be called concurrently. Returns false if requirements could not be retrieved for a build and were not provided in the call (assumption: the reason is that the build got deleted).
      Specified by:
      enqueue in interface QueueOfExecutables
    • enqueueAndRequestDedicatedAgentIfApplicable

      @NotNull public @NotNull QueueOfExecutables.EnqueueResult enqueueAndRequestDedicatedAgentIfApplicable(@NotNull @NotNull CommonContext context, @Nullable @Nullable MinimalRequirementSet requirements)
      Description copied from interface: QueueOfExecutables
      Adds a new executable to store. Will not be called concurrently.
      Specified by:
      enqueueAndRequestDedicatedAgentIfApplicable in interface QueueOfExecutables
      Parameters:
      context - context to enqueue
      requirements - requirements needed to execute the context, may be null
      Returns:
      FAILED if requirements could not be retrieved for a build and were not provided in the call (assumption: the reason is that the build got deleted) ENQUEUED_COMMON if successfully enqueued ENQUEUED_DEDICATED if successfully enqueued and requested a dedicated agent for the execution
    • executablesForAgent

      @NotNull public @NotNull com.google.common.collect.ImmutableList<QueueOfExecutables.ExecutableData> executablesForAgent(long agentId)
      Description copied from interface: QueueOfExecutables
      Returns executables available for an agent.
      Specified by:
      executablesForAgent in interface QueueOfExecutables
    • nonDedicatedExecutablesForAgent

      @NotNull public @NotNull com.google.common.collect.ImmutableList<QueueOfExecutables.ExecutableData> nonDedicatedExecutablesForAgent(long agentId)
      Description copied from interface: QueueOfExecutables
      Returns immutable list of the non-dedicated executables available for an agent.
      Specified by:
      nonDedicatedExecutablesForAgent in interface QueueOfExecutables
      Parameters:
      agentId - id of the agent
      Returns:
      list of executable data
    • executablesForAgent

      @NotNull public @NotNull com.google.common.collect.ImmutableList<QueueOfExecutables.ExecutableData> executablesForAgent(long agentId, Function<Long,Collection<ResultKey>> source)
    • recalculateExecutables

      public void recalculateExecutables(BuildAgent agent)
      Description copied from interface: QueueOfExecutables
      Updates all agent-executable mappings for a given agent.
      Specified by:
      recalculateExecutables in interface QueueOfExecutables
    • recalculateExecutors

      public void recalculateExecutors()
      Description copied from interface: QueueOfExecutables
      Recalculates executors for all executables - until then, any information about executor-executable mapping should be considered to be invalid. The dedicated agents won't be launched as a part of this process.
      Specified by:
      recalculateExecutors in interface QueueOfExecutables
    • size

      public int size()
      Description copied from interface: QueueOfExecutables
      Returns the amount of executables in queue (not counting executables in flight)
      Specified by:
      size in interface QueueOfExecutables
    • getImagesForExecutable

      @Nullable public @Nullable Collection<ElasticImageConfiguration> getImagesForExecutable(@NotNull @NotNull ResultKey resultKey)
      Description copied from interface: QueueOfExecutables
      Returns the images currently considered to be eligible for building resultKey.
      Specified by:
      getImagesForExecutable in interface QueueOfExecutables
    • getNonDedicatedImagesForExecutable

      @Nullable public @Nullable Collection<ElasticImageConfiguration> getNonDedicatedImagesForExecutable(@NotNull @NotNull ResultKey resultKey)
      Description copied from interface: QueueOfExecutables
      Returns 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:
      getNonDedicatedImagesForExecutable in interface QueueOfExecutables
      Parameters:
      resultKey - executable
      Returns:
      list of elastic image configurations
    • getTemplatesForExecutable

      @Nullable public @Nullable Collection<EphemeralAgentTemplate> getTemplatesForExecutable(@NotNull @NotNull ResultKey resultKey)
      Description copied from interface: QueueOfExecutables
      Returns the ephemeral agents templates currently considered to be eligible for building resultKey. If the resultKey is not found the null is returned.
      Specified by:
      getTemplatesForExecutable in interface QueueOfExecutables
      Parameters:
      resultKey - result key to look for
      Returns:
      ephemeral agents templates.
    • getExecutorsForExecutable

      @Nullable public @Nullable Set<Long> getExecutorsForExecutable(@NotNull @NotNull ResultKey resultKey)
      Description copied from interface: QueueOfExecutables
      Returns the executors currently considered to be eligible for building resultKey.
      Specified by:
      getExecutorsForExecutable in interface QueueOfExecutables
    • removeDedicationTimestamp

      public void removeDedicationTimestamp(@NotNull @NotNull ResultKey resultKey)
      Description copied from interface: QueueOfExecutables
      Remove 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:
      removeDedicationTimestamp in interface QueueOfExecutables
      Parameters:
      resultKey - of the related executable
    • recalculateExecutors

      public void recalculateExecutors(@NotNull @NotNull Set<Key> keys)
      Description copied from interface: QueueOfExecutables
      Recalculates executors for a given plan - until then, any information about executor-executable mapping for this plan should be considered to be invalid.
      Specified by:
      recalculateExecutors in interface QueueOfExecutables
      Parameters:
      keys - the keys to invalidate
    • get

      @Nullable public @Nullable CommonContext get(@NotNull @NotNull ResultKey resultKey)
      Description copied from interface: QueueOfExecutables
      Retrieves an executable with given key from storage.
      Specified by:
      get in interface QueueOfExecutables
    • launchDedicatedAgentsForTemplate

      public void launchDedicatedAgentsForTemplate(@NotNull @NotNull EphemeralAgentTemplate template)
      Description copied from interface: QueueOfExecutables
      Launches 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:
      launchDedicatedAgentsForTemplate in interface QueueOfExecutables
      Parameters:
      template - the template to launch dedicated agents for