Fonction scalaire en langage Fortran (mode distant)

Coder

Le code à exécuter en mode distant est le même que celui du mode local. Voir Fonction scalaire en langageFortran.

Compilation

Utiliser la compilation standard, comme en mode local :

$NZ_EXPORT_DIR/ae/utilities/bin/compile_ae --language fortran --version 3 \
     --template compile --exe applyopFortran applyop.f

Enregistrement

L'inscription est légèrement différente :

$NZ_EXPORT_DIR/ae/utilities/bin/register_ae --language fortran --version 3 \
     --template udf --exe applyopFortran \
     --sig "remote_applyop(varchar(1), int4, int4)" --return int4 --remote \
     --rname applyOpRemote

En outre, un lanceur est enregistré :

$NZ_EXPORT_DIR/ae/utilities/bin/register_ae --language fortran --version 3 \
     --exe applyopFortran --sig "launch_remote_applyop(int8)" \
     --return "TABLE(aeresult varchar(255))" --template udtf --remote \
     --launch --rname applyOpRemote

À l'exception de --rname, --exe et de la partie nom de --sig, tous les lanceurs ressemblent à ce qui précède. Dans ce cas, il s'agit d'un UDTF, puisque c'est l'interface de tous les lanceurs. Le nom --rname doit correspondre au nom du code (s'il est spécifié).

En cours d'exécution

Pour exécuter l'AE en mode distant, l'exécutable est exécuté en tant que "serveur" Dans ce cas, il ne traite que les requêtes exécutées sur l'hôte. En général, les AE sont également lancés sur les SPU. En interne, lorsque le serveur AE reçoit une requête du système NPS, il "bifurque" avant d'appeler nzaeHandleRequest(). Lancez l'exécutable sur l'hôte à l'aide de la commande de lancement de nzsql :

SELECT * FROM TABLE WITH FINAL(launch_remote_applyop(0));
AERESULT
-------------------------------------------------------------------------------
tran: 7192 DATA slc: 0 hardware: 0 machine: spubox1 process: 8306 thread: 8306
(1 row)

L'exécution de ps -aef | grep applyOpFortran montre que l'exécutable est en cours d'exécution sur l'hôte. Exécutez maintenant l'AE :

SELECT remote_applyop('*', 2, 13);
 REMOTE_APPLYOP
----------------
            26