Skip to content

Commit dc1fe12

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 00e5855 commit dc1fe12

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
@@ -93,28 +93,29 @@ class ZookeeperConfigManager extends BaseConfigManager {
9393
});
9494
}
9595

96-
_getConfigListener(updatedBucket = '') {
96+
_getConfigListener(bucket) {
9797
this.log.debug('ZookeeperConfigManager.emitter.getConfig', {
9898
event: 'getConfig',
99+
bucket,
100+
});
101+
this._updateLocalStore([bucket]);
102+
}
103+
104+
_listConfigsListener() {
105+
this.log.debug('ZookeeperConfigManager.emitter.listConfigs', {
106+
event: 'listConfigs',
99107
});
100108
this._listBucketsWithConfig((err, buckets) => {
101109
if (err) {
102-
this._emitter.emit('error', err, 'getConfigListener');
110+
this._emitter.emit('error', err, 'listConfigsListener');
103111
return undefined;
104112
}
105-
this.log.debug('bucket config to be updated in map', {
106-
bucket: updatedBucket,
107-
});
108113
const newBuckets = this._getNewBucketNodes(buckets);
109114
this.log.debug('new bucket configs to be added to map', {
110115
buckets: newBuckets,
111116
});
112-
const bucketsToMap = updatedBucket ? [updatedBucket, ...newBuckets] : newBuckets;
113-
this.log.debug('bucket configs to be added/updated to map', {
114-
buckets: bucketsToMap,
115-
});
116-
if (bucketsToMap.length > 0) {
117-
this._updateLocalStore(bucketsToMap);
117+
if (newBuckets.length > 0) {
118+
this._updateLocalStore(newBuckets);
118119
}
119120
return undefined;
120121
});
@@ -139,6 +140,7 @@ class ZookeeperConfigManager extends BaseConfigManager {
139140
.on('setConfig',
140141
(bucket, config) => this._setConfigListener(bucket, config))
141142
.on('getConfig', bucket => this._getConfigListener(bucket))
143+
.on('listConfigs', () => this._listConfigsListener())
142144
.on('removeConfig', bucket => this._removeConfigListener(bucket));
143145
}
144146

@@ -349,7 +351,7 @@ class ZookeeperConfigManager extends BaseConfigManager {
349351
event,
350352
});
351353
if (event.type === zookeeper.Event.NODE_CHILDREN_CHANGED) {
352-
this._emitter.emit('getConfig');
354+
this._emitter.emit('listConfigs');
353355
}
354356
}, (error, buckets) => {
355357
if (error) {

0 commit comments

Comments
 (0)