Skip to content

Commit 2c8c5dc

Browse files
authored
Merge pull request #1276 from MetPX/issue1267
Issue1267 queueName not working as expected because of upcoming feature
2 parents 7bea2c0 + b10f050 commit 2c8c5dc

File tree

7 files changed

+93
-23
lines changed

7 files changed

+93
-23
lines changed

docs/source/How2Guides/UPGRADING.rst

Lines changed: 5 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -52,7 +52,11 @@ is perhaps complex. This version will read and write both files,
5252
so as to preserve ability to downgrade. later version will drop
5353
support for qname files.
5454

55-
55+
*CHANGE*: in configuration files: *subtopic* must come after
56+
the relevant queue naming options (queueName, queueShare)
57+
in prior releases, the queue naming was a global setting.
58+
In a future version, one will be able to subscribe to multiple
59+
queues with a single subscriber.
5660

5761
3.0.54
5862
------

docs/source/Reference/sr3_options.7.rst

Lines changed: 25 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -1549,6 +1549,9 @@ Instances started on any node with access to the same shared file will use the
15491549
same queue. Some may want use the *queueName* option as a more explicit method
15501550
of sharing work across multiple nodes.
15511551

1552+
This *subtopic* option should appear after the queueName setting in files
1553+
for the topic bindings to apply to the given queue.
1554+
15521555

15531556
queueShare <str> ( default: ${USER}_${HOSTNAME}_${RAND8} )
15541557
----------------------------------------------------------
@@ -1567,6 +1570,9 @@ will result in a random 8 digit number being appended to the queue name.
15671570
All the instances within the configuration with access to the same state directory
15681571
will use the queue name thus defined.
15691572

1573+
This *subtopic* option should appear after the queueShare setting in files
1574+
for the topic bindings to apply to the given queue.
1575+
15701576

