Skip to main content

Notice: this Wiki will be going read only early in 2024 and edits will no longer be possible. Please see: https://gitlab.eclipse.org/eclipsefdn/helpdesk/-/wikis/Wiki-shutdown-plan for the plan.

Jump to: navigation, search

Difference between revisions of "PTP/designs/3.x/rm proxy"

< PTP‎ | designs
(Message Format)
m (PTP/designs/rm proxy moved to PTP/designs/3.x/rm proxy: Updating proxy design for PTP 4.0)
 
(37 intermediate revisions by 3 users not shown)
Line 9: Line 9:
 
== Resource Manager System ==
 
== Resource Manager System ==
  
The Resorce Manager System (RMS) is an Eclipse plugin that manages interaction with arbitrary resource managers. A resource manager in this context, is anything that provides program launch and monitoring services on a target system. Typically, a resource manager will be a job scheduler (e.g. LSF, LoadLeveler, PBS, etc.) running on a large multi-user system. Other types of resource managers include the Open Runtime Environment (ORTE) which is part of the OpenMPI distribution, or the MPICH2 runtime system. The RMS is responsible for populating an internal model in Eclipse which provides a cached representation of the system and program state. Various user interface views are available to inspect and interact with this model. Details of the RMS are provided in a separate document [[PTP/designs/rms]].
+
The Resource Manager System (RMS) is an Eclipse plugin that manages interaction with arbitrary resource managers. A resource manager in this context, is anything that provides program launch and monitoring services on a target system. Typically, a resource manager will be a job scheduler (e.g. LSF, LoadLeveler, PBS, etc.) running on a large multi-user system. Other types of resource managers include the Open Runtime Environment (ORTE) which is part of the OpenMPI distribution, or the MPICH2 runtime system. The RMS is responsible for populating an internal model in Eclipse which provides a cached representation of the system and program state. Various user interface views are available to inspect and interact with this model. Details of the RMS are provided in a separate document [[PTP/designs/rms]].
  
 
== Proxy Agent ==
 
== Proxy Agent ==
Line 31: Line 31:
 
Transaction IDs (TIDs) are numbers that are used to match commands and events. Since one command may generate multiple events, TIDs are essential in order to determine which command generated an event. This means that every event MUST have a TID that matches a corresponding command.  
 
Transaction IDs (TIDs) are numbers that are used to match commands and events. Since one command may generate multiple events, TIDs are essential in order to determine which command generated an event. This means that every event MUST have a TID that matches a corresponding command.  
  
TIDs are only unique for uncompleted commands, not necessarily for the whole session. Proxy agents should not assume that a particular TID will never be reused.
+
TIDs are only unique for uncompleted commands, not necessarily for the whole session.  
 +
 
 +
Proxy agents SHOULD assume that a particular TID MAY be reused.
 +
 
 +
Proxy agents SHOULD NOT assume anything about the numbering or ordering of TIDs.
  
 
Any events received with an invalid TID (i.e. with no corresponding command) SHALL be discarded.
 
Any events received with an invalid TID (i.e. with no corresponding command) SHALL be discarded.
Line 75: Line 79:
 
Commands and events consist of sequences of ASCII characters formatted into a message. A message is transmitted in the following format:
 
Commands and events consist of sequences of ASCII characters formatted into a message. A message is transmitted in the following format:
  
  ''LENGTH'' ''COMMAND_OR_EVENT''
+
  ''MESSAGE'' &rArr; ''LENGTH'' " " ''COMMAND_OR_EVENT''
  
 
''LENGTH'' and ''COMMAND_OR_EVENT'' are separated by a space (hex 20). The ''LENGTH'' is the length of the ''COMMAND_OR_EVENT'' portion of the message ''including the space''. ''COMMAND_OR_EVENT'' is the actual text of the command or event.  
 
''LENGTH'' and ''COMMAND_OR_EVENT'' are separated by a space (hex 20). The ''LENGTH'' is the length of the ''COMMAND_OR_EVENT'' portion of the message ''including the space''. ''COMMAND_OR_EVENT'' is the actual text of the command or event.  
  
