You are viewing a plain text version of this content. The canonical link for it is here.
Posted to notifications@couchdb.apache.org by gi...@git.apache.org on 2017/07/13 03:15:55 UTC

[GitHub] nickva commented on issue #668: Fix timeout in couchdb_views_test for couchdb_1283

nickva commented on issue #668: Fix timeout in couchdb_views_test for couchdb_1283
URL: https://github.com/apache/couchdb/pull/668#issuecomment-314958861
 
 
   Confirmed this fixes the issue.
   
   Couldn't replicate this easily on my artificially slowed down VM even. Got it to where the test itself would timeout but it wouldn't fail like on Travis. I think the idea is to slow down the storage subsystem not the CPU. 
   
   There is a way to do it, but I am lazy so did resorted to just adding a sleep to the update runner before the:
   
   `exit({updated, self(), FinalIdxState})` line.
   
   And a few log statements:
   
   ```
   (655-fix-couchdb-views-tests)$ git diff
   diff --git a/src/couch_index/src/couch_index_updater.erl b/src/couch_index/src/couch_index_updater.erl
   index ad48f40..aedd2d1 100644
   --- a/src/couch_index/src/couch_index_updater.erl
   +++ b/src/couch_index/src/couch_index_updater.erl
   @@ -69,6 +69,7 @@ handle_call({update, IdxState}, _From, #st{idx=Idx, mod=Mod}=State) ->
        Args = [Mod:get(db_name, IdxState), Mod:get(idx_name, IdxState)],
        couch_log:info("Starting index update for db: ~s idx: ~s", Args),
        Pid = spawn_link(?MODULE, update, [Idx, Mod, IdxState]),
   +    io:format(standard_error, "~n XXXXXX handle_call update spawned ~p~n", [Pid]),
        {reply, ok, State#st{pid=Pid}};
    handle_call({restart, IdxState}, _From, #st{idx=Idx, mod=Mod}=State) ->
        Args = [Mod:get(db_name, IdxState), Mod:get(idx_name, IdxState)],
   @@ -100,6 +101,7 @@ handle_info({'EXIT', _, {reset, Pid}}, #st{idx=Idx, pid=Pid}=State) ->
        Pid2 = spawn_link(?MODULE, update, [Idx, State#st.mod, NewIdxState]),
        {noreply, State#st{pid=Pid2}};
    handle_info({'EXIT', Pid, normal}, #st{pid=Pid}=State) ->
   +    io:format(standard_error, "~n XXXXXX handle_info Pid normal set to undefined ~p~n", [Pid]),
        {noreply, State#st{pid=undefined}};
    handle_info({'EXIT', Pid, {{nocatch, Error}, _Trace}}, State) ->
        handle_info({'EXIT', Pid, Error}, State);
   @@ -193,6 +195,8 @@ update(Idx, Mod, IdxState) ->
            end,
   
            {ok, FinalIdxState} = Mod:finish_update(LastIdxSt),
   +        timer:sleep(1000),
   +        io:format(standard_error, "~n XXXXXX  update exiting self() = ~p~n", [self()]),
            exit({updated, self(), FinalIdxState})
        end).
   
   ```
   
   Now could see the failure:
   
   ```
   *failed*
   in function couchdb_views_tests:wait_for_process_shutdown/3 (test/couchdb_views_tests.erl, line 413)
   in call from couchdb_views_tests:'-couchdb_1283/0-fun-21-'/0 (test/couchdb_views_tests.erl, line 358)
   **error:{assertion_failed,[{module,couchdb_views_tests},
                      {line,415},
                      {reason,"Failure waiting for db shutdown"}]}
   
   ```
   
   Then the PR fixes the failure:
   
   ```
   ==> couch (eunit)
       Running test function(s):
         couchdb_views_tests:view_group_shutdown_test_/0
   ======================== EUnit ========================
   View group shutdown
   Application crypto was left running!
     couchdb_views_tests:315: couchdb_1283...
    XXXXXX handle_call update spawned <0.318.0>
   
    XXXXXX  update exiting self() = <0.318.0>
   [1.286 s] ok
   ```
   
   +1
   
   Very nice!
   
   
 
----------------------------------------------------------------
This is an automated message from the Apache Git Service.
To respond to the message, please log on GitHub and use the
URL above to go to the specific comment.
 
For queries about this service, please contact Infrastructure at:
users@infra.apache.org


With regards,
Apache Git Services