You are viewing a plain text version of this content. The canonical link for it is here.
Posted to notifications@couchdb.apache.org by GitBox <gi...@apache.org> on 2022/02/18 14:17:36 UTC

[GitHub] [couchdb] iilyak commented on a change in pull request #3933: Debug for sharded index server

iilyak commented on a change in pull request #3933:
URL: https://github.com/apache/couchdb/pull/3933#discussion_r810038076



##########
File path: src/couch_index/src/couch_index_debug.erl
##########
@@ -0,0 +1,170 @@
+% Licensed under the Apache License, Version 2.0 (the "License"); you may not
+% use this file except in compliance with the License. You may obtain a copy of
+% the License at
+%
+%   http://www.apache.org/licenses/LICENSE-2.0
+%
+% Unless required by applicable law or agreed to in writing, software
+% distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
+% WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the
+% License for the specific language governing permissions and limitations under
+% the License.
+
+-module(couch_index_debug).
+
+-export([
+    help/0,
+    help/1
+]).
+
+-export([
+    names/0,
+    print_linked_processes/0,
+    busy/1,
+    restart_busy/1,
+    restart_busy/2,
+    restart/1
+]).
+
+%% Use it as `-> throw({unknown_mode, Reason :: term()}).`
+-type throw(_Reason) :: no_return().
+
+-type process_name() :: atom().
+-type function_name() :: atom().
+
+help() ->
+    [
+        %% list of provided commands
+        names,
+        print_linked_processes,
+        busy,
+        restart_busy,
+        restart
+    ].
+
+-spec help(Function :: function_name()) -> ok.
+%% erlfmt-ignore
+help(names) ->
+    io:format("
+    names()
+    --------------
+
+    Returns list of named processes which constitutes
+    a sharded couch_index_server
+    ---
+    ", []);
+help(print_linked_processes) ->
+    io:format("
+    print_linked_processes()
+    --------------
+
+    Print cluster of linked processes. The output would look like similar to:
+
+    |name                                              | reductions | message_queue_len |    memory    |id
+    |--------------------------------------------------|------------|-------------------|--------------|--
+    |index_server_1[<0.320.0>]                         |    1115    |         0         |    17000     |
+    |  couch_secondary_services[<0.312.0>]             |   93258    |         0         |    68600     |
+    |  couch_event_listener:do_init/3[<0.323.0>]       |    195     |         0         |     2856     |
+    |    index_server_1[<0.320.0>]                     |    1115    |         0         |    17000     |
+    |                                                  |            |                   |              |
+    |index_server_2[<0.324.0>]                         |    278     |         0         |     6088     |
+    |  couch_secondary_services[<0.312.0>]             |   93260    |         0         |    68600     |
+    |  couch_event_listener:do_init/3[<0.326.0>]       |    161     |         0         |     2856     |
+    |    index_server_2[<0.324.0>]                     |    278     |         0         |     6088     |
+    ---
+    ", []);
+help(busy) ->
+    io:format("
+    busy(Thereshold)
+    --------------
+
+    Finds list of couch_index_server processes with message box size greater
+    than provided Threshold.
+    ---
+    ", []);
+help(restart_busy) ->
+    io:format("
+    restart_busy(Thereshold)
+    restart_busy(Thereshold, DelayInMsec)
+    --------------
+
+    Finds list of couch_index_server processes with message box size greater
+    than provided Threshold. Then it restart the identified processes.
+    The restarts happen sequentially with a given DelayInMsec between them.
+    If DelayInMsec is not provided the default value is one second.
+    The function doesn't proceed to next server until the replacement server
+    process starts.
+    ---
+    ", []);
+help(restart) ->
+    io:format("
+    restart(ServerName)
+    --------------
+
+    Restart a couch_index_server with given ServerName and wait for
+    replacement process to start.
+    ---
+    ", []);
+help(Unknown) ->
+    io:format("Unknown function: `~p`. Please try one of the following:~n", [Unknown]),
+    [io:format("    - ~s~n", [Function]) || Function <- help()],
+    io:format("    ---~n", []),
+    ok.
+
+-spec names() -> [process_name()].
+
+names() ->
+    couch_index_server:names().
+
+-spec print_linked_processes() -> ok.
+
+print_linked_processes() ->
+    couch_debug:print_linked_processes(couch_index_server).
+
+-spec busy(Thershold :: pos_integer()) ->

Review comment:
       This is not couch_index_server specific. Therefore I am considering to move it into `couch_debug.erl` for reuse.




-- 
This is an automated message from the Apache Git Service.
To respond to the message, please log on to GitHub and use the
URL above to go to the specific comment.

To unsubscribe, e-mail: notifications-unsubscribe@couchdb.apache.org

For queries about this service, please contact Infrastructure at:
users@infra.apache.org