The ''COMMAND_OR_EVENT'' portion of the message will contain a sequence of numbers, strings, and attributes. The command format is described in more detail in the [[#Commands|Commands]] section. The event format is described in more detail in the [[#Events|Events]] section.
+
''COMMAND_OR_EVENT'' &rArr; ''COMMAND'' | ''EVENT''
  
==== Number Format ====
+
The ''COMMAND_OR_EVENT'' portion of the message contains a header part followed by a sequence of arguments separated by spaces. Each argument is a string formatted using the [[#String Format| String Format]] described below. The command format is described in more detail in the [[#Commands|Commands]] section. The event format is described in more detail in the [[#Events|Events]] section.  
 
+
Numbers (herein meaning unsigned integer numbers) are always formatted as fixed length sequences of hexadecimal digits. Typical lengths are 4 and 8 digits. The maximum length is 8 digits.
+
 
+
For example, the number 24,356 would be transmitted using a 4 digit number as:
+
 
+
5F24
+
 
+
and as an 8 digit number as:
+
 
+
00005F24
+
 
+
The hexidecimal values 'A' - 'F' can be either case. We will refer to a number formatted as N characters as a ''Number(N)''.
+
  
 
==== String Format ====
 
==== String Format ====
Line 99: Line 91:
 
Strings are transmitted using the following format:
 
Strings are transmitted using the following format:
  
  ''LENGTH'':''CHARACTERS''
+
  ''STRING'' &rArr; ''LENGTH'' ":" ''CHARACTERS''
  
where ''LENGTH'' is the length of the string as a ''Number(8)'', ':' is a colon character (hex 3A), and ''CHARACTERS'' are the actual ASCII characters in the string. No string terminating character (e.g. NULL) is ever transmitted.
+
where ''LENGTH'' is a fixed length 8 digit hexadecimal representation of the length of the string, ':' is a colon character (hex 3A), and ''CHARACTERS'' are the actual ASCII characters in the string. No string terminating character (e.g. NULL) is ever transmitted.
  
 
For example, the string "A String" would be formatted as:
 
For example, the string "A String" would be formatted as:
Line 110: Line 102:
  
 
  00000000:
 
  00000000:
 
We will hereafter refer to a formatted string as a ''Proxy String''.
 
  
 
== Attributes ==
 
== Attributes ==
  
Attributes are used so that data sent between the RMS and proxy agent is self describing.  Attributes are actually composed of two parts: an attribute definition ID, and the actual data. Attribute definition IDs must be unique and are either pre-defined by the RMS, or generated by the proxy agent during the [[#DISCOVERY|DISCOVERY]] phase.
+
Attributes are used so that data sent between the RMS and proxy agent is self describing.  Attributes are actually composed of two parts: an attribute definition ID, and the actual data. A unique attribute definition IDs is assigned to each [[#Attribute Definition|Attribute Definition]]. Attribute definitions are either pre-defined by the RMS, or generated by the proxy agent during the [[#DISCOVERY|DISCOVERY]] phase.
  
 
=== Attribute Definition ===
 
=== Attribute Definition ===
  
An attribute defintion contains meta-data about the attribute. This meta-data includes:
+
An attribute definition contains meta-data about the attribute. This meta-data includes:
  
 
; ID : The attribute definition ID.
 
; ID : The attribute definition ID.
Line 143: Line 133:
 
In this example, the attribute definition ID is "machineState" and it's value is "ALERT". Because "machineState" is an enumerated attribute type, we know that ALERT must be a legal value, and that the string "ALERT" can be converted to the actual enumerated value.
 
In this example, the attribute definition ID is "machineState" and it's value is "ALERT". Because "machineState" is an enumerated attribute type, we know that ALERT must be a legal value, and that the string "ALERT" can be converted to the actual enumerated value.
  
To deal with the situation where attribute values contain spaces, the complete attribute value string is always converted to a ''Proxy String'' before being transmitted.
+
Like any other arguments, the complete attribute value string is always converted to a ''STRING'' before being transmitted.
  
 
For example, the attribute value:
 
For example, the attribute value:
Line 199: Line 189:
 
* [[#SUBMIT_JOB|SUBMIT_JOB]]
 
* [[#SUBMIT_JOB|SUBMIT_JOB]]
 
* [[#TERMINATE_JOB|TERMINATE_JOB]]
 
* [[#TERMINATE_JOB|TERMINATE_JOB]]
 +
* [[#MOVE_JOB|MOVE_JOB]]
 +
* [[#CHANGE_JOB|CHANGE_JOB]]
 +
* [[#LIST_FILTERS|LIST_FILTERS]]
 +
* [[#SET_FILTERS|SET_FILTERS]]
 
* [[#STOP_EVENTS|STOP_EVENTS]]
 
* [[#STOP_EVENTS|STOP_EVENTS]]
 
* [[#QUIT|QUIT]]
 
* [[#QUIT|QUIT]]
Line 240: Line 234:
 
  QUIT(6)        ->
 
  QUIT(6)        ->
 
                 <- OK(5)
 
                 <- OK(5)
                 <- OK(6)
+
                 <- SHUTDOWN(6)
  
 
Note that the first suspended phase is not entered until the OK event corresponding to the START_EVENTS command (tid 3) is received. Similarly, the second normal phase is not entered until after the OK event corresponding to the STOP_EVENTS command (tid 4) is received.
 
Note that the first suspended phase is not entered until the OK event corresponding to the START_EVENTS command (tid 3) is received. Similarly, the second normal phase is not entered until after the OK event corresponding to the STOP_EVENTS command (tid 4) is received.
Line 248: Line 242:
 
Commands are formatted as simple ASCII text strings. A proxy command consists of a header and a body, separated by a space (hex 20), as follows:
 
Commands are formatted as simple ASCII text strings. A proxy command consists of a header and a body, separated by a space (hex 20), as follows:
  
  ''COMMAND_HEADER'' ''COMMAND_BODY''
+
  ''COMMAND'' &rArr; ''COMMAND_HEADER'' " " ''COMMAND_BODY''
  
The command header consists of three fixed length strings separated by colons (hex 3A), so it is itself fixed length. The format of the header is:
+
The command header consists of three fixed length hexadecimal numbers separated by colons (hex 3A), so it is itself fixed length. The format of the header is:
  
  ''COMMAND_ID'':''TID'':''NUM_ARGS''
+
  ''COMMAND_HEADER'' &rArr; ''COMMAND_ID'' ":" ''TID'' ":" ''NUM_ARGS''
  
 
where
 
where
  
''COMMAND_ID'' is a ''Number(4)'' containing the command to be performed
+
: ''COMMAND_ID'' is a 4 digit hexadecimal number containing the command to be performed
  
''TID'' is a ''Number(8)'' containing the transaction ID assigned to this command
+
: ''TID'' is an 8 digit hexadecimal number containing the transaction ID assigned to this command
  
''NUM_ARGS'' is a ''Number(8)'' containing the number of space separated elements in the command body
+
: ''NUM_ARGS'' is an 8 digit hexadecimal number containing the number of space separated elements in the command body
 +
 
 +
The command body consists of ''NUM_ARGS'' strings separated by spaces.
 +
 
 +
''COMMAND_BODY'' &rArr; ''STRING'' { " " ''STRING'' }
  
 
The following sections describe the currently defined commands.
 
The following sections describe the currently defined commands.
Line 268: Line 266:
 
<b>Message Format</b>
 
<b>Message Format</b>
  
  0000:''TID'':00000000
+
  ''QUIT_COMMAND'' &rArr; "0000:''TID'':00000000"
  
 
; Description : Terminate the proxy agent. This command will cause the proxy agent to terminate as soon as possible.
 
; Description : Terminate the proxy agent. This command will cause the proxy agent to terminate as soon as possible.
  
; Events : [[#OK|OK]]
+
; Events : [[#SHUTDOWN|SHUTDOWN]]
  
 
=== INIT ===
 
=== INIT ===
Line 278: Line 276:
 
<b>Message Format</b>
 
<b>Message Format</b>
  
  0001:''TID'':00000002 ''VERSION'' ''BASE_ID''
+
  ''INIT_COMMAND'' &rArr; "0001:''TID'':00000002" " " ''VERSION'' " " ''BASE_ID''
  
 
; Description : Initialize proxy communication. After this command has been received, the proxy is ready to receive and process other commands from the RMS.  Initialization data may be passed on the command line when the proxy is run.  
 
; Description : Initialize proxy communication. After this command has been received, the proxy is ready to receive and process other commands from the RMS.  Initialization data may be passed on the command line when the proxy is run.  
Line 284: Line 282:
 
<b>Arguments</b>
 
<b>Arguments</b>
  
: ''VERSION'' is a ''Proxy String'' representing the wire protocol version number.
+
: ''VERSION'' is the wire protocol version number.
  
: ''BASE_ID'' is a ''Proxy String'' representing the base ID used by the proxy agent when allocating new element IDs.   
+
: ''BASE_ID'' is the base ID used by the proxy agent when allocating new element IDs.   
  
 
; Events : [[#OK|OK]], [[#ERROR|ERROR]]
 
; Events : [[#OK|OK]], [[#ERROR|ERROR]]
Line 294: Line 292:
 
<b>Message Format</b>
 
<b>Message Format</b>
  
  0002:''TID'':00000000
+
  ''MODEL_DEF_COMMAND'' &rArr; "0002:''TID'':00000000"
  
 
; Description : Start the proxy discovery phase. The proxy agent responds with a series of [[#ATTR_DEF|ATTR_DEF]] and [[#FILTER_DEF|FILTER_DEF]] events.  Attributes (see [[#Attributes|Attributes]]) are meta-data describing data from the proxy agent that the RMS is expected to receive and possibly display in the UI.
 
; Description : Start the proxy discovery phase. The proxy agent responds with a series of [[#ATTR_DEF|ATTR_DEF]] and [[#FILTER_DEF|FILTER_DEF]] events.  Attributes (see [[#Attributes|Attributes]]) are meta-data describing data from the proxy agent that the RMS is expected to receive and possibly display in the UI.
Line 308: Line 306:
 
<b>Message Format</b>
 
<b>Message Format</b>
  
  0003:''TID'':00000000
+
  ''START_EVENTS_COMMAND'' &rArr; "0003:''TID'':00000000"
  
 
; Description : Initiate normal event processing phase.
 
; Description : Initiate normal event processing phase.
Line 322: Line 320:
 
<b>Message Format</b>
 
<b>Message Format</b>
  
  0004:''TID'':00000000
+
  ''STOP_EVENTS_COMMAND'' &rArr; "0004:''TID'':00000000"
  
 
; Description : Suspend normal event processing phase.
 
; Description : Suspend normal event processing phase.
Line 336: Line 334:
 
<b>Message Format</b>
 
<b>Message Format</b>
  
  0005:''TID'':''NUM_ARGS'' ''JOB_SUBMISSION_ID_ATTR'' ''JOB_ATTR_1'' ... ''JOB_ATTR_N''
+
  ''SUBMIT_JOB_COMMAND'' &rArr; "0005:''TID'':''NUM_ARGS''" { " " ''JOB_ATTR'' }
  
 
; Description : Submit a job to the resource manager for execution. The job submission ID is an RMS generated ID that is used to match the newly created job model element with the job submission. The proxy agent MUST include this attribute when the corresponding [[#NEW_JOB|NEW_JOB]] event is sent to the RMS. Once this event has been transmitted, the job submission ID can be discarded.
 
; Description : Submit a job to the resource manager for execution. The job submission ID is an RMS generated ID that is used to match the newly created job model element with the job submission. The proxy agent MUST include this attribute when the corresponding [[#NEW_JOB|NEW_JOB]] event is sent to the RMS. Once this event has been transmitted, the job submission ID can be discarded.
Line 342: Line 340:
 
<b>Arguments</b>
 
<b>Arguments</b>
  
: ''JOB_SUBMISSION_ID_ATTR'' is a STRING attribute containing a job submission ID.
+
: ''JOB_ATTR'' is a proxy specific job submission attribute. At least one of these attributes MUST be an attribute containing the job submission ID for the job.
 
+
: ''JOB_ATTR_1'' .. ''JOB_ATTR_N'' are a series of proxy specific job sumission attributes.
+
  
 
; Events : [[#OK|OK]], [[#ERROR|ERROR]]
 
; Events : [[#OK|OK]], [[#ERROR|ERROR]]
Line 352: Line 348:
 
<b>Message Format</b>
 
<b>Message Format</b>
  
  0006:''TID'':00000001 ''JOB_ID''
+
  ''TERMINATE_JOB_COMMAND'' &rArr; "0006:''TID'':00000001" " " ''JOB_ID_ATTR''
  
 
; Description : Request the terminaton of an existing job. The meaning of 'termination' depends on the state of the job.
 
; Description : Request the terminaton of an existing job. The meaning of 'termination' depends on the state of the job.
Line 358: Line 354:
 
<b>Arguments</b>
 
<b>Arguments</b>
  
: ''JOB_ID'' is a ''Proxy String'' representing the model element ID of the job.
+
: ''JOB_ID_ATTR'' is a [[PTP/designs/2.x#Pre-defined_Attributes | jobId]] attribute containing the model element ID of the job.
  
 
; Events : [[#OK|OK]], [[#ERROR|ERROR]]
 
; Events : [[#OK|OK]], [[#ERROR|ERROR]]
Line 366: Line 362:
 
<b>Message Format</b>
 
<b>Message Format</b>
  
  0007:''TID'':00000002 ''JOB_ID'' ''QUEUE_ID''
+
  ''MOVE_JOB_COMMAND'' &rArr; "0007:''TID'':00000002" " " ''JOB_ID_ATTR'' " " ''QUEUE_ID_ATTR''
  
 
; Description : ''Not yet implemented.'' This command is intended to allow jobs to be moved between queues.
 
; Description : ''Not yet implemented.'' This command is intended to allow jobs to be moved between queues.
Line 372: Line 368:
 
<b>Arguments</b>
 
<b>Arguments</b>
  
: ''JOB_ID'' is a ''Proxy String'' representing the model element ID of the job.
+
: ''JOB_ID_ATTR'' is a [[PTP/designs/2.x#Pre-defined_Attributes | jobId]] attribute containing the model element ID of the job.
  
: ''QUEUE_ID'' is a ''Proxy String'' representing the model element ID of the destination queue.
+
: ''QUEUE_ID_ATTR'' is a [[PTP/designs/2.x#Pre-defined_Attributes | queueId]] attribute containing the model element ID of the destination queue.
  
 
; Events : [[#OK|OK]], [[#ERROR|ERROR]]
 
; Events : [[#OK|OK]], [[#ERROR|ERROR]]
Line 382: Line 378:
 
<b>Message Format</b>
 
<b>Message Format</b>
  
  0008:''TID'':''NUM_ARGS'' ''JOB_ID'' ''ATTR_1'' ''ATTR_2'' ... ''ATTR_N - 1''
+
  ''CHANGE_JOB_COMMAND'' &rArr; "0008:''TID'':''NUM_ARGS''" " " ''JOB_ID_ATTR'' { " " ''ATTR'' }
  
 
; Description : ''Not yet implemented.'' This command is intended to allow a job's status to be changed (e.g. place a hold on a job)
 
; Description : ''Not yet implemented.'' This command is intended to allow a job's status to be changed (e.g. place a hold on a job)
Line 388: Line 384:
 
<b>Arguments</b>
 
<b>Arguments</b>
  
: ''ATTR_1'' ... ''ATTR_N'' are the proxy agent specific attributes to change.
+
: ''JOB_ID_ATTR'' is a [[PTP/designs/2.x#Pre-defined_Attributes | jobId]] attribute containing the model element ID of the job to change.
 +
 
 +
: ''ATTR'' is a proxy agent specific job attribute to change.
  
 
; Events : [[#OK|OK]], [[#ERROR|ERROR]]
 
; Events : [[#OK|OK]], [[#ERROR|ERROR]]
Line 396: Line 394:
 
<b>Message Format</b>
 
<b>Message Format</b>
  
  0009:''TID'':00000000
+
  ''LIST_FILTERS_COMMAND'' &rArr; "0009:''TID'':00000000"
  
 
; Description : ''Not yet implemented.'' This command lists the filters that are currently enabled in the proxy agent.
 
; Description : ''Not yet implemented.'' This command lists the filters that are currently enabled in the proxy agent.
Line 410: Line 408:
 
<b>Message Format</b>
 
<b>Message Format</b>
  
  000A:''TID'':''NUM_ARGS'' ''ATTR_1'' ''ATTR_2'' ... ''ATTR_N''
+
  ''SET_FILTERS_COMMAND'' &rArr; "000A:''TID'':''NUM_ARGS''" { " " ''ATTR'' }
  
 
; Description : ''Not yet implemented.'' This command sets the filters in the proxy agent.
 
; Description : ''Not yet implemented.'' This command sets the filters in the proxy agent.
Line 416: Line 414:
 
<b>Arguments</b>
 
<b>Arguments</b>
  
: none
+
: ''ATTR'' is a filter attributes to set.
  
 
; Events : [[#OK|OK]], [[#ERROR|ERROR]]
 
; Events : [[#OK|OK]], [[#ERROR|ERROR]]
Line 426: Line 424:
 
Events, like commands, are formatted as simple ASCII text strings. A proxy event consists of a header and a body, separated by a space (hex 20), as follows:
 
Events, like commands, are formatted as simple ASCII text strings. A proxy event consists of a header and a body, separated by a space (hex 20), as follows:
  
  ''EVENT_HEADER'' ''EVENT_BODY''
+
  ''EVENT'' &rArr; ''EVENT_HEADER'' " " ''EVENT_BODY''
  
The event header consists of three fixed length strings separated by colons (hex 3A), so it is itself fixed length. The format of the header is:
+
The event header consists of three fixed length hexadecimal numbers separated by colons (hex 3A), so it is itself fixed length. The format of the header is:
  
  ''EVENT_ID'':''TRANSACTION_ID'':''NUM_ARGS''
+
  ''EVENT_HEADER'' &rArr; ''EVENT_ID'' ":" ''TID'' ":" ''NUM_ARGS''
  
 
where
 
where
  
''EVENT_ID'' is a ''Number(4)'' representing the type of event
+
: ''EVENT_ID'' is a 4 digit hexadecimal number representing the type of event
  
''TRANSACTION_ID'' is a ''Number(8)'' containing the transaction ID of the command that generated this event
+
: ''TID'' is an 8 digit hexadecimal number containing the transaction ID of the command that generated this event
  
''NUM_ARGS'' is a ''Number(8)'' containing the number of space separated elements in the event body
+
: ''NUM_ARGS'' is an 8 digit hexadecimal number  containing the number of space separated elements in the event body
 +
 
 +
The event body consists of ''NUM_ARGS'' strings separated by spaces.
 +
 
 +
''EVENT_BODY'' &rArr; ''STRING'' { " " ''STRING'' }
  
 
The following sections describe the currently defined events.
 
The following sections describe the currently defined events.
Line 446: Line 448:
 
<b>Message Format</b>
 
<b>Message Format</b>
  
  0000:''TID'':00000000
+
  ''OK_EVENT'' &rArr; "0000:''TID'':00000000"
  
 
; Description : Indicates that the command with corresponding ''TID'' has been completed successfully
 
; Description : Indicates that the command with corresponding ''TID'' has been completed successfully
Line 456: Line 458:
 
<b>Message Format</b>
 
<b>Message Format</b>
  
  0005:''TID'':00000002 ''ERROR_CODE_ATTRIBUTE'' ''ERROR_MSG_ATTRIBUTE''
+
  ''ERROR_EVENT'' &rArr; "0005:''TID'':00000002" " " ''ERROR_CODE_ATTRIBUTE'' " " ''ERROR_MSG_ATTRIBUTE''
  
 
; Description : Indicates that the command with corresponding ''TID'' has not been completed successfully. The reason for the failure are provided in the attributes.
 
; Description : Indicates that the command with corresponding ''TID'' has not been completed successfully. The reason for the failure are provided in the attributes.
Line 462: Line 464:
 
<b>Arguments</b>
 
<b>Arguments</b>
  
: ''ERROR_CODE_ATTRIBUTE'' is an INTEGER attribute containing the error code
+
: ''ERROR_CODE_ATTRIBUTE'' is an attribute containing the error code
  
: ''ERROR_MSG_ATTRIBUTE'' is a STRING attribute containing a textual representation of the error
+
: ''ERROR_MSG_ATTRIBUTE'' is an attribute containing a textual representation of the error
 +
 
 +
=== SHUTDOWN ===
 +
 
 +
<b>Message Format</b>
 +
 
 +
''SHUTDOWN_EVENT'' &rArr; "0006:''TID'':00000000"
 +
 
 +
; Description : Indicates that the proxy has shut down in response to a [[#QUIT|QUIT]] command.
 +
 
 +
; Arguments : none
  
 
=== MESSAGE ===
 
=== MESSAGE ===
Line 470: Line 482:
 
<b>Message Format</b>
 
<b>Message Format</b>
  
  00FA:''TID'':00000003 ''MSG_LEVEL_ATTRIBUTE'' ''MSG_CODE_ATTRIBUTE'' ''MSG_TEXT_ATTRIBUTE''
+
  ''MESSAGE_EVENT'' &rArr; "00FA:''TID'':00000003" " " ''MSG_LEVEL_ATTRIBUTE'' " " ''MSG_CODE_ATTRIBUTE'' " " ''MSG_TEXT_ATTRIBUTE''
  
 
; Description : A log message that will be displayed by the user interface.
 
; Description : A log message that will be displayed by the user interface.
Line 476: Line 488:
 
<b>Arguments</b>
 
<b>Arguments</b>
  
: ''MSG_LEVEL_ATTRIBUTE'' is an ENUMERATED attribute containing the message level. Valid levels are '"FATAL'", '"ERROR", "WARNING", and "INFO".
+
: ''MSG_LEVEL_ATTRIBUTE'' is an attribute containing the message level. Valid levels are '"FATAL'", '"ERROR", "WARNING", and "INFO".
  
: ''MSG_CODE_ATTRIBUTE'' is a INTEGER attribute containing the message code
+
: ''MSG_CODE_ATTRIBUTE'' is an attribute containing the message code
  
: ''MSG_TEXT_ATTRIBUTE'' is a STRING attribute containing a textual representation of the message
+
: ''MSG_TEXT_ATTRIBUTE'' is an attribute containing a textual representation of the message
  
 
=== ATTR_DEF ===
 
=== ATTR_DEF ===
Line 486: Line 498:
 
<b>Message Format</b>
 
<b>Message Format</b>
  
  00FB:''TID'':''NUM_ARGS'' ''NUM_DEFS'' ''ATTRIBUTE_DEF'' ... ''ATTRIBUTE_DEF''
+
  ''ATTR_DEF_EVENT'' &rArr; "00FB:''TID'':''NUM_ARGS''" " " ''NUM_DEFS'' { " " ''ATTRIBUTE_DEF'' }
  
 
; Description : Used to create new attribute definitions.
 
; Description : Used to create new attribute definitions.
Line 492: Line 504:
 
<b>Arguments</b>
 
<b>Arguments</b>
  
: ''NUM_DEFS'' is a ''Number(8)'' of attribute definitions to follow.
+
: ''NUM_DEFS'' is the number of attribute definitions to follow.
  
 
: ''ATTRIBUTE_DEF'' is an attribute definition.  
 
: ''ATTRIBUTE_DEF'' is an attribute definition.  
 +
 +
An attribute definition is defined as follows:
 +
 +
''ATTRIBUTE_DEF'' &rArr; ''BOOLEAN_ATTR_DEF'' | ''DATE_ATTR_DEF'' | ''DOUBLE_ATTR_DEF'' | ''ENUM_ATTR_DEF'' | ''INT_ATTR_DEF'' | ''STR_ATTR_DEF''
  
 
All attribute definitions begin with the following elements:
 
All attribute definitions begin with the following elements:
  
  ''NUM_ELEMENTS'' ''ID'' ''TYPE'' ''NAME'' ''DESCRIPTION'' ''DEFAULT''
+
  ''ATTR_DEF_START'' &rArr; ''NUM_ELEMENTS'' " " ''ID'' " " ''TYPE'' " " ''NAME'' " " ''DESCRIPTION'' " " ''DEFAULT''
  
 
where:
 
where:
  
: ''NUM_ELEMENTS'' is ''Number(8)'' of elements (separated by spaces) in this attribute definition.
+
: ''NUM_ELEMENTS'' is the number of elements (separated by spaces) in this attribute definition.
  
: ''ID'' is a ''Proxy String'' containing the unique definition ID.
+
: ''ID'' is the unique definition ID.
  
: ''TYPE'' is a ''Proxy String'' representing the type of the attribute. Legal values are: "ARRAY", "BOOLEAN", "DATE", "DOUBLE", "ENUMERATED", "INTEGER", and "STRING".
+
: ''TYPE'' is the type of the attribute. Legal values are: "ARRAY", "BOOLEAN", "DATE", "DOUBLE", "ENUMERATED", "INTEGER", and "STRING".
  
: ''NAME'' is a ''Proxy String'' representing the short name of the attribute. This is displayed in property views as the name of the attribute.
+
: ''NAME'' is the short name of the attribute. This is displayed in property views as the name of the attribute.
  
: ''DESCRIPTION'' is a ''Proxy String'' represting a description of the attribute. This is dispayed when more information about the attribute is requested.
+
: ''DESCRIPTION'' is a description of the attribute. This is dispayed when more information about the attribute is requested.
  
: ''DEFAULT'' is a ''Proxy String'' representing the default value of the attribute. There must be a legal conversion between this string and the actual attribute value.
+
: ''DEFAULT'' is the default value of the attribute. There must be a legal conversion between this string and the actual attribute value.
  
A number of attribute types require additional elements to be supplied for the definition:
+
A boolean attribute definition is simply:
  
<b>Date Attribute</b>
+
''BOOLEAN_ATTR_DEF'' &rArr; ''ATTR_DEF_START
  
  ''ATTRIBUTE_DEFINITION'' ''DATE_STYLE'' ''TIME_STYLE'' ''LOCALE'' ''MIN_MAX''
+
A date attribute definition requires additional elements to be supplied for the definition:
 +
 
 +
  ''DATE_ATTR_DEF'' &rArr; ''ATTR_DEF_START'' " " ''DATE_STYLE'' " " ''TIME_STYLE'' " " ''LOCALE'' [ " " ''MIN'' " " ''MAX'' ]
  
 
where:
 
where:
Line 528: Line 546:
 
: ''LOCALE'' is a ''Proxy String'' represting a country code. See java.lang.Local for legal values.
 
: ''LOCALE'' is a ''Proxy String'' represting a country code. See java.lang.Local for legal values.
  
: ''MIN_MAX'' is, optionally, two ''Proxy Strings'' representing the minimum and maximum dates supported by the attribute.
+
: ''MIN'' is the minimum date supported by the attribute.
  
<b>Double Attribute</b>
+
: ''MAX'' is the maximum date supported by the attribute.
  
''ATTRIBUTE_DEFINITION'' ''MIN_MAX''
+
A double attribute defintion has optional paramaters:
  
: ''MIN_MAX'' is, optionally, two ''Proxy Strings'' representing the minimum and maximum values supported by the attribute.
+
''DOUBLE_ATTR_DEF'' &rArr; ''ATTR_DEF_START'' [ " " ''MIN " " MAX'' ]
  
<b>Enumerated Attribute</b>
+
where:
  
''ATTRIBUTE_DEFINITION'' ''VALUES''
+
: ''MIN'' is the minimum value supported by the attribute.
  
: ''VALUES'' is a space separated list of ''Proxy String'' representing the enumerated values.  
+
: ''MAX'' is the maximum value supported by the attribute.
  
<b>Integer Attribute</b>
+
An enumerated attribute definition requires a sequence of enumerated values to be specified:
  
  ''ATTRIBUTE_DEFINITION'' ''MIN_MAX''
+
  ''ENUM_ATTR_DEF'' &rArr; ''ATTR_DEF_START'' { " " ''VALUE'' }
  
: ''MIN_MAX'' is, optionally, two ''Proxy String'' representing the minimum and maximum values supported by the attribute.
+
where:
 +
 
 +
: ''VALUE'' is a string representing an enumerated value.
 +
 
 +
Like double, integer attributes take optional parameters:
 +
 
 +
''INT_ATTR_DEF'' &rArr; ''ATTR_DEF_START'' [ " " ''MIN " " MAX'' ]
 +
 
 +
where:
 +
 
 +
: ''MIN'' is the minimum value supported by the attribute.
 +
 
 +
: ''MAX'' is the maximum value supported by the attribute.
  
 
=== CHANGE_JOB ===
 
=== CHANGE_JOB ===
Line 552: Line 582:
 
<b>Message Format</b>
 
<b>Message Format</b>
  
  00E6:''TID'':''NUM_ARGS'' ''NUM_RANGES'' ''JOB_RANGE''
+
  ''CHANE_JOB_EVENT'' &rArr; "00E6:''TID'':''NUM_ARGS''" " " ''NUM_RANGES'' { " " ''JOB_RANGE'' }
  
 
; Description : Used to update attributes in a range of job model elements. Multiple attributes in multiple jobs can be updated simultaneously with this event.  
 
; Description : Used to update attributes in a range of job model elements. Multiple attributes in multiple jobs can be updated simultaneously with this event.  
Line 558: Line 588:
 
<b>Arguments</b>
 
<b>Arguments</b>
  
: ''NUM_RANGES'' is a ''Number(8)'' of job ranges contained in this event.
+
: ''NUM_RANGES'' is the number of job ranges contained in this event.
  
 
: ''JOB_RANGE'' represents the attributes that have changed for a given range of jobs.
 
: ''JOB_RANGE'' represents the attributes that have changed for a given range of jobs.
Line 564: Line 594:
 
A ''JOB_RANGE'' is formatted as follows:
 
A ''JOB_RANGE'' is formatted as follows:
  
  ''ID_RANGE'' ''NUM_ATTRS'' ''ATTR_LIST''
+
  ''JOB_RANGE'' &rArr; ''ID_RANGE'' " " ''NUM_ATTRS'' { " " ''ATTR'' }
  
 
where:
 
where:
Line 570: Line 600:
 
: ''ID_RANGE'' is a range of ID's in [[#Range Set Notation|Range Set Notation]]
 
: ''ID_RANGE'' is a range of ID's in [[#Range Set Notation|Range Set Notation]]
  
: ''NUM_ATTRS'' is a ''Number(8)'' of attributes associated with this range of jobs.
+
: ''NUM_ATTRS'' is the number' of attributes associated with this range of jobs.
  
: ''ATTR_LIST'' is a list of the attributes that will be updated for each job in the range.
+
: ''ATTR'' is an attribute that will be updated for each job in the range.
 
+
The attribute list, ''ATTR_LIST'', consists of a sequence of attributes separated by spaces.
+
  
 
=== CHANGE_MACHINE ===
 
=== CHANGE_MACHINE ===
Line 580: Line 608:
 
<b>Message Format</b>
 
<b>Message Format</b>
  
  00E7:''TID'':''NUM_ARGS'' ''NUM_RANGES'' ''MACHINE_RANGE''
+
  ''CHANGE_MACHINE_EVENT'' &rArr; "00E7:''TID'':''NUM_ARGS''" " " ''NUM_RANGES'' { " " ''MACHINE_RANGE'' }
  
 
; Description : Used to update attributes in a range of machine model elements. Multiple attributes in multiple machines can be updated simultaneously with this event.  
 
; Description : Used to update attributes in a range of machine model elements. Multiple attributes in multiple machines can be updated simultaneously with this event.  
Line 586: Line 614:
 
<b>Arguments</b>
 
<b>Arguments</b>
  
: ''NUM_RANGES'' is a ''Number(8)'' of machine ranges contained in this event.
+
: ''NUM_RANGES'' is the number of machine ranges contained in this event.
  
 
: ''MACHINE_RANGE'' represents the attributes that have changed for a given range of machines.
 
: ''MACHINE_RANGE'' represents the attributes that have changed for a given range of machines.
Line 592: Line 620:
 
A ''MACHINE_RANGE'' is formatted as follows:
 
A ''MACHINE_RANGE'' is formatted as follows:
  
  ''ID_RANGE'' ''NUM_ATTRS'' ''ATTR_LIST''
+
  ''MACHINE_RANGE'' &rArr; ''ID_RANGE'' " " ''NUM_ATTRS'' { " " ''ATTR'' }
  
 
where:
 
where:
Line 598: Line 626:
 
: ''ID_RANGE'' is a range of ID's in [[#Range Set Notation|Range Set Notation]]
 
: ''ID_RANGE'' is a range of ID's in [[#Range Set Notation|Range Set Notation]]
  
: ''NUM_ATTRS'' is a ''Number(8)'' of attributes associated with this range of machines.
+
: ''NUM_ATTRS'' is the number of attributes associated with this range of machines.
 
+
: ''ATTR_LIST'' is a list of the attributes that will be updated for each machine in the range.
+
  
The attribute list, ''ATTR_LIST'', consists of a sequence of attributes separated by spaces.
+
: ''ATTR'' is an attribute that will be updated for each machine in the range.
  
 
=== CHANGE_NODE ===
 
=== CHANGE_NODE ===
Line 608: Line 634:
 
<b>Message Format</b>
 
<b>Message Format</b>
  
  00E8:''TID'':''NUM_ARGS'' ''NUM_RANGES'' ''NODE_RANGE''
+
  ''CHANGE_NODE_EVENT'' &rArr; "00E8:''TID'':''NUM_ARGS''" ''NUM_RANGES'' { " " ''NODE_RANGE'' }
  
 
; Description : Used to update attributes in a range of node model elements. Multiple attributes in multiple nodes can be updated simultaneously with this event.  
 
; Description : Used to update attributes in a range of node model elements. Multiple attributes in multiple nodes can be updated simultaneously with this event.  
Line 614: Line 640:
 
<b>Arguments</b>
 
<b>Arguments</b>
  
: ''NUM_RANGES'' is a ''Number(8)'' of node ranges contained in this event.
+
: ''NUM_RANGES'' is the number of node ranges contained in this event.
  
 
: ''NODE_RANGE'' represents the attributes that have changed for a given range of nodes.
 
: ''NODE_RANGE'' represents the attributes that have changed for a given range of nodes.
Line 620: Line 646:
 
A ''NODE_RANGE'' is formatted as follows:
 
A ''NODE_RANGE'' is formatted as follows:
  
  ''ID_RANGE'' ''NUM_ATTRS'' ''ATTR_LIST''
+
  ''NODE_RANGE'' &rArr; ''ID_RANGE'' " " ''NUM_ATTRS'' { " " ''ATTR'' }
  
 
where:
 
where:
Line 626: Line 652:
 
: ''ID_RANGE'' is a range of ID's in [[#Range Set Notation|Range Set Notation]]
 
: ''ID_RANGE'' is a range of ID's in [[#Range Set Notation|Range Set Notation]]
  
: ''NUM_ATTRS'' is a ''Number(8)'' of attributes associated with this range of nodes.
+
: ''NUM_ATTRS'' is the number of attributes associated with this range of nodes.
  
: ''ATTR_LIST'' is a list of the attributes that will be updated for each node in the range.
+
: ''ATTR'' is an attribute that will be updated for each node in the range.
 
+
The attribute list, ''ATTR_LIST'', consists of a sequence of attributes separated by spaces.
+
  
 
=== CHANGE_PROCESS ===
 
=== CHANGE_PROCESS ===
Line 636: Line 660:
 
<b>Message Format</b>
 
<b>Message Format</b>
  
  00E9:''TID'':''NUM_ARGS'' ''NUM_RANGES'' ''PROCESS_RANGE''
+
  ''CHANGE_PROCESS_EVENT'' &rArr; "00E9:''TID'':''NUM_ARGS''" " " ''NUM_RANGES'' { " " ''PROCESS_RANGE'' }
  
 
; Description : Used to update attributes in a range of process model elements. Multiple attributes in multiple processes can be updated simultaneously with this event.  
 
; Description : Used to update attributes in a range of process model elements. Multiple attributes in multiple processes can be updated simultaneously with this event.  
Line 642: Line 666:
 
<b>Arguments</b>
 
<b>Arguments</b>
  
: ''NUM_RANGES'' is a ''Number(8)'' of process ranges contained in this event.
+
: ''NUM_RANGES'' is the number of process ranges contained in this event.
  
 
: ''PROCESS_RANGE'' represents the attributes that have changed for a given range of processes.
 
: ''PROCESS_RANGE'' represents the attributes that have changed for a given range of processes.
Line 648: Line 672:
 
A ''PROCESS_RANGE'' is formatted as follows:
 
A ''PROCESS_RANGE'' is formatted as follows:
  
  ''ID_RANGE'' ''NUM_ATTRS'' ''ATTR_LIST''
+
  ''PROCESS_RANGE'' &rArr; ''ID_RANGE'' " " ''NUM_ATTRS'' { " " ''ATTR'' }
  
 
where:
 
where:
Line 654: Line 678:
 
: ''ID_RANGE'' is a range of ID's in [[#Range Set Notation|Range Set Notation]]
 
: ''ID_RANGE'' is a range of ID's in [[#Range Set Notation|Range Set Notation]]
  
: ''NUM_ATTRS'' is a ''Number(8)'' of attributes associated with this range of processes.
+
: ''NUM_ATTRS'' is the number of attributes associated with this range of processes.
  
: ''ATTR_LIST'' is a list of the attributes that will be updated for each process in the range.
+
: ''ATTR'' is an attribute that will be updated for each process in the range.
 
+
The attribute list, ''ATTR_LIST'', consists of a sequence of attributes separated by spaces.
+
  
 
=== CHANGE_QUEUE ===
 
=== CHANGE_QUEUE ===
Line 664: Line 686:
 
<b>Message Format</b>
 
<b>Message Format</b>
  
  00EA:''TID'':''NUM_ARGS'' ''NUM_RANGES'' ''QUEUE_RANGE''
+
  ''CHANGE_QUEUE_EVENT'' &rArr; "00EA:''TID'':''NUM_ARGS''" " " ''NUM_RANGES'' { " " ''QUEUE_RANGE'' }
  
 
; Description : Used to update attributes in a range of queue model elements. Multiple attributes in multiple queues can be updated simultaneously with this event.  
 
; Description : Used to update attributes in a range of queue model elements. Multiple attributes in multiple queues can be updated simultaneously with this event.  
Line 670: Line 692:
 
<b>Arguments</b>
 
<b>Arguments</b>
  
: ''NUM_RANGES'' is a ''Number(8)'' of queue ranges contained in this event.
+
: ''NUM_RANGES'' is the number of queue ranges contained in this event.
  
 
: ''QUEUE_RANGE'' represents the attributes that have changed for a given range of queues.
 
: ''QUEUE_RANGE'' represents the attributes that have changed for a given range of queues.
Line 676: Line 698:
 
A ''QUEUE_RANGE'' is formatted as follows:
 
A ''QUEUE_RANGE'' is formatted as follows:
  
  ''ID_RANGE'' ''NUM_ATTRS'' ''ATTR_LIST''
+
  ''QUEUE_RANGE'' &rArr; ''ID_RANGE'' " " ''NUM_ATTRS'' { " " ''ATTR'' }
  
 
where:
 
where:
Line 682: Line 704:
 
: ''ID_RANGE'' is a range of ID's in [[#Range Set Notation|Range Set Notation]]
 
: ''ID_RANGE'' is a range of ID's in [[#Range Set Notation|Range Set Notation]]
  
: ''NUM_ATTRS'' is a ''Number(8)'' of attributes associated with this range of queues.
+
: ''NUM_ATTRS'' is the number of attributes associated with this range of queues.
  
: ''ATTR_LIST'' is a list of the attributes that will be updated for each queue in the range.
+
: ''ATTR'' is an attribute that will be updated for each queue in the range.
 
+
The attribute list, ''ATTR_LIST'', consists of a sequence of attributes separated by spaces.
+
  
 
=== NEW_JOB ===
 
=== NEW_JOB ===
Line 692: Line 712:
 
<b>Message Format</b>
 
<b>Message Format</b>
  
  00DC:''TID'':''NUM_ARGS'' ''PARENT_ID'' ''NUM_JOB_DEFS'' ''JOB_DEF''
+
  ''NEW_JOB_EVENT'' &rArr; "00DC:''TID'':''NUM_ARGS''" " " ''PARENT_ID'' " " ''NUM_JOB_DEFS'' { " " ''JOB_DEF'' }
  
 
; Description : Define new job model elements. Multiple jobs can be defined simultaneously with this event.  
 
; Description : Define new job model elements. Multiple jobs can be defined simultaneously with this event.  
Line 698: Line 718:
 
<b>Arguments</b>
 
<b>Arguments</b>
  
: ''PARENT_ID'' is a ''string'' representing the ID of the parent queue of this job.
+
: ''PARENT_ID'' is the ID of the parent queue of this job.
  
: ''NUM_JOB_DEFS'' is a ''Number(8)'' of job definitions contained in this event.
+
: ''NUM_JOB_DEFS'' is the number of job definitions contained in this event.
  
 
: ''JOB_DEF'' represents the definition of a range of jobs and associated attributes.
 
: ''JOB_DEF'' represents the definition of a range of jobs and associated attributes.
Line 706: Line 726:
 
A ''JOB_DEF'' is formatted as follows:
 
A ''JOB_DEF'' is formatted as follows:
  
  ''ID_RANGE'' ''NUM_ATTRS'' ''ATTR_LIST''
+
  ''JOB_DEF'' &rArr; ''ID_RANGE'' " " ''NUM_ATTRS'' { " " ''ATTR'' }
  
 
where:
 
where:
Line 712: Line 732:
 
: ''ID_RANGE'' is a range of ID's in [[#Range Set Notation|Range Set Notation]]
 
: ''ID_RANGE'' is a range of ID's in [[#Range Set Notation|Range Set Notation]]
  
: ''NUM_ATTRS'' is a ''Number(8)'' of attributes associated with this job definition.
+
: ''NUM_ATTRS'' is the number' of attributes associated with this job definition.
 
+
: ''ATTR_LIST'' is a list of the attributes that will be set for each newly created job.
+
  
The attribute list, ''ATTR_LIST'', consists of a sequence of attributes separated by spaces.
+
: ''ATTR'' is an attribute that will be set for each newly created job.
  
 
=== NEW_MACHINE ===
 
=== NEW_MACHINE ===
Line 722: Line 740:
 
<b>Message Format</b>
 
<b>Message Format</b>
  
  00DD:''TID'':''NUM_ARGS'' ''PARENT_ID'' ''NUM_MACHINE_DEFS'' ''MACHINE_DEF''
+
  ''NEW_MACHINE_EVENT'' &rArr; "00DD:''TID'':''NUM_ARGS''" " " ''PARENT_ID'' " " ''NUM_MACHINE_DEFS'' { " " ''MACHINE_DEF'' }
  
 
; Description : Define new machine model elements. Multiple machines can be defined simultaneously with this event.  
 
; Description : Define new machine model elements. Multiple machines can be defined simultaneously with this event.  
Line 728: Line 746:
 
<b>Arguments</b>
 
<b>Arguments</b>
  
: ''PARENT_ID'' is a ''Proxy String'' representing the ID of the parent resource manager of this machine.
+
: ''PARENT_ID'' is the ID of the parent resource manager of this machine.
  
: ''NUM_MACHINE_DEFS'' is a ''Number(8)'' of machine definitions contained in this event.
+
: ''NUM_MACHINE_DEFS'' is the number of machine definitions contained in this event.
  
 
: ''MACHINE_DEF'' represents the definition of a range of machines and associated attributes.
 
: ''MACHINE_DEF'' represents the definition of a range of machines and associated attributes.
Line 736: Line 754:
 
A ''MACHINE_DEF'' is formatted as follows:
 
A ''MACHINE_DEF'' is formatted as follows:
  
  ''ID_RANGE'' ''NUM_ATTRS'' ''ATTR_LIST''
+
  ''MACHINE_DEF'' &rArr; ''ID_RANGE'' " " ''NUM_ATTRS'' { " " ''ATTR'' }
  
 
where:
 
where:
Line 742: Line 760:
 
: ''ID_RANGE'' is a range of ID's in [[#Range Set Notation|Range Set Notation]]
 
: ''ID_RANGE'' is a range of ID's in [[#Range Set Notation|Range Set Notation]]
  
: ''NUM_ATTRS'' is a ''Number(8)'' of attributes associated with this machine definition.
+
: ''NUM_ATTRS'' is the number of attributes associated with this machine definition.
  
: ''ATTR_LIST'' is a list of the attributes that will be set for each newly created machine.
+
: ''ATTR'' is an attribute that will be set for each newly created machine.
 
+
The attribute list, ''ATTR_LIST'', consists of a sequence of attributes separated by spaces.
+
  
 
=== NEW_NODE ===
 
=== NEW_NODE ===
Line 752: Line 768:
 
<b>Message Format</b>
 
<b>Message Format</b>
  
  00DE:''TID'':''NUM_ARGS'' ''PARENT_ID'' ''NUM_NODE_DEFS'' ''NODE_DEF''
+
  ''NEW_NODE_EVENT'' &rArr; "00DE:''TID'':''NUM_ARGS''" " " ''PARENT_ID'' " " ''NUM_NODE_DEFS'' { " " ''NODE_DEF'' }
  
 
; Description : Define new node model elements. Multiple nodes can be defined simultaneously with this event.  
 
; Description : Define new node model elements. Multiple nodes can be defined simultaneously with this event.  
Line 758: Line 774:
 
<b>Arguments</b>
 
<b>Arguments</b>
  
: ''PARENT_ID'' is a ''Proxy String'' representing the ID of the parent machine of this node.
+
: ''PARENT_ID'' is the ID of the parent machine of this node.
  
: ''NUM_NODE_DEFS'' is a ''Number(8)'' of node definitions contained in this event.
+
: ''NUM_NODE_DEFS'' is the number of node definitions contained in this event.
  
 
: ''NODE_DEF'' represents the definition of a range of nodes and associated attributes.
 
: ''NODE_DEF'' represents the definition of a range of nodes and associated attributes.
Line 766: Line 782:
 
A ''NODE_DEF'' is formatted as follows:
 
A ''NODE_DEF'' is formatted as follows:
  
  ''ID_RANGE'' ''NUM_ATTRS'' ''ATTR_LIST''
+
  ''NODE_DEF'' &rArr; ''ID_RANGE'' " " ''NUM_ATTRS'' { " " ''ATTR'' }
  
 
where:
 
where:
Line 772: Line 788:
 
: ''ID_RANGE'' is a range of ID's in [[#Range Set Notation|Range Set Notation]]
 
: ''ID_RANGE'' is a range of ID's in [[#Range Set Notation|Range Set Notation]]
  
: ''NUM_ATTRS'' is a ''Number(8)'' of attributes associated with this node definition.
+
: ''NUM_ATTRS'' is the number of attributes associated with this node definition.
  
: ''ATTR_LIST'' is a list of the attributes that will be set for each newly created node.
+
: ''ATTR'' is an attribute that will be set for each newly created node.
 
+
The attribute list, ''ATTR_LIST'', consists of a sequence of attributes separated by spaces.
+
  
 
=== NEW_PROCESS ===
 
=== NEW_PROCESS ===
Line 782: Line 796:
 
<b>Message Format</b>
 
<b>Message Format</b>
  
  00DF:''TID'':''NUM_ARGS'' ''PARENT_ID'' ''NUM_PROCESS_DEFS'' ''PROCESS_DEF''
+
  ''NEW_PROCESS_EVENT'' &rArr; "00DF:''TID'':''NUM_ARGS''" " " ''PARENT_ID'' " " ''NUM_PROCESS_DEFS'' { " " ''PROCESS_DEF'' }
  
 
; Description : Define new process model elements. Multiple processes can be defined simultaneously with this event.  
 
; Description : Define new process model elements. Multiple processes can be defined simultaneously with this event.  
Line 788: Line 802:
 
<b>Arguments</b>
 
<b>Arguments</b>
  
: ''PARENT_ID'' is a ''Proxy String'' representing the ID of the parent job of this processs.
+
: ''PARENT_ID'' is the ID of the parent job of this processs.
  
: ''NUM_PROCESS_DEFS'' is a ''Number(8)'' of process definitions contained in this event.
+
: ''NUM_PROCESS_DEFS'' is the number of process definitions contained in this event.
  
 
: ''PROCESS_DEF'' represents the definition of a range of processes and associated attributes.
 
: ''PROCESS_DEF'' represents the definition of a range of processes and associated attributes.
Line 796: Line 810:
 
A ''PROCESS_DEF'' is formatted as follows:
 
A ''PROCESS_DEF'' is formatted as follows:
  
  ''ID_RANGE'' ''NUM_ATTRS'' ''ATTR_LIST''
+
  ''PROCESS_DEF'' &rArr; ''ID_RANGE'' " " ''NUM_ATTRS'' { " " ''ATTR'' }
  
 
where:
 
where:
Line 802: Line 816:
 
: ''ID_RANGE'' is a range of ID's in [[#Range Set Notation|Range Set Notation]]
 
: ''ID_RANGE'' is a range of ID's in [[#Range Set Notation|Range Set Notation]]
  
: ''NUM_ATTRS'' is a ''Number(8)'' of attributes associated with this process definition.
+
: ''NUM_ATTRS'' is the number of attributes associated with this process definition.
  
: ''ATTR_LIST'' is a list of the attributes that will be set for each newly created process.
+
: ''ATTR'' is an attribute that will be set for each newly created process.
 
+
The attribute list, ''ATTR_LIST'', consists of a sequence of attributes separated by spaces.
+
  
 
=== NEW_QUEUE ===
 
=== NEW_QUEUE ===
Line 812: Line 824:
 
<b>Message Format</b>
 
<b>Message Format</b>
  
  00E0:''TID'':''NUM_ARGS'' ''PARENT_ID'' ''NUM_QUEUE_DEFS'' ''QUEUE_DEF''
+
  ''NEW_QUEUE_EVENT'' &rArr; "00E0:''TID'':''NUM_ARGS''" " " ''PARENT_ID'' " " ''NUM_QUEUE_DEFS'' { " " ''QUEUE_DEF'' }
  
 
; Description : Define new queue model elements. Multiple queues can be defined simultaneously with this event.  
 
; Description : Define new queue model elements. Multiple queues can be defined simultaneously with this event.  
Line 818: Line 830:
 
<b>Arguments</b>
 
<b>Arguments</b>
  
: ''PARENT_ID'' is a ''Proxy String'' representing the ID of the parent resource manager of this queue.
+
: ''PARENT_ID'' is the ID of the parent resource manager of this queue.
  
: ''NUM_QUEUE_DEFS'' is a ''Number(8)'' of queue definitions contained in this event.
+
: ''NUM_QUEUE_DEFS'' is the number of queue definitions contained in this event.
  
 
: ''QUEUE_DEF'' represents the definition of a range of queues and associated attributes.
 
: ''QUEUE_DEF'' represents the definition of a range of queues and associated attributes.
Line 826: Line 838:
 
A ''QUEUE_DEF'' is formatted as follows:
 
A ''QUEUE_DEF'' is formatted as follows:
  
  ''ID_RANGE'' ''NUM_ATTRS'' ''ATTR_LIST''
+
  ''QUEUE_DEF'' &rArr; ''ID_RANGE'' " " ''NUM_ATTRS'' { " " ''ATTR'' }
  
 
where:
 
where:
Line 832: Line 844:
 
: ''ID_RANGE'' is a range of ID's in [[#Range Set Notation|Range Set Notation]]
 
: ''ID_RANGE'' is a range of ID's in [[#Range Set Notation|Range Set Notation]]
  
: ''NUM_ATTRS'' is a ''Number(8)'' of attributes associated with this queue definition.
+
: ''NUM_ATTRS'' is the number of attributes associated with this queue definition.
 
+
: ''ATTR_LIST'' is a list of the attributes that will be set for each newly created queue.
+
  
The attribute list, ''ATTR_LIST'', consists of a sequence of attributes separated by spaces.
+
: ''ATTR'' is an attribute that will be set for each newly created queue.
  
 
=== REMOVE_ALL ===
 
=== REMOVE_ALL ===
Line 842: Line 852:
 
<b>Message Format</b>
 
<b>Message Format</b>
  
  00F0:''TID'':00000000
+
  ''REMOVE_ALL_EVENT'' &rArr; "00F0:''TID'':00000000"
  
 
; Description : Remove all model elements know by the RMS for this session.
 
; Description : Remove all model elements know by the RMS for this session.
Line 854: Line 864:
 
<b>Message Format</b>
 
<b>Message Format</b>
  
  00F1:''TID'':00000001 ''ID_RANGE''
+
  ''REMOVE_JOB_EVENT'' &rArr; "00F1:''TID'':00000001" " " ''ID_RANGE''
  
 
; Description : Remove job model elements from the model. Multiple jobs can be remove simultaneously with this event. All children of the jobs will also be removed from the model.
 
; Description : Remove job model elements from the model. Multiple jobs can be remove simultaneously with this event. All children of the jobs will also be removed from the model.
Line 866: Line 876:
 
<b>Message Format</b>
 
<b>Message Format</b>
  
  00F2:''TID'':00000001 ''ID_RANGE''
+
  ''REMOVE_MACHINE_EVENT'' &rArr; "00F2:''TID'':00000001" " " ''ID_RANGE''
  
 
; Description : Remove machine model elements from the model. Multiple machines can be remove simultaneously with this event. All children of the machines will also be removed from the model.
 
; Description : Remove machine model elements from the model. Multiple machines can be remove simultaneously with this event. All children of the machines will also be removed from the model.
Line 878: Line 888:
 
<b>Message Format</b>
 
<b>Message Format</b>
  
  00F3:''TID'':00000001 ''ID_RANGE''
+
  ''REMOVE_NODE_EVENT'' &rArr; "00F3:''TID'':00000001" " " ''ID_RANGE''
  
 
; Description : Remove node model elements from the model. Multiple nodes can be remove simultaneously with this event. All children of the nodes will also be removed from the model.
 
; Description : Remove node model elements from the model. Multiple nodes can be remove simultaneously with this event. All children of the nodes will also be removed from the model.
Line 890: Line 900:
 
<b>Message Format</b>
 
<b>Message Format</b>
  
  00F4:''TID'':00000001 ''ID_RANGE''
+
  ''REMOVE_PROCESS_EVENT'' &rArr; "00F4:''TID'':00000001" " " ''ID_RANGE''
  
 
; Description : Remove process model elements from the model. Multiple processes can be remove simultaneously with this event.
 
; Description : Remove process model elements from the model. Multiple processes can be remove simultaneously with this event.
Line 902: Line 912:
 
<b>Message Format</b>
 
<b>Message Format</b>
  
  00F5:''TID'':00000001 ''ID_RANGE''
+
  ''REMOVE_QUEUE_EVENT'' &rArr; "00F5:''TID'':00000001" " " ''ID_RANGE''
  
 
; Description : Remove queue model elements from the model. Multiple queues can be remove simultaneously with this event. All children of the queues will also be removed from the model.
 
; Description : Remove queue model elements from the model. Multiple queues can be remove simultaneously with this event. All children of the queues will also be removed from the model.

Latest revision as of 12:40, 12 July 2010

Overview

This is a preliminary design for the PTP Resource Management proxy communication protocol. This protocol is used to communicate between the Resource Manager System in Eclipse, and a lightweight proxy agent running on a target system. The primary purpose of the protocol is for system monitoring, process launch, and process control activities.

Terminiology

The key words "MUST", "MUST NOT", "REQUIRED", "SHALL", "SHALL NOT", "SHOULD", "SHOULD NOT", "RECOMMENDED", "MAY", and "OPTIONAL" in this document are to be interpreted as described in [RFC 2119]

Resource Manager System

The Resource Manager System (RMS) is an Eclipse plugin that manages interaction with arbitrary resource managers. A resource manager in this context, is anything that provides program launch and monitoring services on a target system. Typically, a resource manager will be a job scheduler (e.g. LSF, LoadLeveler, PBS, etc.) running on a large multi-user system. Other types of resource managers include the Open Runtime Environment (ORTE) which is part of the OpenMPI distribution, or the MPICH2 runtime system. The RMS is responsible for populating an internal model in Eclipse which provides a cached representation of the system and program state. Various user interface views are available to inspect and interact with this model. Details of the RMS are provided in a separate document PTP/designs/rms.

Proxy Agent

The RMS communicates with proxy agents to gather information about the state of a target system. The proxy agent may be located on either a local or remote machine.

Proxy Agent Launch

The RMS is responsible for launching the proxy agent. On a local machine, this just involves executing a local process. To launch on a remote machine, the RMS must use an authenticated command service, such as ssh. Current plans are to utilize the Remote System Explorer (RSE) system to provide this remote proxy launch capability.

Proxy Session

One instance of a communcation channel between the RMS and a proxy agent is known as a session. A session only supports communication to a single proxy agent at a time. The mechanism used to effect communcation between the RMS and a proxy agent is not defined in this document, but can be any bi-directional communications channel (e.g. TCP/IP sockets, etc.)

Proxy Protocol

The communication protocol used between the RMS and the proxy agent is a simple text-based asynchronous command/event protocol. The RMS sends one or more commands to the proxy agent, which in turn will generate events that are returned to the RMS. One command may generate multiple events, but an event is always associated with a particular command. A command is not completed until either a corresponding ERROR or OK event is received.

Transaction IDs

Transaction IDs (TIDs) are numbers that are used to match commands and events. Since one command may generate multiple events, TIDs are essential in order to determine which command generated an event. This means that every event MUST have a TID that matches a corresponding command.

TIDs are only unique for uncompleted commands, not necessarily for the whole session.

Proxy agents SHOULD assume that a particular TID MAY be reused.

Proxy agents SHOULD NOT assume anything about the numbering or ordering of TIDs.

Any events received with an invalid TID (i.e. with no corresponding command) SHALL be discarded.

Element IDs

Element IDs are key to communcation between the RMS and the proxy agent. Every element in the model (queue, node, job, etc.) has a unique ID. This ID is generated by the proxy agent. In order to ensure the ID is unique, the RMS supplies a base ID as part of the initialization sequence. This base ID is guaranteed to be unique, and is used by the proxy agent to "uniquify" its generated IDs. The base ID is itself an element ID, so cannot be used by the proxy. It is possible to re-use an element ID, provided that the model element has been removed from the model. However this is not recommended.

Proxy agents have two choices for the types of ID's it generates: numeric or string. The RMS doesn't care which is used. There are advantages and disadvantages for each type. Numeric and string IDs can be mixed.

Numeric Element IDs

Numeric IDs are typically used when the proxy agent is dealing with large numbers of objects (e.g. processes, nodes, etc.) They are more efficient to transmit, because the compact Range Set Notation can be used. When using numeric IDs proxy agent should try and generate "blocks" of IDs to make the range sets more efficient. A proxy agent might, for example, reserve a range of IDs for nodes, a different range for processes, etc.

Numeric IDs are computed using the base ID in such a way that the ID value will be unique. For example, one such computation would be to add the base ID to a monotonically increasing series of integers starting at 1.

String Element IDs

String IDs are an easy way to generate IDs, but are less efficient because they prevent using the Range Set Notation. These IDs are generated by creating a unique string and appending it to the base ID. The new ID is then guaranteed to be unique across the mode.

Range Set Notation

This is a compact representation of sequences of numeric (unsigned integer) values. Ranges of consecutive values can be represented using the first and last values in the range, separated by a dash character (hex 2D). Ranges can then be grouped be separating them with commas (hex 2C). Spaces or other characters are not permitted in a range set.

For example, the range:

1,2,3,4,5,6,7,34,35,36,37,38,41,55,56,57

would be represented as:

1-7,34-38,55-57

Ranges in the set need not be in sorted order, and can be overlapping.

The range set:

1-10,4-12,3

represents the 12 consecutive numbers starting at 1.

Message Format

Commands and events consist of sequences of ASCII characters formatted into a message. A message is transmitted in the following format:

MESSAGELENGTH " " COMMAND_OR_EVENT

LENGTH and COMMAND_OR_EVENT are separated by a space (hex 20). The LENGTH is the length of the COMMAND_OR_EVENT portion of the message including the space. COMMAND_OR_EVENT is the actual text of the command or event.

COMMAND_OR_EVENTCOMMAND | EVENT

The COMMAND_OR_EVENT portion of the message contains a header part followed by a sequence of arguments separated by spaces. Each argument is a string formatted using the String Format described below. The command format is described in more detail in the Commands section. The event format is described in more detail in the Events section.

String Format

Strings are transmitted using the following format:

STRINGLENGTH ":" CHARACTERS

where LENGTH is a fixed length 8 digit hexadecimal representation of the length of the string, ':' is a colon character (hex 3A), and CHARACTERS are the actual ASCII characters in the string. No string terminating character (e.g. NULL) is ever transmitted.

For example, the string "A String" would be formatted as:

00000008:A String

A zero length string would be formatted as:

00000000:

Attributes

Attributes are used so that data sent between the RMS and proxy agent is self describing. Attributes are actually composed of two parts: an attribute definition ID, and the actual data. A unique attribute definition IDs is assigned to each Attribute Definition. Attribute definitions are either pre-defined by the RMS, or generated by the proxy agent during the DISCOVERY phase.

Attribute Definition

An attribute definition contains meta-data about the attribute. This meta-data includes:

ID 
The attribute definition ID.
TYPE 
The type of the attribute. Currently supported types are ARRAY, BOOLEAN, DATE, DOUBLE, ENUMERATED, INTEGER, and STRING.
NAME 
The short name of the attribute. This is the name that is displayed in UI property views.
DESCRIPTION 
A description of the attribute that is displayed when more information about the attribute is requested (e.g. tooltip popups.)
DEFAULT 
The default value of the attribute.

The attribute definition is primarily used for data validation and displaying attributes in the user interface. There is currently no support for proxy agents to utilize the attribute definition information, although there is nothing to stop a proxy agent from validating against its own attribute definition information.

Attribute Value

An attribute value is always a key/value pair with an equals character (hex 3D) separating the key and value. The key is the attribute definition ID and the value is a string representation of the actual value of the attribute. All attributes support conversion to/from strings. It is assumed that once an attribute value is placed on the wire, it has been validated against the corresponding attribute definition.

An example attribute value is:

machineState=ALERT

In this example, the attribute definition ID is "machineState" and it's value is "ALERT". Because "machineState" is an enumerated attribute type, we know that ALERT must be a legal value, and that the string "ALERT" can be converted to the actual enumerated value.

Like any other arguments, the complete attribute value string is always converted to a STRING before being transmitted.

For example, the attribute value:

progArgs=-a 2 -b 4

would actually be transmitted as:

00000012:progArgs=-a 2 -b 4

Protocol Phases

The proxy protocol is divided into a number of phases. A phase determines the legal commands that can be sent to the proxy agent. During a particular phase, illegal commands SHOULD be discarded. Note: this may be changed to SHOULD generate an ERROR event.

Phases follow a strict ordering. Transition from one phase to the next occur when an OK event is received in response to a phase initiation command. A phase initiation command is a command that must be sent to initiate a particular phase. Once a phase has been initiated, any legal commands for that phase may be sent. The phase ordering is defined as follows:

INITIALIZE -> MODEL_DEF -> {START_EVENTS -> STOP_EVENTS}

The phases are defined in more detail in the following sections.

INITIALIZE

This is the first phase, and is used to initiate a communication session between the RMS and proxy agent, and agree on any protocol parameters that apply to this session.

Phase initiation command:

Legal commands:

  • none

DISCOVERY

The discovery phase is used to allow the proxy agent to inform the RMS of any dynamic property information. This information currently consists of attribute definitions and filter definitions which are described in more detail below.

Phase initiation command:

Legal commands:

  • none

NORMAL

The normal phase is entered once the initialize and discovery phases are completed. This is the normal command/event processing phase.

Phase initiation command:

Legal commands:

SUSPENDED

The suspended phase is used when the RMS needs to prevent the proxy agent from sending additional events.

Phase initiation command:

Legal commands:

Phase Example

The following provides a simple example of phase transitions. Commands go from left to right, events from right to left. The command tid is shown in ()'s after the command or event name.

-- intialize phase --
INIT(1)         ->
                <- OK(1)
-- definition phase --
MODEL_DEF(2)    ->
                <- ATTR_DEF(2)
                <- ATTR_DEF(2)
                <- OK(2)
-- normal phase --
START_EVENTS(3) ->
                <- NEW_MACHINE(3)
                <- NEW_NODE(3)
STOP_EVENTS(4)  ->
                <- OK(3)
-- suspended phase --
START_EVENTS(5) ->
                <- OK(4)
-- normal phase --
                <- NEW_QUEUE(5)
QUIT(6)         ->
                <- OK(5)
                <- SHUTDOWN(6)

Note that the first suspended phase is not entered until the OK event corresponding to the START_EVENTS command (tid 3) is received. Similarly, the second normal phase is not entered until after the OK event corresponding to the STOP_EVENTS command (tid 4) is received.

Commands

Commands are formatted as simple ASCII text strings. A proxy command consists of a header and a body, separated by a space (hex 20), as follows:

COMMANDCOMMAND_HEADER " " COMMAND_BODY

The command header consists of three fixed length hexadecimal numbers separated by colons (hex 3A), so it is itself fixed length. The format of the header is:

COMMAND_HEADERCOMMAND_ID ":" TID ":" NUM_ARGS

where

COMMAND_ID is a 4 digit hexadecimal number containing the command to be performed
TID is an 8 digit hexadecimal number containing the transaction ID assigned to this command
NUM_ARGS is an 8 digit hexadecimal number containing the number of space separated elements in the command body

The command body consists of NUM_ARGS strings separated by spaces.

COMMAND_BODYSTRING { " " STRING }

The following sections describe the currently defined commands.

QUIT

Message Format

QUIT_COMMAND ⇒ "0000:TID:00000000"
Description 
Terminate the proxy agent. This command will cause the proxy agent to terminate as soon as possible.
Events 
SHUTDOWN

INIT

Message Format

INIT_COMMAND ⇒ "0001:TID:00000002" " " VERSION " " BASE_ID
Description 
Initialize proxy communication. After this command has been received, the proxy is ready to receive and process other commands from the RMS. Initialization data may be passed on the command line when the proxy is run.

Arguments

VERSION is the wire protocol version number.
BASE_ID is the base ID used by the proxy agent when allocating new element IDs.
Events 
OK, ERROR

MODEL_DEF

Message Format

MODEL_DEF_COMMAND ⇒ "0002:TID:00000000"
Description 
Start the proxy discovery phase. The proxy agent responds with a series of ATTR_DEF and FILTER_DEF events. Attributes (see Attributes) are meta-data describing data from the proxy agent that the RMS is expected to receive and possibly display in the UI.

Arguments

none
Events 
ATTR_DEF, FILTER_DEF, OK, ERROR

START_EVENTS

Message Format

START_EVENTS_COMMAND ⇒ "0003:TID:00000000"
Description 
Initiate normal event processing phase.

Arguments

none
Events 
CHANGE_JOB, CHANGE_MACHINE, CHANGE_NODE, CHANGE_PROCESS, CHANGE_QUEUE, NEW_JOB, NEW_MACHINE, NEW_NODE, NEW_PROCESS, NEW_QUEUE, REMOVE_ALL, REMOVE_JOB, REMOVE_MACHINE, REMOVE_NODE, REMOVE_PROCESS, REMOVE_QUEUE, OK, ERROR

STOP_EVENTS

Message Format

STOP_EVENTS_COMMAND ⇒ "0004:TID:00000000"
Description 
Suspend normal event processing phase.

Arguments

none
Events 
OK, ERROR

SUBMIT_JOB

Message Format

SUBMIT_JOB_COMMAND ⇒ "0005:TID:NUM_ARGS" { " " JOB_ATTR }
Description 
Submit a job to the resource manager for execution. The job submission ID is an RMS generated ID that is used to match the newly created job model element with the job submission. The proxy agent MUST include this attribute when the corresponding NEW_JOB event is sent to the RMS. Once this event has been transmitted, the job submission ID can be discarded.

Arguments

JOB_ATTR is a proxy specific job submission attribute. At least one of these attributes MUST be an attribute containing the job submission ID for the job.
Events 
OK, ERROR

TERMINATE_JOB

Message Format

TERMINATE_JOB_COMMAND ⇒ "0006:TID:00000001" " " JOB_ID_ATTR
Description 
Request the terminaton of an existing job. The meaning of 'termination' depends on the state of the job.

Arguments

JOB_ID_ATTR is a jobId attribute containing the model element ID of the job.
Events 
OK, ERROR

MOVE_JOB

Message Format

MOVE_JOB_COMMAND ⇒ "0007:TID:00000002" " " JOB_ID_ATTR " " QUEUE_ID_ATTR
Description 
Not yet implemented. This command is intended to allow jobs to be moved between queues.

Arguments

JOB_ID_ATTR is a jobId attribute containing the model element ID of the job.
QUEUE_ID_ATTR is a queueId attribute containing the model element ID of the destination queue.
Events 
OK, ERROR

CHANGE_JOB

Message Format

CHANGE_JOB_COMMAND ⇒ "0008:TID:NUM_ARGS" " " JOB_ID_ATTR { " " ATTR }
Description 
Not yet implemented. This command is intended to allow a job's status to be changed (e.g. place a hold on a job)

Arguments

JOB_ID_ATTR is a jobId attribute containing the model element ID of the job to change.
ATTR is a proxy agent specific job attribute to change.
Events 
OK, ERROR

LIST_FILTERS

Message Format

LIST_FILTERS_COMMAND ⇒ "0009:TID:00000000"
Description 
Not yet implemented. This command lists the filters that are currently enabled in the proxy agent.

Arguments

none
Events 
OK, ERROR

SET_FILTERS

Message Format

SET_FILTERS_COMMAND ⇒ "000A:TID:NUM_ARGS" { " " ATTR }
Description 
Not yet implemented. This command sets the filters in the proxy agent.

Arguments

ATTR is a filter attributes to set.
Events 
OK, ERROR

Events

Events are used by the proxy agent to communicate the results of commands or other information back to the RMS. As mentioned previously, each event MUST contain a tid of a corresponding command.

Events, like commands, are formatted as simple ASCII text strings. A proxy event consists of a header and a body, separated by a space (hex 20), as follows:

EVENTEVENT_HEADER " " EVENT_BODY

The event header consists of three fixed length hexadecimal numbers separated by colons (hex 3A), so it is itself fixed length. The format of the header is:

EVENT_HEADEREVENT_ID ":" TID ":" NUM_ARGS

where

EVENT_ID is a 4 digit hexadecimal number representing the type of event
TID is an 8 digit hexadecimal number containing the transaction ID of the command that generated this event
NUM_ARGS is an 8 digit hexadecimal number containing the number of space separated elements in the event body

The event body consists of NUM_ARGS strings separated by spaces.

EVENT_BODYSTRING { " " STRING }

The following sections describe the currently defined events.

OK

Message Format

OK_EVENT ⇒ "0000:TID:00000000"
Description 
Indicates that the command with corresponding TID has been completed successfully
Arguments 
none

ERROR

Message Format

ERROR_EVENT ⇒ "0005:TID:00000002" " " ERROR_CODE_ATTRIBUTE " " ERROR_MSG_ATTRIBUTE
Description 
Indicates that the command with corresponding TID has not been completed successfully. The reason for the failure are provided in the attributes.

Arguments

ERROR_CODE_ATTRIBUTE is an attribute containing the error code
ERROR_MSG_ATTRIBUTE is an attribute containing a textual representation of the error

SHUTDOWN

Message Format

SHUTDOWN_EVENT ⇒ "0006:TID:00000000"
Description 
Indicates that the proxy has shut down in response to a QUIT command.
Arguments 
none

MESSAGE

Message Format

MESSAGE_EVENT ⇒ "00FA:TID:00000003" " " MSG_LEVEL_ATTRIBUTE " " MSG_CODE_ATTRIBUTE " " MSG_TEXT_ATTRIBUTE
Description 
A log message that will be displayed by the user interface.

Arguments

MSG_LEVEL_ATTRIBUTE is an attribute containing the message level. Valid levels are '"FATAL'", '"ERROR", "WARNING", and "INFO".
MSG_CODE_ATTRIBUTE is an attribute containing the message code
MSG_TEXT_ATTRIBUTE is an attribute containing a textual representation of the message

ATTR_DEF

Message Format

ATTR_DEF_EVENT ⇒ "00FB:TID:NUM_ARGS" " " NUM_DEFS { " " ATTRIBUTE_DEF }
Description 
Used to create new attribute definitions.

Arguments

NUM_DEFS is the number of attribute definitions to follow.
ATTRIBUTE_DEF is an attribute definition.

An attribute definition is defined as follows:

ATTRIBUTE_DEFBOOLEAN_ATTR_DEF | DATE_ATTR_DEF | DOUBLE_ATTR_DEF | ENUM_ATTR_DEF | INT_ATTR_DEF | STR_ATTR_DEF

All attribute definitions begin with the following elements:

ATTR_DEF_STARTNUM_ELEMENTS " " ID " " TYPE " " NAME " " DESCRIPTION " " DEFAULT

where:

NUM_ELEMENTS is the number of elements (separated by spaces) in this attribute definition.
ID is the unique definition ID.
TYPE is the type of the attribute. Legal values are: "ARRAY", "BOOLEAN", "DATE", "DOUBLE", "ENUMERATED", "INTEGER", and "STRING".
NAME is the short name of the attribute. This is displayed in property views as the name of the attribute.
DESCRIPTION is a description of the attribute. This is dispayed when more information about the attribute is requested.
DEFAULT is the default value of the attribute. There must be a legal conversion between this string and the actual attribute value.

A boolean attribute definition is simply:

BOOLEAN_ATTR_DEFATTR_DEF_START

A date attribute definition requires additional elements to be supplied for the definition:

DATE_ATTR_DEFATTR_DEF_START " " DATE_STYLE " " TIME_STYLE " " LOCALE [ " " MIN " " MAX ]

where:

DATE_STYLE is a Proxy String representing the date format. Legal values are: "SHORT", "MEDIUM", "LONG", and "FULL".
TIME_STYLE is a Proxy String representing the time format. Legal values are: "SHORT", "MEDIUM", "LONG", and "FULL".
LOCALE is a Proxy String represting a country code. See java.lang.Local for legal values.
MIN is the minimum date supported by the attribute.
MAX is the maximum date supported by the attribute.

A double attribute defintion has optional paramaters:

DOUBLE_ATTR_DEFATTR_DEF_START [ " " MIN " " MAX ]

where:

MIN is the minimum value supported by the attribute.
MAX is the maximum value supported by the attribute.

An enumerated attribute definition requires a sequence of enumerated values to be specified:

ENUM_ATTR_DEFATTR_DEF_START { " " VALUE }

where:

VALUE is a string representing an enumerated value.

Like double, integer attributes take optional parameters:

INT_ATTR_DEFATTR_DEF_START [ " " MIN " " MAX ]

where:

MIN is the minimum value supported by the attribute.
MAX is the maximum value supported by the attribute.

CHANGE_JOB

Message Format

CHANE_JOB_EVENT ⇒ "00E6:TID:NUM_ARGS" " " NUM_RANGES { " " JOB_RANGE }
Description 
Used to update attributes in a range of job model elements. Multiple attributes in multiple jobs can be updated simultaneously with this event.

Arguments

NUM_RANGES is the number of job ranges contained in this event.
JOB_RANGE represents the attributes that have changed for a given range of jobs.

A JOB_RANGE is formatted as follows:

JOB_RANGEID_RANGE " " NUM_ATTRS { " " ATTR }

where:

ID_RANGE is a range of ID's in Range Set Notation
NUM_ATTRS is the number' of attributes associated with this range of jobs.
ATTR is an attribute that will be updated for each job in the range.

CHANGE_MACHINE

Message Format

CHANGE_MACHINE_EVENT ⇒ "00E7:TID:NUM_ARGS" " " NUM_RANGES { " " MACHINE_RANGE }
Description 
Used to update attributes in a range of machine model elements. Multiple attributes in multiple machines can be updated simultaneously with this event.

Arguments

NUM_RANGES is the number of machine ranges contained in this event.
MACHINE_RANGE represents the attributes that have changed for a given range of machines.

A MACHINE_RANGE is formatted as follows:

MACHINE_RANGEID_RANGE " " NUM_ATTRS { " " ATTR }

where:

ID_RANGE is a range of ID's in Range Set Notation
NUM_ATTRS is the number of attributes associated with this range of machines.
ATTR is an attribute that will be updated for each machine in the range.

CHANGE_NODE

Message Format

CHANGE_NODE_EVENT ⇒ "00E8:TID:NUM_ARGS" NUM_RANGES { " " NODE_RANGE }
Description 
Used to update attributes in a range of node model elements. Multiple attributes in multiple nodes can be updated simultaneously with this event.

Arguments

NUM_RANGES is the number of node ranges contained in this event.
NODE_RANGE represents the attributes that have changed for a given range of nodes.

A NODE_RANGE is formatted as follows:

NODE_RANGEID_RANGE " " NUM_ATTRS { " " ATTR }

where:

ID_RANGE is a range of ID's in Range Set Notation
NUM_ATTRS is the number of attributes associated with this range of nodes.
ATTR is an attribute that will be updated for each node in the range.

CHANGE_PROCESS

Message Format

CHANGE_PROCESS_EVENT ⇒ "00E9:TID:NUM_ARGS" " " NUM_RANGES { " " PROCESS_RANGE }
Description 
Used to update attributes in a range of process model elements. Multiple attributes in multiple processes can be updated simultaneously with this event.

Arguments

NUM_RANGES is the number of process ranges contained in this event.
PROCESS_RANGE represents the attributes that have changed for a given range of processes.

A PROCESS_RANGE is formatted as follows:

PROCESS_RANGEID_RANGE " " NUM_ATTRS { " " ATTR }

where:

ID_RANGE is a range of ID's in Range Set Notation
NUM_ATTRS is the number of attributes associated with this range of processes.
ATTR is an attribute that will be updated for each process in the range.

CHANGE_QUEUE

Message Format

CHANGE_QUEUE_EVENT ⇒ "00EA:TID:NUM_ARGS" " " NUM_RANGES { " " QUEUE_RANGE }
Description 
Used to update attributes in a range of queue model elements. Multiple attributes in multiple queues can be updated simultaneously with this event.

Arguments

NUM_RANGES is the number of queue ranges contained in this event.
QUEUE_RANGE represents the attributes that have changed for a given range of queues.

A QUEUE_RANGE is formatted as follows:

QUEUE_RANGEID_RANGE " " NUM_ATTRS { " " ATTR }

where:

ID_RANGE is a range of ID's in Range Set Notation
NUM_ATTRS is the number of attributes associated with this range of queues.
ATTR is an attribute that will be updated for each queue in the range.

NEW_JOB

Message Format

NEW_JOB_EVENT ⇒ "00DC:TID:NUM_ARGS" " " PARENT_ID " " NUM_JOB_DEFS { " " JOB_DEF }
Description 
Define new job model elements. Multiple jobs can be defined simultaneously with this event.

Arguments

PARENT_ID is the ID of the parent queue of this job.
NUM_JOB_DEFS is the number of job definitions contained in this event.
JOB_DEF represents the definition of a range of jobs and associated attributes.

A JOB_DEF is formatted as follows:

JOB_DEFID_RANGE " " NUM_ATTRS { " " ATTR }

where:

ID_RANGE is a range of ID's in Range Set Notation
NUM_ATTRS is the number' of attributes associated with this job definition.
ATTR is an attribute that will be set for each newly created job.

NEW_MACHINE

Message Format

NEW_MACHINE_EVENT ⇒ "00DD:TID:NUM_ARGS" " " PARENT_ID " " NUM_MACHINE_DEFS { " " MACHINE_DEF }
Description 
Define new machine model elements. Multiple machines can be defined simultaneously with this event.

Arguments

PARENT_ID is the ID of the parent resource manager of this machine.
NUM_MACHINE_DEFS is the number of machine definitions contained in this event.
MACHINE_DEF represents the definition of a range of machines and associated attributes.

A MACHINE_DEF is formatted as follows:

MACHINE_DEFID_RANGE " " NUM_ATTRS { " " ATTR }

where:

ID_RANGE is a range of ID's in Range Set Notation
NUM_ATTRS is the number of attributes associated with this machine definition.
ATTR is an attribute that will be set for each newly created machine.

NEW_NODE

Message Format

NEW_NODE_EVENT ⇒ "00DE:TID:NUM_ARGS" " " PARENT_ID " " NUM_NODE_DEFS { " " NODE_DEF }
Description 
Define new node model elements. Multiple nodes can be defined simultaneously with this event.

Arguments

PARENT_ID is the ID of the parent machine of this node.
NUM_NODE_DEFS is the number of node definitions contained in this event.
NODE_DEF represents the definition of a range of nodes and associated attributes.

A NODE_DEF is formatted as follows:

NODE_DEFID_RANGE " " NUM_ATTRS { " " ATTR }

where:

ID_RANGE is a range of ID's in Range Set Notation
NUM_ATTRS is the number of attributes associated with this node definition.
ATTR is an attribute that will be set for each newly created node.

NEW_PROCESS

Message Format

NEW_PROCESS_EVENT ⇒ "00DF:TID:NUM_ARGS" " " PARENT_ID " " NUM_PROCESS_DEFS { " " PROCESS_DEF }
Description 
Define new process model elements. Multiple processes can be defined simultaneously with this event.

Arguments

PARENT_ID is the ID of the parent job of this processs.
NUM_PROCESS_DEFS is the number of process definitions contained in this event.
PROCESS_DEF represents the definition of a range of processes and associated attributes.

A PROCESS_DEF is formatted as follows:

PROCESS_DEFID_RANGE " " NUM_ATTRS { " " ATTR }

where:

ID_RANGE is a range of ID's in Range Set Notation
NUM_ATTRS is the number of attributes associated with this process definition.
ATTR is an attribute that will be set for each newly created process.

NEW_QUEUE

Message Format

NEW_QUEUE_EVENT ⇒ "00E0:TID:NUM_ARGS" " " PARENT_ID " " NUM_QUEUE_DEFS { " " QUEUE_DEF }
Description 
Define new queue model elements. Multiple queues can be defined simultaneously with this event.

Arguments

PARENT_ID is the ID of the parent resource manager of this queue.
NUM_QUEUE_DEFS is the number of queue definitions contained in this event.
QUEUE_DEF represents the definition of a range of queues and associated attributes.

A QUEUE_DEF is formatted as follows:

QUEUE_DEFID_RANGE " " NUM_ATTRS { " " ATTR }

where:

ID_RANGE is a range of ID's in Range Set Notation
NUM_ATTRS is the number of attributes associated with this queue definition.
ATTR is an attribute that will be set for each newly created queue.

REMOVE_ALL

Message Format

REMOVE_ALL_EVENT ⇒ "00F0:TID:00000000"
Description 
Remove all model elements know by the RMS for this session.

Arguments

none

REMOVE_JOB

Message Format

REMOVE_JOB_EVENT ⇒ "00F1:TID:00000001" " " ID_RANGE
Description 
Remove job model elements from the model. Multiple jobs can be remove simultaneously with this event. All children of the jobs will also be removed from the model.

Arguments

ID_RANGE is a range of ID's to be removed in Range Set Notation

REMOVE_MACHINE

Message Format

REMOVE_MACHINE_EVENT ⇒ "00F2:TID:00000001" " " ID_RANGE
Description 
Remove machine model elements from the model. Multiple machines can be remove simultaneously with this event. All children of the machines will also be removed from the model.

Arguments

ID_RANGE is a range of ID's to be removed in Range Set Notation

REMOVE_NODE

Message Format

REMOVE_NODE_EVENT ⇒ "00F3:TID:00000001" " " ID_RANGE
Description 
Remove node model elements from the model. Multiple nodes can be remove simultaneously with this event. All children of the nodes will also be removed from the model.

Arguments

ID_RANGE is a range of ID's to be removed in Range Set Notation

REMOVE_PROCESS

Message Format

REMOVE_PROCESS_EVENT ⇒ "00F4:TID:00000001" " " ID_RANGE
Description 
Remove process model elements from the model. Multiple processes can be remove simultaneously with this event.

Arguments

ID_RANGE is a range of ID's to be removed in Range Set Notation

REMOVE_QUEUE

Message Format

REMOVE_QUEUE_EVENT ⇒ "00F5:TID:00000001" " " ID_RANGE
Description 
Remove queue model elements from the model. Multiple queues can be remove simultaneously with this event. All children of the queues will also be removed from the model.

Arguments

ID_RANGE is a range of ID's to be removed in Range Set Notation

Back to the top