15711577
randomize <flag>
15721578
----------------
@@ -1973,8 +1979,8 @@ message flows.
19731979
subtopic <amqp pattern> (default: #)
19741980
------------------------------------
19751981

1976-
Within an exchange's postings, the subtopic setting narrows the product selection.
1977-
To give a correct value to the subtopic,
1982+
Within an exchange's postings, the subtopic setting narrows the product selection,
1983+
for objects to place in the currently selected queue. To give a correct value to the subtopic,
19781984
one has the choice of filtering using **subtopic** with only AMQP's limited wildcarding and
19791985
length limited to 255 encoded bytes, or the more powerful regular expression
19801986
based **accept/reject** mechanisms described below. The difference being that the
@@ -1983,18 +1989,18 @@ to the client at all. The **accept/reject** patterns apply to messages sent by
19831989
broker to the subscriber. In other words, **accept/reject** are client side filters,
19841990
whereas **subtopic** is server side filtering.
19851991

1986-
It is best practice to use server side filtering to reduce the number of notification messages sent
1987-
to the client to a small superset of what is relevant, and perform only a fine-tuning with the
1988-
client side mechanisms, saving bandwidth and processing for all.
1992+
Use server side filtering to reduce the number of notification messages sent
1993+
to the client to a small superset of what is relevant, and refine further with the
1994+
client side accept/reject, saving bandwidth and processing for all.
19891995

1990-
topicPrefix is primarily of interest during protocol version transitions,
1991-
where one wishes to specify a non-default protocol version of messages to
1992-
subscribe to.
1996+
Often, the user specifies one exchange, and several subtopic options.
1997+
**Subtopic** is what is normally used to indicate messages of interest
1998+
for a given queue. If needed, queueName, and/or queueShare need to be
1999+
earlier in the configuration file for the subtopic to apply to the selected queue.
19932000

1994-
Usually, the user specifies one exchange, and several subtopic options.
1995-
**Subtopic** is what is normally used to indicate messages of interest.
19962001
To use the subtopic to filter the products, match the subtopic string with
1997-
the relative path of the product.
2002+
the relative path of the product (non Sarracenia pumps may have different
2003+
topic hierarchy conventions.)
19982004

19992005
For example, consuming from DD, to give a correct value to subtopic, one can
20002006
browse the our website **http://dd.weather.gc.ca** and write down all directories
@@ -2084,7 +2090,6 @@ Sarracenia has a convention for how topics for products should be organized. The
20842090
a topicPrefix, followed by subtopics derived from the *relPath* field of the message.
20852091
Some networks may choose to use different topic conventions, external to sarracenia.
20862092

2087-
20882093
timeout <interval> (default: 0)
20892094
-------------------------------
20902095

@@ -2134,6 +2139,14 @@ prepended to the sub-topic to form a complete topic hierarchy.
21342139
This option applies to subscription bindings.
21352140
Denotes the version of messages received in the sub-topics. (v03 refers to `<sr3_post.7.html>`_)
21362141

2142+
topicPrefix is primarily of interest during protocol version transitions,
2143+
where one wishes to specify a non-default protocol version of messages to
2144+
subscribe to.
2145+
2146+
For example, Sr3 expects v03 messages by default, but there are
2147+
plenty of sources that offer the old version (requiring a topicPrefix of *v02.post*)
2148+
to specify the old version of messages.
2149+
21372150
users <flag> (default: false)
21382151
-----------------------------
21392152

docs/source/fr/CommentFaire/MiseANiveau.rst

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -51,6 +51,10 @@ est peut-être complexe. Cette version lira et écrira les deux fichiers,
5151
afin de préserver la possibilité de rétrogradation. La version ultérieure abandonnera
5252
la prise en charge des fichiers qname.
5353
54+
*CHANGEMENT* : dans les fichiers de configuration : *subtopic* doit venir après
55+
la spécification de nom de file d'attente pertinentes (queueName, queueShare.)
56+
Dans les versions précédentes, la dénomination de la file d'attente était un paramètre global.
57+
Dans une future version, on pourra s'abonner à plusieurs files d'attente avec un seul abonné.
5458

5559
3.0.54
5660
------

docs/source/fr/Reference/sr3_options.7.rst

Lines changed: 21 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -1539,6 +1539,8 @@ Les instances démarrées sur n’importe quel nœud ayant accès au même fichi
15391539
même fil d’attente. Certains voudront peut-être utiliser l’option *queueName* comme méthode plus explicite
15401540
de partager le travail sur plusieurs nœuds. Il est pourtant recommandé d´utiliser queueShare a cette fin.
15411541

1542+
l´option *subtopic* devrait apparaître après le paramètre queueName dans les fichiers
1543+
pour que les liaisons de sujet s'appliquent à la file d'attente spécifié.
15421544

15431545

15441546
queueShare <str> (default: ${USER}_${HOSTNAME}_${RAND8} )
@@ -1558,6 +1560,8 @@ Ce entraînera l'ajout d'un nombre aléatoire à 8 chiffres au nom de la file d'
15581560
Toutes les instances de la configuration ayant accès au même répertoire d'état
15591561
utilisera le nom de file d'attente ainsi défini.
15601562

1563+
l´option *subtopic* devrait apparaître après le paramètre queueShare dans les fichiers
1564+
pour que les liaisons de sujet s'appliquent à la file d'attente spécifié.
15611565

15621566
randomize <flag>
15631567
----------------
@@ -1965,7 +1969,8 @@ origine. À utiliser uniquement avec des flux de données fiables et organisés
19651969
subtopic <modèle amqp> (défaut: #)
19661970
-----------------------------------
19671971

1968-
Dans les publications d’un échange, le paramètre de subtopic restreint la sélection du produit.
1972+
Dans les publications d’un échange, le paramètre de subtopic sert à préciser des messages
1973+
à placer dans la file d'attente actuellement sélectionnée.
19691974
Pour donner la bonne valeur au subtopic, on a le choix de filtrer en utilisant **subtopic** seulement avec le
19701975
wildcarding limité d’AMQP et une longueur limitée à 255 octets encodés, ou de manière plus puissante, les expressions régulière
19711976
basés sur les mécanismes **accept/reject** décrits ci-dessous. La différence est que le
@@ -1978,12 +1983,17 @@ Il est recommandé d’utiliser le filtrage côté serveur pour réduire le nomb
19781983
au client et envoyer seulement ce qui est pertinent, et seulement régler les mécanismes côté client,
19791984
économisant du bandwidth et du traitement pour tous.
19801985

1981-
topicPrefix est principalement utilisé lors des transitions de version de protocole,
1982-
où l’on souhaite spécifier une version de protocole non-commune des messages d'annonce auquel s’abonner.
1983-
1984-
Normalement, l’utilisateur spécifie un échange et plusieurs options de subtopic. **subtopic** est ce qui est
19851986
normalement utilisé pour indiquer les messages d'annonce d'intérêt. Pour utiliser **subtopic** pour filtrer les produits,
1987+
1988+
Souvent, l'utilisateur spécifie un échange et plusieurs options de sous-thèmes.
1989+
Le **subtopic** est ce qui est normalement utilisé pour indiquer les messages d'intérêt
1990+
pour une file d'attente donnée. Si nécessaire, **queueName** et/ou **queueShare**
1991+
doivent apparaître plus tôt dans le fichier de configuration pour que le sous-thème
1992+
s'applique à la file d'attente sélectionnée.
1993+
19861994
il faut que la chaîne de caractère subtopic corresponde au chemin relatif du produit.
1995+
(les pompes non Sarracenia peuvent avoir d´autres conventions de hiérarchie des sujets.)
1996+
19871997

19881998
Par exemple, en consommant à partir de DD, pour donner la bonne valeur au subtopic, il est possible de
19891999
parcourir le site Web **http://dd.weather.gc.ca** et noter tous les répertoires
@@ -2109,6 +2119,12 @@ rajouté au subtopic pour former une hiérarchie complète de thèmes (topics).
21092119
Cette option s’applique aux liaisons d’abonnement.
21102120
Indique la version des messages d'annonce reçus dans les subtopics. (V03 fait référence à `<sr3_post.7.html>`_)
21112121

2122+
topicPrefix sert principalement lors des transitions de format de messages.
2123+
Le topicPrefix identifie dans quel version de format les messages sous le thème
2124+
sont créés. Sr3 s´attend a des messages v03 par défault, mais il y plein
2125+
de sources qui offrent l´ancienne version (nécessitant une topicPrefix de *v02.post*)
2126+
pour spécifier l´ancienned version de messages.
2127+
21122128
topicCopy (défaut: False)
21132129
-------------------------
21142130

sarracenia/config/__init__.py

Lines changed: 9 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1536,6 +1536,8 @@ def parse_file(self, cfg, component=None):
15361536
saved_lineno=0
15371537
self.files.append(cfgfilepath)
15381538

1539+
self.subtopic_seen=False
1540+
15391541
for l in open(cfgfilepath, "r").readlines():
15401542
lineno+=1
15411543
if self.lineno > 0:
@@ -1646,6 +1648,7 @@ def parse_line(self, component, cfg, cfname, lineno, l ):
16461648
logger.error( f"{','.join(self.files)}:{self.lineno} file {v} failed to parse: {ex}" )
16471649
logger.debug('Exception details: ', exc_info=True)
16481650
elif k in ['subtopic']:
1651+
self.subtopic_seen=True
16491652
self._parse_binding(v)
16501653
elif k in ['topicPrefix']:
16511654
if '/' in v :
@@ -1753,6 +1756,12 @@ def parse_line(self, component, cfg, cfname, lineno, l ):
17531756
logger.error( f'{",".join(self.files)}:{lineno} invalid entry {i} in {k}. Must be one of: {set_choices[k]}' )
17541757

17551758
elif k in str_options:
1759+
# queueName warning... is for something that is not an error...
1760+
# probably need to remove this warning later... because people could use default queue with subtopic and
1761+
# specify a second queue with different bindings... so this warning could be complaining about something
1762+
# that is correct. but in every current case, the warning will be helpful.
1763+
if ( k == 'queueName' ) and self.subtopic_seen:
1764+
logger.warning( f"queueName usually should be before subtopic in configs: subtopic to default queue" )
17561765
if ( k == 'directory' ) and not self.download:
17571766
logger.info( f"{','.join(self.files)}:{lineno} if download is false, directory has no effect" )
17581767

sarracenia/config/subscription.py

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -59,12 +59,12 @@ def add(self, new_subscription):
5959
for s in self:
6060
if ( s['broker'] == new_subscription['broker'] ) and \
6161
( s['queue']['name'] == new_subscription['queue']['name'] ):
62+
newb = new_subscription['bindings'][0]
6263
for b in s['bindings']:
63-
newb = new_subscription['bindings'][0]
64-
if (b['sub'] != newb['sub']) or (b['prefix'] != newb['prefix']):
65-
s['bindings'].append( { 'exchange': newb['exchange'], \
66-
'prefix':newb['prefix'], 'sub':newb['sub'] } )
64+
if newb == b:
6765
found=True
66+
if not found:
67+
s['bindings'].append( newb )
6868

6969
if not found:
7070
self.append(new_subscription)

sarracenia/sr.py

Lines changed: 25 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -2775,6 +2775,24 @@ def convert1(self,cfg):
27752775
v3_cfg.write('#v2 sftp handling is always absolute, sr3 is relative. might need this, remove when all sr3:\n')
27762776
v3_cfg.write('#flowcb accept.sftp_absolute\n')
27772777

2778+
queueName=None
2779+
2780+
#1st prep pass (for cases when re-ordering needed.)
2781+
with open(v2_config_path, 'r') as v2_cfg:
2782+
for line in v2_cfg.readlines():
2783+
if len(line.strip()) < 1:
2784+
continue
2785+
if line[0].startswith('#'):
2786+
continue
2787+
line = line.strip().split()
2788+
k = line[0]
2789+
if k in synonyms:
2790+
k = synonyms[k]
2791+
if k in [ 'queueName' ]:
2792+
queueName=line[1]
2793+
2794+
#2nd re-write pass.
2795+
subtopicFound=False
27782796
with open(v2_config_path, 'r') as v2_cfg:
27792797
for line in v2_cfg.readlines():
27802798
if len(line.strip()) < 1:
@@ -2818,7 +2836,13 @@ def convert1(self,cfg):
28182836
else:
28192837
logger.error( f"unknown checksum spec: {line}")
28202838
continue
2821-
2839+
elif k == 'queueName':
2840+
if subtopicFound or not queueName:
2841+
continue
2842+
elif k == 'subtopic':
2843+
if queueName:
2844+
v3_cfg.write(f'queueName {queueName}\n')
2845+
queueName=None
28222846
if (k == 'accept') :
28232847
if line[1] == '.*':
28242848
accept_all_seen=True

0 commit comments

Comments
 (0)