Persistance plus efficace de Queue
A la manière de ce qui a été fait dans UserAgent, il est proposé de rendre la persistance de Queue plus modulaire en séparant les états suivants :
- l'état de l'agent, contenant en particulier les requêtes de réception
- le compteur d'arrivée
- les contextes de délivrance de message (id de USerAgent, id de client, message)
La persistance est plus efficace pour les raisons suivantes :
- les états sont sauvés de manière modulaire (3 états) et non de manière globale à l'agent (1 seul état)
- la table des contextes de délivrance remplace deux tables persistantes (double stockage des identifiants de messages)
- les contextes de message transients ne sont pas sauvés
Deux classes sont définies :
- QueueArrivalState : gestion du compteur d'arrivée des message
- QueueDeliveryTable : gestion des contextes de délivrance
Une question se pose au sujet de l'intérêt du stockage des contextes de délivrance, en particulier vers un UserAgent local. En effet, il semble que ces contextes soient ignorés au redémarrage comme si le client avait fait un "deny" (voir code de la classe Queue dans la méthode 'initialize'). Je me demande donc à quoi sert la persistance de ces contextes quand le UserAgent est local.
Pourquoi est-ce que les contextes de délivrance vers des UserAgents distants (autres serveurs Joram) ne sont pas ignorés aussi ? Quelle est la différence concernant la délivrance des messages ?
Par ailleurs, les bugs suivants pourraient exister (à confirmer) :
- quand un acquittement de message transient est perdu, est-ce que le contexte de délivrance reste indéfiniment dans la table ? A noter qu'un contexte de délivrance de message transient peut être persisté par effet de bord.
- un client local en HA (ou en reconnexion automatique) peut acquitter un message persistant dont le contexte de délivrance n'existe plus. Dans ce cas, la destruction du message n'est pas faite et un WARN est écrit dans le log. Ne devrait-on pas prévoir ce cas en détruisant le message à partir de son identifiant ?
[JORAM-170] created at 2013-12-05 11:08:13 by feliot, version JORAM_5_9_1