<<< DUA0:[NOTES$LIBRARY]VAX_VMS.NOTE;1 >>> -< SIG VAX/VMS >- ================================================================================ Note 585.0 Question naive sur F$GetQui() 10 replies DECUSF::MANET_P "Philippe - SECMAI" 16 lines 21-NOV-1989 18:36 -------------------------------------------------------------------------------- J'ai une question toute bete. Je voudrais savoir si un job est deja present dans une queue de batch avant de le submitter. J'ai naivement pense qu'en faisant un F$GETQUI("DISPLAY_ENTRY","ENTRY_NUMBER","mon_nom_de_job","ALL_JOBS"), j'aurai eu soit son numero d'entree si il etait deja submitte, soit "" dans le cas contraire. En fait j'ai toujours une chaine vide. Je sais que je peux faire une double boucle DISPLAY_QUEUE sur mes queues de batch et DISPLAY_JOB pour chacun des jobs d'une queue. Ma question est de savoir si je peux eviter de faire ce genre de boucle en DCL pour avoir une info aussi simple. D'avance merci. ================================================================================ Note 585.1 Question naive sur F$GetQui() 1 of 10 DECUSF::ALBERT_JN 9 lines 22-NOV-1989 12:04 -< Des idees tres simples >- -------------------------------------------------------------------------------- Je pense que la soumission est faite par une procedure DCL, genre automatique. Dans ce cas, vous pouvez ouvrir un fichier bidon en WRITE dans le batch et faire de meme dans la procedure de lancement. Si le second OPEN plante, lors le batch existe. Autre methode: il existe dans une bande DECUS (mais laquelle ?) un utilitaire permettant de manipuler des LOCKs au niveau DCL. ================================================================================ Note 585.2 Question naive sur F$GetQui() 2 of 10 DECUSF::OURGHANLIA_B "Bernard, VMS/VAXClusters" 1 line 22-NOV-1989 12:53 -< Pas d'autre solution >- -------------------------------------------------------------------------------- Pour le probleme F$GETQUI, il n'y a helas pas d'autre solution ================================================================================ Note 585.3 Question naive sur F$GetQui() 3 of 10 DECUSF::MOUSSU_L "Laurent MOUSSU -CHU Lille -CERIM" 9 lines 22-NOV-1989 13:10 -< $GETQUI ameliorable ?... >- -------------------------------------------------------------------------------- Le moins qu'on puisse dire c'est que F$GETQUI, c'est pas de la tarte a utiliser: on a fait un bricolo pour effectuer le minimum de la gestion queues / jobs, on a fini par y arriver, mais pfff... La doc est d'ailleurs assez laconique et il faut deviner un certain nombre de choses: Par ex. beaucoup d'items semblent pouvoir etre obtenus indifferemment par "DISPLAY_ENTRY" ou "DISPLAY_JOB" ne rendent parfois rien du tout dans l'un des 2 cas... Est-ce qu'on n'a rien compris au film ?... ou est-ce que d'autres masochistes on fait la meme experience ?.. ================================================================================ Note 585.4 Question naive sur F$GetQui() 4 of 10 DECUSF::MANET_P "Philippe - SECMAI" 5 lines 22-NOV-1989 18:59 -< Bon tant pis >- -------------------------------------------------------------------------------- C'est exactement mon cas. Je croyais pouvoir faire un truc simple avec F$GetQui (la methode utilisee precedemment etait effectivement un mecanisme de lock par fichier). J'ai essaye de decoder la doc sans plus de succes que ce que j'ai decrit en .0, d'ou la question. ================================================================================ Note 585.5 Question naive sur F$GetQui() 5 of 10 DECUSF::JOUVIN_M "Michel Jouvin - CECM/CNRS Vitry" 5 lines 24-NOV-1989 11:10 -< J'ai une procedure... >- -------------------------------------------------------------------------------- Si cela vous interesse, j'ai une procedure qui teste qu'un batch n'a pas ete soumis avant de le resoumettre. Ca utilise la double boucle decrite. Si cela vous interesse, mettez moi un mail. Michel ================================================================================ Note 585.6 Question naive sur F$GetQui() 6 of 10 DECUSF::MANET_P "Philippe - SECMAI" 33 lines 24-NOV-1989 13:46 -< Moi aussi >- -------------------------------------------------------------------------------- J'ai aussi ecrit cette procedure en desespoir de cause. La voici si cela interesse quelqu'un d'autre : $ set noon $ x = f$getqui("CANCEL_OPERATION") $ loop: $ qname = f$getqui("DISPLAY_QUEUE","QUEUE_NAME","*","BATCH") $ if qname .eqs. "" then notfound $ loop2: $ jname = f$getqui("DISPLAY_JOB","JOB_NAME",,"ALL_JOBS") $ if jname .eqs. "" then goto loop $ if jname .eqs. "XXX" then goto foundit $ goto loop2 $ notfound: $ write sys$output "Job XXX not found" $ exit $ foundit: $ write sys$output "Job XXX found in queue ''qname'" $ exit Ce que je n'ai toujours pas compris, c'est pourquoi un F$GetQui("DISPLAY_ENTRY","JOB_NAME",le_numero_de_job) fonctionne correctement alors qu'un F$GetQui("DISPLAY_ENTRY","ENTRY_NUMBER",le_nom_du_job) ne donne rien. Peut on esperer que $GETQUI/F$GETQUI deviennent plus simples dans une future version de VMS. A .-1, merci quand meme. ================================================================================ Note 585.7 Question naive sur F$GetQui() 7 of 10 DECUSF::MOUSSU_L "Laurent MOUSSU -CHU Lille -CERIM" 13 lines 24-NOV-1989 18:55 -< Nom_de_job pas unique... >- -------------------------------------------------------------------------------- > Ce que je n'ai toujours pas compris, c'est pourquoi un > F$GetQui("DISPLAY_ENTRY","JOB_NAME",le_numero_de_job) fonctionne > correctement alors qu'un > F$GetQui("DISPLAY_ENTRY","ENTRY_NUMBER",le_nom_du_job) ne donne > rien. Je pense que c'est tout simplement parce que le numero d'entry est unique et peut donc etre un identifieur pour QUEMAN, alors que rien n'interdit d'avoir 2 (ou n ...) batchs possedant le meme nom, ce qui fait qu'il n'a pas du etre prevu par les developpeurs de $GETQUI/F$GETQUI d'utiliser cette info pour acceder a une entree batch. ================================================================================ Note 585.8 Question naive sur F$GetQui() 8 of 10 DECUSF::MANET_P "Philippe - SECMAI" 10 lines 27-NOV-1989 18:15 -< Oops >- -------------------------------------------------------------------------------- C'est exact, sur le coup je n'y avais pas pense. Mais on peut envisager de boucler sur le nom du job tant qu'il y a des numeros d'entry retournes (eventuellement avec "Nom_de_job*"). Ca ne marche pas non plus, ce qui est fort dommage. Je me demande d'ailleurs si pour l'object_id, on peut avoir un wildcard avec un id specifique, ou si il faut le wildcard tout seul. ================================================================================ Note 585.9 Question naive sur F$GetQui() 9 of 10 DECUSF::CEDELLE_A "Alain Cedelle, IRISA Rennes" 30 lines 20-DEC-1989 15:34 -< Pourquoi deux boucles ? >- -------------------------------------------------------------------------------- Il semble que la procedure "double boucle" ne marche pas si on essaie de supprimer la 1ere boucle, en ecrivant par exemple : $ QNAME = F$GETQUI("DISPLAY_QUEUE","QUEUE_NAME","SYS$BATCH","BATCH") SYS$BATCH remplace le "*", car je ne veux regarder que cette queue. Mais l'appel "DISPLAY_JOB" ne marche plus ...(-E- no queue context) Pourquoi donc ??? ca ressemble a un bug . ainsi, la sequence: $ QN = F$GETQUI("DISPLAY_QUEUE","QUEUE_NAME","*") $ JN = F$GETQUI("DISPLAY_JOB","JOB_NAME",,"ALL_JOBS") passe correctement, alors que : $ QN = F$GETQUI("DISPLAY_QUEUE","QUEUE_NAME","SYS$BATCH") $ JN = F$GETQUI("DISPLAY_JOB","JOB_NAME",,"ALL_JOBS") provoque une erreur 'no queue context' !! Du temps de la v4, j'utilisais une methode simple par une commande SHOW QUEUE envoyee dans un fichier, et ca marche toujours en v5 !! La solution .1 a le defaut de ne pas tenir compte des jobs pendings ou holdings. ================================================================================ Note 585.10 Question naive sur F$GetQui() 10 of 10 DECUSF::JOUVIN_M "Michel Jouvin - CECM/CNRS Vitry" 20 lines 29-DEC-1989 15:20 -< SCAN_QUEUE >- -------------------------------------------------------------------------------- Je mets dans la directory VMS une procedure SCAN_QUEUE.COM qui permet de savoir si une procedure a deja ete soumise dans une queue batch. Elle est basee sur F$getqui. Le nom de la procedure a tester doit etre specifie dans p1. En batch, p1 a pour defaut la procedure principale du job. La queue a scanner peut etre specifiee dans p2. Par defaut c'est la queue ou a ete soumise la procedure principale du job courant si on est en batch (gestion correcte des queues generiques) ou l'ensemble des queues batch du systeme si SCAN_QUEUE est execute dans un contexte interactif. Un status est retourne dans le symbole global dont le nom est passe dans P3 ou par defaut SCAN_QUEUE_STATUS sauf si on utilise directement SCAN_QUEUE auquel cas un msg est retourne plutot qu'un status, indiquant le nom de la queue ou la procedure a ete trouvee (pour le cas ou le queue name comporte des wildcards). Le status retourne est un booleen vrai lorsque la procedure a deja ete trouvee ou si une erreur c'est produite dans SCAN_QUEUE. Enjoy... Michel Jouvin