From: Elan Ruusamäe Date: Mon, 27 Mar 2006 14:05:28 +0000 (+0000) Subject: - add to CVS X-Git-Tag: AC-STABLE~1 X-Git-Url: http://git.pld-linux.org/?p=packages%2Fcacti-spine.git;a=commitdiff_plain;h=26e3c71f895cc80133b9d44d5b87b53e442ad1d8 - add to CVS Changed files: mysql_max_packet_size.patch -> 1.1 --- diff --git a/mysql_max_packet_size.patch b/mysql_max_packet_size.patch new file mode 100644 index 0000000..736b1a6 --- /dev/null +++ b/mysql_max_packet_size.patch @@ -0,0 +1,93 @@ +diff -ruBbd cacti-cactid-0.8.6g/cactid.h cacti-cactid-0.8.6g-patched/cactid.h +--- cacti-cactid-0.8.6g/cactid.h 2006-01-11 19:25:55.000000000 -0500 ++++ cacti-cactid-0.8.6g-patched/cactid.h 2006-01-22 18:57:38.000000000 -0500 +@@ -121,6 +121,7 @@ + #define STAT_DESCRIP_ERROR 99 + #define CACTID_PARENT 1 + #define CACTID_FORK 0 ++#define MAX_MYSQL_BUF_SIZE 1400 + + /* locations to search for the config file */ + #define CONFIG_PATHS 2 +Only in cacti-cactid-0.8.6g-patched: mysql_max_packet_size.patch +diff -ruBbd cacti-cactid-0.8.6g/poller.c cacti-cactid-0.8.6g-patched/poller.c +--- cacti-cactid-0.8.6g/poller.c 2006-01-11 19:25:55.000000000 -0500 ++++ cacti-cactid-0.8.6g-patched/poller.c 2006-01-22 18:57:38.000000000 -0500 +@@ -109,13 +109,12 @@ + int j; + int num_oids = 0; + int snmp_poller_items = 0; +- int buffer; ++ int out_buffer; + int php_process; + + char *poll_result = NULL; + char update_sql[BUFSIZE]; + char temp_result[BUFSIZE]; +- char delim = ' '; + + int last_snmp_version = 0; + int last_snmp_port = 0; +@@ -681,26 +680,52 @@ + } + } + +- /* format database insert */ +- buffer = 600*rows_processed+100; +- +- if (!(query3 = (char *)malloc(buffer))) { ++ /* insert the query results into the database */ ++ if (!(query3 = (char *)malloc(MAX_MYSQL_BUF_SIZE))) { + die("ERROR: Fatal malloc error: poller.c query3 oids!\n"); + } +- memset(query3, 0, buffer); ++ query3[0] = '\0'; + +- snprintf(query3, buffer-1, "INSERT INTO poller_output (local_data_id,rrd_name,time,output) VALUES"); ++ int new_buffer = TRUE; ++ ++ snprintf(query3, MAX_MYSQL_BUF_SIZE-1, "INSERT INTO poller_output (local_data_id,rrd_name,time,output) VALUES"); ++ out_buffer = strlen(query3); + + i = 0; + while (i < rows_processed) { +- snprintf(result_string, sizeof(result_string)-1, "%c(%i,'%s','%s','%s')", delim, poller_items[i].local_data_id, poller_items[i].rrd_name, start_datetime, poller_items[i].result); ++ snprintf(result_string, sizeof(result_string)-1, " (%i,'%s','%s','%s')", poller_items[i].local_data_id, poller_items[i].rrd_name, start_datetime, poller_items[i].result); ++ ++ /* if the next element to the buffer will overflow it, write to the database */ ++ if ((out_buffer + strlen(result_string)) >= MAX_MYSQL_BUF_SIZE) { ++ /* insert the record */ ++ db_insert(&mysql, query3); ++ ++ /* re-initialize the query buffer */ ++ snprintf(query3, MAX_MYSQL_BUF_SIZE-1, "INSERT INTO poller_output (local_data_id,rrd_name,time,output) VALUES"); ++ ++ /* reset the output buffer length */ ++ out_buffer = strlen(query3); ++ ++ /* set binary, let the system know we are a new buffer */ ++ new_buffer = TRUE; ++ } ++ ++ /* if this is our first pass, or we just outputted to the database, need to change the delimeter */ ++ if (new_buffer) { ++ result_string[0] = ' '; ++ }else{ ++ result_string[0] = ','; ++ } ++ ++ out_buffer = out_buffer + strlen(result_string); + strncat(query3, result_string, strlen(result_string)); +- delim = ','; ++ ++ new_buffer = FALSE; + i++; + } + +- /* only perform and insert if there is something to insert */ +- if (rows_processed > 0) { ++ /* perform the last insert if required */ ++ if (out_buffer > 0) { + /* insert records into database */ + db_insert(&mysql, query3); + }