What triggers the refire / draining of the HWM Swap? Is there a way to
poke it?
If I create a simple client that sends console input to a simple server,
and ctrl-c the server for a while, when it reconnects, it immediately
gets the first few messages from the HWM (although sometimes it gets one
less).
But the SWAP messages only seem to get transported as additional
messages are pushed into the queue.
Is there any way to modify this behavior, as I can see a situation where
a stall occurs;
+-------------- +------------+
--sockA-->| Processor A |--sockB-->| ProcessorB |->-[ destination ]
^ +-------------+ +------+-----+
| v
+<--------------------<sockC<--------<+
Data that needs reprocessing is reinjected to ProcA via SockC, otherwise
it is forwarded on to destination.
. External input via sockA has ended (e.g. end of file),
. ProcessorB has completed it's last block and queued it onto sockC,
. sockC was interrupted and HWM + Swap were used to buffer remaining
reprocess data,
. None of the data queued in the HWM needs reprocessing and so is
forwarded on to destination,
. Remaining messages in swap are never pushed to ProcA
Here's a short video demonstrating exactly what I mean... The swap
buffered messages remain in the queue until they are pushed into HWM by
sending a new message on the socket.
http://www.youtube.com/watch?v=bhAXzfngtAc
Server code:
import zmq
c = zmq.Context(1)
s = c.socket(zmq.PULL)
s.setsockopt(zmq.LINGER, 0)
s.setsockopt(zmq.IDENTITY, "test")
s.bind("tcp://127.0.0.1:9898")
while True:
print("Got %s" % s.recv())
Client code:
import zmq
c = zmq.Context(1)
s = c.socket(zmq.PUSH)
s.setsockopt(zmq.LINGER, 0)
s.setsockopt(zmq.HWM, 4)
s.setsockopt(zmq.SWAP, 4096)
s.connect("tcp://127.0.0.1:9898")
while True:
s.send(raw_input())
_______________________________________________
zeromq-dev mailing list
[email protected]
http://lists.zeromq.org/mailman/listinfo/zeromq-dev