diff options
author | unknown <marko@hundin.mysql.fi> | 2005-05-06 10:15:58 +0300 |
---|---|---|
committer | unknown <marko@hundin.mysql.fi> | 2005-05-06 10:15:58 +0300 |
commit | 98eb8d7c1691a8cc1a853428bf14048dbf6ab434 (patch) | |
tree | 05159d62a59936327730afbb6211fe07d5a5881c /sql/ha_innodb.cc | |
parent | 972c1573d1fade4a9ad4e0a853c8551e61a1d637 (diff) | |
parent | eb72815b6f01791c2430929c9cf38e4b900f6f47 (diff) | |
download | mariadb-git-98eb8d7c1691a8cc1a853428bf14048dbf6ab434.tar.gz |
Merge marko@bk-internal.mysql.com:/home/bk/mysql-4.1
into hundin.mysql.fi:/home/marko/mysql-4.1
sql/ha_innodb.cc:
Auto merged
Diffstat (limited to 'sql/ha_innodb.cc')
-rw-r--r-- | sql/ha_innodb.cc | 46 |
1 files changed, 37 insertions, 9 deletions
diff --git a/sql/ha_innodb.cc b/sql/ha_innodb.cc index 0cb0f5564bf..2d2a8f2c3b4 100644 --- a/sql/ha_innodb.cc +++ b/sql/ha_innodb.cc @@ -5183,8 +5183,12 @@ innodb_show_status( /*===============*/ THD* thd) /* in: the MySQL query thread of the caller */ { - Protocol *protocol= thd->protocol; - trx_t* trx; + Protocol* protocol = thd->protocol; + trx_t* trx; + static const char truncated_msg[] = "... truncated...\n"; + const long MAX_STATUS_SIZE = 64000; + ulint trx_list_start = ULINT_UNDEFINED; + ulint trx_list_end = ULINT_UNDEFINED; DBUG_ENTER("innodb_show_status"); @@ -5199,33 +5203,57 @@ innodb_show_status( innobase_release_stat_resources(trx); - /* We let the InnoDB Monitor to output at most 64000 bytes of text. */ + /* We let the InnoDB Monitor to output at most MAX_STATUS_SIZE + bytes of text. */ - long flen; + long flen, usable_len; char* str; mutex_enter_noninline(&srv_monitor_file_mutex); rewind(srv_monitor_file); - srv_printf_innodb_monitor(srv_monitor_file); + srv_printf_innodb_monitor(srv_monitor_file, + &trx_list_start, &trx_list_end); flen = ftell(srv_monitor_file); os_file_set_eof(srv_monitor_file); if (flen < 0) { flen = 0; - } else if (flen > 64000 - 1) { - flen = 64000 - 1; + } + + if (flen > MAX_STATUS_SIZE) { + usable_len = MAX_STATUS_SIZE; + } else { + usable_len = flen; } /* allocate buffer for the string, and read the contents of the temporary file */ - if (!(str = my_malloc(flen + 1, MYF(0)))) + if (!(str = my_malloc(usable_len + 1, MYF(0)))) { mutex_exit_noninline(&srv_monitor_file_mutex); DBUG_RETURN(-1); } rewind(srv_monitor_file); - flen = fread(str, 1, flen, srv_monitor_file); + if (flen < MAX_STATUS_SIZE) { + /* Display the entire output. */ + flen = fread(str, 1, flen, srv_monitor_file); + } else if (trx_list_end < (ulint) flen + && trx_list_start < trx_list_end + && trx_list_start + (flen - trx_list_end) + < MAX_STATUS_SIZE - sizeof truncated_msg - 1) { + /* Omit the beginning of the list of active transactions. */ + long len = fread(str, 1, trx_list_start, srv_monitor_file); + memcpy(str + len, truncated_msg, sizeof truncated_msg - 1); + len += sizeof truncated_msg - 1; + usable_len = (MAX_STATUS_SIZE - 1) - len; + fseek(srv_monitor_file, flen - usable_len, SEEK_SET); + len += fread(str + len, 1, usable_len, srv_monitor_file); + flen = len; + } else { + /* Omit the end of the output. */ + flen = fread(str, 1, MAX_STATUS_SIZE - 1, srv_monitor_file); + } mutex_exit_noninline(&srv_monitor_file_mutex); |