A very interesting incident happened with me last week, all of a sudden mysql error logs flooded with "ERROR 126 (HY000): Incorrect key file for table" error, and in error log files.
I found new heavy queries added in recent release were creating this problem.
Those queries were also failing on mysql shell after that error.
Reason: queries using DISTINCT, COUNT, ORDER BY doing lots of sorting take huge temporary disk space to get final results, whenever temporary disk size is not enough to store temporarily created mysql data start giving these errors or insufficient space in /tmp directory.
Solution : Change the location of /tmp directory to other having more space and sufficient to store temporary tables while executing queries.
Use tmpdir='path' in my.cnf to change tmp directory path.
Monday, September 27, 2010
Tuesday, February 23, 2010
ERROR 1153 (08S01) at line *: Got a packet bigger than 'max_allowed_packet' bytes
ERROR 1153 (08S01) at line 19747092: Got a packet bigger than 'max_allowed_packet' bytes
increase max_allowed_packet value in my.cnf
mysql>set global max_allowed_packet=100M;
provide max_allowed_packet value at command prompt while restoring database
mysql -u -p database_name --max_allowed_packet=1073741824 < backup.sql
increase --net_buffer_length value for database restore on network.
mysql -u -p database_name --max_allowed_packet=1073741824 --net_buffer_length=100M < backup.sql
The maximum value for --max_allowed_packet is 1G ( 1073741824 )
issue resolved.
increase max_allowed_packet value in my.cnf
mysql>set global max_allowed_packet=100M;
provide max_allowed_packet value at command prompt while restoring database
mysql -u -p database_name --max_allowed_packet=1073741824 < backup.sql
increase --net_buffer_length value for database restore on network.
mysql -u -p database_name --max_allowed_packet=1073741824 --net_buffer_length=100M < backup.sql
The maximum value for --max_allowed_packet is 1G ( 1073741824 )
issue resolved.
Monday, November 2, 2009
libtool error in sysbench compilation
[root@domU-12-31-38-01-C5-02 sysbench-0.4.12]# make
Making all in doc
make[1]: Entering directory `/db/download/benchmarkTools/sysbench-0.4.12/doc'
Making all in xsl
make[2]: Entering directory `/db/download/benchmarkTools/sysbench-0.4.12/doc/xsl'
make[2]: Nothing to be done for `all'.
make[2]: Leaving directory `/db/download/benchmarkTools/sysbench-0.4.12/doc/xsl'
make[2]: Entering directory `/db/download/benchmarkTools/sysbench-0.4.12/doc'
make[2]: Nothing to be done for `all-am'.
make[2]: Leaving directory `/db/download/benchmarkTools/sysbench-0.4.12/doc'
make[1]: Leaving directory `/db/download/benchmarkTools/sysbench-0.4.12/doc'
Making all in sysbench
make[1]: Entering directory `/db/download/benchmarkTools/sysbench-0.4.12/sysbench'
Making all in drivers
make[2]: Entering directory `/db/download/benchmarkTools/sysbench-0.4.12/sysbench/drivers'
Making all in mysql
make[3]: Entering directory `/db/download/benchmarkTools/sysbench-0.4.12/sysbench/drivers/mysql'
gcc -DHAVE_CONFIG_H -I. -I../../../config -I/usr/include/mysql -g -pipe -Wp,-D_FORTIFY_SOURCE=2 -fexceptions -fstack-protector --param=ssp-buffer-size=4 -m64 -DUNIV_LINUX -D_REENTRANT -D_XOPEN_SOURCE=500 -D_GNU_SOURCE -I../../../sysbench -pthread -g -O2 -MT libsbmysql_a-drv_mysql.o -MD -MP -MF .deps/libsbmysql_a-drv_mysql.Tpo -c -o libsbmysql_a-drv_mysql.o `test -f 'drv_mysql.c' || echo './'`drv_mysql.c
mv -f .deps/libsbmysql_a-drv_mysql.Tpo .deps/libsbmysql_a-drv_mysql.Po
rm -f libsbmysql.a
ar cru libsbmysql.a libsbmysql_a-drv_mysql.o
ranlib libsbmysql.a
make[3]: Leaving directory `/db/download/benchmarkTools/sysbench-0.4.12/sysbench/drivers/mysql'
make[3]: Entering directory `/db/download/benchmarkTools/sysbench-0.4.12/sysbench/drivers'
make[3]: Nothing to be done for `all-am'.
make[3]: Leaving directory `/db/download/benchmarkTools/sysbench-0.4.12/sysbench/drivers'
make[2]: Leaving directory `/db/download/benchmarkTools/sysbench-0.4.12/sysbench/drivers'
Making all in tests
make[2]: Entering directory `/db/download/benchmarkTools/sysbench-0.4.12/sysbench/tests'
Making all in cpu
make[3]: Entering directory `/db/download/benchmarkTools/sysbench-0.4.12/sysbench/tests/cpu'
gcc -DHAVE_CONFIG_H -I. -I../../../config -D_REENTRANT -D_XOPEN_SOURCE=500 -D_GNU_SOURCE -I../../../sysbench -pthread -g -O2 -MT libsbcpu_a-sb_cpu.o -MD -MP -MF .deps/libsbcpu_a-sb_cpu.Tpo -c -o libsbcpu_a-sb_cpu.o `test -f 'sb_cpu.c' || echo './'`sb_cpu.c
mv -f .deps/libsbcpu_a-sb_cpu.Tpo .deps/libsbcpu_a-sb_cpu.Po
rm -f libsbcpu.a
ar cru libsbcpu.a libsbcpu_a-sb_cpu.o
ranlib libsbcpu.a
make[3]: Leaving directory `/db/download/benchmarkTools/sysbench-0.4.12/sysbench/tests/cpu'
Making all in fileio
make[3]: Entering directory `/db/download/benchmarkTools/sysbench-0.4.12/sysbench/tests/fileio'
gcc -DHAVE_CONFIG_H -I. -I../../../config -D_REENTRANT -D_XOPEN_SOURCE=500 -D_GNU_SOURCE -I../../../sysbench -pthread -g -O2 -MT libsbfileio_a-sb_fileio.o -MD -MP -MF .deps/libsbfileio_a-sb_fileio.Tpo -c -o libsbfileio_a-sb_fileio.o `test -f 'sb_fileio.c' || echo './'`sb_fileio.c
mv -f .deps/libsbfileio_a-sb_fileio.Tpo .deps/libsbfileio_a-sb_fileio.Po
gcc -DHAVE_CONFIG_H -I. -I../../../config -D_REENTRANT -D_XOPEN_SOURCE=500 -D_GNU_SOURCE -I../../../sysbench -pthread -g -O2 -MT libsbfileio_a-crc32.o -MD -MP -MF .deps/libsbfileio_a-crc32.Tpo -c -o libsbfileio_a-crc32.o `test -f 'crc32.c' || echo './'`crc32.c
mv -f .deps/libsbfileio_a-crc32.Tpo .deps/libsbfileio_a-crc32.Po
rm -f libsbfileio.a
ar cru libsbfileio.a libsbfileio_a-sb_fileio.o libsbfileio_a-crc32.o
ranlib libsbfileio.a
make[3]: Leaving directory `/db/download/benchmarkTools/sysbench-0.4.12/sysbench/tests/fileio'
Making all in memory
make[3]: Entering directory `/db/download/benchmarkTools/sysbench-0.4.12/sysbench/tests/memory'
gcc -DHAVE_CONFIG_H -I. -I../../../config -D_REENTRANT -D_XOPEN_SOURCE=500 -D_GNU_SOURCE -I../../../sysbench -pthread -g -O2 -MT libsbmemory_a-sb_memory.o -MD -MP -MF .deps/libsbmemory_a-sb_memory.Tpo -c -o libsbmemory_a-sb_memory.o `test -f 'sb_memory.c' || echo './'`sb_memory.c
mv -f .deps/libsbmemory_a-sb_memory.Tpo .deps/libsbmemory_a-sb_memory.Po
rm -f libsbmemory.a
ar cru libsbmemory.a libsbmemory_a-sb_memory.o
ranlib libsbmemory.a
make[3]: Leaving directory `/db/download/benchmarkTools/sysbench-0.4.12/sysbench/tests/memory'
Making all in threads
make[3]: Entering directory `/db/download/benchmarkTools/sysbench-0.4.12/sysbench/tests/threads'
gcc -DHAVE_CONFIG_H -I. -I../../../config -D_REENTRANT -D_XOPEN_SOURCE=500 -D_GNU_SOURCE -I../../../sysbench -pthread -g -O2 -MT libsbthreads_a-sb_threads.o -MD -MP -MF .deps/libsbthreads_a-sb_threads.Tpo -c -o libsbthreads_a-sb_threads.o `test -f 'sb_threads.c' || echo './'`sb_threads.c
mv -f .deps/libsbthreads_a-sb_threads.Tpo .deps/libsbthreads_a-sb_threads.Po
rm -f libsbthreads.a
ar cru libsbthreads.a libsbthreads_a-sb_threads.o
ranlib libsbthreads.a
make[3]: Leaving directory `/db/download/benchmarkTools/sysbench-0.4.12/sysbench/tests/threads'
Making all in mutex
make[3]: Entering directory `/db/download/benchmarkTools/sysbench-0.4.12/sysbench/tests/mutex'
gcc -DHAVE_CONFIG_H -I. -I../../../config -D_REENTRANT -D_XOPEN_SOURCE=500 -D_GNU_SOURCE -I../../../sysbench -pthread -g -O2 -MT libsbmutex_a-sb_mutex.o -MD -MP -MF .deps/libsbmutex_a-sb_mutex.Tpo -c -o libsbmutex_a-sb_mutex.o `test -f 'sb_mutex.c' || echo './'`sb_mutex.c
mv -f .deps/libsbmutex_a-sb_mutex.Tpo .deps/libsbmutex_a-sb_mutex.Po
rm -f libsbmutex.a
ar cru libsbmutex.a libsbmutex_a-sb_mutex.o
ranlib libsbmutex.a
make[3]: Leaving directory `/db/download/benchmarkTools/sysbench-0.4.12/sysbench/tests/mutex'
Making all in oltp
make[3]: Entering directory `/db/download/benchmarkTools/sysbench-0.4.12/sysbench/tests/oltp'
gcc -DHAVE_CONFIG_H -I. -I../../../config -I./.. -D_REENTRANT -D_XOPEN_SOURCE=500 -D_GNU_SOURCE -I../../../sysbench -I/usr/include/mysql -g -pipe -Wp,-D_FORTIFY_SOURCE=2 -fexceptions -fstack-protector --param=ssp-buffer-size=4 -m64 -DUNIV_LINUX -pthread -g -O2 -MT libsboltp_a-sb_oltp.o -MD -MP -MF .deps/libsboltp_a-sb_oltp.Tpo -c -o libsboltp_a-sb_oltp.o `test -f 'sb_oltp.c' || echo './'`sb_oltp.c
mv -f .deps/libsboltp_a-sb_oltp.Tpo .deps/libsboltp_a-sb_oltp.Po
rm -f libsboltp.a
ar cru libsboltp.a libsboltp_a-sb_oltp.o
ranlib libsboltp.a
make[3]: Leaving directory `/db/download/benchmarkTools/sysbench-0.4.12/sysbench/tests/oltp'
make[3]: Entering directory `/db/download/benchmarkTools/sysbench-0.4.12/sysbench/tests'
make[3]: Nothing to be done for `all-am'.
make[3]: Leaving directory `/db/download/benchmarkTools/sysbench-0.4.12/sysbench/tests'
make[2]: Leaving directory `/db/download/benchmarkTools/sysbench-0.4.12/sysbench/tests'
Making all in .
make[2]: Entering directory `/db/download/benchmarkTools/sysbench-0.4.12/sysbench'
gcc -DHAVE_CONFIG_H -I. -I../config -D_REENTRANT -D_XOPEN_SOURCE=500 -D_GNU_SOURCE -I../sysbench -pthread -g -O2 -MT sysbench.o -MD -MP -MF .deps/sysbench.Tpo -c -o sysbench.o sysbench.c
mv -f .deps/sysbench.Tpo .deps/sysbench.Po
gcc -DHAVE_CONFIG_H -I. -I../config -D_REENTRANT -D_XOPEN_SOURCE=500 -D_GNU_SOURCE -I../sysbench -pthread -g -O2 -MT sb_timer.o -MD -MP -MF .deps/sb_timer.Tpo -c -o sb_timer.o sb_timer.c
mv -f .deps/sb_timer.Tpo .deps/sb_timer.Po
gcc -DHAVE_CONFIG_H -I. -I../config -D_REENTRANT -D_XOPEN_SOURCE=500 -D_GNU_SOURCE -I../sysbench -pthread -g -O2 -MT sb_options.o -MD -MP -MF .deps/sb_options.Tpo -c -o sb_options.o sb_options.c
mv -f .deps/sb_options.Tpo .deps/sb_options.Po
gcc -DHAVE_CONFIG_H -I. -I../config -D_REENTRANT -D_XOPEN_SOURCE=500 -D_GNU_SOURCE -I../sysbench -pthread -g -O2 -MT sb_logger.o -MD -MP -MF .deps/sb_logger.Tpo -c -o sb_logger.o sb_logger.c
mv -f .deps/sb_logger.Tpo .deps/sb_logger.Po
gcc -DHAVE_CONFIG_H -I. -I../config -D_REENTRANT -D_XOPEN_SOURCE=500 -D_GNU_SOURCE -I../sysbench -pthread -g -O2 -MT db_driver.o -MD -MP -MF .deps/db_driver.Tpo -c -o db_driver.o db_driver.c
mv -f .deps/db_driver.Tpo .deps/db_driver.Po
/bin/sh ../libtool --tag=CC --mode=link gcc -pthread -g -O2 -o sysbench sysbench.o sb_timer.o sb_options.o sb_logger.o db_driver.o tests/fileio/libsbfileio.a tests/threads/libsbthreads.a tests/memory/libsbmemory.a tests/cpu/libsbcpu.a tests/oltp/libsboltp.a tests/mutex/libsbmutex.a drivers/mysql/libsbmysql.a -rdynamic -L/usr/lib64/mysql -lmysqlclient_r -lz -lcrypt -lnsl -lm -lmygcc -lrt -lm
../libtool: line 838: X--tag=CC: command not found
../libtool: line 871: libtool: ignoring unknown tag : command not found
../libtool: line 838: X--mode=link: command not found
../libtool: line 1004: *** Warning: inferring the mode of operation is deprecated.: command not found
../libtool: line 1005: *** Future versions of Libtool will require --mode=MODE be specified.: command not found
../libtool: line 2231: X-g: command not found
../libtool: line 2231: X-O2: command not found
../libtool: line 2231: X-rdynamic: command not found
../libtool: line 1951: X-L/usr/lib64/mysql: No such file or directory
../libtool: line 2400: Xsysbench: command not found
../libtool: line 2405: X: command not found
../libtool: line 2412: Xsysbench: command not found
../libtool: line 2547: X-lmysqlclient_r: command not found
../libtool: line 2547: X-lz: command not found
../libtool: line 2547: X-lcrypt: command not found
../libtool: line 2547: X-lnsl: command not found
../libtool: line 2547: X-lm: command not found
../libtool: line 2547: X-lmygcc: command not found
../libtool: line 2547: X-lrt: command not found
../libtool: line 2547: X-lm: command not found
../libtool: line 2629: X-L/db/download/benchmarkTools/sysbench-0.4.12/sysbench: No such file or directory
../libtool: line 2547: X-lmysqlclient_r: command not found
../libtool: line 2547: X-lz: command not found
../libtool: line 2547: X-lcrypt: command not found
../libtool: line 2547: X-lnsl: command not found
../libtool: line 2547: X-lmygcc: command not found
../libtool: line 2547: X-lrt: command not found
../libtool: line 2547: X-lm: command not found
../libtool: line 2629: X-L/db/download/benchmarkTools/sysbench-0.4.12/sysbench: No such file or directory
../libtool: line 2547: X-lmysqlclient_r: command not found
../libtool: line 2547: X-lz: command not found
../libtool: line 2547: X-lcrypt: command not found
../libtool: line 2547: X-lnsl: command not found
../libtool: line 2547: X-lmygcc: command not found
../libtool: line 2547: X-lrt: command not found
../libtool: line 2547: X-lm: command not found
../libtool: line 5162: Xgcc -pthread "" "" -o @OUTPUT@ sysbench.o sb_timer.o sb_options.o sb_logger.o db_driver.o "" tests/fileio/libsbfileio.a tests/threads/libsbthreads.a tests/memory/libsbmemory.a tests/cpu/libsbcpu.a tests/oltp/libsboltp.a tests/mutex/libsbmutex.a drivers/mysql/libsbmysql.a -L/db/download/benchmarkTools/sysbench-0.4.12/sysbench -lmysqlclient_r -lz -lcrypt -lnsl -lmygcc -lrt -lm: No such file or directory
../libtool: line 5163: Xgcc -pthread "" "" -o @OUTPUT@ sysbench.o sb_timer.o sb_options.o sb_logger.o db_driver.o "" tests/fileio/libsbfileio.a tests/threads/libsbthreads.a tests/memory/libsbmemory.a tests/cpu/libsbcpu.a tests/oltp/libsboltp.a tests/mutex/libsbmutex.a drivers/mysql/libsbmysql.a -L/db/download/benchmarkTools/sysbench-0.4.12/sysbench -lmysqlclient_r -lz -lcrypt -lnsl -lmygcc -lrt -lm: No such file or directory
../libtool: line 5168: X: command not found
../libtool: line 5172: : command not found
make[2]: Leaving directory `/db/download/benchmarkTools/sysbench-0.4.12/sysbench'
make[1]: Leaving directory `/db/download/benchmarkTools/sysbench-0.4.12/sysbench'
make[1]: Entering directory `/db/download/benchmarkTools/sysbench-0.4.12'
make[1]: Nothing to be done for `all-am'.
make[1]: Leaving directory `/db/download/benchmarkTools/sysbench-0.4.12'
just execute ./autogen.sh in sysbench source directory.
then make & make install
Making all in doc
make[1]: Entering directory `/db/download/benchmarkTools/sysbench-0.4.12/doc'
Making all in xsl
make[2]: Entering directory `/db/download/benchmarkTools/sysbench-0.4.12/doc/xsl'
make[2]: Nothing to be done for `all'.
make[2]: Leaving directory `/db/download/benchmarkTools/sysbench-0.4.12/doc/xsl'
make[2]: Entering directory `/db/download/benchmarkTools/sysbench-0.4.12/doc'
make[2]: Nothing to be done for `all-am'.
make[2]: Leaving directory `/db/download/benchmarkTools/sysbench-0.4.12/doc'
make[1]: Leaving directory `/db/download/benchmarkTools/sysbench-0.4.12/doc'
Making all in sysbench
make[1]: Entering directory `/db/download/benchmarkTools/sysbench-0.4.12/sysbench'
Making all in drivers
make[2]: Entering directory `/db/download/benchmarkTools/sysbench-0.4.12/sysbench/drivers'
Making all in mysql
make[3]: Entering directory `/db/download/benchmarkTools/sysbench-0.4.12/sysbench/drivers/mysql'
gcc -DHAVE_CONFIG_H -I. -I../../../config -I/usr/include/mysql -g -pipe -Wp,-D_FORTIFY_SOURCE=2 -fexceptions -fstack-protector --param=ssp-buffer-size=4 -m64 -DUNIV_LINUX -D_REENTRANT -D_XOPEN_SOURCE=500 -D_GNU_SOURCE -I../../../sysbench -pthread -g -O2 -MT libsbmysql_a-drv_mysql.o -MD -MP -MF .deps/libsbmysql_a-drv_mysql.Tpo -c -o libsbmysql_a-drv_mysql.o `test -f 'drv_mysql.c' || echo './'`drv_mysql.c
mv -f .deps/libsbmysql_a-drv_mysql.Tpo .deps/libsbmysql_a-drv_mysql.Po
rm -f libsbmysql.a
ar cru libsbmysql.a libsbmysql_a-drv_mysql.o
ranlib libsbmysql.a
make[3]: Leaving directory `/db/download/benchmarkTools/sysbench-0.4.12/sysbench/drivers/mysql'
make[3]: Entering directory `/db/download/benchmarkTools/sysbench-0.4.12/sysbench/drivers'
make[3]: Nothing to be done for `all-am'.
make[3]: Leaving directory `/db/download/benchmarkTools/sysbench-0.4.12/sysbench/drivers'
make[2]: Leaving directory `/db/download/benchmarkTools/sysbench-0.4.12/sysbench/drivers'
Making all in tests
make[2]: Entering directory `/db/download/benchmarkTools/sysbench-0.4.12/sysbench/tests'
Making all in cpu
make[3]: Entering directory `/db/download/benchmarkTools/sysbench-0.4.12/sysbench/tests/cpu'
gcc -DHAVE_CONFIG_H -I. -I../../../config -D_REENTRANT -D_XOPEN_SOURCE=500 -D_GNU_SOURCE -I../../../sysbench -pthread -g -O2 -MT libsbcpu_a-sb_cpu.o -MD -MP -MF .deps/libsbcpu_a-sb_cpu.Tpo -c -o libsbcpu_a-sb_cpu.o `test -f 'sb_cpu.c' || echo './'`sb_cpu.c
mv -f .deps/libsbcpu_a-sb_cpu.Tpo .deps/libsbcpu_a-sb_cpu.Po
rm -f libsbcpu.a
ar cru libsbcpu.a libsbcpu_a-sb_cpu.o
ranlib libsbcpu.a
make[3]: Leaving directory `/db/download/benchmarkTools/sysbench-0.4.12/sysbench/tests/cpu'
Making all in fileio
make[3]: Entering directory `/db/download/benchmarkTools/sysbench-0.4.12/sysbench/tests/fileio'
gcc -DHAVE_CONFIG_H -I. -I../../../config -D_REENTRANT -D_XOPEN_SOURCE=500 -D_GNU_SOURCE -I../../../sysbench -pthread -g -O2 -MT libsbfileio_a-sb_fileio.o -MD -MP -MF .deps/libsbfileio_a-sb_fileio.Tpo -c -o libsbfileio_a-sb_fileio.o `test -f 'sb_fileio.c' || echo './'`sb_fileio.c
mv -f .deps/libsbfileio_a-sb_fileio.Tpo .deps/libsbfileio_a-sb_fileio.Po
gcc -DHAVE_CONFIG_H -I. -I../../../config -D_REENTRANT -D_XOPEN_SOURCE=500 -D_GNU_SOURCE -I../../../sysbench -pthread -g -O2 -MT libsbfileio_a-crc32.o -MD -MP -MF .deps/libsbfileio_a-crc32.Tpo -c -o libsbfileio_a-crc32.o `test -f 'crc32.c' || echo './'`crc32.c
mv -f .deps/libsbfileio_a-crc32.Tpo .deps/libsbfileio_a-crc32.Po
rm -f libsbfileio.a
ar cru libsbfileio.a libsbfileio_a-sb_fileio.o libsbfileio_a-crc32.o
ranlib libsbfileio.a
make[3]: Leaving directory `/db/download/benchmarkTools/sysbench-0.4.12/sysbench/tests/fileio'
Making all in memory
make[3]: Entering directory `/db/download/benchmarkTools/sysbench-0.4.12/sysbench/tests/memory'
gcc -DHAVE_CONFIG_H -I. -I../../../config -D_REENTRANT -D_XOPEN_SOURCE=500 -D_GNU_SOURCE -I../../../sysbench -pthread -g -O2 -MT libsbmemory_a-sb_memory.o -MD -MP -MF .deps/libsbmemory_a-sb_memory.Tpo -c -o libsbmemory_a-sb_memory.o `test -f 'sb_memory.c' || echo './'`sb_memory.c
mv -f .deps/libsbmemory_a-sb_memory.Tpo .deps/libsbmemory_a-sb_memory.Po
rm -f libsbmemory.a
ar cru libsbmemory.a libsbmemory_a-sb_memory.o
ranlib libsbmemory.a
make[3]: Leaving directory `/db/download/benchmarkTools/sysbench-0.4.12/sysbench/tests/memory'
Making all in threads
make[3]: Entering directory `/db/download/benchmarkTools/sysbench-0.4.12/sysbench/tests/threads'
gcc -DHAVE_CONFIG_H -I. -I../../../config -D_REENTRANT -D_XOPEN_SOURCE=500 -D_GNU_SOURCE -I../../../sysbench -pthread -g -O2 -MT libsbthreads_a-sb_threads.o -MD -MP -MF .deps/libsbthreads_a-sb_threads.Tpo -c -o libsbthreads_a-sb_threads.o `test -f 'sb_threads.c' || echo './'`sb_threads.c
mv -f .deps/libsbthreads_a-sb_threads.Tpo .deps/libsbthreads_a-sb_threads.Po
rm -f libsbthreads.a
ar cru libsbthreads.a libsbthreads_a-sb_threads.o
ranlib libsbthreads.a
make[3]: Leaving directory `/db/download/benchmarkTools/sysbench-0.4.12/sysbench/tests/threads'
Making all in mutex
make[3]: Entering directory `/db/download/benchmarkTools/sysbench-0.4.12/sysbench/tests/mutex'
gcc -DHAVE_CONFIG_H -I. -I../../../config -D_REENTRANT -D_XOPEN_SOURCE=500 -D_GNU_SOURCE -I../../../sysbench -pthread -g -O2 -MT libsbmutex_a-sb_mutex.o -MD -MP -MF .deps/libsbmutex_a-sb_mutex.Tpo -c -o libsbmutex_a-sb_mutex.o `test -f 'sb_mutex.c' || echo './'`sb_mutex.c
mv -f .deps/libsbmutex_a-sb_mutex.Tpo .deps/libsbmutex_a-sb_mutex.Po
rm -f libsbmutex.a
ar cru libsbmutex.a libsbmutex_a-sb_mutex.o
ranlib libsbmutex.a
make[3]: Leaving directory `/db/download/benchmarkTools/sysbench-0.4.12/sysbench/tests/mutex'
Making all in oltp
make[3]: Entering directory `/db/download/benchmarkTools/sysbench-0.4.12/sysbench/tests/oltp'
gcc -DHAVE_CONFIG_H -I. -I../../../config -I./.. -D_REENTRANT -D_XOPEN_SOURCE=500 -D_GNU_SOURCE -I../../../sysbench -I/usr/include/mysql -g -pipe -Wp,-D_FORTIFY_SOURCE=2 -fexceptions -fstack-protector --param=ssp-buffer-size=4 -m64 -DUNIV_LINUX -pthread -g -O2 -MT libsboltp_a-sb_oltp.o -MD -MP -MF .deps/libsboltp_a-sb_oltp.Tpo -c -o libsboltp_a-sb_oltp.o `test -f 'sb_oltp.c' || echo './'`sb_oltp.c
mv -f .deps/libsboltp_a-sb_oltp.Tpo .deps/libsboltp_a-sb_oltp.Po
rm -f libsboltp.a
ar cru libsboltp.a libsboltp_a-sb_oltp.o
ranlib libsboltp.a
make[3]: Leaving directory `/db/download/benchmarkTools/sysbench-0.4.12/sysbench/tests/oltp'
make[3]: Entering directory `/db/download/benchmarkTools/sysbench-0.4.12/sysbench/tests'
make[3]: Nothing to be done for `all-am'.
make[3]: Leaving directory `/db/download/benchmarkTools/sysbench-0.4.12/sysbench/tests'
make[2]: Leaving directory `/db/download/benchmarkTools/sysbench-0.4.12/sysbench/tests'
Making all in .
make[2]: Entering directory `/db/download/benchmarkTools/sysbench-0.4.12/sysbench'
gcc -DHAVE_CONFIG_H -I. -I../config -D_REENTRANT -D_XOPEN_SOURCE=500 -D_GNU_SOURCE -I../sysbench -pthread -g -O2 -MT sysbench.o -MD -MP -MF .deps/sysbench.Tpo -c -o sysbench.o sysbench.c
mv -f .deps/sysbench.Tpo .deps/sysbench.Po
gcc -DHAVE_CONFIG_H -I. -I../config -D_REENTRANT -D_XOPEN_SOURCE=500 -D_GNU_SOURCE -I../sysbench -pthread -g -O2 -MT sb_timer.o -MD -MP -MF .deps/sb_timer.Tpo -c -o sb_timer.o sb_timer.c
mv -f .deps/sb_timer.Tpo .deps/sb_timer.Po
gcc -DHAVE_CONFIG_H -I. -I../config -D_REENTRANT -D_XOPEN_SOURCE=500 -D_GNU_SOURCE -I../sysbench -pthread -g -O2 -MT sb_options.o -MD -MP -MF .deps/sb_options.Tpo -c -o sb_options.o sb_options.c
mv -f .deps/sb_options.Tpo .deps/sb_options.Po
gcc -DHAVE_CONFIG_H -I. -I../config -D_REENTRANT -D_XOPEN_SOURCE=500 -D_GNU_SOURCE -I../sysbench -pthread -g -O2 -MT sb_logger.o -MD -MP -MF .deps/sb_logger.Tpo -c -o sb_logger.o sb_logger.c
mv -f .deps/sb_logger.Tpo .deps/sb_logger.Po
gcc -DHAVE_CONFIG_H -I. -I../config -D_REENTRANT -D_XOPEN_SOURCE=500 -D_GNU_SOURCE -I../sysbench -pthread -g -O2 -MT db_driver.o -MD -MP -MF .deps/db_driver.Tpo -c -o db_driver.o db_driver.c
mv -f .deps/db_driver.Tpo .deps/db_driver.Po
/bin/sh ../libtool --tag=CC --mode=link gcc -pthread -g -O2 -o sysbench sysbench.o sb_timer.o sb_options.o sb_logger.o db_driver.o tests/fileio/libsbfileio.a tests/threads/libsbthreads.a tests/memory/libsbmemory.a tests/cpu/libsbcpu.a tests/oltp/libsboltp.a tests/mutex/libsbmutex.a drivers/mysql/libsbmysql.a -rdynamic -L/usr/lib64/mysql -lmysqlclient_r -lz -lcrypt -lnsl -lm -lmygcc -lrt -lm
../libtool: line 838: X--tag=CC: command not found
../libtool: line 871: libtool: ignoring unknown tag : command not found
../libtool: line 838: X--mode=link: command not found
../libtool: line 1004: *** Warning: inferring the mode of operation is deprecated.: command not found
../libtool: line 1005: *** Future versions of Libtool will require --mode=MODE be specified.: command not found
../libtool: line 2231: X-g: command not found
../libtool: line 2231: X-O2: command not found
../libtool: line 2231: X-rdynamic: command not found
../libtool: line 1951: X-L/usr/lib64/mysql: No such file or directory
../libtool: line 2400: Xsysbench: command not found
../libtool: line 2405: X: command not found
../libtool: line 2412: Xsysbench: command not found
../libtool: line 2547: X-lmysqlclient_r: command not found
../libtool: line 2547: X-lz: command not found
../libtool: line 2547: X-lcrypt: command not found
../libtool: line 2547: X-lnsl: command not found
../libtool: line 2547: X-lm: command not found
../libtool: line 2547: X-lmygcc: command not found
../libtool: line 2547: X-lrt: command not found
../libtool: line 2547: X-lm: command not found
../libtool: line 2629: X-L/db/download/benchmarkTools/sysbench-0.4.12/sysbench: No such file or directory
../libtool: line 2547: X-lmysqlclient_r: command not found
../libtool: line 2547: X-lz: command not found
../libtool: line 2547: X-lcrypt: command not found
../libtool: line 2547: X-lnsl: command not found
../libtool: line 2547: X-lmygcc: command not found
../libtool: line 2547: X-lrt: command not found
../libtool: line 2547: X-lm: command not found
../libtool: line 2629: X-L/db/download/benchmarkTools/sysbench-0.4.12/sysbench: No such file or directory
../libtool: line 2547: X-lmysqlclient_r: command not found
../libtool: line 2547: X-lz: command not found
../libtool: line 2547: X-lcrypt: command not found
../libtool: line 2547: X-lnsl: command not found
../libtool: line 2547: X-lmygcc: command not found
../libtool: line 2547: X-lrt: command not found
../libtool: line 2547: X-lm: command not found
../libtool: line 5162: Xgcc -pthread "" "" -o @OUTPUT@ sysbench.o sb_timer.o sb_options.o sb_logger.o db_driver.o "" tests/fileio/libsbfileio.a tests/threads/libsbthreads.a tests/memory/libsbmemory.a tests/cpu/libsbcpu.a tests/oltp/libsboltp.a tests/mutex/libsbmutex.a drivers/mysql/libsbmysql.a -L/db/download/benchmarkTools/sysbench-0.4.12/sysbench -lmysqlclient_r -lz -lcrypt -lnsl -lmygcc -lrt -lm: No such file or directory
../libtool: line 5163: Xgcc -pthread "" "" -o @OUTPUT@ sysbench.o sb_timer.o sb_options.o sb_logger.o db_driver.o "" tests/fileio/libsbfileio.a tests/threads/libsbthreads.a tests/memory/libsbmemory.a tests/cpu/libsbcpu.a tests/oltp/libsboltp.a tests/mutex/libsbmutex.a drivers/mysql/libsbmysql.a -L/db/download/benchmarkTools/sysbench-0.4.12/sysbench -lmysqlclient_r -lz -lcrypt -lnsl -lmygcc -lrt -lm: No such file or directory
../libtool: line 5168: X: command not found
../libtool: line 5172: : command not found
make[2]: Leaving directory `/db/download/benchmarkTools/sysbench-0.4.12/sysbench'
make[1]: Leaving directory `/db/download/benchmarkTools/sysbench-0.4.12/sysbench'
make[1]: Entering directory `/db/download/benchmarkTools/sysbench-0.4.12'
make[1]: Nothing to be done for `all-am'.
make[1]: Leaving directory `/db/download/benchmarkTools/sysbench-0.4.12'
just execute ./autogen.sh in sysbench source directory.
then make & make install
super-smack compilation error
make all-recursive
make[1]: Entering directory `/db/download/benchmarkTools/super-smack-1.3'
Making all in src
make[2]: Entering directory `/db/download/benchmarkTools/super-smack-1.3/src'
g++ -DHAVE_CONFIG_H -I. -I. -I.. -I/usr/include/mysql -g -O2 -c super-smack.cc
g++ -DHAVE_CONFIG_H -I. -I. -I.. -I/usr/include/mysql -g -O2 -c client.cc
g++ -DHAVE_CONFIG_H -I. -I. -I.. -I/usr/include/mysql -g -O2 -c engines.cc
g++ -DHAVE_CONFIG_H -I. -I. -I.. -I/usr/include/mysql -g -O2 -c die.cc
g++ -DHAVE_CONFIG_H -I. -I. -I.. -I/usr/include/mysql -g -O2 -c dictionary.cc
bison -y -d super-smack-yacc.yy && mv y.tab.c super-smack-yacc.cc
if test -f y.tab.h; then \
if cmp -s y.tab.h super-smack-yacc.h; then rm -f y.tab.h; else mv y.tab.h super-smack-yacc.h; fi; \
else :; fi
g++ -DHAVE_CONFIG_H -I. -I. -I.. -I/usr/include/mysql -g -O2 -c super-smack-yacc.cc
flex super-smack-lex.ll && mv lex.yy.c super-smack-lex.cc
g++ -DHAVE_CONFIG_H -I. -I. -I.. -I/usr/include/mysql -g -O2 -c super-smack-lex.cc
g++ -DHAVE_CONFIG_H -I. -I. -I.. -I/usr/include/mysql -g -O2 -c query.cc
query.cc: In member function 'void Query_report::fd_send(int)':
query.cc:200: error: cast from 'char*' to 'unsigned int' loses precision
query.cc:200: error: cast from 'char*' to 'unsigned int' loses precision
query.cc:219: error: cast from 'char*' to 'unsigned int' loses precision
query.cc:219: error: cast from 'char*' to 'unsigned int' loses precision
make[2]: *** [query.o] Error 1
make[2]: Leaving directory `/db/download/benchmarkTools/super-smack-1.3/src'
make[1]: *** [all-recursive] Error 1
make[1]: Leaving directory `/db/download/benchmarkTools/super-smack-1.3'
make: *** [all-recursive-am] Error 2
modify src/query.cc according to gcc-lib and linux kernel version
http://forum.percona.com/index.php/t/706/
this worked for me.
copy and save query.cc
#####################################################
/* Copyright (C) 2000 MySQL AB & MySQL Finland AB & TCX DataKonsult AB
This program is free software; you can redistribute it and/or modify
it under the terms of the GNU General Public License as published by
the Free Software Foundation; either version 2 of the License, or
(at your option) any later version.
This program is distributed in the hope that it will be useful,
but WITHOUT ANY WARRANTY; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
GNU General Public License for more details.
You should have received a copy of the GNU General Public License
along with this program; if not, write to the Free Software
Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA */
#include "../config.h"
#include
#include
#include
#include
#include
#include
#include "query.h"
#include "die.h"
#include "client.h"
#define MAX_REPORT_LEN 1024
#define MAX_QUERY 8192
void Query::print()
{
cout << "Query:" << "query=" << query << ",name=" << name <<
",has_result_set=" << has_result_set << ",type_name=" <<
type_name << ",parsed=" << parsed << endl;
}
void Query_type_report::update(int num_queries, int max_q_time, int min_q_time)
{
this->num_queries += num_queries;
if(max_time < max_q_time) max_time = max_q_time;
if(min_time > min_q_time) min_time = min_q_time;
}
void Query_type_report::update(int q_time)
{
if(num_queries)
min_time = max_time = q_time;
else
{
if(min_time > q_time) min_time = q_time;
if(max_time < q_time) max_time = q_time;
}
num_queries++;
}
void Query_type_report::print(int t_s, int t_us)
{
char q_per_s[128];
if(t_s == 0 && t_us == 0)
strcpy(q_per_s, "n/a");
else
snprintf(q_per_s, sizeof(q_per_s), "%.2f", (float)num_queries/
(float)(t_s + (float)t_us/1000000.0));
cout << num_queries << "\t" << max_time << "\t" << min_time <<
"\t" << q_per_s << endl;
}
void Query_report::update(const char* type_name, int q_time)
{
Query_type_report *qtr = type_reports[type_name];
if(qtr)
{
qtr->update(q_time);
}
}
void Query_charge::fire(Client* cli)
{
int i;
for(i = 0; i < num_shots; i++)
{
struct timeval start, end;
gettimeofday(&start, NULL);
if(query.parsed)
cli->safe_parsed_query(query.query.c_str(), MAX_QUERY, 1);
else
cli->safe_query(query.query.c_str(), 1);
if(query.has_result_set)
cli->lose_result();
gettimeofday(&end, NULL);
int q_time = (end.tv_sec - start.tv_sec)*1000 +
(end.tv_usec - start.tv_usec)/1000;
cli->qb->update_report(query.type_name, q_time);
}
}
void Query_report::print()
{
//flock(1, LOCK_EX); // lock stdout so that we won't have a conflict from
fcntl(1, F_SETLK, F_WRLCK);
// another client
cout << "Query_type\tnum_queries\tmax_time\tmin_time\tq_per_s" << endl;
map >::iterator i =
type_reports.begin();
if(type_reports.size())
while(i != type_reports.end())
{
Query_type_report *qtr = (*i).second;
if(qtr)
{
cout << (*i).first << "\t" ;
qtr->print(end.tv_sec - start.tv_sec,
end.tv_usec - start.tv_usec );
}
else
die(0, "Internal error: NULL query type report, %d report types",
type_reports.size());
i++;
}
fcntl(1, F_UNLCK, F_WRLCK);
//flock(1, LOCK_UN);
}
void Query_report::start_clock()
{
gettimeofday(&start, NULL);
}
void Query_report::stop_clock()
{
gettimeofday(&end, NULL);
}
void Query_report::update_from_fd(int fd)
{
char buf[MAX_REPORT_LEN];
int q_type_len, data_len, bytes_to_read, num_recs;
if((data_len = read(fd, buf, 1)) < 0)
die(1, "error on read() in update_from_fd()");
if(data_len == 0) return;
num_recs = (int)(*(unsigned char*)buf);
int i;
for(i = 0; i < num_recs; i++)
{
if((data_len = read(fd, buf, 1)) < 0)
die(1, "error on read() in update_from_fd()");
if(data_len == 0) return;
q_type_len = (int) (*(unsigned char*)buf);
bytes_to_read = q_type_len + 3 * sizeof(int);
if((data_len = read(fd, buf, bytes_to_read)) < 0)
die(1, "error on read() in update_from_fd():");
if(data_len < bytes_to_read)
die(1, "incomplete read in update_from_fd(), fix it some day");
char* read_q_type = buf;
// watch this cool hack, moving them, bytes around!
int *p_read_num_queries = (int*)(buf + q_type_len),
*read_max_q_time, *read_min_q_time;
read_max_q_time = p_read_num_queries + 1;
read_min_q_time = read_max_q_time + 1;
int read_num_queries = *p_read_num_queries;
// now that we've save num_queries, it is safe to slap \0
*p_read_num_queries = 0; // 4 bytes at once is OK, even faster
Query_type_report *q = type_reports[read_q_type];
if(q)
q->update(read_num_queries, *read_max_q_time, *read_min_q_time);
else
die(0, "Internal error, invalid q_type '%s'", read_q_type);
}
}
void Query_report::fd_send(int fd)
{
map >::iterator i =
type_reports.begin();
char buf[MAX_REPORT_LEN];
long len = 0; int num_recs = 0;
char* p = (char*)buf + 1, *p_end = (char*)buf+sizeof(buf);
while(i != type_reports.end())
{
string s((*i).first);
long str_len = (*i).first.length();
if((long)p + str_len + 3 *sizeof(int) < (long)p_end )
{
*p++ = (char) str_len;
const char* q_type_name = s.c_str();
memcpy(p,q_type_name , str_len);
p += str_len;
memcpy(p, &((*i).second->num_queries), sizeof(int));
p += sizeof(int);
memcpy(p, &((*i).second->max_time), sizeof(int));
p += sizeof(int);
memcpy(p, &((*i).second->min_time), sizeof(int));
p += sizeof(int);
i++;
num_recs++;
}
else
die(0, "report buffer overflow -- too many query types");
}
len = (long)p - (long)buf;
*(buf) = num_recs;
if(write(fd, buf, len) != len)
die(1, "write error in fd_send:");
}
Query_barrel::~Query_barrel()
{
map >::iterator i =
qr.type_reports.begin();
while(i != qr.type_reports.end())
{
delete (*i).second;
i++;
}
int j;
for(j = 0; j < actions.size(); j++)
delete actions[j];
}
###########################################################
make[1]: Entering directory `/db/download/benchmarkTools/super-smack-1.3'
Making all in src
make[2]: Entering directory `/db/download/benchmarkTools/super-smack-1.3/src'
g++ -DHAVE_CONFIG_H -I. -I. -I.. -I/usr/include/mysql -g -O2 -c super-smack.cc
g++ -DHAVE_CONFIG_H -I. -I. -I.. -I/usr/include/mysql -g -O2 -c client.cc
g++ -DHAVE_CONFIG_H -I. -I. -I.. -I/usr/include/mysql -g -O2 -c engines.cc
g++ -DHAVE_CONFIG_H -I. -I. -I.. -I/usr/include/mysql -g -O2 -c die.cc
g++ -DHAVE_CONFIG_H -I. -I. -I.. -I/usr/include/mysql -g -O2 -c dictionary.cc
bison -y -d super-smack-yacc.yy && mv y.tab.c super-smack-yacc.cc
if test -f y.tab.h; then \
if cmp -s y.tab.h super-smack-yacc.h; then rm -f y.tab.h; else mv y.tab.h super-smack-yacc.h; fi; \
else :; fi
g++ -DHAVE_CONFIG_H -I. -I. -I.. -I/usr/include/mysql -g -O2 -c super-smack-yacc.cc
flex super-smack-lex.ll && mv lex.yy.c super-smack-lex.cc
g++ -DHAVE_CONFIG_H -I. -I. -I.. -I/usr/include/mysql -g -O2 -c super-smack-lex.cc
g++ -DHAVE_CONFIG_H -I. -I. -I.. -I/usr/include/mysql -g -O2 -c query.cc
query.cc: In member function 'void Query_report::fd_send(int)':
query.cc:200: error: cast from 'char*' to 'unsigned int' loses precision
query.cc:200: error: cast from 'char*' to 'unsigned int' loses precision
query.cc:219: error: cast from 'char*' to 'unsigned int' loses precision
query.cc:219: error: cast from 'char*' to 'unsigned int' loses precision
make[2]: *** [query.o] Error 1
make[2]: Leaving directory `/db/download/benchmarkTools/super-smack-1.3/src'
make[1]: *** [all-recursive] Error 1
make[1]: Leaving directory `/db/download/benchmarkTools/super-smack-1.3'
make: *** [all-recursive-am] Error 2
modify src/query.cc according to gcc-lib and linux kernel version
http://forum.percona.com/index.php/t/706/
this worked for me.
copy and save query.cc
#####################################################
/* Copyright (C) 2000 MySQL AB & MySQL Finland AB & TCX DataKonsult AB
This program is free software; you can redistribute it and/or modify
it under the terms of the GNU General Public License as published by
the Free Software Foundation; either version 2 of the License, or
(at your option) any later version.
This program is distributed in the hope that it will be useful,
but WITHOUT ANY WARRANTY; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
GNU General Public License for more details.
You should have received a copy of the GNU General Public License
along with this program; if not, write to the Free Software
Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA */
#include "../config.h"
#include
#include
#include
#include
#include
#include
#include "query.h"
#include "die.h"
#include "client.h"
#define MAX_REPORT_LEN 1024
#define MAX_QUERY 8192
void Query::print()
{
cout << "Query:" << "query=" << query << ",name=" << name <<
",has_result_set=" << has_result_set << ",type_name=" <<
type_name << ",parsed=" << parsed << endl;
}
void Query_type_report::update(int num_queries, int max_q_time, int min_q_time)
{
this->num_queries += num_queries;
if(max_time < max_q_time) max_time = max_q_time;
if(min_time > min_q_time) min_time = min_q_time;
}
void Query_type_report::update(int q_time)
{
if(num_queries)
min_time = max_time = q_time;
else
{
if(min_time > q_time) min_time = q_time;
if(max_time < q_time) max_time = q_time;
}
num_queries++;
}
void Query_type_report::print(int t_s, int t_us)
{
char q_per_s[128];
if(t_s == 0 && t_us == 0)
strcpy(q_per_s, "n/a");
else
snprintf(q_per_s, sizeof(q_per_s), "%.2f", (float)num_queries/
(float)(t_s + (float)t_us/1000000.0));
cout << num_queries << "\t" << max_time << "\t" << min_time <<
"\t" << q_per_s << endl;
}
void Query_report::update(const char* type_name, int q_time)
{
Query_type_report *qtr = type_reports[type_name];
if(qtr)
{
qtr->update(q_time);
}
}
void Query_charge::fire(Client* cli)
{
int i;
for(i = 0; i < num_shots; i++)
{
struct timeval start, end;
gettimeofday(&start, NULL);
if(query.parsed)
cli->safe_parsed_query(query.query.c_str(), MAX_QUERY, 1);
else
cli->safe_query(query.query.c_str(), 1);
if(query.has_result_set)
cli->lose_result();
gettimeofday(&end, NULL);
int q_time = (end.tv_sec - start.tv_sec)*1000 +
(end.tv_usec - start.tv_usec)/1000;
cli->qb->update_report(query.type_name, q_time);
}
}
void Query_report::print()
{
//flock(1, LOCK_EX); // lock stdout so that we won't have a conflict from
fcntl(1, F_SETLK, F_WRLCK);
// another client
cout << "Query_type\tnum_queries\tmax_time\tmin_time\tq_per_s" << endl;
map >::iterator i =
type_reports.begin();
if(type_reports.size())
while(i != type_reports.end())
{
Query_type_report *qtr = (*i).second;
if(qtr)
{
cout << (*i).first << "\t" ;
qtr->print(end.tv_sec - start.tv_sec,
end.tv_usec - start.tv_usec );
}
else
die(0, "Internal error: NULL query type report, %d report types",
type_reports.size());
i++;
}
fcntl(1, F_UNLCK, F_WRLCK);
//flock(1, LOCK_UN);
}
void Query_report::start_clock()
{
gettimeofday(&start, NULL);
}
void Query_report::stop_clock()
{
gettimeofday(&end, NULL);
}
void Query_report::update_from_fd(int fd)
{
char buf[MAX_REPORT_LEN];
int q_type_len, data_len, bytes_to_read, num_recs;
if((data_len = read(fd, buf, 1)) < 0)
die(1, "error on read() in update_from_fd()");
if(data_len == 0) return;
num_recs = (int)(*(unsigned char*)buf);
int i;
for(i = 0; i < num_recs; i++)
{
if((data_len = read(fd, buf, 1)) < 0)
die(1, "error on read() in update_from_fd()");
if(data_len == 0) return;
q_type_len = (int) (*(unsigned char*)buf);
bytes_to_read = q_type_len + 3 * sizeof(int);
if((data_len = read(fd, buf, bytes_to_read)) < 0)
die(1, "error on read() in update_from_fd():");
if(data_len < bytes_to_read)
die(1, "incomplete read in update_from_fd(), fix it some day");
char* read_q_type = buf;
// watch this cool hack, moving them, bytes around!
int *p_read_num_queries = (int*)(buf + q_type_len),
*read_max_q_time, *read_min_q_time;
read_max_q_time = p_read_num_queries + 1;
read_min_q_time = read_max_q_time + 1;
int read_num_queries = *p_read_num_queries;
// now that we've save num_queries, it is safe to slap \0
*p_read_num_queries = 0; // 4 bytes at once is OK, even faster
Query_type_report *q = type_reports[read_q_type];
if(q)
q->update(read_num_queries, *read_max_q_time, *read_min_q_time);
else
die(0, "Internal error, invalid q_type '%s'", read_q_type);
}
}
void Query_report::fd_send(int fd)
{
map >::iterator i =
type_reports.begin();
char buf[MAX_REPORT_LEN];
long len = 0; int num_recs = 0;
char* p = (char*)buf + 1, *p_end = (char*)buf+sizeof(buf);
while(i != type_reports.end())
{
string s((*i).first);
long str_len = (*i).first.length();
if((long)p + str_len + 3 *sizeof(int) < (long)p_end )
{
*p++ = (char) str_len;
const char* q_type_name = s.c_str();
memcpy(p,q_type_name , str_len);
p += str_len;
memcpy(p, &((*i).second->num_queries), sizeof(int));
p += sizeof(int);
memcpy(p, &((*i).second->max_time), sizeof(int));
p += sizeof(int);
memcpy(p, &((*i).second->min_time), sizeof(int));
p += sizeof(int);
i++;
num_recs++;
}
else
die(0, "report buffer overflow -- too many query types");
}
len = (long)p - (long)buf;
*(buf) = num_recs;
if(write(fd, buf, len) != len)
die(1, "write error in fd_send:");
}
Query_barrel::~Query_barrel()
{
map >::iterator i =
qr.type_reports.begin();
while(i != qr.type_reports.end())
{
delete (*i).second;
i++;
}
int j;
for(j = 0; j < actions.size(); j++)
delete actions[j];
}
###########################################################
Subscribe to:
Posts (Atom)