You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@couchdb.apache.org by va...@apache.org on 2022/11/17 18:45:51 UTC

[couchdb-ioq] 01/01: Add a proper reshard ioq class

This is an automated email from the ASF dual-hosted git repository.

vatamane pushed a commit to branch add-reshard-ioq-priority
in repository https://gitbox.apache.org/repos/asf/couchdb-ioq.git

commit 33e84022caf46ca675292ad1df7adf1a582ae662
Author: Nick Vatamaniuc <va...@gmail.com>
AuthorDate: Thu Nov 17 13:44:51 2022 -0500

    Add a proper reshard ioq class
    
    This mirrors the upstream PR https://github.com/apache/couchdb/pull/4270
---
 include/ioq.hrl             |  4 +++-
 operator_guide.md           |  2 ++
 priv/stats_descriptions.cfg | 12 ++++++++++++
 src/ioq_server.erl          |  6 ++++++
 src/ioq_server2.erl         |  5 +++--
 test/ioq_tests.erl          |  2 +-
 6 files changed, 27 insertions(+), 4 deletions(-)

diff --git a/include/ioq.hrl b/include/ioq.hrl
index 9e9bf67..7c4a4a4 100644
--- a/include/ioq.hrl
+++ b/include/ioq.hrl
@@ -44,7 +44,8 @@
     {other, 1.0},
     {interactive, 1.0},
     {system, 1.0},
-    {search, 1.0}
+    {search, 1.0},
+    {reshard, 0.001}
 ]).
 
 
@@ -72,6 +73,7 @@
     | system
     | search
     | internal_repl
+    | reshard
     | other
     | customer
     | db_meta
diff --git a/operator_guide.md b/operator_guide.md
index 81acdcc..43abee0 100644
--- a/operator_guide.md
+++ b/operator_guide.md
@@ -46,6 +46,8 @@ that the mapping of IOQ classes to class priorities is not 1:1.
 | internal_repl | replication   | IO requests related to internal            |
 |               |               | replication.                               |
 |               |               |                                            |
+| reshard       | reshard       | IO requests related to resharding jobs     |
+|               |               |                                            |
 | low           | low           | IO requests related to requests made by    |
 |               |               | users via the http layer where the         |
 |               |               | "x-cloudant-priority: low" header is set.  |
diff --git a/priv/stats_descriptions.cfg b/priv/stats_descriptions.cfg
index 44bb128..a02931c 100644
--- a/priv/stats_descriptions.cfg
+++ b/priv/stats_descriptions.cfg
@@ -62,6 +62,10 @@
     {type, counter},
     {desc, <<"IO related to internal system activities">>}
 ]}.
+{[couchdb, io_queue, reshard], [
+    {type, counter},
+    {desc, <<"IO related to resharding jobs">>}
+]}.
 {[couchdb, io_queue, other], [
     {type, counter},
     {desc, <<"IO related to internal replication">>}
@@ -126,6 +130,10 @@
     {type, counter},
     {desc, <<"bypassed IO related to internal system activities">>}
 ]}.
+{[couchdb, io_queue_bypassed, reshard], [
+    {type, counter},
+    {desc, <<"bypassed IO related to resharding jobs">>}
+]}.
 {[couchdb, io_queue_bypassed, other], [
     {type, counter},
     {desc, <<"bypassed IO related to internal replication">>}
@@ -214,6 +222,10 @@
     {type, counter},
     {desc, <<"IO related to internal system activities">>}
 ]}.
+{[couchdb, io_queue2, reshard, count], [
+    {type, counter},
+    {desc, <<"IO related to resharding jobs">>}
+]}.
 {[couchdb, io_queue2, other, count], [
     {type, counter},
     {desc, <<"IO related to internal replication">>}
diff --git a/src/ioq_server.erl b/src/ioq_server.erl
index 78f16ca..b23dc10 100644
--- a/src/ioq_server.erl
+++ b/src/ioq_server.erl
@@ -228,6 +228,8 @@ analyze_priority({view_compact, _Shard, _GroupId}) ->
     {view_compact, nil};
 analyze_priority({internal_repl, _Shard}) ->
     {internal_repl, nil};
+analyze_priority({reshard, _Shard}) ->
+    {reshard, nil};
 analyze_priority({system, _Shard}) ->
     {system, nil};
 analyze_priority({low, _Shard}) ->
@@ -257,6 +259,8 @@ enqueue_request(#request{class = view_compact} = Req, State) ->
     State#state{qC = update_queue(Req, State#state.qC, State#state.dedupe)};
 enqueue_request(#request{class = internal_repl} = Req, State) ->
     State#state{qR = update_queue(Req, State#state.qR, State#state.dedupe)};
+enqueue_request(#request{class = reshard} = Req, State) ->
+    State#state{qR = update_queue(Req, State#state.qR, State#state.dedupe)};
 enqueue_request(#request{class = low} = Req, State) ->
     State#state{qL = update_queue(Req, State#state.qL, State#state.dedupe)};
 enqueue_request(Req, State) ->
@@ -473,6 +477,8 @@ make_key(interactive, {append_bin, _}) ->
     <<"writes">>;
 make_key(system, _) ->
     <<"system">>;
+make_key(reshard, _) ->
+    <<"reshard">>;
 make_key(search, _) ->
     <<"search">>;
 make_key(_, _) ->
diff --git a/src/ioq_server2.erl b/src/ioq_server2.erl
index 85ffa2c..f7c3907 100644
--- a/src/ioq_server2.erl
+++ b/src/ioq_server2.erl
@@ -776,6 +776,7 @@ queue_depths_test_() ->
         #ioq_request{user=Foo, class=view_update},
         #ioq_request{user=Foo, class=view_update},
         #ioq_request{user=Foo, class=view_update},
+        #ioq_request{user=Foo, class=reshard},
 
         #ioq_request{user=Bar, class=interactive},
         #ioq_request{user=Bar, class=db_update},
@@ -788,7 +789,7 @@ queue_depths_test_() ->
         {replication, 3},
         {low, 1},
         {channels, {[
-            {<<"foo">>, [2,1,4]},
+            {<<"foo">>, [3,1,4]},
             {<<"bar">>, [1,3,1]}
         ]}}
     ],
@@ -1028,7 +1029,7 @@ check_call(Server, Call, Priority) ->
 
 
 io_classes() -> [interactive, view_update, db_compact, view_compact,
-    internal_repl, other, db_meta].
+    internal_repl, other, db_meta, reshard].
 
 
 shards() ->
diff --git a/test/ioq_tests.erl b/test/ioq_tests.erl
index 51bc0d3..2e866a4 100644
--- a/test/ioq_tests.erl
+++ b/test/ioq_tests.erl
@@ -55,7 +55,7 @@ check_call(Server, Call, Priority) ->
     ?_assertEqual({reply, Call}, ioq:call(Server, Call, Priority)).
 
 io_classes() -> [interactive, view_update, db_compact, view_compact,
-    internal_repl, other, search, system].
+    internal_repl, other, search, system, reshard].
 
 shards() ->
     [