You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@couchdb.apache.org by ja...@apache.org on 2010/06/02 14:24:10 UTC

svn commit: r950527 - in /couchdb/branches/0.11.x: src/couchdb/couch_server.erl src/couchdb/couch_view.erl test/etap/010-file-basics.t test/etap/040-util.t

Author: jan
Date: Wed Jun  2 12:24:10 2010
New Revision: 950527

URL: http://svn.apache.org/viewvc?rev=950527&view=rev
Log:
Merged r930363 from trunk:

Deterministic/synchronous shutdown code.

Modified:
    couchdb/branches/0.11.x/src/couchdb/couch_server.erl
    couchdb/branches/0.11.x/src/couchdb/couch_view.erl
    couchdb/branches/0.11.x/test/etap/010-file-basics.t
    couchdb/branches/0.11.x/test/etap/040-util.t

Modified: couchdb/branches/0.11.x/src/couchdb/couch_server.erl
URL: http://svn.apache.org/viewvc/couchdb/branches/0.11.x/src/couchdb/couch_server.erl?rev=950527&r1=950526&r2=950527&view=diff
==============================================================================
--- couchdb/branches/0.11.x/src/couchdb/couch_server.erl (original)
+++ couchdb/branches/0.11.x/src/couchdb/couch_server.erl Wed Jun  2 12:24:10 2010
@@ -212,7 +212,13 @@ open_async(Server, From, DbName, Filepat
     Opener = spawn_link(fun() ->
             Res = couch_db:start_link(DbName, Filepath, Options),
             gen_server:call(Parent, {open_result, DbName, Res}, infinity),
-            unlink(Parent)
+            unlink(Parent),
+            case Res of
+            {ok, DbReader} ->
+                unlink(DbReader);
+            _ ->
+                ok
+            end
         end),
     true = ets:insert(couch_dbs_by_name, {DbName, {opening, Opener, [From]}}),
     true = ets:insert(couch_dbs_by_pid, {Opener, DbName}),
@@ -299,15 +305,13 @@ handle_call({delete, DbName, _Options}, 
         case ets:lookup(couch_dbs_by_name, DbName) of
         [] -> Server;
         [{_, {opening, Pid, Froms}}] ->
-            exit(Pid, kill),
-            receive {'EXIT', Pid, _Reason} -> ok end,
+            couch_util:shutdown_sync(Pid),
             true = ets:delete(couch_dbs_by_name, DbName),
             true = ets:delete(couch_dbs_by_pid, Pid),
             [gen_server:send_result(F, not_found) || F <- Froms],
             Server#server{dbs_open=Server#server.dbs_open - 1};
         [{_, {opened, Pid, LruTime}}] ->
-            exit(Pid, kill),
-            receive {'EXIT', Pid, _Reason} -> ok end,
+            couch_util:shutdown_sync(Pid),
             true = ets:delete(couch_dbs_by_name, DbName),
             true = ets:delete(couch_dbs_by_pid, Pid),
             true = ets:delete(couch_dbs_by_lru, LruTime),
@@ -337,19 +341,9 @@ handle_cast(Msg, _Server) ->
 code_change(_OldVsn, State, _Extra) ->
     {ok, State}.
 
-handle_info({'EXIT', _Pid, config_change}, _Server) ->
-    {stop, shutdown, Server};
-handle_info({'EXIT', Pid, Reason}, #server{dbs_open=DbsOpen}=Server) ->
-    [{Pid, DbName}] = ets:lookup(couch_dbs_by_pid, Pid),
-    case ets:lookup(couch_dbs_by_name, DbName) of
-    [{DbName, {opened, Pid, LruTime}}] ->
-        true = ets:delete(couch_dbs_by_lru, LruTime);
-    [{DbName, {opening, Pid, Froms}}] ->
-        [gen_server:reply(From, Reason) || From <- Froms]
-    end,
-    true = ets:delete(couch_dbs_by_pid, Pid),
-    true = ets:delete(couch_dbs_by_name, DbName),
-    {noreply, Server#server{dbs_open=DbsOpen - 1}};
-qhandle_info(Info, _Server) ->
-    exit({unknown_message, Info}).
+handle_info({'EXIT', _Pid, config_change}, Server) ->
+    {noreply, shutdown, Server};
+handle_info(Error, _Server) ->
+    ?LOG_ERROR("Unexpected message, restarting couch_server: ~p", [Error]),
+    exit(kill).
 

Modified: couchdb/branches/0.11.x/src/couchdb/couch_view.erl
URL: http://svn.apache.org/viewvc/couchdb/branches/0.11.x/src/couchdb/couch_view.erl?rev=950527&r1=950526&r2=950527&view=diff
==============================================================================
--- couchdb/branches/0.11.x/src/couchdb/couch_view.erl (original)
+++ couchdb/branches/0.11.x/src/couchdb/couch_view.erl Wed Jun  2 12:24:10 2010
@@ -312,8 +312,7 @@ do_reset_indexes(DbName, Root) ->
         fun({_DbName, Sig}) ->
             ?LOG_DEBUG("Killing update process for view group ~s. in database ~s.", [Sig, DbName]),
             [{_, Pid}] = ets:lookup(group_servers_by_sig, {DbName, Sig}),
-            couch_util:shutdown_sync(Pid),
-            delete_from_ets(Pid, DbName, Sig)
+            couch_util:shutdown_sync(Pid)
         end, Names),
     delete_index_dir(Root, DbName),
     file:delete(Root ++ "/." ++ ?b2l(DbName) ++ "_temp").

Modified: couchdb/branches/0.11.x/test/etap/010-file-basics.t
URL: http://svn.apache.org/viewvc/couchdb/branches/0.11.x/test/etap/010-file-basics.t?rev=950527&r1=950526&r2=950527&view=diff
==============================================================================
--- couchdb/branches/0.11.x/test/etap/010-file-basics.t (original)
+++ couchdb/branches/0.11.x/test/etap/010-file-basics.t Wed Jun  2 12:24:10 2010
@@ -16,7 +16,7 @@ filename() -> test_util:build_file("test
 
 main(_) ->
     test_util:init_code_path(),
-    etap:plan(16),
+    etap:plan(19),
     case (catch test()) of
         ok ->
             etap:end_tests();

Modified: couchdb/branches/0.11.x/test/etap/040-util.t
URL: http://svn.apache.org/viewvc/couchdb/branches/0.11.x/test/etap/040-util.t?rev=950527&r1=950526&r2=950527&view=diff
==============================================================================
--- couchdb/branches/0.11.x/test/etap/040-util.t (original)
+++ couchdb/branches/0.11.x/test/etap/040-util.t Wed Jun  2 12:24:10 2010
@@ -17,7 +17,7 @@ main(_) ->
     test_util:init_code_path(),
     application:start(crypto),
 
-    etap:plan(16),
+    etap:plan(14),
     case (catch test()) of
         ok ->
             etap:end_tests();