Skip to content

Commit 8d5d14b

Browse files
committed
Merge branch 'master' into fixes/lrb/timestamp-encoding-gh-454
2 parents cabb373 + 14e2294 commit 8d5d14b

12 files changed

Lines changed: 127 additions & 32 deletions

File tree

.gitignore

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -14,4 +14,3 @@ riak.egg-info/
1414
.eggs/
1515
#*#
1616
*~
17-
*.ps1

README.md

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -178,6 +178,7 @@ Contributors
178178
* Mark Phillips
179179
* Mathias Meyer
180180
* Matt Heitzenroder
181+
* [Matt Lohier](https://github.com/aquam8)
181182
* Mikhail Sobolev
182183
* Reid Draper
183184
* Russell Brown

RELNOTES.md

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,11 @@
11
# Riak Python Client Release Notes
22

3+
## [2.5.0 Release](https://github.com/basho/riak-python-client/issues?q=milestone%3Ariak-python-client-2.5.0)
4+
5+
* [Socket Enhancements](https://github.com/basho/riak-python-client/pull/453) - Resolves [#399](https://github.com/basho/riak-python-client/issues/399)
6+
* [Add multi-put](https://github.com/basho/riak-python-client/pull/452)
7+
* [Add support for term-to-binary encoding](https://github.com/basho/riak-python-client/pull/448)
8+
39
## 2.4.2 Patch Release - 2016-02-20
410

511
* [Fix SSL host name](https://github.com/basho/riak-python-client/pull/436)

make.ps1

Lines changed: 20 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,20 @@
1+
Set-StrictMode -Version Latest
2+
$ErrorActionPreference = 'Stop'
3+
4+
$env:RIAK_TEST_HOST = 'riak-test'
5+
$env:RIAK_TEST_PROTOCOL = 'pbc'
6+
$env:RIAK_TEST_PB_PORT = 10017
7+
$env:RUN_DATATYPES = 1
8+
$env:RUN_INDEXES = 1
9+
$env:RUN_POOL = 1
10+
$env:RUN_YZ = 1
11+
12+
flake8 --exclude=riak/pb riak commands.py setup.py version.py
13+
if ($LastExitCode -ne 0) {
14+
throw 'flake8 failed!'
15+
}
16+
17+
python setup.py test
18+
if ($LastExitCode -ne 0) {
19+
throw 'python tests failed!'
20+
}

riak/client/transport.py

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
from contextlib import contextmanager
22
from riak.transports.pool import BadResource
3-
from riak.transports.tcp import is_retryable as is_pbc_retryable
3+
from riak.transports.tcp import is_retryable as is_tcp_retryable
44
from riak.transports.http import is_retryable as is_http_retryable
55
import threading
66
from six import PY2
@@ -162,7 +162,7 @@ def _is_retryable(error):
162162
:type error: Exception
163163
:rtype: boolean
164164
"""
165-
return is_pbc_retryable(error) or is_http_retryable(error)
165+
return is_tcp_retryable(error) or is_http_retryable(error)
166166

167167

168168
def retryable(fn, protocol=None):

riak/riak_error.py

Lines changed: 7 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -21,8 +21,12 @@ class RiakError(Exception):
2121
"""
2222
Base class for exceptions generated in the Riak API.
2323
"""
24-
def __init__(self, value):
25-
self.value = value
24+
def __init__(self, *args, **kwargs):
25+
super(RiakError, self).__init__(*args, **kwargs)
26+
if len(args) > 0:
27+
self.value = args[0]
28+
else:
29+
self.value = 'unknown'
2630

2731
def __str__(self):
2832
return repr(self.value)
@@ -34,5 +38,5 @@ class ConflictError(RiakError):
3438
:class:`~riak.riak_object.RiakObject` that has more than one
3539
sibling.
3640
"""
37-
def __init__(self, message="Object in conflict"):
41+
def __init__(self, message='Object in conflict'):
3842
super(ConflictError, self).__init__(message)

riak/tests/test_btypes.py

Lines changed: 12 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -151,13 +151,18 @@ def test_multiget_bucket_types(self):
151151
self.assertEqual(btype, mobj.bucket.bucket_type)
152152

153153
def test_write_once_bucket_type(self):
154-
btype = self.client.bucket_type('write_once')
155-
bucket = btype.bucket(self.bucket_name)
156-
157-
for i in range(100):
158-
obj = bucket.new(self.key_name + str(i))
159-
obj.data = {'id': i}
160-
obj.store()
154+
bt = 'write_once'
155+
skey = 'write_once-init'
156+
btype = self.client.bucket_type(bt)
157+
bucket = btype.bucket(bt)
158+
sobj = bucket.get(skey)
159+
if not sobj.exists:
160+
for i in range(100):
161+
o = bucket.new(self.key_name + str(i))
162+
o.data = {'id': i}
163+
o.store()
164+
o = bucket.new(skey, data={'id': skey})
165+
o.store()
161166

162167
mget = bucket.multiget([self.key_name + str(i) for i in range(100)])
163168
for mobj in mget:

riak/tests/test_client.py

Lines changed: 12 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -3,6 +3,7 @@
33
from six import PY2
44
from threading import Thread
55
from riak.riak_object import RiakObject
6+
from riak.transports.tcp import TcpTransport
67
from riak.tests import DUMMY_HTTP_PORT, DUMMY_PB_PORT, RUN_POOL
78
from riak.tests.base import IntegrationTestBase
89

@@ -13,6 +14,17 @@
1314

1415

1516
class ClientTests(IntegrationTestBase, unittest.TestCase):
17+
def test_can_set_tcp_keepalive(self):
18+
if self.protocol == 'pbc':
19+
topts = {'socket_keepalive': True}
20+
c = self.create_client(transport_options=topts)
21+
for i, r in enumerate(c._tcp_pool.resources):
22+
self.assertIsInstance(r, TcpTransport)
23+
self.assertTrue(r._socket_keepalive)
24+
c.close()
25+
else:
26+
pass
27+
1628
def test_uses_client_id_if_given(self):
1729
if self.protocol == 'pbc':
1830
zero_client_id = "\0\0\0\0"

riak/tests/test_kv.py

Lines changed: 18 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -180,17 +180,29 @@ def test_string_bucket_name(self):
180180
def test_generate_key(self):
181181
# Ensure that Riak generates a random key when
182182
# the key passed to bucket.new() is None.
183-
bucket = self.client.bucket('random_key_bucket')
184-
existing_keys = bucket.get_keys()
183+
bucket = self.client.bucket(self.bucket_name)
185184
o = bucket.new(None, data={})
186185
self.assertIsNone(o.key)
187186
o.store()
188187
self.assertIsNotNone(o.key)
189188
self.assertNotIn('/', o.key)
190-
self.assertNotIn(o.key, existing_keys)
191-
self.assertEqual(len(bucket.get_keys()), len(existing_keys) + 1)
189+
existing_keys = bucket.get_keys()
190+
self.assertEqual(len(existing_keys), 1)
191+
192+
def maybe_store_keys(self):
193+
skey = 'rkb-init'
194+
bucket = self.client.bucket('random_key_bucket')
195+
sobj = bucket.get(skey)
196+
if sobj.exists:
197+
return
198+
for key in range(1, 1000):
199+
o = bucket.new(None, data={})
200+
o.store()
201+
o = bucket.new(skey, data={})
202+
o.store()
192203

193204
def test_stream_keys(self):
205+
self.maybe_store_keys()
194206
bucket = self.client.bucket('random_key_bucket')
195207
regular_keys = bucket.get_keys()
196208
self.assertNotEqual(len(regular_keys), 0)
@@ -203,10 +215,8 @@ def test_stream_keys(self):
203215
self.assertEqual(sorted(regular_keys), sorted(streamed_keys))
204216

205217
def test_stream_keys_timeout(self):
218+
self.maybe_store_keys()
206219
bucket = self.client.bucket('random_key_bucket')
207-
for key in range(1, 1000):
208-
o = bucket.new(None, data={})
209-
o.store()
210220
streamed_keys = []
211221
with self.assertRaises(RiakError):
212222
for keylist in self.client.stream_keys(bucket, timeout=1):
@@ -216,6 +226,7 @@ def test_stream_keys_timeout(self):
216226
streamed_keys += keylist
217227

218228
def test_stream_keys_abort(self):
229+
self.maybe_store_keys()
219230
bucket = self.client.bucket('random_key_bucket')
220231
regular_keys = bucket.get_keys()
221232
self.assertNotEqual(len(regular_keys), 0)

riak/transports/tcp/__init__.py

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -42,7 +42,7 @@ def destroy_resource(self, tcp):
4242
def is_retryable(err):
4343
"""
4444
Determines if the given exception is something that is
45-
network/socket-related and should thus cause the PBC connection to
45+
network/socket-related and should thus cause the TCP connection to
4646
close and the operation retried on another node.
4747
4848
:rtype: boolean

0 commit comments

Comments
 (0)