Hi Jon,
Yes, your jdm-msglen-fix tree seems to resolve the issue for me;
however, I'm only currently using (and likewise only testing) .store()
operations with the python client. With the un-patched version, the
issue occurred for me every time I tried to store data -- of course, my
data is presumably all larger than a single packet.
Thanks,
Bob
On 1/27/2011 11:08 AM, Jon Meredith wrote:
Hi Bob/Nico/Gary
Thanks for submitting the pull request. I took a look at the patch
and would prefer to keep the packet length check in, but just move it
to the right place.
I'm unable to reproduce the issue locally, but wondered if you'd be
able to try out the
https://github.com/basho/riak-python-client/tree/jdm-msglen-fix branch
and double-check it really resolves your issues.
Cheers, Jon.
On Sat, Jan 22, 2011 at 6:21 PM, Bob Feldbauer <[email protected]
<mailto:[email protected]>> wrote:
Thanks, Nico. I forked riak-python-client and created a pull
request for the patch you described (removing the three lines for
the length check in recv _pkt).
- Bob Feldbauer
On 1/22/2011 3:23 AM, Nico Meyer wrote:
Hi
let me clarify the situation somewhat. The problem is not
intermittent
in the sense that it occurs randomly. It depends mainly on the
size of
the answer that riak sends. If the answer is bigger than the
network MTU
the error will occur most of the time. If its smaller it
occurs almost
never. The recv operation on the socket will usually return
after every
received network packet, which means if you call recv fast
enough it
will never return more bytes than the MTU of the conection.
For get operations and put operations where return_body is
True (the
default) this obviously depends on the size of the object one is
requesting/putting. So it seems to be itermittent if most
objects are
smaller than about 1400 bytes (most LANs have an MTU of 1492),
but some
are larger or multiple versions are returned for some of them.
The fix I proposed in the bug report (removing the three line)
is the
correct one. The while loop only terminates if the desired
number of
bytes have been read or a socket error like a timeout or a closed
connection produces an exception.
BTW, I have also observed short write errors when storing
large objects
(larger than the default TCP send buffer I would guess, which
is 16k at
least on Linux). The fix would be to also loop in snd_pkt()
until all
data has been sent.
Cheers,
Nico
Am Freitag, den 21.01.2011, 14:43 -0800 schrieb Bob Feldbauer:
Interesting. I was actually seeing this all the time, not just
intermittently. Removing the lines as described in bug #695
(https://issues.basho.com/show_bug.cgi?id=695) did resolve
my issue.
Thanks for the help, Gary.
- Bob
On 1/21/2011 2:28 PM, Gary Flake wrote:
I had the same problem the other day and someone
answered with the
fix. So search the archives on my name to find the
precise answer.
But the fix was to remove the three lines in pbc.py
where the check
and error message occur. Basically this is a known
issue and the
check should not be there.
-- GWF
(sent from my cell phone.)
On Jan 21, 2011, at 1:48 PM, Bob
Feldbauer<[email protected]
<mailto:[email protected]>> wrote:
Thanks for the suggestion, Jon. This is occurring
every time I try to do .store() via protobuf
transport in the Python client (so yes, it is
reproducible); however, there is no output in logs
or riak console.
- Bob
On 1/21/2011 1:02 PM, Jon Meredith wrote:
Hi Bob,
That sounds like the connection got closed as
the client was readying.
Have you checked through the server logs to
verify that no processes died or no other
nodes went down? Or if it's reproducible you
should be able to start the server with 'riak
console' and see what gets printed.
Cheers, Jon.
Basho Technologies
On Fri, Jan 21, 2011 at 11:36 AM, Bob
Feldbauer<[email protected]
<mailto:[email protected]><mailto:[email protected]
<mailto:[email protected]>>> wrote:
I'm using the riak-python-client with Riak
0.14. If I use HTTP
instead of PBC, my code works fine;
however, with PBC I get a
"socket returned short read" error. Any
help would be appreciated!
Code as follows (for debugging, I added
.is_alive() which returns
as expected, prior to the error being
displayed):
client =
riak.RiakClient(host='servername', port=8087,
transport_class=riak.RiakPbcTransport)
riakBucket = client.bucket('bucketname')
print client.is_alive()
... [code to setup the key/data] ...
doc = riakBucket.new(key, data=result)
doc.store()
And the full error shown:
Traceback (most recent call last):
File "riak_import-pb.py", line 23, in<module>
doc.store()
File
"/usr/local/lib/python2.6/dist-packages/riak/riak_object.py",
line
269, in store
Result = t.put(self, w, dw, return_body)
File
"/usr/local/lib/python2.6/dist-packages/riak/transports/pbc.py",
line 190, in put
msg_code, resp = self.recv_msg()
File
"/usr/local/lib/python2.6/dist-packages/riak/transports/pbc.py",
line 349, in recv_msg
self.recv_pkt()
File
"/usr/local/lib/python2.6/dist-packages/riak/transports/pbc.py",
line 399, in recv_pkt
format(len(recv_buf), want_len))
riak.RiakError: 'Socket returned short
read 1444 - expected 8192'
- Bob Feldbauer
_______________________________________________
riak-users mailing list
[email protected]
<mailto:[email protected]><mailto:[email protected]
<mailto:[email protected]>>
http://lists.basho.com/mailman/listinfo/riak-users_lists.basho.com
_______________________________________________
riak-users mailing list
[email protected]
<mailto:[email protected]>
http://lists.basho.com/mailman/listinfo/riak-users_lists.basho.com
_______________________________________________
riak-users mailing list
[email protected] <mailto:[email protected]>
http://lists.basho.com/mailman/listinfo/riak-users_lists.basho.com
_______________________________________________
riak-users mailing list
[email protected] <mailto:[email protected]>
http://lists.basho.com/mailman/listinfo/riak-users_lists.basho.com
_______________________________________________
riak-users mailing list
[email protected]
http://lists.basho.com/mailman/listinfo/riak-users_lists.basho.com