Skip to content

Commit 3f173ab

Browse files
authored
Merge pull request #159 from launchdarkly/eb/ch31228/stream-delete-error
fix error on out-of-order delete
2 parents 6b44b00 + f101f2d commit 3f173ab

File tree

3 files changed

+1056
-1020
lines changed

3 files changed

+1056
-1020
lines changed

packages/ldclient-js-common/src/__tests__/LDClient-streaming-test.js

+36
Original file line numberDiff line numberDiff line change
@@ -564,6 +564,42 @@ describe('LDClient', () => {
564564
});
565565
});
566566

567+
it('handles delete message for unknown flag by storing placeholder', done => {
568+
const client = platform.testing.makeClient(envName, user, { bootstrap: {} });
569+
570+
client.on('ready', () => {
571+
client.on('change', () => {});
572+
573+
streamEvents().delete({
574+
data: '{"key":"mystery","version":3}',
575+
});
576+
577+
// The following patch message should be ignored because it has a lower version than the deleted placeholder
578+
streamEvents().patch({
579+
data: '{"key":"mystery","value":"yes","version":2}',
580+
});
581+
582+
expect(client.variation('mystery')).toBeUndefined();
583+
done();
584+
});
585+
});
586+
587+
it('ignores delete message with lower version', done => {
588+
const bootstrapData = { flag: 'yes', $flagsState: { flag: { version: 3 } } };
589+
const client = platform.testing.makeClient(envName, user, { bootstrap: bootstrapData });
590+
591+
client.on('ready', () => {
592+
client.on('change', () => {});
593+
594+
streamEvents().delete({
595+
data: '{"key":"flag","version":2}',
596+
});
597+
598+
expect(client.variation('flag')).toEqual('yes');
599+
done();
600+
});
601+
});
602+
567603
it('fires global change event when flag is deleted', done => {
568604
const client = platform.testing.makeClient(envName, user, { bootstrap: { 'enable-foo': true } });
569605

packages/ldclient-js-common/src/messages.js

+1-1
Original file line numberDiff line numberDiff line change
@@ -107,7 +107,7 @@ export const debugStreamDelete = function(key) {
107107
return 'received streaming deletion for flag "' + key + '"';
108108
};
109109

110-
export const debugStreamingDeleteIgnored = function(key) {
110+
export const debugStreamDeleteIgnored = function(key) {
111111
return 'received streaming deletion for flag "' + key + '" but ignored due to version check';
112112
};
113113

0 commit comments

Comments
 (0)