Author: fdmanana
Date: Wed Nov 24 16:11:39 2010
New Revision: 1038666

URL: http://svn.apache.org/viewvc?rev=1038666&view=rev
Log:
Merged revision 1038665 from trunk:

Replicator DB: added _replication_state_time (a unix timestamp value) to 
replication documents.

Modified:
    couchdb/branches/1.1.x/share/www/script/test/replicator_db.js
    couchdb/branches/1.1.x/src/couchdb/couch_doc.erl
    couchdb/branches/1.1.x/src/couchdb/couch_rep.erl

Modified: couchdb/branches/1.1.x/share/www/script/test/replicator_db.js
URL: 
http://svn.apache.org/viewvc/couchdb/branches/1.1.x/share/www/script/test/replicator_db.js?rev=1038666&r1=1038665&r2=1038666&view=diff
==============================================================================
--- couchdb/branches/1.1.x/share/www/script/test/replicator_db.js (original)
+++ couchdb/branches/1.1.x/share/www/script/test/replicator_db.js Wed Nov 24 
16:11:39 2010
@@ -104,6 +104,7 @@ couchTests.replicator_db = function(debu
     T(repDoc1.source === repDoc.source);
     T(repDoc1.target === repDoc.target);
     T(repDoc1._replication_state === "completed", "simple");
+    T(typeof repDoc1._replication_state_time === "number");
     T(typeof repDoc1._replication_id  === "string");
   }
 
@@ -155,6 +156,7 @@ couchTests.replicator_db = function(debu
     T(repDoc1.source === repDoc.source);
     T(repDoc1.target === repDoc.target);
     T(repDoc1._replication_state === "completed", "filtered");
+    T(typeof repDoc1._replication_state_time === "number");
     T(typeof repDoc1._replication_id  === "string");
   }
 
