Project

General

Profile

Development #76423

uwsgidecorators: corriger le passage des paramètres au spooler, et ne faire un spooler universel

Added by Benjamin Dauvergne about 1 year ago. Updated 3 months ago.

Status:
Solution proposée
Priority:
Normal
Category:
-
Target version:
-
Start date:
08 April 2023
Due date:
% Done:

0%

Estimated time:
Patch proposed:
No
Planning:
No

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

Related to Combo - Development #76434: utiliser hobo.multitenant.spoolerSolution proposée09 April 2023

Actions
Related to Passerelle - Development #76430: utiliser hobo.multitenant.spoolerSolution proposée08 April 2023

Actions
Related to Chrono - Development #76419: utiliser hobo.multitenant.spoolerSolution proposée08 April 2023

Actions
Related to Authentic 2 - Development #76542: utiliser hobo.multitenant.spoolerSolution proposée12 April 2023

Actions
Related to Fargo - Development #76692: utiliser hobo.multitenant.spoolerSolution proposée17 April 2023

Actions
Related to Welco - Development #76693: utiliser hobo.multitenant.spoolerSolution validée17 April 2023

Actions
Related to Lingo - Development #76747: utiliser hobo.multitenant.spoolerSolution proposée18 April 2023

Actions

History

#1

Updated by Robot Gitea about 1 year ago

  • Status changed from Nouveau to Solution proposée

Benjamin Dauvergne (bdauvergne) a ouvert une pull request sur Gitea concernant cette demande :

#2

Updated by Benjamin Dauvergne about 1 year ago

  • Description updated (diff)
#3

Updated by Benjamin Dauvergne about 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)
#4

Updated by Benjamin Dauvergne about 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).

#5

Updated by Benjamin Dauvergne about 1 year ago

#6

Updated by Benjamin Dauvergne about 1 year ago

#7

Updated by Benjamin Dauvergne about 1 year ago

#8

Updated by Benjamin Dauvergne about 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.

#9

Updated by Benjamin Dauvergne about 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.

#10

Updated by Benjamin Dauvergne about 1 year ago

#11

Updated by Benjamin Dauvergne 12 months 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&timestamp=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

#12

Updated by Benjamin Dauvergne 12 months ago

#13

Updated by Benjamin Dauvergne 12 months ago

#14

Updated by Benjamin Dauvergne 12 months ago

#15

Updated by Benjamin Dauvergne 3 months ago

C'est rebasé.

Also available in: Atom PDF