Merge lp:~thisfred/u1db/noop-shortcut into lp:u1db

Proposed by Eric Casteleijn
Status: Merged
Merged at revision: 281
Proposed branch: lp:~thisfred/u1db/noop-shortcut
Merge into: lp:u1db
Diff against target: 85 lines (+23/-10)
3 files modified
src/u1db_sync_target.c (+6/-6)
u1db/sync.py (+8/-4)
u1db/tests/test_sync.py (+9/-0)
To merge this branch: bzr merge lp:~thisfred/u1db/noop-shortcut
Reviewer Review Type Date Requested Status
Lucio Torre (community) Approve
Review via email: mp+105799@code.launchpad.net

Description of the change

Added shortcut so we make 2 fewer requests when we know there is nothing to sync

To post a comment you must log in.
Revision history for this message
Lucio Torre (lucio.torre) :
review: Approve

Preview Diff

[H/L] Next/Prev Comment, [J/K] Next/Prev File, [N/P] Next/Prev Hunk
1=== modified file 'src/u1db_sync_target.c'
2--- src/u1db_sync_target.c 2012-05-15 09:03:31 +0000
3+++ src/u1db_sync_target.c 2012-05-15 11:23:17 +0000
4@@ -28,7 +28,7 @@
5 static int st_record_sync_info(u1db_sync_target *st,
6 const char *source_replica_uid, int source_gen);
7
8-static int st_sync_exchange(u1db_sync_target *st,
9+static int st_sync_exchange(u1db_sync_target *st,
10 const char *source_replica_uid, int n_docs,
11 u1db_document **docs, int *generations,
12 int *target_gen, void *context,
13@@ -566,11 +566,11 @@
14 status = u1db_whats_changed(db, &local_gen, (void*)&to_send_state,
15 whats_changed_to_doc_ids);
16 if (status != U1DB_OK) { goto finish; }
17- // TODO: Shortcut when both sides know that they are at the same revision
18- // eg:
19- // if (local_gen == local_gen_known_by_target
20- // && target_gen == target_gen_known_by_local)
21- // { return U1DB_OK; }
22+ if (local_gen == local_gen_known_by_target
23+ && target_gen == target_gen_known_by_local)
24+ {
25+ return U1DB_OK;
26+ }
27 *local_gen_before_sync = local_gen;
28 return_doc_state.db = db;
29 return_doc_state.target_uid = target_uid;
30
31=== modified file 'u1db/sync.py'
32--- u1db/sync.py 2012-04-30 11:37:13 +0000
33+++ u1db/sync.py 2012-05-15 11:23:17 +0000
34@@ -95,15 +95,18 @@
35 target_my_gen) = sync_target.get_sync_info(self.source._replica_uid)
36 # what's changed since that generation and this current gen
37 my_gen, changes = self.source.whats_changed(target_my_gen)
38+
39+ # this source last-seen database generation for the target
40+ target_last_known_gen = self.source.get_sync_generation(
41+ self.target_replica_uid)
42+ if not changes and target_last_known_gen == target_gen:
43+ return my_gen
44 changed_doc_ids = [doc_id for doc_id, _ in changes]
45 # prepare to send all the changed docs
46 docs_to_send = self.source.get_docs(changed_doc_ids,
47 check_for_conflicts=False)
48 docs_by_generation = zip(docs_to_send, (gen for _, gen in changes))
49
50- # this source last-seen database generation for the target
51- target_last_known_gen = self.source.get_sync_generation(
52- self.target_replica_uid)
53 # exchange documents and try to insert the returned ones with
54 # the target, return target synced-up-to gen
55 new_gen = sync_target.sync_exchange(docs_by_generation,
56@@ -195,7 +198,8 @@
57 'last_known_gen': self.source_last_known_generation
58 })
59 self._trace('before whats_changed')
60- gen, changes = self._db.whats_changed(self.source_last_known_generation)
61+ gen, changes = self._db.whats_changed(
62+ self.source_last_known_generation)
63 self._trace('after whats_changed')
64 self.new_gen = gen
65 seen_ids = self.seen_ids
66
67=== modified file 'u1db/tests/test_sync.py'
68--- u1db/tests/test_sync.py 2012-05-09 16:09:04 +0000
69+++ u1db/tests/test_sync.py 2012-05-15 11:23:17 +0000
70@@ -647,6 +647,15 @@
71 # original doc1 should have been removed from conflicts
72 self.assertEqual(3, len(db3.get_doc_conflicts('the-doc')))
73
74+ def test_sync_stops_after_get_sync_info(self):
75+ self.db1.create_doc(tests.simple_doc)
76+ self.sync(self.db1, self.db2)
77+
78+ def put_hook(state):
79+ self.fail("Tracehook triggered for %s" % (state,))
80+
81+ self.sync(self.db1, self.db2, trace_hook=put_hook)
82+
83
84 class TestDbSync(tests.TestCaseWithServer):
85 """Test db.sync remote sync shortcut"""

Subscribers

People subscribed via source and target branches