You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@couchdb.apache.org by fd...@apache.org on 2011/05/20 12:52:45 UTC

svn commit: r1125317 - /couchdb/trunk/src/couchdb/couch_replication_manager.erl

Author: fdmanana
Date: Fri May 20 10:52:45 2011
New Revision: 1125317

URL: http://svn.apache.org/viewvc?rev=1125317&view=rev
Log:
Replication manager: don't update doc if new state == current state

This is to avoid unncessary updates.

Modified:
    couchdb/trunk/src/couchdb/couch_replication_manager.erl

Modified: couchdb/trunk/src/couchdb/couch_replication_manager.erl
URL: http://svn.apache.org/viewvc/couchdb/trunk/src/couchdb/couch_replication_manager.erl?rev=1125317&r1=1125316&r2=1125317&view=diff
==============================================================================
--- couchdb/trunk/src/couchdb/couch_replication_manager.erl (original)
+++ couchdb/trunk/src/couchdb/couch_replication_manager.erl Fri May 20 10:52:45 2011
@@ -468,13 +468,18 @@ update_rep_doc(RepDocId, KVs) ->
 
 update_rep_doc(RepDb, #doc{body = {RepDocBody}} = RepDoc, KVs) ->
     NewRepDocBody = lists:foldl(
-        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});
+        fun({<<"_replication_state">> = K, State} = KV, Body) ->
+                case get_value(K, Body) of
+                State ->
+                    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})
+                end;
             ({K, _V} = KV, Body) ->
                 lists:keystore(K, 1, Body, KV)
         end,