Blame SOURCES/bz720543-pcmk-ipc_raise_the_default_buffer_size_to_128k.patch

ed0026
commit d42392c04d9f81a51d708723d978558690f5724b
ed0026
Author: Andrew Beekhof <andrew@beekhof.net>
ed0026
Date:   Tue Sep 17 12:36:45 2013 +1000
ed0026
ed0026
    Feature: ipc: Raise the default buffer size to 128k
ed0026
    
ed0026
    (cherry picked from commit 8196f23a829ed02edb887209bccc88dc851b198b)
ed0026
ed0026
diff --git a/lib/common/ipc.c b/lib/common/ipc.c
ed0026
index 2cd42bf..451bda5 100644
ed0026
--- a/lib/common/ipc.c
ed0026
+++ b/lib/common/ipc.c
ed0026
@@ -521,13 +521,6 @@ crm_ipc_prepare(uint32_t request, xmlNode * message, struct iovec ** result)
ed0026
     } else {
ed0026
         unsigned int new_size = 0;
ed0026
 
ed0026
-        if (total > biggest) {
ed0026
-            biggest = 2 * QB_MAX(total, biggest);
ed0026
-            crm_notice("Message exceeds the configured ipc limit (%d bytes), "
ed0026
-                       "consider configuring PCMK_ipc_buffer to %d or higher "
ed0026
-                       "to avoid compression overheads", ipc_buffer_max, biggest);
ed0026
-        }
ed0026
-
ed0026
         if (crm_compress_string
ed0026
             (buffer, header->size_uncompressed, ipc_buffer_max, &compressed, &new_size)) {
ed0026
 
ed0026
@@ -539,10 +532,15 @@ crm_ipc_prepare(uint32_t request, xmlNode * message, struct iovec ** result)
ed0026
 
ed0026
             free(buffer);
ed0026
 
ed0026
+            if (header->size_compressed > biggest) {
ed0026
+                biggest = 2 * QB_MAX(header->size_compressed, biggest);
ed0026
+            }
ed0026
+
ed0026
         } else {
ed0026
             ssize_t rc = -EMSGSIZE;
ed0026
 
ed0026
             crm_log_xml_trace(message, "EMSGSIZE");
ed0026
+            biggest = 2 * QB_MAX(header->size_uncompressed, biggest);
ed0026
 
ed0026
             crm_err
ed0026
                 ("Could not compress the message into less than the configured ipc limit (%d bytes)."
ed0026
@@ -665,7 +663,7 @@ crm_ipcs_send_ack(crm_client_t * c, uint32_t request, const char *tag, const cha
ed0026
 /* Client... */
ed0026
 
ed0026
 #define MIN_MSG_SIZE    12336   /* sizeof(struct qb_ipc_connection_response) */
ed0026
-#define MAX_MSG_SIZE    50*1024 /* 50k default */
ed0026
+#define MAX_MSG_SIZE    128*1024 /* 128k default */
ed0026
 
ed0026
 struct crm_ipc_s {
ed0026
     struct pollfd pfd;
ed0026
@@ -1004,6 +1002,7 @@ crm_ipc_send(crm_ipc_t * client, xmlNode * message, enum crm_ipc_flags flags, in
ed0026
     long rc = 0;
ed0026
     struct iovec *iov;
ed0026
     static uint32_t id = 0;
ed0026
+    static int factor = 8;
ed0026
     struct crm_ipc_response_header *header;
ed0026
 
ed0026
     crm_ipc_init();
ed0026
@@ -1041,6 +1040,15 @@ crm_ipc_send(crm_ipc_t * client, xmlNode * message, enum crm_ipc_flags flags, in
ed0026
     header = iov[0].iov_base;
ed0026
     header->flags |= flags;
ed0026
 
ed0026
+    if(header->flags | crm_ipc_compressed) {
ed0026
+        if(factor < 10 && (ipc_buffer_max / 10) < (rc / factor)) {
ed0026
+            crm_notice("Compressed message exceeds %d0%% of the configured ipc limit (%d bytes), "
ed0026
+                       "consider setting PCMK_ipc_buffer to %d or higher",
ed0026
+                       factor, ipc_buffer_max, 2*ipc_buffer_max);
ed0026
+            factor++;
ed0026
+        }
ed0026
+    }
ed0026
+
ed0026
     if (ms_timeout == 0) {
ed0026
         ms_timeout = 5000;
ed0026
     }