Thanks to visit codestin.com
Credit goes to github.com

Skip to content

Commit d8c8e98

Browse files
authored
Merge pull request rethinkdb#134 from alexa-infra/fix-write-hook
Fix write-hook compatiblity for 2.3.6 (import/export)
2 parents a3aa88e + 5056bce commit d8c8e98

File tree

3 files changed

+31
-18
lines changed

3 files changed

+31
-18
lines changed

rethinkdb/_export.py

Lines changed: 9 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -234,6 +234,8 @@ def export_table(db, table, directory, options, error_queue, progress_info, sind
234234

235235
writer = None
236236

237+
has_write_hooks = utils_common.check_minimum_version(options, '2.3.7', False)
238+
237239
try:
238240
# -- get table info
239241

@@ -248,13 +250,14 @@ def export_table(db, table, directory, options, error_queue, progress_info, sind
248250

249251
sindex_counter.value += len(table_info["indexes"])
250252

251-
table_info['write_hook'] = options.retryQuery(
252-
'table write hook data %s.%s' % (db, table),
253-
query.db(db).table(table).get_write_hook(),
254-
run_options={'binary_format': 'raw'})
253+
if has_write_hooks:
254+
table_info['write_hook'] = options.retryQuery(
255+
'table write hook data %s.%s' % (db, table),
256+
query.db(db).table(table).get_write_hook(),
257+
run_options={'binary_format': 'raw'})
255258

256-
if table_info['write_hook'] is not None:
257-
hook_counter.value += 1
259+
if table_info['write_hook'] is not None:
260+
hook_counter.value += 1
258261

259262
with open(os.path.join(directory, db, table + '.info'), 'w') as info_file:
260263
info_file.write(json.dumps(table_info) + "\n")

rethinkdb/_import.py

Lines changed: 17 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -301,13 +301,13 @@ def restore_indexes(self, warning_queue):
301301
exception_type, exception_class, trcback = sys.exc_info()
302302
warning_queue.put((exception_type, exception_class, traceback.extract_tb(trcback), self._source.name))
303303

304-
self.query_runner(
305-
"Write hook from: %s.%s" %
306-
(self.db, self.table), query.db(
307-
self.db).table(
308-
self.table).get_write_hook())
309-
try:
310-
if self.write_hook:
304+
if self.write_hook:
305+
self.query_runner(
306+
"Write hook from: %s.%s" %
307+
(self.db, self.table), query.db(
308+
self.db).table(
309+
self.table).get_write_hook())
310+
try:
311311
self.query_runner(
312312
"drop hook: %s.%s" % (self.db, self.table),
313313
query.db(self.db).table(self.table).set_write_hook(None)
@@ -316,9 +316,9 @@ def restore_indexes(self, warning_queue):
316316
"create hook: %s.%s:%s" % (self.db, self.table, self.write_hook),
317317
query.db(self.db).table(self.table).set_write_hook(self.write_hook["function"])
318318
)
319-
except RuntimeError:
320-
exception_type, exception_class, trcback = sys.exc_info()
321-
warning_queue.put((exception_type, exception_class, traceback.extract_tb(trcback), self._source.name))
319+
except RuntimeError:
320+
exception_type, exception_class, trcback = sys.exc_info()
321+
warning_queue.put((exception_type, exception_class, traceback.extract_tb(trcback), self._source.name))
322322

323323
def batches(self, batch_size=None, warning_queue=None):
324324

@@ -1339,6 +1339,7 @@ def parse_sources(options, files_ignored=None):
13391339
def parse_info_file(path):
13401340
primary_key = None
13411341
indexes = []
1342+
write_hook = None
13421343
with open(path, 'r') as info_file:
13431344
metadata = json.load(info_file)
13441345
if "primary_key" in metadata:
@@ -1349,6 +1350,8 @@ def parse_info_file(path):
13491350
write_hook = metadata["write_hook"]
13501351
return primary_key, indexes, write_hook
13511352

1353+
has_write_hooks = utils_common.check_minimum_version(options, '2.3.7', False)
1354+
13521355
sources = set()
13531356
if files_ignored is None:
13541357
files_ignored = []
@@ -1382,6 +1385,8 @@ def parse_info_file(path):
13821385
indexes = info_indexes
13831386
if write_hook is None:
13841387
write_hook = info_write_hook
1388+
if write_hook and not has_write_hooks:
1389+
raise Exception('this RDB version doesn\'t support write-hooks')
13851390

13861391
sources.add(
13871392
table_type(
@@ -1446,6 +1451,8 @@ def parse_info_file(path):
14461451
files_ignored.append(os.path.join(root, filename))
14471452
else:
14481453
primary_key, indexes, write_hook = parse_info_file(info_path)
1454+
if write_hook and not has_write_hooks:
1455+
raise Exception('RDB versions below doesn\'t support write-hooks')
14491456

14501457
table_type = None
14511458
if ext == ".json":

rethinkdb/utils_common.py

Lines changed: 5 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -124,7 +124,7 @@ def print_progress(ratio, indent=0, read=None, write=None):
124124
sys.stdout.flush()
125125

126126

127-
def check_minimum_version(options, minimum_version='1.6'):
127+
def check_minimum_version(options, minimum_version='1.6', raise_exception=True):
128128
minimum_version = distutils.version.LooseVersion(minimum_version)
129129
version_string = options.retryQuery('get server version', query.db(
130130
'rethinkdb').table('server_status')[0]['process']['version'])
@@ -135,7 +135,10 @@ def check_minimum_version(options, minimum_version='1.6'):
135135
raise RuntimeError("invalid version string format: %s" % version_string)
136136

137137
if distutils.version.LooseVersion(matches.group('version')) < minimum_version:
138-
raise RuntimeError("Incompatible version, expected >= %s got: %s" % (minimum_version, version_string))
138+
if raise_exception:
139+
raise RuntimeError("Incompatible version, expected >= %s got: %s" % (minimum_version, version_string))
140+
return False
141+
return True
139142

140143

141144
DbTable = collections.namedtuple('DbTable', ['db', 'table'])

0 commit comments

Comments
 (0)