diff --git a/memcached/internal/memcached.c b/memcached/internal/memcached.c index 3f760c7..f79fbd0 100644 --- a/memcached/internal/memcached.c +++ b/memcached/internal/memcached.c @@ -208,6 +208,9 @@ memcached_loop(struct memcached_connection *con) memcached_flush(con); fiber_reschedule(); batch_count = 0; + if (ibuf_used(con->in) > 0) { + goto next; + } continue; } memcached_flush(con); diff --git a/test/binary/binary-gh-73.result b/test/binary/binary-gh-73.result new file mode 100644 index 0000000..0b2c48f --- /dev/null +++ b/test/binary/binary-gh-73.result @@ -0,0 +1 @@ +test_val_20 diff --git a/test/binary/binary-gh-73.test.py b/test/binary/binary-gh-73.test.py new file mode 100644 index 0000000..948aa8d --- /dev/null +++ b/test/binary/binary-gh-73.test.py @@ -0,0 +1,28 @@ +import os +import sys +import inspect + +saved_path = sys.path[:] +sys.path.append(os.path.dirname(os.path.abspath(inspect.getsourcefile(lambda:0)))) + +from internal.memcached_connection import MemcachedBinaryConnection +from internal.memcached_connection import STATUS, COMMANDS + +mc = MemcachedBinaryConnection("127.0.0.1", iproto.py_con.port) + +batch_count = 20 # Default batch_count value used in memcached. + +# Put (batch_count + 1) keys at once, pay attention to "nosend" flag. +for i in range(1, batch_count + 1): + val = "test_val_%d" % i + key = "test_key_%d" % i + mc.setq(key, val, flags = 82, nosend=True) + +data = "".join(mc.commands) +mc.socket.sendall(data) + +# Get any key right after setting. +res = mc.get("test_key_20") +print(res[0]['val']) + +sys.path = saved_path diff --git a/test/binary/suite.ini b/test/binary/suite.ini index 4493693..3f94d51 100644 --- a/test/binary/suite.ini +++ b/test/binary/suite.ini @@ -2,4 +2,3 @@ core = tarantool script = binary.lua description = memcached binary tests -disabled = binary-boundary.test.py