to top
public class

CommandScheduler

extends Thread
implements ICommandScheduler CommandFileWatcher.ICommandFileListener
java.lang.Object
   ↳ java.lang.Thread
     ↳ com.android.tradefed.command.CommandScheduler

Class Overview

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

Nested Classes
class CommandScheduler.CommandTracker Represents one active command added to the scheduler. 
class CommandScheduler.CommandTrackerIdComparator Comparator for CommandScheduler.CommandTracker
[Expand]
Inherited Constants
From class java.lang.Thread
Fields
private long mPollTime @Option(name = "max-poll-time", description = "ms between forced command scheduler execution time")
private boolean mReloadCmdfiles @Option(name = "reload-cmdfiles", description = "Whether to enable the command file autoreload mechanism")
private boolean mShutdownOnCmdfileError @Option(name = "shutdown-on-cmdfile-error", description = "terminate TF session if a configuration exception on command file occurs")
[Expand]
Inherited Fields
From class java.lang.Thread
Public Constructors
CommandScheduler()
Creates a CommandScheduler.
Public Methods
boolean addCommand(String[] args, long totalExecTime)
An alternate addCommand(String[]) that accepts an initial total execution time for the command.
boolean addCommand(String[] args)
Adds a command to the scheduler.
void addCommandFile(String cmdFilePath, List<String> extraArgs)
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.
void completeHandover()
Informs the command scheduler that a initiated handover sequence is fully complete, and it should re-initialize its remote manager on the default port.
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 Option values specified for all current commands.
void execCommand(ICommandScheduler.IScheduledInvocationListener listener, String[] args)
Directly allocates a device and executes a command without adding it to the command queue.
void execCommand(ICommandScheduler.IScheduledInvocationListener listener, ITestDevice device, String[] args)
Directly execute command on already allocated device.
CommandFileWatcher getCommandFileWatcher()
Get the appropriate CommandFileWatcher for this scheduler
void handoverInitiationComplete()
Informs the command scheduler that initial handover exchange of devices and commands in use is complete, and it can begin scheduling operation.
boolean handoverShutdown(int handoverPort)
Initiates a shutdown() and handover to another tradefed process on this same host.
void notifyFileChanged(File cmdFile, List<String> extraArgs)
void removeAllCommands()
Remove all commands from scheduler
void run()
The main execution block of this thread.
boolean shouldShutdownOnCmdfileError()
Return true if we need to shutdown the scheduler on a command errors
void shutdown()
Attempt to gracefully shutdown the command scheduler.
void shutdownHard()
Attempt to forcefully shutdown the command scheduler.
void shutdownOnEmpty()
Similar to shutdown(), but will instead wait for all commands to be executed before exiting.
void start()
Starts the scheduler including setting up of logging, init of DeviceManager etc
boolean stopInvocation(ITestInvocation invocation)
Stop a running invocation.
Protected Methods
boolean isShutdown()
boolean isShuttingDown()
void processReadyCommands(IDeviceManager manager)
[Expand]
Inherited Methods
From class java.lang.Thread
From class java.lang.Object
From interface java.lang.Runnable
From interface com.android.tradefed.command.ICommandScheduler
From interface com.android.tradefed.command.CommandFileWatcher.ICommandFileListener

Fields

private long mPollTime

private boolean mReloadCmdfiles

private boolean mShutdownOnCmdfileError

Public Constructors

public CommandScheduler ()

Creates a CommandScheduler.

Note: start must be called before use.

Public Methods

public boolean addCommand (String[] args, long totalExecTime)

An alternate addCommand(String[]) that accepts an initial total execution time for the command.

Useful when transitioning pre-existing commands from another tradefed process

Parameters
args String: the config arguments.
totalExecTime long: the accumulated elapsed execution time of the command
Returns
boolean true if command was added successfully
Throws
ConfigurationException

public boolean 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
boolean true if command was added successfully
Throws
ConfigurationException

public void addCommandFile (String cmdFilePath, List<String> extraArgs)

Adds all commands from given file to the scheduler

Parameters
cmdFilePath String: the filesystem path of comand file
extraArgs List: a List of String arguments to append to each command parsed from file. Can be empty but should not be null.
Throws
ConfigurationException

public void await ()

Waits for scheduler to start running, including waiting for handover from old TF to complete if applicable.

Throws
InterruptedException

public void completeHandover ()

Informs the command scheduler that a initiated handover sequence is fully complete, and it should re-initialize its remote manager on the default port.

public void displayCommandQueue (PrintWriter printWriter)

Output detailed debug info on state of command execution queue.

public void displayCommandsInfo (PrintWriter printWriter, String regex)

Output a list of current commands.

Parameters
printWriter PrintWriter: the 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.

public void displayInvocationsInfo (PrintWriter printWriter)

Displays a list of current invocations.

Parameters
printWriter PrintWriter: the PrintWriter to output to.

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: the 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.

public void 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: the ERROR(/IScheduledInvocationListener) to be informed
args String: the command arguments
Throws
ConfigurationException
NoDeviceException

public void execCommand (ICommandScheduler.IScheduledInvocationListener listener, ITestDevice device, String[] args)

Directly execute command on already allocated device.

Parameters
listener ICommandScheduler.IScheduledInvocationListener: the ERROR(/IScheduledInvocationListener) to be informed
device ITestDevice: the ITestDevice to use
args String: the command arguments
Throws
ConfigurationException

public CommandFileWatcher getCommandFileWatcher ()

Get the appropriate CommandFileWatcher for this scheduler

Returns
CommandFileWatcher

public void handoverInitiationComplete ()

Informs the command scheduler that initial handover exchange of devices and commands in use is complete, and it can begin scheduling operation.

public boolean handoverShutdown (int handoverPort)

Initiates a shutdown() and handover to another tradefed process on this same host.

The scheduler will inform the remote tradefed process listening on that port of freed devices as they become available.

Parameters
handoverPort int
Returns
boolean true if handover initiation was successful, false otherwise

public void notifyFileChanged (File cmdFile, List<String> extraArgs)

Parameters
cmdFile File
extraArgs List

public void removeAllCommands ()

Remove all commands from scheduler

public void run ()

The main execution block of this thread.

public boolean shouldShutdownOnCmdfileError ()

Return true if we need to shutdown the scheduler on a command errors

Returns
boolean

public void shutdown ()

Attempt to gracefully shutdown the command scheduler.

Clears commands waiting to be tested, and requests that all invocations in progress shut down gracefully.

After shutdown is called, the scheduler main loop will wait for all invocations in progress to complete before exiting completely.

public void shutdownHard ()

Attempt to forcefully shutdown the command scheduler.

Similar to shutdown(), but will also forcefully kill the adb connection, in an attempt to 'inspire' invocations in progress to complete quicker.

public void shutdownOnEmpty ()

Similar to shutdown(), but will instead wait for all commands to be executed before exiting.

Note that if any commands are in loop mode, the scheduler will never exit.

public void start ()

Starts the scheduler including setting up of logging, init of DeviceManager etc

public boolean stopInvocation (ITestInvocation invocation)

Stop a running invocation.

Parameters
invocation ITestInvocation
Returns
boolean true if the invocation was stopped, false otherwise

Protected Methods

protected boolean isShutdown ()

Returns
boolean

protected boolean isShuttingDown ()

Returns
boolean

protected void processReadyCommands (IDeviceManager manager)

Parameters
manager IDeviceManager