Details
-
Improvement
-
Status: Resolved
-
Trivial
-
Resolution: Fixed
-
6.0.0
-
None
Description
//Test Publish and Subscribe //SUM(NOFOLD(s1 + s2), a) uses two threads - this test relies on this fact to work! INTEGER N2 := 1000; subDS := DATASET(N2, TRANSFORM({ integer a }, SELF.a := (INTEGER)myRedis.Subscribe('PubSubTest' + (STRING)COUNTER))); INTEGER pub2(STRING channel) := FUNCTION sl := SEQUENTIAL( Std.System.Debug.Sleep(2), myRedis.Publish(channel, '3')//This pub is the one read by the sub. ); value := myRedis.Publish(channel, '10000');//This pub isn't read by the sub, however the returned subscription count is present in the sum RETURN WHEN(value, sl, BEFORE); END; pubDS2 := DATASET(N2, TRANSFORM({ integer a }, SELF.a := pub2('PubSubTest' + (STRING)COUNTER))); OUTPUT(SUM(NOFOLD(subDS + pubDS2), a));
The following test occasionally becomes unsynchronized between the subscriptions and publishes as shown in the redis MONITOR output:
1446773145.007342 [0 127.0.0.1:42957] "AUTH" "foobared"
1446773145.007563 [0 127.0.0.1:42957] "SUBSCRIBE" "PubSubTest179"
1446773145.009523 [0 127.0.0.1:42779] "PUBLISH" "PubSubTest179" "3"
1446773145.009705 [0 127.0.0.1:42779] "PUBLISH" "PubSubTest179" "10000"
1446773145.010064 [0 127.0.0.1:42958] "AUTH" "foobared"
1446773145.010255 [0 127.0.0.1:42958] "SUBSCRIBE" "PubSubTest180"
1446773145.012000 [0 127.0.0.1:42779] "PUBLISH" "PubSubTest180" "3"
1446773145.012180 [0 127.0.0.1:42779] "PUBLISH" "PubSubTest180" "10000"
1446773145.016091 [0 127.0.0.1:42779] "PUBLISH" "PubSubTest181" "3"
1446773145.016143 [0 127.0.0.1:42959] "AUTH" "foobared"
1446773145.016313 [0 127.0.0.1:42779] "PUBLISH" "PubSubTest181" "10000"
1446773145.016360 [0 127.0.0.1:42959] "SUBSCRIBE" "PubSubTest181"
1446773145.018781 [0 127.0.0.1:42779] "PUBLISH" "PubSubTest182" "3"
1446773145.019018 [0 127.0.0.1:42779] "PUBLISH" "PubSubTest182" "10000"
1446773145.021332 [0 127.0.0.1:42779] "PUBLISH" "PubSubTest183" "3"
1446773145.021788 [0 127.0.0.1:42779] "PUBLISH" "PubSubTest183" "10000"
1446773145.024136 [0 127.0.0.1:42779] "PUBLISH" "PubSubTest184" "3"
1446773145.024309 [0 127.0.0.1:42779] "PUBLISH" "PubSubTest184" "10000"
1446773145.026661 [0 127.0.0.1:42779] "PUBLISH" "PubSubTest185" "3"
1446773145.026866 [0 127.0.0.1:42779] "PUBLISH" "PubSubTest185" "10000"
1446773145.029221 [0 127.0.0.1:42779] "PUBLISH" "PubSubTest186" "3"
1446773145.029374 [0 127.0.0.1:42779] "PUBLISH" "PubSubTest186" "10000"
1446773145.031828 [0 127.0.0.1:42779] "PUBLISH" "PubSubTest187" "3"
1446773145.032033 [0 127.0.0.1:42779] "PUBLISH" "PubSubTest187" "10000"
The culprit being PubSubTest181 where it subscribes after the publish rather than before. Increasing the sleep before the publish from 2ms -> 10ms should alleviate this though will now extend the total tests running time by 16s (when doing so for the other similar test also).
Attachments
Issue Links
- relates to
-
HPCC-14286 Redis Plugin - add stand-alone pub/sub functionality
-
- Resolved
-