Merge remote branch 'cloudant:43260-create-target-shard-if-missing'

This closes #21

Signed-off-by: ILYA Khlopotov <iilyak@ca.ibm.com>
diff --git a/src/mem3_rpc.erl b/src/mem3_rpc.erl
index c7952b9..93cb99a 100644
--- a/src/mem3_rpc.erl
+++ b/src/mem3_rpc.erl
@@ -60,7 +60,7 @@
 
 load_checkpoint_rpc(DbName, SourceNode, SourceUUID) ->
     erlang:put(io_priority, {internal_repl, DbName}),
-    case couch_db:open_int(DbName, [?ADMIN_CTX]) of
+    case get_or_create_db(DbName, [?ADMIN_CTX]) of
     {ok, Db} ->
         TargetUUID = couch_db:get_uuid(Db),
         NewId = mem3_rep:make_local_id(SourceUUID, TargetUUID),
@@ -83,7 +83,7 @@
 
 save_checkpoint_rpc(DbName, Id, SourceSeq, NewEntry0, History0) ->
     erlang:put(io_priority, {internal_repl, DbName}),
-    case couch_db:open_int(DbName, [?ADMIN_CTX]) of
+    case get_or_create_db(DbName, [?ADMIN_CTX]) of
         {ok, #db{update_seq = TargetSeq} = Db} ->
             NewEntry = {[
                 {<<"target_node">>, atom_to_binary(node(), utf8)},
@@ -113,7 +113,7 @@
 
 find_common_seq_rpc(DbName, SourceUUID, SourceEpochs) ->
     erlang:put(io_priority, {internal_repl, DbName}),
-    case couch_db:open_int(DbName, [?ADMIN_CTX]) of
+    case get_or_create_db(DbName, [?ADMIN_CTX]) of
     {ok, Db} ->
         case couch_db:get_uuid(Db) of
         SourceUUID ->
@@ -275,6 +275,10 @@
     end.
 
 
+get_or_create_db(DbName, Options) ->
+    couch_db:open_int(DbName, [{create_if_missing, true} | Options]).
+
+
 -ifdef(TEST).
 -include_lib("eunit/include/eunit.hrl").