Control de un AE remoto en ejecución
La capacidad AE proporciona una función de tabla SQL, nzaejobcontrol, que controla la ejecución de AE remotos. La sintaxis es (con los argumentos descritos en la tabla siguiente):
nzaejobcontrol <operation><dataslice for locus><connection point string
name><remote_name>{TRUE | FALSE}{NULL | 0 | <transaction ID>}{NULL | 0 | <session
ID>}
| Argumento | Descripción |
|---|---|
| Operación a realizar | Las operaciones incluyen hacer ping a un EA remoto, detener un EA remoto, devolver información del proceso Linux sobre un EA remoto y enviar señales a un EA remoto. Existen comandos para operar sobre un punto de conexión AE remoto concreto y sobre un subconjunto de puntos de conexión, incluidos todos ellos. |
| Dataslice/locus del EA remoto (SPUs o host) | Este argumento se especifica utilizando un entero literal cero (0) para el host o un conjunto de enteros no literales de IDs de dataslice para la SPU. El conjunto de ID de dataslice procede de la vista del sistema _v_dual_dslice (o algo equivalente). |
| Porción de nombre de cadena de la dirección del punto de conexión | Para un comando de punto de conexión único, debe especificarse este nombre. Para un comando de punto de conexión múltiple, puede ser NULL o '' (cadena vacía), en cuyo caso especifica todos los nombres. |
| Booleano (Dataslice ID) | TRUE significa que se utiliza el ID de dataslice en la dirección del punto de conexión; FALSE significa que no se utiliza. Para comandos de múltiples puntos de conexión, este argumento debe ser FALSE. |
| Bigint (ID de transacción) | NULL significa que no se utiliza el ID de transacción. 0 significa que se utiliza la función de ID de transacción actual en la que se llamó a la función de tabla nzaejobcontrol; mayor que 0 significa que se utiliza la ID de transacción especificada. |
| Bigint (ID de sesión) | NULL significa que no se utiliza el ID de sesión. 0 significa que se utiliza el ID de sesión actual en el que se llamó a la función de tabla nzaejobcontrol; mayor que 0 significa que se utiliza el ID de sesión especificado. |
Comandos de punto de conexión único
Los comandos de punto de conexión único operan exactamente en un punto de conexión, que puede consistir en varios procesos en varias máquinas. Estos son los nombres de comandos que se pueden utilizar en el argumento de operación de nzaejobcontrol.
- ping-Envíaun mensaje corto a un punto de conexión para determinar si está activo y responde. Devuelve datos para todas las columnas de salida enumeradas a continuación. (Véase la tabla Columnas de salida de funciones)
- ps-Devuelveinformación de proceso sobre un AE remoto que escucha en un punto de conexión. Este comando puede completarse incluso si el AE no responde en el punto de conexión. Devuelve los datos de todas las columnas de salida que no requieren comunicación directa con el AE remoto.
- stop-Detenerun AE remoto escuchando en un punto de conexión. Si el proceso AE remoto no responde al mensaje, se envía al proceso AE remoto una señal SIGKILL.
- status-Devuelveinformación de estado de un AE remoto que escucha en un punto de conexión. Al crear una rutina de devolución de llamada de mensaje AE remota, una aplicación AE remota puede devolver su propio mensaje y código de retorno personalizados. Ciertos comandos de señal de Linux pueden ser enviados a EAs remotos. La señal enviada se indica en el campo de operación de los comandos de función de tabla nzaejobcontrol sighup, sigint, sigkill, sigusr1, sigusr2, sigterm, sigcont y sigstop.
- limpiar: eliminalos archivos de sincronización temporales que quedan en las SPU. Este comando se utiliza una vez finalizado el comando de parada. El espacio en disco implicado suele ser insignificante, excepto cuando se crean muchos nombres de puntos de conexión diferentes utilizando el ID de sesión y el ID de transacción.
Comandos de punto de conexión múltiple
Los comandos de punto de conexión único actúan exactamente sobre un punto de conexión, que puede estar en uso por varios procesos en las SPU. Excepto el comando clean, todos los comandos de función de la tabla nzaejobcontrol tienen su correspondiente versión de punto de conexión múltiple.
Para estos comandos, los argumentos de punto de conexión a la función de tabla nzaejobcontrol actúan como filtro de selección. Por ejemplo, si el nombre remoto se especifica como NULL o '' (cadena vacía) el comando opera en puntos de conexión con todos los nombres. Por lo tanto, es posible enviar un comando a todos los EAs remotos o a un conjunto de EAs remotos, por ejemplo, a todos los EAs remotos que utilicen un punto de conexión creado con un ID de sesión determinado.
Estos comandos incluyen ' pingall, stopall, psall, statusall, sighupall, sigintall, sigkillall, sigusr1all, sigusr2all, sigtermall, sigcontall, sigstopall. ' Estos comandos operan de forma similar a la versión de punto de conexión único, pero para múltiples EAs.
Tabla Función Columnas de salida
Al utilizar la función nzaejobcontrol en la base de datos INZA directamente en SQL, la columna seleccionada debe ser aeresult. La función nzaejobcontrol también puede ser utilizada por un programa GUI que utilice SQL; por lo tanto, la información también se devuelve en columnas individuales. No todos los comandos fijan todas las columnas de retorno. La función de tabla nzaejobcontrol devuelve cero a varias filas.
| Columna | Descripción |
|---|---|
| aeresultado | Mensaje de estado |
| aerc | Código de retorno del comando: 0 = éxito, -1 = error, +1 = parada fallida pero posterior señal de kill exitosa |
| aetotal | Total de filas devueltas para el comando, repetidas en cada fila |
| nombre de la cadena | Nombre del punto de conexión |
| aedslice | ID de dataslice del punto de conexión |
| sesión | Punto de conexión ID de sesión |
| aetrans | Punto de conexión ID de transacción |
| nombre_del_host | Nombre del host en el que se ejecuta el proceso AE |
| aepid | ID del proceso Linux del AE remoto |
| aecommand | Línea de comandos AE |
| aetid | ID del hilo Linux en el que se está escuchando el punto de conexión |
| aebuild | El número de compilación AE del AE remoto |
| aenzrepver | La versión de nzrep que utiliza el AE remoto |
| aenzrepver | Si es TRUE, el número de compilación del AE o la versión nzrep del AE remoto no coincide con el kit actual del sistema NPS; de lo contrario, es FALSE. |
Ejemplos de anfitriones
Los siguientes ejemplos ilustran cómo funcionan los comandos individuales en el host. (Suponen que un AE llamado mi_remota_ae existe y puede ser llamado)
- Hacer ping a un AE remoto que no utilice ID de dataslice en el punto de conexión:
SELECT aeresult FROM TABLE WITH FINAL(inza..nzaejobcontrol('ping', 0, 'my_remote_ae', false, NULL, NULL)); - Hacer ping a un AE remoto utilizando el ID de dataslice en el punto de conexión:
SELECT aeresult FROM TABLE WITH FINAL(inza..nzaejobcontrol('ping', 0, 'my_remote_ae', true, NULL, NULL)); - Ping a todos los EA remotos:
SELECT aeresult FROM TABLE WITH FINAL(inza..nzaejobcontrol('pingall', 0, NULL, false, NULL, NULL)); - Hacer ping a todos los EA remotos con un punto de conexión utilizando ID de sesión = 1000:
SELECT aeresult FROM TABLE WITH FINAL(inza..nzaejobcontrol('pingall', 0, NULL, false, NULL, 1000));
Ejemplos de EPD
Los siguientes ejemplos ilustran cómo funcionan los comandos individuales en una SPU. (Suponen que un AE llamado mi_remota_ae existe y puede ser llamado)
- Hacer ping a un AE remoto que tiene una instancia por SPU:
SELECT aeresult FROM _v_dual_dslice, TABLE WITH final(inza..nzaejobcontrol('ping', dsid, 'my_remote_ae', false, NULL, NULL)); - Ping a un AE remoto que tiene una instancia por dataslice:
SELECT aeresult FROM _v_dual_dslice, TABLE WITH final(inza..nzaejobcontrol('ping', dsid, 'my_remote_ae', true, NULL, NULL)); - Ping a todos los EA remotos:
SELECT aeresult FROM _v_dual_dslice, TABLE WITH final(inza..nzaejobcontrol('pingall', dsid, NULL, false, NULL, NULL)); - Hacer ping a todos los EA remotos con un punto de conexión utilizando ID de sesión = 1000:
SELECT aeresult FROM _v_dual_dslice, TABLE WITH final(inza..nzaejobcontrol('pingall', dsid, NULL, false, NULL, 1000));
Ejemplos de columna única en el host con salida
A continuación se muestran los resultados variados de la columna de ping a todos los EAs remotos en el host:
SELECT aeresult FROM TABLE WITH FINAL(inza..nzaejobcontrol('pingall', 0, NULL,
false, NULL, NULL));
AERESULT
-----------------------------------------------------------------------------
netezzahost 24872 (datamatrix dataslc:-1 sess:-1 trans:-1) thread: 24873 AE
Build: 10 nzrep version: 9
netezzahost 30264 (testcapi dataslc:-1 sess:-1 trans:-1) thread: 30264 AE Build:
10 nzrep version: 9
SELECT aerc FROM TABLE WITH FINAL(inza..nzaejobcontrol('pingall', 0, NULL, false,
NULL, NULL));
AERC
------
0
0
SELECT aetotal FROM TABLE WITH FINAL(inza..nzaejobcontrol('pingall', 0, NULL,
false, NULL, NULL));
AETOTAL
---------
2
2
SELECT aename FROM TABLE WITH FINAL(inza..nzaejobcontrol('pingall', 0, NULL,
false, NULL, NULL));
AENAME
------------
datamatrix
testcapi
SELECT aedslice FROM TABLE WITH FINAL(inza..nzaejobcontrol('pingall', 0, NULL,
false, NULL, NULL));
AEDSLICE
----------
-1
-1
SELECT aesession FROM TABLE WITH FINAL(inza..nzaejobcontrol('pingall', 0, NULL,
false, NULL, NULL));
AESESSION
-----------
-1
-1
SELECT aetrans FROM TABLE WITH FINAL(inza..nzaejobcontrol('pingall', 0, NULL,
false, NULL, NULL));
AETRANS
---------
-1
-1
SELECT aehostname FROM TABLE WITH FINAL(inza..nzaejobcontrol('pingall', 0, NULL,
false, NULL, NULL));
AEHOSTNAME
--------------
netezzahost
netezzahost
SELECT aepid FROM TABLE WITH FINAL(inza..nzaejobcontrol('pingall', 0, NULL,
false, NULL, NULL));
AEPID
-------
24872
30264
SELECT aecommand FROM TABLE WITH FINAL(inza..nzaejobcontrol('pingall', 0, NULL,
false, NULL, NULL));
AECOMMAND
----------------------------------------------------------
/nz/export/ae/languages/java/6.13.0/jdk1.6.0_13/bin/java
/nz/export/ae/aebin/host/testcapi
SELECT aetid FROM TABLE WITH FINAL(inza..nzaejobcontrol('pingall', 0, NULL,
false, NULL, NULL));
AETID
-------
24873
30264
SELECT aebuild FROM TABLE WITH FINAL(inza..nzaejobcontrol('pingall', 0, NULL,
false, NULL, NULL));
AEBUILD
---------
10
10
SELECT aenzrepver FROM TABLE WITH FINAL(inza..nzaejobcontrol('pingall', 0, NULL,
false, NULL, NULL));
AENZREPVER
------------
9
9
SELECT aevermismatch FROM TABLE WITH FINAL(inza..nzaejobcontrol('pingall', 0,
NULL, false, NULL, NULL));
AEVERMISMATCH
---------------
f
f