ICommandScheduler

public interface ICommandScheduler

com.android.tradefed.command.ICommandScheduler


A scheduler for running TradeFederation commands.

Summary

Nested classes

interface ICommandScheduler.IScheduledInvocationListener

Listener for invocation events when invocation completes. 

Public methods

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

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

abstract boolean addCommand(String[] args)

Adds a command to the scheduler.

abstract void addCommandFile(String cmdFile, List<String> extraArgs)

Adds all commands from given file to the scheduler

abstract void await()

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

abstract 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.

abstract void displayCommandQueue(PrintWriter printWriter)

Output detailed debug info on state of command execution queue.

abstract void displayCommandsInfo(PrintWriter printWriter, String regex)

Output a list of current commands.

abstract void displayInvocationsInfo(PrintWriter printWriter)

Displays a list of current invocations.

abstract void dumpCommandsXml(PrintWriter printWriter, String regex)

Dump the expanded xml file for the command with all Option values specified for all current commands.

abstract void 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.

abstract void execCommand(ICommandScheduler.IScheduledInvocationListener listener, String[] args)

Directly allocates a device and executes a command without adding it to the command queue.

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

Directly execute command on already allocated device.

abstract CommandFileWatcher getCommandFileWatcher()

Get the appropriate CommandFileWatcher for this scheduler

abstract String getInvocationInfo(int invocationId)

Return the information on an invocation bu specifying the invocation id.

abstract CommandRunner.ExitCode getLastInvocationExitCode()

Return the error code of the last invocation that ran.

abstract Throwable getLastInvocationThrowable()

Return the Throwable from the last invocation that ran.

abstract int getReadyCommandCount()

Returns the number of Commands in ready state in the queue.

abstract void handoverInitiationComplete()

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

abstract boolean handoverShutdown(int handoverPort)

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

abstract void join()

Waits for scheduler to complete.

abstract void join(long millis)

Waits for scheduler to complete or timeout after the duration specified in milliseconds.

abstract void removeAllCommands()

Remove all commands from scheduler

abstract void setLastInvocationExitCode(CommandRunner.ExitCode code, Throwable stack)

Helper method, when running inside a CommandRunner context, set an exit error code and a stack trace that can be returned.

abstract boolean shouldShutdownOnCmdfileError()

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

abstract void shutdown()

Attempt to gracefully shutdown the command scheduler.

abstract void shutdownHard()

Attempt to forcefully shutdown the command scheduler.

abstract void shutdownOnEmpty()

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

abstract void start()

Start the ICommandScheduler.

abstract boolean stopInvocation(int invocationId)

Stop a running invocation by specifying it's id.

abstract boolean stopInvocation(ITestInvocation invocation)

Stop a running invocation.

Public methods

addCommand

public abstract 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 if command was invalid

addCommand

public abstract 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 if command could not be parsed

addCommandFile

public abstract void addCommandFile (String cmdFile, 
                List<String> extraArgs)

Adds all commands from given file to the scheduler

Parameters
cmdFile 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 if command file could not be parsed

See also:

await

public abstract void await ()

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

Throws
InterruptedException

completeHandover

public abstract 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.

displayCommandQueue

public abstract void displayCommandQueue (PrintWriter printWriter)

Output detailed debug info on state of command execution queue.

displayCommandsInfo

public abstract 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.

displayInvocationsInfo

public abstract void displayInvocationsInfo (PrintWriter printWriter)

Displays a list of current invocations.

Parameters
printWriter PrintWriter: the PrintWriter to output to.

dumpCommandsXml

public abstract 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.

execCommand

public abstract void 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 existing IInvocationContext.

listener ICommandScheduler.IScheduledInvocationListener: the ICommandScheduler.IScheduledInvocationListener to be informed

args String: the command arguments

Throws
ConfigurationException if command was invalid
NoDeviceException if there is no device to use

execCommand

public abstract 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 ICommandScheduler.IScheduledInvocationListener to be informed

args String: the command arguments

Throws
ConfigurationException if command was invalid
NoDeviceException if there is no device to use

execCommand

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

Directly execute command on already allocated device.

Parameters
listener ICommandScheduler.IScheduledInvocationListener: the ICommandScheduler.IScheduledInvocationListener to be informed

device ITestDevice: the ITestDevice to use

args String: the command arguments

Throws
ConfigurationException if command was invalid

getCommandFileWatcher

public abstract CommandFileWatcher getCommandFileWatcher ()

Get the appropriate CommandFileWatcher for this scheduler

Returns
CommandFileWatcher

getInvocationInfo

public abstract 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 String containing information about the invocation.

getLastInvocationExitCode

public abstract 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 abstract Throwable getLastInvocationThrowable ()

Return the Throwable from the last invocation that ran. Return null, if no throwable is available.

Returns
Throwable

getReadyCommandCount

public abstract int getReadyCommandCount ()

Returns the number of Commands in ready state in the queue.

Returns
int

handoverInitiationComplete

public abstract void handoverInitiationComplete ()

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

handoverShutdown

public abstract 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

join

public abstract void join ()

Waits for scheduler to complete.

Throws
InterruptedException

See also:

join

public abstract void join (long millis)

Waits for scheduler to complete or timeout after the duration specified in milliseconds.

Parameters
millis long

Throws
InterruptedException

See also:

removeAllCommands

public abstract void removeAllCommands ()

Remove all commands from scheduler

setLastInvocationExitCode

public abstract void setLastInvocationExitCode (CommandRunner.ExitCode code, 
                Throwable stack)

Helper method, when running inside a CommandRunner context, set an exit error code and a stack trace that can be returned.

Parameters
code CommandRunner.ExitCode

stack Throwable

shouldShutdownOnCmdfileError

public abstract boolean shouldShutdownOnCmdfileError ()

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

Returns
boolean

shutdown

public abstract 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.

shutdownHard

public abstract 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.

shutdownOnEmpty

public abstract 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.

start

public abstract void start ()

Start the ICommandScheduler.

Must be called before calling other methods.

Will run until shutdown() is called. see Thread.start().

stopInvocation

public abstract boolean stopInvocation (int invocationId)

Stop a running invocation by specifying it's id.

Parameters
invocationId int

Returns
boolean true if the invocation was stopped, false otherwise

Throws
UnsupportedOperationException if the implementation doesn't support this

stopInvocation

public abstract boolean stopInvocation (ITestInvocation invocation)

Stop a running invocation.

Parameters
invocation ITestInvocation

Returns
boolean true if the invocation was stopped, false otherwise

Throws
UnsupportedOperationException if the implementation doesn't support this