CommandScheduler
  public
  
  
  
  class
  CommandScheduler
  
    extends Object
  
  
  
  
  
      implements
      
        ICommandScheduler
      
  
  
| java.lang.Object | |
| ↳ | com.android.tradefed.command.CommandScheduler | 
A scheduler for running TradeFederation commands across all available devices.
Will attempt to prioritize commands to run based on a total running count of their execution time. e.g. infrequent or fast running commands will get prioritized over long running commands.
Runs forever in background until shutdown.
Summary
| Public constructors | |
|---|---|
| 
      CommandScheduler()
      Creates a  | |
| Public methods | |
|---|---|
| 
        
        
        
        
        
        Pair<Boolean, Integer> | 
      addCommand(String[] args)
      Adds a command to the scheduler. | 
| 
        
        
        
        
        
        void | 
      addCommandFile(String cmdFilePath, Adds all commands from given file to the scheduler | 
| 
        
        
        
        
        
        void | 
      await()
      Waits for scheduler to start running, including waiting for handover from old TF to complete if applicable. | 
| 
        
        
        static
        
        
        TradefedDelegator | 
      checkDelegation(String[] args)
      Create a delegator based on the command line to see if we need to delegate the run. | 
| 
        
        
        static
        
        
         | 
      createReleaseMap(IInvocationContext context, Throwable e)
      Create a map of the devices state so they can be released appropriately. | 
| 
        
        
        
        
        
        ISandbox | 
      createSandbox()
      Create a  | 
| 
        
        
        
        
        
        void | 
      displayCommandQueue(PrintWriter printWriter)
      Output detailed debug info on state of command execution queue. | 
| 
        
        
        
        
        
        void | 
      displayCommandsInfo(PrintWriter printWriter, String regex)
      Output a list of current commands. | 
| 
        
        
        
        
        
        void | 
      displayInvocationsInfo(PrintWriter printWriter)
      Displays a list of current invocations. | 
| 
        
        
        
        
        
        void | 
      dumpCommandsXml(PrintWriter printWriter, String regex)
      Dump the expanded xml file for the command with all
  | 
| 
        
        
        
        
        
        long | 
      execCommand(ICommandScheduler.IScheduledInvocationListener listener, ITestDevice device, String[] args)
      Directly execute command on already allocated device. | 
| 
        
        
        
        
        
        long | 
      execCommand(ICommandScheduler.IScheduledInvocationListener listener, Directly execute command on already allocated devices. | 
| 
        
        
        
        
        
        long | 
      execCommand(IInvocationContext context, ICommandScheduler.IScheduledInvocationListener listener, String[] args)
      Directly allocates a device and executes a command without adding it to the command queue
 using an already existing  | 
| 
        
        
        
        
        
        long | 
      execCommand(ICommandScheduler.IScheduledInvocationListener listener, String[] args)
      Directly allocates a device and executes a command without adding it to the command queue. | 
| 
        
        
        
        
        
        CommandFileWatcher | 
      getCommandFileWatcher()
      Get the appropriate CommandFileWatcher for this scheduler | 
| 
        
        
        
        
        
        int | 
      getExecutingCommandCount()
      Returns the number of Commands in executing state. | 
| 
        
        
        
        
        
        CommandScheduler.HostState | 
      getHostState()
       | 
| 
        
        
        
        
        
        String | 
      getInvocationInfo(int invocationId)
      Return the information on an invocation bu specifying the invocation id. | 
| 
        
        
        
        
        
        CommandRunner.ExitCode | 
      getLastInvocationExitCode()
      Return the error code of the last invocation that ran. | 
| 
        
        
        
        
        
        Throwable | 
      getLastInvocationThrowable()
      Return the  | 
| 
        
        
        
        
        
        int | 
      getReadyCommandCount()
      Returns the number of Commands in ready state in the queue. | 
| 
        
        
        
        
        
        long | 
      getShutdownTimeout()
       | 
| 
        
        
        
        
        
        boolean | 
      isDeviceInInvocationThread(ITestDevice device)
      Returns true if the device is used by an active invocation thread. | 
| 
        
        
        
        
        
        boolean | 
      isShuttingDown()
       | 
| 
        
        
        
        
        
        void | 
      notifyFileChanged(File cmdFile,  | 
| 
        
        
        
        
        
        void | 
      removeAllCommands()
      Remove all commands from scheduler | 
| 
        
        
        
        
        
        void | 
      run()
      The main execution block of this thread. | 
| 
        
        
        
        
        
        void | 
      setClearcutClient(ClearcutClient client)
      Set the client to report harness data | 
| 
        
        
        
        
        
        boolean | 
      shouldShutdownOnCmdfileError()
      Return true if we need to shutdown the scheduler on a command errors | 
| 
        
        
        
        
        
        void | 
      shutdown(boolean notifyStop)
      Attempt to gracefully shutdown the command scheduler. | 
| 
        
        
        
        
        
        void | 
      shutdownHard(boolean killAdb)
      Attempt to forcefully shutdown the command scheduler. | 
| 
        
        
        
        
        
        void | 
      shutdownHard()
      Attempt to forcefully shutdown the command scheduler. | 
| 
        
        
        
        
        
        void | 
      shutdownOnEmpty()
      Similar to  | 
| 
        
        
        
        
        
        void | 
      start()
      Starts the scheduler including setting up of logging, init of  | 
| 
        
        
        
        
        
        boolean | 
      stopInvocation(ITestInvocation invocation)
      Stop a running invocation. | 
| 
        
        
        
        
        
        boolean | 
      stopInvocation(int invocationId, String cause)
      Stop a running invocation by specifying it's id. | 
| 
        
        
        
        
        
        void | 
      stopScheduling()
      Stops scheduling and accepting new tests but does not stop Tradefed. | 
Public constructors
CommandScheduler
public CommandScheduler ()
Creates a CommandScheduler.
 
Note: start must be called before use.
Public methods
addCommand
public Pair<Boolean, Integer> addCommand (String[] args)
Adds a command to the scheduler.
A command is essentially an instance of a configuration to run and its associated arguments.
If "--help" argument is specified the help text for the config will be outputed to stdout. Otherwise, the config will be added to the queue to run.
| Parameters | |
|---|---|
| args | String: the config arguments. | 
| Returns | |
|---|---|
| Pair<Boolean, Integer> | A pair of values, first value is a Boolean trueif command was added
     successfully. Second value is the known command tracker id(non-negative value) if the
     command was added successfully, return 0 when command is added for all devices, otherwise
     -1. | 
| Throws | |
|---|---|
| ConfigurationException | |
addCommandFile
public void addCommandFile (String cmdFilePath, 
                 extraArgs) Adds all commands from given file to the scheduler
| Parameters | |
|---|---|
| cmdFilePath | String: the filesystem path of comand file | 
| extraArgs | : aERROR(/List)ofStringarguments to append to each command parsed
            from file. Can be empty but should not be null. | 
| Throws | |
|---|---|
| ConfigurationException | |
await
public void await ()
Waits for scheduler to start running, including waiting for handover from old TF to complete if applicable.
checkDelegation
public static TradefedDelegator checkDelegation (String[] args)
Create a delegator based on the command line to see if we need to delegate the run.
| Parameters | |
|---|---|
| args | String | 
| Returns | |
|---|---|
| TradefedDelegator | |
| Throws | |
|---|---|
|  | com.android.tradefed.config.ConfigurationException | 
| ConfigurationException | |
createReleaseMap
public staticcreateReleaseMap (IInvocationContext context, Throwable e) 
Create a map of the devices state so they can be released appropriately.
| Parameters | |
|---|---|
| context | IInvocationContext | 
| e | Throwable | 
| Returns | |
|---|---|
|  | |
createSandbox
public ISandbox createSandbox ()
Create a ISandbox that the invocation will use to run.
| Returns | |
|---|---|
| ISandbox | |
displayCommandQueue
public void displayCommandQueue (PrintWriter printWriter)
Output detailed debug info on state of command execution queue.
displayCommandsInfo
public void displayCommandsInfo (PrintWriter printWriter, 
                String regex)Output a list of current commands.
| Parameters | |
|---|---|
| printWriter | PrintWriter: theERROR(/PrintWriter)to output to. | 
| regex | String: the regular expression to which commands should be matched in order to be
 printed.  If null, then all commands will be printed. | 
displayInvocationsInfo
public void displayInvocationsInfo (PrintWriter printWriter)
Displays a list of current invocations.
| Parameters | |
|---|---|
| printWriter | PrintWriter: theERROR(/PrintWriter)to output to. | 
dumpCommandsXml
public void dumpCommandsXml (PrintWriter printWriter, 
                String regex)Dump the expanded xml file for the command with all
 Option values specified for all current commands.
| Parameters | |
|---|---|
| printWriter | PrintWriter: theERROR(/PrintWriter)to output the status to. | 
| regex | String: the regular expression to which commands should be matched in order for the
 xml file to be dumped.  If null, then all commands will be dumped. | 
execCommand
public long execCommand (ICommandScheduler.IScheduledInvocationListener listener, ITestDevice device, String[] args)
Directly execute command on already allocated device.
| Parameters | |
|---|---|
| listener | ICommandScheduler.IScheduledInvocationListener: theICommandScheduler.IScheduledInvocationListenerto be informed | 
| device | ITestDevice: theITestDeviceto use | 
| args | String: the command arguments | 
| Returns | |
|---|---|
| long | The invocation id of the scheduled command. | 
| Throws | |
|---|---|
| ConfigurationException | |
execCommand
public long execCommand (ICommandScheduler.IScheduledInvocationListener listener,reservedDevices, String[] args) 
Directly execute command on already allocated devices.
| Parameters | |
|---|---|
| listener | ICommandScheduler.IScheduledInvocationListener: theICommandScheduler.IScheduledInvocationListenerto be informed | 
| reservedDevices | : theERROR(/Listto use | 
| args | String: the command arguments | 
| Returns | |
|---|---|
| long | The invocation id of the scheduled command. | 
| Throws | |
|---|---|
| ConfigurationException | |
execCommand
public long execCommand (IInvocationContext context, ICommandScheduler.IScheduledInvocationListener listener, String[] args)
Directly allocates a device and executes a command without adding it to the command queue
 using an already existing IInvocationContext.
| Parameters | |
|---|---|
| context | IInvocationContext: an existingIInvocationContext. | 
| listener | ICommandScheduler.IScheduledInvocationListener: theICommandScheduler.IScheduledInvocationListenerto be informed | 
| args | String: the command arguments | 
| Returns | |
|---|---|
| long | |
| Throws | |
|---|---|
| ConfigurationException | |
| NoDeviceException | |
execCommand
public long execCommand (ICommandScheduler.IScheduledInvocationListener listener, String[] args)
Directly allocates a device and executes a command without adding it to the command queue.
| Parameters | |
|---|---|
| listener | ICommandScheduler.IScheduledInvocationListener: theICommandScheduler.IScheduledInvocationListenerto be informed | 
| args | String: the command arguments | 
| Returns | |
|---|---|
| long | The invocation id of the scheduled command. | 
| Throws | |
|---|---|
| ConfigurationException | |
| NoDeviceException | |
getCommandFileWatcher
public CommandFileWatcher getCommandFileWatcher ()
Get the appropriate CommandFileWatcher for this scheduler
| Returns | |
|---|---|
| CommandFileWatcher | |
getExecutingCommandCount
public int getExecutingCommandCount ()
Returns the number of Commands in executing state.
| Returns | |
|---|---|
| int | |
getInvocationInfo
public String getInvocationInfo (int invocationId)
Return the information on an invocation bu specifying the invocation id.
| Parameters | |
|---|---|
| invocationId | int: the tracking id of the invocation. | 
| Returns | |
|---|---|
| String | A Stringcontaining information about the invocation. | 
getLastInvocationExitCode
public CommandRunner.ExitCode getLastInvocationExitCode ()
Return the error code of the last invocation that ran. Return 0 (no error), if no invocation has ran yet.
| Returns | |
|---|---|
| CommandRunner.ExitCode | |
getLastInvocationThrowable
public Throwable getLastInvocationThrowable ()
Return the Throwable from the last invocation that ran.
 Return null, if no throwable is available.
| Returns | |
|---|---|
| Throwable | |
getReadyCommandCount
public int getReadyCommandCount ()
Returns the number of Commands in ready state in the queue.
| Returns | |
|---|---|
| int | |
getShutdownTimeout
public long getShutdownTimeout ()
| Returns | |
|---|---|
| long | |
isDeviceInInvocationThread
public boolean isDeviceInInvocationThread (ITestDevice device)
Returns true if the device is used by an active invocation thread.
| Parameters | |
|---|---|
| device | ITestDevice | 
| Returns | |
|---|---|
| boolean | |
isShuttingDown
public boolean isShuttingDown ()
| Returns | |
|---|---|
| boolean | |
notifyFileChanged
public void notifyFileChanged (File cmdFile, 
                 extraArgs) | Parameters | |
|---|---|
| cmdFile | File | 
| extraArgs |  | 
removeAllCommands
public void removeAllCommands ()
Remove all commands from scheduler
run
public void run ()
The main execution block of this thread.
setClearcutClient
public void setClearcutClient (ClearcutClient client)
Set the client to report harness data
| Parameters | |
|---|---|
| client | ClearcutClient | 
shouldShutdownOnCmdfileError
public boolean shouldShutdownOnCmdfileError ()
Return true if we need to shutdown the scheduler on a command errors
| Returns | |
|---|---|
| boolean | |
shutdown
public void shutdown (boolean notifyStop)
Attempt to gracefully shutdown the command scheduler.
| Parameters | |
|---|---|
| notifyStop | boolean: if true, notifies invocations of TF shutdown. | 
shutdownHard
public void shutdownHard (boolean killAdb)
Attempt to forcefully shutdown the command scheduler.
Similar to shutdown(), but will also optionally kill the adb connection, in an
 attempt to 'inspire' invocations in progress to complete quicker.
| Parameters | |
|---|---|
| killAdb | boolean | 
shutdownHard
public void shutdownHard ()
Attempt to forcefully shutdown the command scheduler. Same as shutdownHard(true).
shutdownOnEmpty
public void shutdownOnEmpty ()
Similar to shutdown(), but will instead wait for all commands to be executed
 before exiting.
 
start
public void start ()
Starts the scheduler including setting up of logging, init of DeviceManager etc
stopInvocation
public boolean stopInvocation (ITestInvocation invocation)
Stop a running invocation.
| Parameters | |
|---|---|
| invocation | ITestInvocation | 
| Returns | |
|---|---|
| boolean | true if the invocation was stopped, false otherwise | 
stopInvocation
public boolean stopInvocation (int invocationId, 
                String cause)Stop a running invocation by specifying it's id.
| Parameters | |
|---|---|
| invocationId | int: the tracking id of the invocation. | 
| cause | String: the cause for stopping the invocation. | 
| Returns | |
|---|---|
| boolean | true if the invocation was stopped, false otherwise | 
stopScheduling
public void stopScheduling ()
Stops scheduling and accepting new tests but does not stop Tradefed. This is meant to enable a two steps shutdown where first we drain all the running tests, then terminate Tradefed process.
Protected methods
cleanUp
protected void cleanUp ()
Closes the logs and does any other necessary cleanup before we quit.
Exposed so unit tests can mock.
createConfiguration
protected IConfiguration createConfiguration (String[] args)
| Parameters | |
|---|---|
| args | String | 
| Returns | |
|---|---|
| IConfiguration | |
| Throws | |
|---|---|
| ConfigurationException | |
createInvocationContext
protected IInvocationContext createInvocationContext ()
| Returns | |
|---|---|
| IInvocationContext | |
dryRunCommandReporting
protected void dryRunCommandReporting (ICommandScheduler.IScheduledInvocationListener handler, IConfiguration config)
Determines if a given command is a dry-run. If the command is a dry-run, validate it. If there are any configs issue, it will throw a ConfigurationException.
| Parameters | |
|---|---|
| handler | ICommandScheduler.IScheduledInvocationListener:ERROR(/InvocationEventHandler)to report events for dry-run validation. | 
| config | IConfiguration | 
| Returns | |
|---|---|
| void | true if the command are a dry run, false otherwise. | 
| Throws | |
|---|---|
|  | com.android.tradefed.config.ConfigurationException | 
| ConfigurationException | |
execCommand
protected long execCommand (IInvocationContext context, ICommandScheduler.IScheduledInvocationListener listener,reservedDevices, String[] args) 
| Parameters | |
|---|---|
| context | IInvocationContext | 
| listener | ICommandScheduler.IScheduledInvocationListener | 
| reservedDevices |  | 
| args | String | 
| Returns | |
|---|---|
| long | |
| Throws | |
|---|---|
| ConfigurationException | |
getConfigFactory
protected IConfigurationFactory getConfigFactory ()
Factory method for getting a reference to the IConfigurationFactory
| Returns | |
|---|---|
| IConfigurationFactory | the IConfigurationFactoryto use | 
getDeviceManagementServer
protected DeviceManagementGrpcServer getDeviceManagementServer ()
| Returns | |
|---|---|
| DeviceManagementGrpcServer | |
getDeviceManager
protected IDeviceManager getDeviceManager ()
Factory method for getting a reference to the IDeviceManager
| Returns | |
|---|---|
| IDeviceManager | the IDeviceManagerto use | 
getKeyStoreClient
protected IKeyStoreClient getKeyStoreClient ()
Fetches a IKeyStoreClient using the IKeyStoreFactory declared in IGlobalConfiguration or null if none is defined.
| Returns | |
|---|---|
| IKeyStoreClient | IKeyStoreClient | 
getTestInvocationManagementServer
protected TestInvocationManagementServer getTestInvocationManagementServer ()
| Returns | |
|---|---|
| TestInvocationManagementServer | |
initLogging
protected void initLogging ()
Initializes the ddmlib log.
Exposed so unit tests can mock.
isShutdown
protected boolean isShutdown ()
| Returns | |
|---|---|
| boolean | |
processReadyCommands
protected void processReadyCommands (IDeviceManager manager)
| Parameters | |
|---|---|
| manager | IDeviceManager | 
