Development #76423
uwsgidecorators: corriger le passage des paramètres au spooler, et ne faire un spooler universel
0%
Description
Les clés ne sont pas automatiquement transformés en bytes à l'appel, ni systématiquement décodées à l'exécution du spooler. Il n'y a que body qui semble recevoir ce traitement, donc il faut systématiquement encoder les clés, puis à la réception décoder si nécessaire les clés.
--
Finalement j'adopte une interface unique launch_in_spooler, qui devrait éviter d'avoir à déclarer de multiples fichiers spooler.
Related issues
History
Updated by Robot Gitea over 1 year ago
- Status changed from Nouveau to Solution proposée
Benjamin Dauvergne (bdauvergne) a ouvert une pull request sur Gitea concernant cette demande :
- URL : https://git.entrouvert.org/entrouvert/hobo/pulls/29
- Titre : multitenant: fix passing of spooler kwargs (#76423)
- Modifications : https://git.entrouvert.org/entrouvert/hobo/pulls/29/files
Updated by Benjamin Dauvergne over 1 year ago
- Subject changed from uwsgidecorators: corriger le passage des paramètres au spooler to uwsgidecorators: corriger le passage des paramètres au spooler, et ne faire un spooler universel
- Description updated (diff)
Updated by Benjamin Dauvergne over 1 year ago
J'ai conservé l'implémentation de hobo.provisionning.spooler pour que hobo.provisionning.middleware continue à fonctionner dans les projets non encore migrés, ça se contrôle en posant settings.USE_NEW_SPOOLER = True
(qu'on retirera quand tout le monde aura migré, ainsi que le code correspondant dans hobo, ça rendra ce patch négatif en terme d'ajout de lignes de code sans parler de ne plus dépendre de uwsgidecorators).
Updated by Benjamin Dauvergne over 1 year ago
- Related to Development #76434: utiliser hobo.multitenant.spooler added
Updated by Benjamin Dauvergne over 1 year ago
- Related to Development #76430: utiliser hobo.multitenant.spooler added
Updated by Benjamin Dauvergne over 1 year ago
- Related to Development #76419: utiliser hobo.multitenant.spooler added
Updated by Benjamin Dauvergne over 1 year ago
J'ai renommé spooler.launch_in_spooler pour un plus court spooler.run().
Donc j'ai testé dans devinst, j'ai changé tous les fichiers ~/.config/publik/settings/{combo,chrono,passerelle,hobo}/uwsgi.ini au niveaux des lignes spooler-import pour n'avoir que spooler-import=hobo.multitenant.spooler
. Le provisionning fonctionne correctement.
Coté passerelle, j'ai posé PASSERELLE_MANAGE_COMMAND pour que les jobs partent en spooler, premier échec de ma part mais belle trace propre :
[spooler /var/lib/passerelle/spooler pid: 2247293] managing request uwsgi_spoolfile_on_revestel_2247323_1_133301769_1681216140_45637 ... failed function passerelle.base.models.Job.run_with_subprocess (0.015153 seconds) Traceback (most recent call last): File "/home/bdauvergne/wd/eo/hobo/hobo/multitenant/spooler.py", line 124, in run func(*args, **kwargs) File "/home/bdauvergne/wd/eo/passerelle/passerelle/base/models.py", line 874, in run_with_subprocess subprocess.run(cmd_args) File "/usr/lib/python3.11/subprocess.py", line 548, in run with Popen(*popenargs, **kwargs) as process: ^^^^^^^^^^^^^^^^^^^^^^^^^^^ File "/usr/lib/python3.11/subprocess.py", line 1024, in __init__ self._execute_child(args, executable, preexec_fn, close_fds, File "/usr/lib/python3.11/subprocess.py", line 1901, in _execute_child raise child_exception_type(errno_num, err_msg, err_filename) FileNotFoundError: [Errno 2] No such file or directory: '~/envs/publik-env-py3/bin/passerelle-manage' [spooler /var/lib/passerelle/spooler pid: 2247293] done with task uwsgi_spoolfile_on_revestel_2247323_1_133301769_1681216140_45637 after 0 seconds
en mettant un chemin correct ça passe nickel :
[spooler] written 206 bytes to file /var/lib/passerelle/spooler/uwsgi_spoolfile_on_revestel_2247620_1_1631056619_1681216236_626033 [spooler /var/lib/passerelle/spooler pid: 2247600] managing request finished function passerelle.base.models.Job.run_with_subprocess (6.680100 seconds)
--
Coté chrono : import d'un ics ok
[spooler] written 53384 bytes to file /var/lib/chrono/spooler/uwsgi_spoolfile_on_revestel_2244729_1_1184431397_1681216633_603795 [spooler /var/lib/chrono/spooler pid: 2244704] managing request uwsgi_spoolfile_on_revestel_2244729_1_1184431397_1681216633_603795 ... finished function chrono.agendas.models.TimePeriodExceptionSource.refresh_timeperiod_exceptions_from_ics_ignore_errors (0.125295 seconds) [spooler /var/lib/chrono/spooler pid: 2244704] done with task uwsgi_spoolfile_on_revestel_2244729_1_1184431397_1681216633_603795 after 0 seconds
--
Coté combo : c'est ok après une petite bataille avec ChartNgCell.__getstate__ vu qu'on stocke une HttpRequest dans cell._request ce qui n'est pas une très bonne idée dans l'absolu, enfin c'est contourné là.
[spooler] written 2718 bytes to file /var/lib/combo/spooler/uwsgi_spoolfile_on_revestel_2250388_1_388198204_1681217287_763662 [spooler /var/lib/combo/spooler pid: 2250385] managing request uwsgi_spoolfile_on_revestel_2250388_1_388198204_1681217287_763662 ... finished function combo.apps.dataviz.models.ChartNgCell.refresh_statistics_data (0.211746 seconds) [spooler /var/lib/combo/spooler pid: 2250385] done with task uwsgi_spoolfile_on_revestel_2250388_1_388198204_1681217287_763662 after 0 seconds
Voilà tout fonctoinne de ce qui doit fonctionner avec le spooler dans chrono, combo, hobo et passerelle.
Updated by Benjamin Dauvergne over 1 year ago
PS: pas besoin de mettre à jour publik-devinst il reprendre la configuration dans debian/uwsgi.ini automatiquement, il faudra juste une réinstallation, pour les gens qui lance les services en mode uwsgi.
Updated by Benjamin Dauvergne over 1 year ago
- Related to Development #76542: utiliser hobo.multitenant.spooler added
Updated by Benjamin Dauvergne over 1 year ago
Aussi j'ai vérifié que sur une brique non migré (ici welco) l'ancienne function de provisionning fonctionne encore avec le code de ce ticket :
[spooler] written 1408 bytes to file /var/lib/welco/spooler/uwsgi_spoolfile_on_revestel_3039503_1_1225675431_1681708285_148662 [spooler /var/lib/welco/spooler pid: 3039468] managing request uwsgi_spoolfile_on_revestel_3039503_1_1225675431_1681708285_148662 ... {address space usage: 295944192 bytes/282MB} {rss usage: 78524416 bytes/74MB} [pid: 3039503|app: 0|req: 2/2] 127.0.0.1 () {42 vars in 907 bytes} [Mon Apr 17 07:11:25 2023] PUT /__provision__/?orig=authentic.dev.publik.love&algo=sha256×tamp=2023-04-17T05%3A11%3A24Z&nonce=f0b527b69325b225c4e4f317dc7dd51c&signature=DxKSmh2uMAa3CgyR9bzNMJj5DR5uAhLBTEDS3ZsS/fo%3D => generated 10 bytes in 38 msecs (HTTP/1.0 200) 3 headers in 94 bytes (1 switches on core 0) provisionned new user "john doe1008" john1008@example.com 7c748b9907774e00b7e36a8ddb2ca9b6 [spooler /var/lib/welco/spooler pid: 3039468] done with task uwsgi_spoolfile_on_revestel_3039503_1_1225675431_1681708285_148662 after 1 seconds
Updated by Benjamin Dauvergne over 1 year ago
- Related to Development #76692: utiliser hobo.multitenant.spooler added
Updated by Benjamin Dauvergne over 1 year ago
- Related to Development #76693: utiliser hobo.multitenant.spooler added
Updated by Benjamin Dauvergne over 1 year ago
- Related to Development #76747: utiliser hobo.multitenant.spooler added