Projet

Général

Profil

Development #76423

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

Ajouté par Benjamin Dauvergne il y a environ un an. Mis à jour il y a 4 mois.

Statut:
Solution proposée
Priorité:
Normal
Assigné à:
Catégorie:
-
Version cible:
-
Début:
08 avril 2023
Echéance:
% réalisé:

0%

Temps estimé:
Patch proposed:
Non
Planning:
Non

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.


Demandes liées

Lié à Combo - Development #76434: utiliser hobo.multitenant.spoolerSolution proposée09 avril 2023

Actions
Lié à Passerelle - Development #76430: utiliser hobo.multitenant.spoolerSolution proposée08 avril 2023

Actions
Lié à Chrono - Development #76419: utiliser hobo.multitenant.spoolerSolution proposée08 avril 2023

Actions
Lié à Authentic 2 - Development #76542: utiliser hobo.multitenant.spoolerSolution proposée12 avril 2023

Actions
Lié à Fargo - Development #76692: utiliser hobo.multitenant.spoolerSolution proposée17 avril 2023

Actions
Lié à Welco - Development #76693: utiliser hobo.multitenant.spoolerSolution validée17 avril 2023

Actions
Lié à Lingo - Development #76747: utiliser hobo.multitenant.spoolerSolution proposée18 avril 2023

Actions

Historique

#1

Mis à jour par Robot Gitea il y a environ un an

  • Statut changé de Nouveau à Solution proposée

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

#2

Mis à jour par Benjamin Dauvergne il y a environ un an

  • Description mis à jour (diff)
#3

Mis à jour par Benjamin Dauvergne il y a environ un an

  • Sujet changé de uwsgidecorators: corriger le passage des paramètres au spooler à uwsgidecorators: corriger le passage des paramètres au spooler, et ne faire un spooler universel
  • Description mis à jour (diff)
#4

Mis à jour par Benjamin Dauvergne il y a environ un an

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

Mis à jour par Benjamin Dauvergne il y a environ un an

#6

Mis à jour par Benjamin Dauvergne il y a environ un an

#7

Mis à jour par Benjamin Dauvergne il y a environ un an

#8

Mis à jour par Benjamin Dauvergne il y a environ un an

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

Mis à jour par Benjamin Dauvergne il y a environ un an

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

Mis à jour par Benjamin Dauvergne il y a environ un an

#11

Mis à jour par Benjamin Dauvergne il y a environ un an

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

Mis à jour par Benjamin Dauvergne il y a environ un an

#13

Mis à jour par Benjamin Dauvergne il y a environ un an

#14

Mis à jour par Benjamin Dauvergne il y a environ un an

#15

Mis à jour par Benjamin Dauvergne il y a 4 mois

C'est rebasé.

Formats disponibles : Atom PDF