|
|
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 |
}
|