Ensure _design/_replicator VDU is updated
diff --git a/src/couch_replicator_manager.erl b/src/couch_replicator_manager.erl
index 342dffb..21d732f 100644
--- a/src/couch_replicator_manager.erl
+++ b/src/couch_replicator_manager.erl
@@ -795,23 +795,40 @@
 
 ensure_rep_ddoc_exists(RepDb, DDocId) ->
     case open_rep_doc(RepDb, DDocId) of
-        {ok, _Doc} ->
-            ok;
-        _ ->
-            DDoc = couch_doc:from_json_obj({[
-                {<<"_id">>, DDocId},
-                {<<"language">>, <<"javascript">>},
-                {<<"validate_doc_update">>, ?REP_DB_DOC_VALIDATE_FUN}
-            ]}),
-            try
-                {ok, _} = save_rep_doc(RepDb, DDoc)
-            catch
-                throw:conflict ->
-                    % NFC what to do about this other than
-                    % not kill the process.
-                    ok
+        {not_found, _Reason} ->
+            {ok, DDoc} = replication_design_doc(DDocId),
+            couch_log:notice("creating replicator ddoc", []),
+            {ok, _Rev} = save_rep_doc(RepDb, DDoc);
+        {ok, Doc} ->
+            {Props} = couch_doc:to_json_obj(Doc, []),
+            case couch_util:get_value(<<"validate_doc_update">>, Props, []) of
+                ?REP_DB_DOC_VALIDATE_FUN ->
+                    ok;
+                _ ->
+                    Props1 = lists:keyreplace(<<"validate_doc_update">>, 1, Props,
+                         {<<"validate_doc_update">>,
+                        ?REP_DB_DOC_VALIDATE_FUN}),
+                    DDoc = couch_doc:from_json_obj({Props1}),
+                    couch_log:notice("updating replicator ddoc", []),
+                    try
+                        {ok, _} = save_rep_doc(RepDb, DDoc)
+                    catch
+                        throw:conflict ->
+                            %% ignore, we'll retry next time
+                            ok
+                    end
             end
-    end.
+    end,
+    ok.
+
+replication_design_doc(DDocId) ->
+    DocProps = [
+        {<<"_id">>, DDocId},
+        {<<"language">>, <<"javascript">>},
+        {<<"validate_doc_update">>, ?REP_DB_DOC_VALIDATE_FUN}
+   ],
+   {ok, couch_doc:from_json_obj({DocProps})}.
+
 
 % pretty-print replication id
 pp_rep_id(#rep{id = RepId}) ->