Skip to content

Commit 62f6510

Browse files
BB-727: Separate list and get configs
The getConfig should not trigger a listing with watcher as it duplicates an already existing watcher. This can have an exponential effect of adding even more watchers when events are triggered. A clear separation prevent this effect: - only NODE_CHILDREN_CHANGED should trigger a new listing to reapply a watcher - getConfig should be contained to a single bucket (discovered by listing, or from watcher NODE_DATA_CHANGED)
1 parent 0ec0ed5 commit 62f6510

File tree

1 file changed

+14
-12
lines changed

1 file changed

+14
-12
lines changed

extensions/notification/configManager/ZookeeperConfigManager.js

Lines changed: 14 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -94,28 +94,29 @@ class ZookeeperConfigManager extends BaseConfigManager {
9494
});
9595
}
9696

97-
_getConfigListener(updatedBucket = '') {
97+
_getConfigListener(bucket) {
9898
this.log.debug('ZookeeperConfigManager.emitter.getConfig', {
9999
event: 'getConfig',
100+
bucket,
101+
});
102+
this._updateLocalStore([bucket]);
103+
}
104+
105+
_listConfigsListener() {
106+
this.log.debug('ZookeeperConfigManager.emitter.listConfigs', {
107+
event: 'listConfigs',
100108
});
101109
this._listBucketsWithConfig((err, buckets) => {
102110
if (err) {
103-
this._emitter.emit('error', err, 'getConfigListener');
111+
this._emitter.emit('error', err, 'listConfigsListener');
104112
return undefined;
105113
}
106-
this.log.debug('bucket config to be updated in map', {
107-
bucket: updatedBucket,
108-
});
109114
const newBuckets = this._getNewBucketNodes(buckets);
110115
this.log.debug('new bucket configs to be added to map', {
111116
buckets: newBuckets,
112117
});
113-
const bucketsToMap = updatedBucket ? [updatedBucket, ...newBuckets] : newBuckets;
114-
this.log.debug('bucket configs to be added/updated to map', {
115-
buckets: bucketsToMap,
116-
});
117-
if (bucketsToMap.length > 0) {
118-
this._updateLocalStore(bucketsToMap);
118+
if (newBuckets.length > 0) {
119+
this._updateLocalStore(newBuckets);
119120
}
120121
return undefined;
121122
});
@@ -140,6 +141,7 @@ class ZookeeperConfigManager extends BaseConfigManager {
140141
.on('setConfig',
141142
(bucket, config) => this._setConfigListener(bucket, config))
142143
.on('getConfig', bucket => this._getConfigListener(bucket))
144+
.on('listConfigs', () => this._listConfigsListener())
143145
.on('removeConfig', bucket => this._removeConfigListener(bucket));
144146
}
145147

@@ -350,7 +352,7 @@ class ZookeeperConfigManager extends BaseConfigManager {
350352
event,
351353
});
352354
if (event.type === zookeeper.Event.NODE_CHILDREN_CHANGED) {
353-
this._emitter.emit('getConfig');
355+
this._emitter.emit('listConfigs');
354356
}
355357
}, (error, buckets) => {
356358
if (error) {

0 commit comments

Comments
 (0)