ctdb-daemon: Add QueueBufferSize tunable
authorAmitay Isaacs <amitay@gmail.com>
Fri, 13 May 2016 14:25:31 +0000 (00:25 +1000)
committerStefan Metzmacher <metze@samba.org>
Thu, 28 Jul 2016 03:00:17 +0000 (05:00 +0200)
This controls the maximum size of data ctdb will read from sockets at
a time.

Signed-off-by: Amitay Isaacs <amitay@gmail.com>
Reviewed-by: Andrew Bartlett <abartlet@samba.org>
Reviewed-by: Martin Schwenke <martin@meltin.net>
ctdb/common/ctdb_io.c
ctdb/common/tunable.c
ctdb/doc/ctdb-tunables.7.xml
ctdb/protocol/protocol.h

index 894935e8859d4627485f391b3b99e6607cc50bea..806c57f6db212bfa481c59b911b0ddeda52f7bb5 100644 (file)
@@ -38,8 +38,6 @@
 #include "common/logging.h"
 #include "common/common.h"
 
-#define QUEUE_BUFFER_SIZE      (16*1024)
-
 /* structures for packet queueing - see common/ctdb_io.c */
 struct ctdb_buffer {
        uint8_t *data;
@@ -69,6 +67,7 @@ struct ctdb_queue {
        ctdb_queue_cb_fn_t callback;
        bool *destroyed;
        const char *name;
+       uint32_t buffer_size;
 };
 
 
@@ -111,7 +110,7 @@ static void queue_process(struct ctdb_queue *queue)
        }
 
        if (queue->buffer.length < pkt_size) {
-               if (pkt_size > QUEUE_BUFFER_SIZE) {
+               if (pkt_size > queue->buffer_size) {
                        queue->buffer.extend = pkt_size;
                }
                return;
@@ -138,7 +137,7 @@ static void queue_process(struct ctdb_queue *queue)
                tevent_schedule_immediate(queue->im, queue->ctdb->ev,
                                          queue_process_event, queue);
        } else {
-               if (queue->buffer.size > QUEUE_BUFFER_SIZE) {
+               if (queue->buffer.size > queue->buffer_size) {
                        TALLOC_FREE(queue->buffer.data);
                        queue->buffer.size = 0;
                }
@@ -181,12 +180,12 @@ static void queue_io_read(struct ctdb_queue *queue)
 
        if (queue->buffer.data == NULL) {
                /* starting fresh, allocate buf to read data */
-               queue->buffer.data = talloc_size(queue, QUEUE_BUFFER_SIZE);
+               queue->buffer.data = talloc_size(queue, queue->buffer_size);
                if (queue->buffer.data == NULL) {
                        DEBUG(DEBUG_ERR, ("read error alloc failed for %u\n", num_ready));
                        goto failed;
                }
-               queue->buffer.size = QUEUE_BUFFER_SIZE;
+               queue->buffer.size = queue->buffer_size;
        } else if (queue->buffer.extend > 0) {
                /* extending buffer */
                data = talloc_realloc_size(queue, queue->buffer.data, queue->buffer.extend);
@@ -453,5 +452,13 @@ struct ctdb_queue *ctdb_queue_setup(struct ctdb_context *ctdb,
        }
        talloc_set_destructor(queue, queue_destructor);
 
+       queue->buffer_size = ctdb->tunable.queue_buffer_size;
+       /* In client code, ctdb->tunable is not initialized.
+        * This does not affect recovery daemon.
+        */
+       if (queue->buffer_size == 0) {
+               queue->buffer_size = 1024;
+       }
+
        return queue;
 }
index c3514ac22aa9a04782dae01948e32b1f4371b014..ab21edfcb467a007df82c076157ba70dc8882775 100644 (file)
@@ -151,6 +151,8 @@ static struct {
                offsetof(struct ctdb_tunable_list, lock_processes_per_db) },
        { "RecBufferSizeLimit", 1000*1000, false,
                offsetof(struct ctdb_tunable_list, rec_buffer_size_limit) },
+       { "QueueBufferSize", 16*1024, false,
+               offsetof(struct ctdb_tunable_list, queue_buffer_size) },
        { NULL, 0, true, }
 };
 
index 78b720c77eb07fc4f514c6c281964fe151aa0180..de3d09b8e2d279283c896540406c752c8c12eee3 100644 (file)
       </para>
     </refsect2>
 
+    <refsect2>
+      <title>QueueBufferSize</title>
+      <para>Default: 16*1024</para>
+      <para>
+       This is the maximum amount of data (in bytes) ctdb will read
+       from a socket at a time.
+      </para>
+    </refsect2>
+
     <refsect2>
       <title>RecBufferSizeLimit</title>
       <para>Default: 1000000</para>
index 824237abc0f09a7a686ce579189e5460e6fda827..ae8e300142b0ed69ee33ea43ccd611281ac83456 100644 (file)
@@ -630,6 +630,7 @@ struct ctdb_tunable_list {
        uint32_t mutex_enabled;
        uint32_t lock_processes_per_db;
        uint32_t rec_buffer_size_limit;
+       uint32_t queue_buffer_size;
 };
 
 struct ctdb_tickle_list {