@@ -198,6 +200,7 @@ couchTests.replicator_db = function(debu
     T(repDoc1.source === repDoc.source);
     T(repDoc1.target === repDoc.target);
     T(repDoc1._replication_state === "triggered");
+    T(typeof repDoc1._replication_state_time === "number");
     T(typeof repDoc1._replication_id  === "string");
 
     // add a design doc to source, it will be replicated to target
@@ -312,6 +315,7 @@ couchTests.replicator_db = function(debu
     T(repDoc1_copy.source === repDoc1.source);
     T(repDoc1_copy.target === repDoc1.target);
     T(repDoc1_copy._replication_state === "completed");
+    T(typeof repDoc1_copy._replication_state_time === "number");
     T(typeof repDoc1_copy._replication_id  === "string");
 
     var newDoc = {
@@ -342,6 +346,7 @@ couchTests.replicator_db = function(debu
     T(repDoc2_copy.source === repDoc1.source);
     T(repDoc2_copy.target === repDoc1.target);
     T(repDoc2_copy._replication_state === "completed");
+    T(typeof repDoc2_copy._replication_state_time === "number");
     T(typeof repDoc2_copy._replication_id === "string");
     T(repDoc2_copy._replication_id === repDoc1_copy._replication_id);
   }
@@ -378,11 +383,13 @@ couchTests.replicator_db = function(debu
     repDoc1 = repDb.open("foo_dup_rep_doc_1");
     T(repDoc1 !== null);
     T(repDoc1._replication_state === "completed", "identical");
+    T(typeof repDoc1._replication_state_time === "number");
     T(typeof repDoc1._replication_id  === "string");
 
     repDoc2 = repDb.open("foo_dup_rep_doc_2");
     T(repDoc2 !== null);
     T(typeof repDoc2._replication_state === "undefined");
+    T(typeof repDoc2._replication_state_time === "undefined");
     T(repDoc2._replication_id === repDoc1._replication_id);
   }
 
@@ -420,11 +427,13 @@ couchTests.replicator_db = function(debu
     repDoc1 = repDb.open("foo_dup_cont_rep_doc_1");
     T(repDoc1 !== null);
     T(repDoc1._replication_state === "triggered");
+    T(typeof repDoc1._replication_state_time === "number");
     T(typeof repDoc1._replication_id  === "string");
 
     repDoc2 = repDb.open("foo_dup_cont_rep_doc_2");
     T(repDoc2 !== null);
     T(typeof repDoc2._replication_state === "undefined");
+    T(typeof repDoc2._replication_state_time === "undefined");
     T(repDoc2._replication_id === repDoc1._replication_id);
 
     var newDoc = {
@@ -444,6 +453,7 @@ couchTests.replicator_db = function(debu
     repDoc1 = repDb.open("foo_dup_cont_rep_doc_1");
     T(repDoc1 !== null);
     T(repDoc1._replication_state === "triggered");
+    T(typeof repDoc1._replication_state_time === "number");
 
     var newDoc2 = {
         _id: "foo5000",
@@ -711,6 +721,7 @@ couchTests.replicator_db = function(debu
     T(repDoc1.target === repDoc.target);
     T(repDoc1._replication_state === "completed",
       "replication document with bad replication id failed");
+    T(typeof repDoc1._replication_state_time === "number");
     T(typeof repDoc1._replication_id  === "string");
     T(repDoc1._replication_id !== "1234abc");
   }
@@ -730,6 +741,7 @@ couchTests.replicator_db = function(debu
     var repDoc1 = repDb.open(repDoc._id);
     T(repDoc1 !== null);
     T(repDoc1._replication_state === "error");
+    T(typeof repDoc1._replication_state_time === "number");
     T(typeof repDoc1._replication_id  === "string");
   }
 

Modified: couchdb/branches/1.1.x/src/couchdb/couch_doc.erl
URL: 
http://svn.apache.org/viewvc/couchdb/branches/1.1.x/src/couchdb/couch_doc.erl?rev=1038666&r1=1038665&r2=1038666&view=diff
==============================================================================
--- couchdb/branches/1.1.x/src/couchdb/couch_doc.erl (original)
+++ couchdb/branches/1.1.x/src/couchdb/couch_doc.erl Wed Nov 24 16:11:39 2010
@@ -256,6 +256,9 @@ transfer_fields([{<<"_deleted_conflicts"
 transfer_fields([{<<"_replication_state">>, _} = Field | Rest],
     #doc{body=Fields} = Doc) ->
     transfer_fields(Rest, Doc#doc{body=[Field|Fields]});
+transfer_fields([{<<"_replication_state_time">>, _} = Field | Rest],
+    #doc{body=Fields} = Doc) ->
+    transfer_fields(Rest, Doc#doc{body=[Field|Fields]});
 transfer_fields([{<<"_replication_id">>, _} = Field | Rest],
     #doc{body=Fields} = Doc) ->
     transfer_fields(Rest, Doc#doc{body=[Field|Fields]});

Modified: couchdb/branches/1.1.x/src/couchdb/couch_rep.erl
URL: 
http://svn.apache.org/viewvc/couchdb/branches/1.1.x/src/couchdb/couch_rep.erl?rev=1038666&r1=1038665&r2=1038666&view=diff
==============================================================================
--- couchdb/branches/1.1.x/src/couchdb/couch_rep.erl (original)
+++ couchdb/branches/1.1.x/src/couchdb/couch_rep.erl Wed Nov 24 16:11:39 2010
@@ -854,8 +854,15 @@ update_rep_doc({Props} = _RepDoc, KVs) -
 
 update_rep_doc(RepDb, #doc{body = {RepDocBody}} = RepDoc, KVs) ->
     NewRepDocBody = lists:foldl(
-        fun({K, _V} = KV, Body) ->
-            lists:keystore(K, 1, Body, KV)
+        fun({<<"_replication_state">> = K, _V} = KV, Body) ->
+                Body1 = lists:keystore(K, 1, Body, KV),
+                {Mega, Secs, _} = erlang:now(),
+                UnixTime = Mega * 1000000 + Secs,
+                lists:keystore(
+                    <<"_replication_state_time">>, 1,
+                    Body1, {<<"_replication_state_time">>, UnixTime});
+            ({K, _V} = KV, Body) ->
+                lists:keystore(K, 1, Body, KV)
         end,
         RepDocBody,
         KVs


Reply via email to