vincentchu-handlersocket 0.0.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- data/ext/HandlerSocket-Plugin-for-MySQL/AUTHORS +22 -0
- data/ext/HandlerSocket-Plugin-for-MySQL/COPYING +30 -0
- data/ext/HandlerSocket-Plugin-for-MySQL/ChangeLog +12 -0
- data/ext/HandlerSocket-Plugin-for-MySQL/Makefile.am +87 -0
- data/ext/HandlerSocket-Plugin-for-MySQL/README +78 -0
- data/ext/HandlerSocket-Plugin-for-MySQL/autogen.sh +117 -0
- data/ext/HandlerSocket-Plugin-for-MySQL/client/Makefile.am +24 -0
- data/ext/HandlerSocket-Plugin-for-MySQL/client/hsclient.cpp +88 -0
- data/ext/HandlerSocket-Plugin-for-MySQL/client/hslongrun.cpp +1041 -0
- data/ext/HandlerSocket-Plugin-for-MySQL/client/hspool_test.pl +224 -0
- data/ext/HandlerSocket-Plugin-for-MySQL/client/hstest.cpp +1532 -0
- data/ext/HandlerSocket-Plugin-for-MySQL/client/hstest.pl +228 -0
- data/ext/HandlerSocket-Plugin-for-MySQL/client/hstest_hs.sh +4 -0
- data/ext/HandlerSocket-Plugin-for-MySQL/client/hstest_hs_more50.sh +4 -0
- data/ext/HandlerSocket-Plugin-for-MySQL/client/hstest_md.sh +7 -0
- data/ext/HandlerSocket-Plugin-for-MySQL/client/hstest_my.sh +3 -0
- data/ext/HandlerSocket-Plugin-for-MySQL/client/hstest_my_more50.sh +3 -0
- data/ext/HandlerSocket-Plugin-for-MySQL/configure.ac +144 -0
- data/ext/HandlerSocket-Plugin-for-MySQL/docs-en/about-handlersocket.en.txt +72 -0
- data/ext/HandlerSocket-Plugin-for-MySQL/docs-en/configuration-options.en.txt +99 -0
- data/ext/HandlerSocket-Plugin-for-MySQL/docs-en/installation.en.txt +92 -0
- data/ext/HandlerSocket-Plugin-for-MySQL/docs-en/perl-client.en.txt +135 -0
- data/ext/HandlerSocket-Plugin-for-MySQL/docs-en/protocol.en.txt +205 -0
- data/ext/HandlerSocket-Plugin-for-MySQL/docs-ja/about-handlersocket.ja.txt +51 -0
- data/ext/HandlerSocket-Plugin-for-MySQL/docs-ja/installation.ja.txt +88 -0
- data/ext/HandlerSocket-Plugin-for-MySQL/docs-ja/perl-client.ja.txt +127 -0
- data/ext/HandlerSocket-Plugin-for-MySQL/docs-ja/protocol.ja.txt +180 -0
- data/ext/HandlerSocket-Plugin-for-MySQL/handlersocket/COPYRIGHT.txt +27 -0
- data/ext/HandlerSocket-Plugin-for-MySQL/handlersocket/Makefile.am +10 -0
- data/ext/HandlerSocket-Plugin-for-MySQL/handlersocket/Makefile.plain.template +31 -0
- data/ext/HandlerSocket-Plugin-for-MySQL/handlersocket/database.cpp +1190 -0
- data/ext/HandlerSocket-Plugin-for-MySQL/handlersocket/database.hpp +142 -0
- data/ext/HandlerSocket-Plugin-for-MySQL/handlersocket/handlersocket.cpp +222 -0
- data/ext/HandlerSocket-Plugin-for-MySQL/handlersocket/handlersocket.spec.template +29 -0
- data/ext/HandlerSocket-Plugin-for-MySQL/handlersocket/hstcpsvr.cpp +149 -0
- data/ext/HandlerSocket-Plugin-for-MySQL/handlersocket/hstcpsvr.hpp +58 -0
- data/ext/HandlerSocket-Plugin-for-MySQL/handlersocket/hstcpsvr_worker.cpp +951 -0
- data/ext/HandlerSocket-Plugin-for-MySQL/handlersocket/hstcpsvr_worker.hpp +35 -0
- data/ext/HandlerSocket-Plugin-for-MySQL/handlersocket/mysql_incl.hpp +50 -0
- data/ext/HandlerSocket-Plugin-for-MySQL/libhsclient/COPYRIGHT.txt +27 -0
- data/ext/HandlerSocket-Plugin-for-MySQL/libhsclient/Makefile.am +12 -0
- data/ext/HandlerSocket-Plugin-for-MySQL/libhsclient/Makefile.plain +27 -0
- data/ext/HandlerSocket-Plugin-for-MySQL/libhsclient/allocator.hpp +64 -0
- data/ext/HandlerSocket-Plugin-for-MySQL/libhsclient/auto_addrinfo.hpp +49 -0
- data/ext/HandlerSocket-Plugin-for-MySQL/libhsclient/auto_file.hpp +64 -0
- data/ext/HandlerSocket-Plugin-for-MySQL/libhsclient/auto_ptrcontainer.hpp +67 -0
- data/ext/HandlerSocket-Plugin-for-MySQL/libhsclient/config.cpp +67 -0
- data/ext/HandlerSocket-Plugin-for-MySQL/libhsclient/config.hpp +32 -0
- data/ext/HandlerSocket-Plugin-for-MySQL/libhsclient/escape.cpp +127 -0
- data/ext/HandlerSocket-Plugin-for-MySQL/libhsclient/escape.hpp +66 -0
- data/ext/HandlerSocket-Plugin-for-MySQL/libhsclient/fatal.cpp +36 -0
- data/ext/HandlerSocket-Plugin-for-MySQL/libhsclient/fatal.hpp +22 -0
- data/ext/HandlerSocket-Plugin-for-MySQL/libhsclient/hstcpcli.cpp +441 -0
- data/ext/HandlerSocket-Plugin-for-MySQL/libhsclient/hstcpcli.hpp +62 -0
- data/ext/HandlerSocket-Plugin-for-MySQL/libhsclient/libhsclient.spec.template +39 -0
- data/ext/HandlerSocket-Plugin-for-MySQL/libhsclient/mutex.hpp +51 -0
- data/ext/HandlerSocket-Plugin-for-MySQL/libhsclient/socket.cpp +186 -0
- data/ext/HandlerSocket-Plugin-for-MySQL/libhsclient/socket.hpp +51 -0
- data/ext/HandlerSocket-Plugin-for-MySQL/libhsclient/string_buffer.hpp +118 -0
- data/ext/HandlerSocket-Plugin-for-MySQL/libhsclient/string_ref.hpp +63 -0
- data/ext/HandlerSocket-Plugin-for-MySQL/libhsclient/string_util.cpp +182 -0
- data/ext/HandlerSocket-Plugin-for-MySQL/libhsclient/string_util.hpp +53 -0
- data/ext/HandlerSocket-Plugin-for-MySQL/libhsclient/thread.hpp +84 -0
- data/ext/HandlerSocket-Plugin-for-MySQL/libhsclient/util.hpp +25 -0
- data/ext/HandlerSocket-Plugin-for-MySQL/misc/microbench-hs.log +130 -0
- data/ext/HandlerSocket-Plugin-for-MySQL/misc/microbench-my.log +125 -0
- data/ext/HandlerSocket-Plugin-for-MySQL/perl-Net-HandlerSocket/COPYRIGHT.txt +27 -0
- data/ext/HandlerSocket-Plugin-for-MySQL/perl-Net-HandlerSocket/Changes +6 -0
- data/ext/HandlerSocket-Plugin-for-MySQL/perl-Net-HandlerSocket/HandlerSocket.xs +632 -0
- data/ext/HandlerSocket-Plugin-for-MySQL/perl-Net-HandlerSocket/MANIFEST +8 -0
- data/ext/HandlerSocket-Plugin-for-MySQL/perl-Net-HandlerSocket/Makefile.PL +18 -0
- data/ext/HandlerSocket-Plugin-for-MySQL/perl-Net-HandlerSocket/Makefile.PL.installed +20 -0
- data/ext/HandlerSocket-Plugin-for-MySQL/perl-Net-HandlerSocket/README +30 -0
- data/ext/HandlerSocket-Plugin-for-MySQL/perl-Net-HandlerSocket/lib/Net/HandlerSocket.pm +68 -0
- data/ext/HandlerSocket-Plugin-for-MySQL/perl-Net-HandlerSocket/lib/Net/HandlerSocket/Pool.pm +362 -0
- data/ext/HandlerSocket-Plugin-for-MySQL/perl-Net-HandlerSocket/perl-Net-HandlerSocket.spec.template +127 -0
- data/ext/HandlerSocket-Plugin-for-MySQL/perl-Net-HandlerSocket/ppport.h +6375 -0
- data/ext/HandlerSocket-Plugin-for-MySQL/perl-Net-HandlerSocket/t/Net-HandlerSocket.t +15 -0
- data/ext/HandlerSocket-Plugin-for-MySQL/regtest/Makefile +79 -0
- data/ext/HandlerSocket-Plugin-for-MySQL/regtest/common/binary_my.cnf +4 -0
- data/ext/HandlerSocket-Plugin-for-MySQL/regtest/common/compat.sh +29 -0
- data/ext/HandlerSocket-Plugin-for-MySQL/regtest/common/hstest.pm +66 -0
- data/ext/HandlerSocket-Plugin-for-MySQL/regtest/test_01_lib/Makefile +4 -0
- data/ext/HandlerSocket-Plugin-for-MySQL/regtest/test_01_lib/run.sh +27 -0
- data/ext/HandlerSocket-Plugin-for-MySQL/regtest/test_01_lib/test01.expected +100 -0
- data/ext/HandlerSocket-Plugin-for-MySQL/regtest/test_01_lib/test01.pl +38 -0
- data/ext/HandlerSocket-Plugin-for-MySQL/regtest/test_01_lib/test02.expected +100 -0
- data/ext/HandlerSocket-Plugin-for-MySQL/regtest/test_01_lib/test02.pl +49 -0
- data/ext/HandlerSocket-Plugin-for-MySQL/regtest/test_01_lib/test03.expected +771 -0
- data/ext/HandlerSocket-Plugin-for-MySQL/regtest/test_01_lib/test03.pl +61 -0
- data/ext/HandlerSocket-Plugin-for-MySQL/regtest/test_01_lib/test04.expected +0 -0
- data/ext/HandlerSocket-Plugin-for-MySQL/regtest/test_01_lib/test04.pl +63 -0
- data/ext/HandlerSocket-Plugin-for-MySQL/regtest/test_01_lib/test05.expected +771 -0
- data/ext/HandlerSocket-Plugin-for-MySQL/regtest/test_01_lib/test05.pl +59 -0
- data/ext/HandlerSocket-Plugin-for-MySQL/regtest/test_01_lib/test06.expected +644 -0
- data/ext/HandlerSocket-Plugin-for-MySQL/regtest/test_01_lib/test06.pl +90 -0
- data/ext/HandlerSocket-Plugin-for-MySQL/regtest/test_01_lib/test07.expected +304 -0
- data/ext/HandlerSocket-Plugin-for-MySQL/regtest/test_01_lib/test07.pl +98 -0
- data/ext/HandlerSocket-Plugin-for-MySQL/regtest/test_01_lib/test08.expected +2 -0
- data/ext/HandlerSocket-Plugin-for-MySQL/regtest/test_01_lib/test08.pl +48 -0
- data/ext/HandlerSocket-Plugin-for-MySQL/regtest/test_01_lib/test09.expected +12 -0
- data/ext/HandlerSocket-Plugin-for-MySQL/regtest/test_01_lib/test09.pl +67 -0
- data/ext/HandlerSocket-Plugin-for-MySQL/regtest/test_01_lib/test10.expected +771 -0
- data/ext/HandlerSocket-Plugin-for-MySQL/regtest/test_01_lib/test10.pl +93 -0
- data/ext/HandlerSocket-Plugin-for-MySQL/regtest/test_01_lib/test11.expected +37 -0
- data/ext/HandlerSocket-Plugin-for-MySQL/regtest/test_01_lib/test11.pl +112 -0
- data/ext/HandlerSocket-Plugin-for-MySQL/regtest/test_01_lib/test12.expected +273 -0
- data/ext/HandlerSocket-Plugin-for-MySQL/regtest/test_01_lib/test12.pl +134 -0
- data/ext/HandlerSocket-Plugin-for-MySQL/regtest/test_01_lib/test13.expected +92 -0
- data/ext/HandlerSocket-Plugin-for-MySQL/regtest/test_01_lib/test13.pl +92 -0
- data/ext/HandlerSocket-Plugin-for-MySQL/regtest/test_01_lib/test14.expected +144 -0
- data/ext/HandlerSocket-Plugin-for-MySQL/regtest/test_01_lib/test14.pl +80 -0
- data/ext/HandlerSocket-Plugin-for-MySQL/regtest/test_01_lib/test15.expected +764 -0
- data/ext/HandlerSocket-Plugin-for-MySQL/regtest/test_01_lib/test15.pl +114 -0
- data/ext/HandlerSocket-Plugin-for-MySQL/regtest/test_01_lib/test16.expected +66 -0
- data/ext/HandlerSocket-Plugin-for-MySQL/regtest/test_01_lib/test16.pl +88 -0
- data/ext/HandlerSocket-Plugin-for-MySQL/regtest/test_01_lib/test17.expected +0 -0
- data/ext/HandlerSocket-Plugin-for-MySQL/regtest/test_01_lib/test17.pl +125 -0
- data/ext/HandlerSocket-Plugin-for-MySQL/regtest/test_01_lib/test18.expected +22 -0
- data/ext/HandlerSocket-Plugin-for-MySQL/regtest/test_01_lib/test18.pl +63 -0
- data/ext/HandlerSocket-Plugin-for-MySQL/regtest/test_01_lib/test19.expected +14894 -0
- data/ext/HandlerSocket-Plugin-for-MySQL/regtest/test_01_lib/test19.pl +190 -0
- data/ext/HandlerSocket-Plugin-for-MySQL/regtest/test_01_lib/test20.expected +2 -0
- data/ext/HandlerSocket-Plugin-for-MySQL/regtest/test_01_lib/test20.pl +33 -0
- data/ext/HandlerSocket-Plugin-for-MySQL/regtest/test_01_lib/test21.expected +11 -0
- data/ext/HandlerSocket-Plugin-for-MySQL/regtest/test_01_lib/test21.pl +58 -0
- data/ext/HandlerSocket-Plugin-for-MySQL/regtest/test_01_lib/test22.expected +9 -0
- data/ext/HandlerSocket-Plugin-for-MySQL/regtest/test_01_lib/test22.pl +61 -0
- data/ext/HandlerSocket-Plugin-for-MySQL/regtest/test_01_lib/test23.expected +101 -0
- data/ext/HandlerSocket-Plugin-for-MySQL/regtest/test_01_lib/test23.pl +53 -0
- data/ext/winebarrel-ruby-handlersocket-c19841e47ea2/README +33 -0
- data/ext/winebarrel-ruby-handlersocket-c19841e47ea2/extconf.rb +27 -0
- data/ext/winebarrel-ruby-handlersocket-c19841e47ea2/handlersocket.cpp +437 -0
- data/ext/winebarrel-ruby-handlersocket-c19841e47ea2/handlersocket.h +32 -0
- metadata +200 -0
|
@@ -0,0 +1,63 @@
|
|
|
1
|
+
|
|
2
|
+
// vim:sw=2:ai
|
|
3
|
+
|
|
4
|
+
/*
|
|
5
|
+
* Copyright (C) 2010 DeNA Co.,Ltd.. All rights reserved.
|
|
6
|
+
* See COPYRIGHT.txt for details.
|
|
7
|
+
*/
|
|
8
|
+
|
|
9
|
+
#ifndef DENA_STRING_REF_HPP
|
|
10
|
+
#define DENA_STRING_REF_HPP
|
|
11
|
+
|
|
12
|
+
#include <vector>
|
|
13
|
+
#include <string.h>
|
|
14
|
+
|
|
15
|
+
namespace dena {
|
|
16
|
+
|
|
17
|
+
struct string_wref {
|
|
18
|
+
typedef char value_type;
|
|
19
|
+
char *begin() const { return start; }
|
|
20
|
+
char *end() const { return start + length; }
|
|
21
|
+
size_t size() const { return length; }
|
|
22
|
+
private:
|
|
23
|
+
char *start;
|
|
24
|
+
size_t length;
|
|
25
|
+
public:
|
|
26
|
+
string_wref(char *s = 0, size_t len = 0) : start(s), length(len) { }
|
|
27
|
+
};
|
|
28
|
+
|
|
29
|
+
struct string_ref {
|
|
30
|
+
typedef const char value_type;
|
|
31
|
+
const char *begin() const { return start; }
|
|
32
|
+
const char *end() const { return start + length; }
|
|
33
|
+
size_t size() const { return length; }
|
|
34
|
+
private:
|
|
35
|
+
const char *start;
|
|
36
|
+
size_t length;
|
|
37
|
+
public:
|
|
38
|
+
string_ref(const char *s = 0, size_t len = 0) : start(s), length(len) { }
|
|
39
|
+
string_ref(const char *s, const char *f) : start(s), length(f - s) { }
|
|
40
|
+
string_ref(const string_wref& w) : start(w.begin()), length(w.size()) { }
|
|
41
|
+
};
|
|
42
|
+
|
|
43
|
+
template <size_t N> inline bool
|
|
44
|
+
operator ==(const string_ref& x, const char (& y)[N]) {
|
|
45
|
+
return (x.size() == N - 1) && (::memcmp(x.begin(), y, N - 1) == 0);
|
|
46
|
+
}
|
|
47
|
+
|
|
48
|
+
inline bool
|
|
49
|
+
operator ==(const string_ref& x, const string_ref& y) {
|
|
50
|
+
return (x.size() == y.size()) &&
|
|
51
|
+
(::memcmp(x.begin(), y.begin(), x.size()) == 0);
|
|
52
|
+
}
|
|
53
|
+
|
|
54
|
+
inline bool
|
|
55
|
+
operator !=(const string_ref& x, const string_ref& y) {
|
|
56
|
+
return (x.size() != y.size()) ||
|
|
57
|
+
(::memcmp(x.begin(), y.begin(), x.size()) != 0);
|
|
58
|
+
}
|
|
59
|
+
|
|
60
|
+
};
|
|
61
|
+
|
|
62
|
+
#endif
|
|
63
|
+
|
|
@@ -0,0 +1,182 @@
|
|
|
1
|
+
|
|
2
|
+
// vim:sw=2:ai
|
|
3
|
+
|
|
4
|
+
/*
|
|
5
|
+
* Copyright (C) 2010 DeNA Co.,Ltd.. All rights reserved.
|
|
6
|
+
* See COPYRIGHT.txt for details.
|
|
7
|
+
*/
|
|
8
|
+
|
|
9
|
+
#include <errno.h>
|
|
10
|
+
#include <stdio.h>
|
|
11
|
+
|
|
12
|
+
#include "string_util.hpp"
|
|
13
|
+
|
|
14
|
+
namespace dena {
|
|
15
|
+
|
|
16
|
+
string_wref
|
|
17
|
+
get_token(char *& wp, char *wp_end, char delim)
|
|
18
|
+
{
|
|
19
|
+
char *const wp_begin = wp;
|
|
20
|
+
char *const p = memchr_char(wp_begin, delim, wp_end - wp_begin);
|
|
21
|
+
if (p == 0) {
|
|
22
|
+
wp = wp_end;
|
|
23
|
+
return string_wref(wp_begin, wp_end - wp_begin);
|
|
24
|
+
}
|
|
25
|
+
wp = p + 1;
|
|
26
|
+
return string_wref(wp_begin, p - wp_begin);
|
|
27
|
+
}
|
|
28
|
+
|
|
29
|
+
template <typename T> T
|
|
30
|
+
atoi_tmpl_nocheck(const char *start, const char *finish)
|
|
31
|
+
{
|
|
32
|
+
T v = 0;
|
|
33
|
+
for (; start != finish; ++start) {
|
|
34
|
+
const char c = *start;
|
|
35
|
+
if (c < '0' || c > '9') {
|
|
36
|
+
break;
|
|
37
|
+
}
|
|
38
|
+
v *= 10;
|
|
39
|
+
v += static_cast<T>(c - '0');
|
|
40
|
+
}
|
|
41
|
+
return v;
|
|
42
|
+
}
|
|
43
|
+
|
|
44
|
+
template <typename T> T
|
|
45
|
+
atoi_signed_tmpl_nocheck(const char *start, const char *finish)
|
|
46
|
+
{
|
|
47
|
+
T v = 0;
|
|
48
|
+
bool negative = false;
|
|
49
|
+
if (start != finish) {
|
|
50
|
+
if (start[0] == '-') {
|
|
51
|
+
++start;
|
|
52
|
+
negative = true;
|
|
53
|
+
} else if (start[0] == '+') {
|
|
54
|
+
++start;
|
|
55
|
+
}
|
|
56
|
+
}
|
|
57
|
+
for (; start != finish; ++start) {
|
|
58
|
+
const char c = *start;
|
|
59
|
+
if (c < '0' || c > '9') {
|
|
60
|
+
break;
|
|
61
|
+
}
|
|
62
|
+
v *= 10;
|
|
63
|
+
if (negative) {
|
|
64
|
+
v -= static_cast<T>(c - '0');
|
|
65
|
+
} else {
|
|
66
|
+
v += static_cast<T>(c - '0');
|
|
67
|
+
}
|
|
68
|
+
}
|
|
69
|
+
return v;
|
|
70
|
+
}
|
|
71
|
+
|
|
72
|
+
uint32_t
|
|
73
|
+
atoi_uint32_nocheck(const char *start, const char *finish)
|
|
74
|
+
{
|
|
75
|
+
return atoi_tmpl_nocheck<uint32_t>(start, finish);
|
|
76
|
+
}
|
|
77
|
+
|
|
78
|
+
long long
|
|
79
|
+
atoll_nocheck(const char *start, const char *finish)
|
|
80
|
+
{
|
|
81
|
+
return atoi_signed_tmpl_nocheck<long long>(start, finish);
|
|
82
|
+
}
|
|
83
|
+
|
|
84
|
+
void
|
|
85
|
+
append_uint32(string_buffer& buf, uint32_t v)
|
|
86
|
+
{
|
|
87
|
+
char *const wp = buf.make_space(64);
|
|
88
|
+
const int len = snprintf(wp, 64, "%lu", static_cast<unsigned long>(v));
|
|
89
|
+
if (len > 0) {
|
|
90
|
+
buf.space_wrote(len);
|
|
91
|
+
}
|
|
92
|
+
}
|
|
93
|
+
|
|
94
|
+
std::string
|
|
95
|
+
to_stdstring(uint32_t v)
|
|
96
|
+
{
|
|
97
|
+
char buf[64];
|
|
98
|
+
snprintf(buf, sizeof(buf), "%lu", static_cast<unsigned long>(v));
|
|
99
|
+
return std::string(buf);
|
|
100
|
+
}
|
|
101
|
+
|
|
102
|
+
int
|
|
103
|
+
errno_string(const char *s, int en, std::string& err_r)
|
|
104
|
+
{
|
|
105
|
+
char buf[64];
|
|
106
|
+
snprintf(buf, sizeof(buf), "%s: %d", s, en);
|
|
107
|
+
err_r = std::string(buf);
|
|
108
|
+
return en;
|
|
109
|
+
}
|
|
110
|
+
|
|
111
|
+
template <typename T> size_t
|
|
112
|
+
split_tmpl_arr(char delim, const T& buf, T *parts, size_t parts_len)
|
|
113
|
+
{
|
|
114
|
+
typedef typename T::value_type value_type;
|
|
115
|
+
size_t i = 0;
|
|
116
|
+
value_type *start = buf.begin();
|
|
117
|
+
value_type *const finish = buf.end();
|
|
118
|
+
for (i = 0; i < parts_len; ++i) {
|
|
119
|
+
value_type *const p = memchr_char(start, delim, finish - start);
|
|
120
|
+
if (p == 0) {
|
|
121
|
+
parts[i] = T(start, finish - start);
|
|
122
|
+
++i;
|
|
123
|
+
break;
|
|
124
|
+
}
|
|
125
|
+
parts[i] = T(start, p - start);
|
|
126
|
+
start = p + 1;
|
|
127
|
+
}
|
|
128
|
+
const size_t r = i;
|
|
129
|
+
for (; i < parts_len; ++i) {
|
|
130
|
+
parts[i] = T();
|
|
131
|
+
}
|
|
132
|
+
return r;
|
|
133
|
+
}
|
|
134
|
+
|
|
135
|
+
size_t
|
|
136
|
+
split(char delim, const string_ref& buf, string_ref *parts,
|
|
137
|
+
size_t parts_len)
|
|
138
|
+
{
|
|
139
|
+
return split_tmpl_arr(delim, buf, parts, parts_len);
|
|
140
|
+
}
|
|
141
|
+
|
|
142
|
+
size_t
|
|
143
|
+
split(char delim, const string_wref& buf, string_wref *parts,
|
|
144
|
+
size_t parts_len)
|
|
145
|
+
{
|
|
146
|
+
return split_tmpl_arr(delim, buf, parts, parts_len);
|
|
147
|
+
}
|
|
148
|
+
|
|
149
|
+
template <typename T, typename V> size_t
|
|
150
|
+
split_tmpl_vec(char delim, const T& buf, V& parts)
|
|
151
|
+
{
|
|
152
|
+
typedef typename T::value_type value_type;
|
|
153
|
+
size_t i = 0;
|
|
154
|
+
value_type *start = buf.begin();
|
|
155
|
+
value_type *const finish = buf.end();
|
|
156
|
+
while (true) {
|
|
157
|
+
value_type *const p = memchr_char(start, delim, finish - start);
|
|
158
|
+
if (p == 0) {
|
|
159
|
+
parts.push_back(T(start, finish - start));
|
|
160
|
+
break;
|
|
161
|
+
}
|
|
162
|
+
parts.push_back(T(start, p - start));
|
|
163
|
+
start = p + 1;
|
|
164
|
+
}
|
|
165
|
+
const size_t r = i;
|
|
166
|
+
return r;
|
|
167
|
+
}
|
|
168
|
+
|
|
169
|
+
size_t
|
|
170
|
+
split(char delim, const string_ref& buf, std::vector<string_ref>& parts_r)
|
|
171
|
+
{
|
|
172
|
+
return split_tmpl_vec(delim, buf, parts_r);
|
|
173
|
+
}
|
|
174
|
+
|
|
175
|
+
size_t
|
|
176
|
+
split(char delim, const string_wref& buf, std::vector<string_wref>& parts_r)
|
|
177
|
+
{
|
|
178
|
+
return split_tmpl_vec(delim, buf, parts_r);
|
|
179
|
+
}
|
|
180
|
+
|
|
181
|
+
};
|
|
182
|
+
|
|
@@ -0,0 +1,53 @@
|
|
|
1
|
+
|
|
2
|
+
// vim:sw=2:ai
|
|
3
|
+
|
|
4
|
+
/*
|
|
5
|
+
* Copyright (C) 2010 DeNA Co.,Ltd.. All rights reserved.
|
|
6
|
+
* See COPYRIGHT.txt for details.
|
|
7
|
+
*/
|
|
8
|
+
|
|
9
|
+
#ifndef DENA_STRING_UTIL_HPP
|
|
10
|
+
#define DENA_STRING_UTIL_HPP
|
|
11
|
+
|
|
12
|
+
#include <string>
|
|
13
|
+
#include <string.h>
|
|
14
|
+
#include <stdint.h>
|
|
15
|
+
|
|
16
|
+
#include "string_buffer.hpp"
|
|
17
|
+
#include "string_ref.hpp"
|
|
18
|
+
|
|
19
|
+
namespace dena {
|
|
20
|
+
|
|
21
|
+
inline const char *
|
|
22
|
+
memchr_char(const char *s, int c, size_t n)
|
|
23
|
+
{
|
|
24
|
+
return static_cast<const char *>(memchr(s, c, n));
|
|
25
|
+
}
|
|
26
|
+
|
|
27
|
+
inline char *
|
|
28
|
+
memchr_char(char *s, int c, size_t n)
|
|
29
|
+
{
|
|
30
|
+
return static_cast<char *>(memchr(s, c, n));
|
|
31
|
+
}
|
|
32
|
+
|
|
33
|
+
string_wref get_token(char *& wp, char *wp_end, char delim);
|
|
34
|
+
uint32_t atoi_uint32_nocheck(const char *start, const char *finish);
|
|
35
|
+
std::string to_stdstring(uint32_t v);
|
|
36
|
+
void append_uint32(string_buffer& buf, uint32_t v);
|
|
37
|
+
long long atoll_nocheck(const char *start, const char *finish);
|
|
38
|
+
|
|
39
|
+
int errno_string(const char *s, int en, std::string& err_r);
|
|
40
|
+
|
|
41
|
+
size_t split(char delim, const string_ref& buf, string_ref *parts,
|
|
42
|
+
size_t parts_len);
|
|
43
|
+
size_t split(char delim, const string_wref& buf, string_wref *parts,
|
|
44
|
+
size_t parts_len);
|
|
45
|
+
size_t split(char delim, const string_ref& buf,
|
|
46
|
+
std::vector<string_ref>& parts_r);
|
|
47
|
+
size_t split(char delim, const string_wref& buf,
|
|
48
|
+
std::vector<string_wref>& parts_r);
|
|
49
|
+
|
|
50
|
+
};
|
|
51
|
+
|
|
52
|
+
#endif
|
|
53
|
+
|
|
@@ -0,0 +1,84 @@
|
|
|
1
|
+
|
|
2
|
+
// vim:sw=2:ai
|
|
3
|
+
|
|
4
|
+
/*
|
|
5
|
+
* Copyright (C) 2010 DeNA Co.,Ltd.. All rights reserved.
|
|
6
|
+
* See COPYRIGHT.txt for details.
|
|
7
|
+
*/
|
|
8
|
+
|
|
9
|
+
#ifndef DENA_THREAD_HPP
|
|
10
|
+
#define DENA_THREAD_HPP
|
|
11
|
+
|
|
12
|
+
#include <stdexcept>
|
|
13
|
+
#include <pthread.h>
|
|
14
|
+
|
|
15
|
+
#include "fatal.hpp"
|
|
16
|
+
|
|
17
|
+
namespace dena {
|
|
18
|
+
|
|
19
|
+
template <typename T>
|
|
20
|
+
struct thread : private noncopyable {
|
|
21
|
+
template <typename Ta> thread(const Ta& arg, size_t stack_sz = 256 * 1024)
|
|
22
|
+
: obj(arg), thr(0), need_join(false), stack_size(stack_sz) { }
|
|
23
|
+
template <typename Ta0, typename Ta1> thread(const Ta0& a0,
|
|
24
|
+
volatile Ta1& a1, size_t stack_sz = 256 * 1024)
|
|
25
|
+
: obj(a0, a1), thr(0), need_join(false), stack_size(stack_sz) { }
|
|
26
|
+
~thread() {
|
|
27
|
+
join();
|
|
28
|
+
}
|
|
29
|
+
void start() {
|
|
30
|
+
if (!start_nothrow()) {
|
|
31
|
+
fatal_abort("thread::start");
|
|
32
|
+
}
|
|
33
|
+
}
|
|
34
|
+
bool start_nothrow() {
|
|
35
|
+
if (need_join) {
|
|
36
|
+
return need_join; /* true */
|
|
37
|
+
}
|
|
38
|
+
void *const arg = this;
|
|
39
|
+
pthread_attr_t attr;
|
|
40
|
+
if (pthread_attr_init(&attr) != 0) {
|
|
41
|
+
fatal_abort("pthread_attr_init");
|
|
42
|
+
}
|
|
43
|
+
if (pthread_attr_setstacksize(&attr, stack_size) != 0) {
|
|
44
|
+
fatal_abort("pthread_attr_setstacksize");
|
|
45
|
+
}
|
|
46
|
+
const int r = pthread_create(&thr, &attr, thread_main, arg);
|
|
47
|
+
if (pthread_attr_destroy(&attr) != 0) {
|
|
48
|
+
fatal_abort("pthread_attr_destroy");
|
|
49
|
+
}
|
|
50
|
+
if (r != 0) {
|
|
51
|
+
return need_join; /* false */
|
|
52
|
+
}
|
|
53
|
+
need_join = true;
|
|
54
|
+
return need_join; /* true */
|
|
55
|
+
}
|
|
56
|
+
void join() {
|
|
57
|
+
if (!need_join) {
|
|
58
|
+
return;
|
|
59
|
+
}
|
|
60
|
+
int e = 0;
|
|
61
|
+
if ((e = pthread_join(thr, 0)) != 0) {
|
|
62
|
+
fatal_abort("pthread_join");
|
|
63
|
+
}
|
|
64
|
+
need_join = false;
|
|
65
|
+
}
|
|
66
|
+
T& operator *() { return obj; }
|
|
67
|
+
T *operator ->() { return &obj; }
|
|
68
|
+
private:
|
|
69
|
+
static void *thread_main(void *arg) {
|
|
70
|
+
thread *p = static_cast<thread *>(arg);
|
|
71
|
+
p->obj();
|
|
72
|
+
return 0;
|
|
73
|
+
}
|
|
74
|
+
private:
|
|
75
|
+
T obj;
|
|
76
|
+
pthread_t thr;
|
|
77
|
+
bool need_join;
|
|
78
|
+
size_t stack_size;
|
|
79
|
+
};
|
|
80
|
+
|
|
81
|
+
};
|
|
82
|
+
|
|
83
|
+
#endif
|
|
84
|
+
|
|
@@ -0,0 +1,25 @@
|
|
|
1
|
+
|
|
2
|
+
// vim:sw=2:ai
|
|
3
|
+
|
|
4
|
+
/*
|
|
5
|
+
* Copyright (C) 2010 DeNA Co.,Ltd.. All rights reserved.
|
|
6
|
+
* See COPYRIGHT.txt for details.
|
|
7
|
+
*/
|
|
8
|
+
|
|
9
|
+
#ifndef DENA_UTIL_HPP
|
|
10
|
+
#define DENA_UTIL_HPP
|
|
11
|
+
|
|
12
|
+
namespace dena {
|
|
13
|
+
|
|
14
|
+
/* boost::noncopyable */
|
|
15
|
+
struct noncopyable {
|
|
16
|
+
noncopyable() { }
|
|
17
|
+
private:
|
|
18
|
+
noncopyable(const noncopyable&);
|
|
19
|
+
noncopyable& operator =(const noncopyable&);
|
|
20
|
+
};
|
|
21
|
+
|
|
22
|
+
};
|
|
23
|
+
|
|
24
|
+
#endif
|
|
25
|
+
|
|
@@ -0,0 +1,130 @@
|
|
|
1
|
+
[a@c54hdd libhsclient]$ ./hstest_hs.sh host=192.168.100.104 key_mask=1000000 num_threads=100 num=10000000 timelimit=10 dbname=hstest
|
|
2
|
+
now: 1274127653 cntdiff: 265538 tdiff: 1.000996 rps: 265273.757409
|
|
3
|
+
now: 1274127654 cntdiff: 265762 tdiff: 1.000995 rps: 265497.850684
|
|
4
|
+
now: 1274127655 cntdiff: 265435 tdiff: 1.001010 rps: 265167.196749
|
|
5
|
+
now: 1274127656 cntdiff: 265144 tdiff: 1.000994 rps: 264880.654203
|
|
6
|
+
now: 1274127657 cntdiff: 265593 tdiff: 1.000995 rps: 265329.018659
|
|
7
|
+
now: 1274127658 cntdiff: 264863 tdiff: 1.000996 rps: 264599.492138
|
|
8
|
+
now: 1274127659 cntdiff: 265688 tdiff: 1.001008 rps: 265420.447231
|
|
9
|
+
now: 1274127660 cntdiff: 265727 tdiff: 1.000999 rps: 265461.810594
|
|
10
|
+
now: 1274127661 cntdiff: 265848 tdiff: 1.001010 rps: 265579.716809
|
|
11
|
+
now: 1274127662 cntdiff: 265430 tdiff: 1.000992 rps: 265167.001723
|
|
12
|
+
now: 1274127663 cntdiff: 266379 tdiff: 1.001008 rps: 266110.751381
|
|
13
|
+
now: 1274127664 cntdiff: 266244 tdiff: 1.001003 rps: 265977.217679
|
|
14
|
+
now: 1274127665 cntdiff: 265737 tdiff: 1.000996 rps: 265472.559379
|
|
15
|
+
now: 1274127666 cntdiff: 265878 tdiff: 1.001003 rps: 265611.647683
|
|
16
|
+
(1274127656.104648: 1328292, 1274127666.114649: 3985679), 265473.20173 qps
|
|
17
|
+
|
|
18
|
+
|
|
19
|
+
*************************** 1. row ***************************
|
|
20
|
+
Type: InnoDB
|
|
21
|
+
Name:
|
|
22
|
+
Status:
|
|
23
|
+
=====================================
|
|
24
|
+
100518 5:18:13 INNODB MONITOR OUTPUT
|
|
25
|
+
=====================================
|
|
26
|
+
Per second averages calculated from the last 5 seconds
|
|
27
|
+
----------
|
|
28
|
+
BACKGROUND THREAD
|
|
29
|
+
----------
|
|
30
|
+
srv_master_thread loops: 191 1_second, 190 sleeps, 18 10_second, 5 background, 5 flush
|
|
31
|
+
srv_master_thread log flush and writes: 190
|
|
32
|
+
----------
|
|
33
|
+
SEMAPHORES
|
|
34
|
+
----------
|
|
35
|
+
OS WAIT ARRAY INFO: reservation count 53519, signal count 29547
|
|
36
|
+
Mutex spin waits 3083488, rounds 5159906, OS waits 50700
|
|
37
|
+
RW-shared spins 21, OS waits 16; RW-excl spins 1, OS waits 4
|
|
38
|
+
Spin rounds per wait: 1.67 mutex, 30.00 RW-shared, 151.00 RW-excl
|
|
39
|
+
------------
|
|
40
|
+
TRANSACTIONS
|
|
41
|
+
------------
|
|
42
|
+
Trx id counter EDA36085
|
|
43
|
+
Purge done for trx's n:o < EC1F94A7 undo n:o < 0
|
|
44
|
+
History list length 20
|
|
45
|
+
LIST OF TRANSACTIONS FOR EACH SESSION:
|
|
46
|
+
---TRANSACTION 0, not started, process no 4533, OS thread id 1079281984
|
|
47
|
+
MySQL thread id 11, query id 16 localhost root
|
|
48
|
+
show engine innodb status
|
|
49
|
+
---TRANSACTION ED9D5959, not started, process no 4533, OS thread id 1089849664
|
|
50
|
+
MySQL thread id 7, query id 0 handlersocket: mode=rd, 0 conns, 0 active
|
|
51
|
+
---TRANSACTION ED9D5956, not started, process no 4533, OS thread id 1238796608
|
|
52
|
+
MySQL thread id 1, query id 0 handlersocket: mode=rd, 0 conns, 0 active
|
|
53
|
+
---TRANSACTION EDA36084, not started, process no 4533, OS thread id 1255582016
|
|
54
|
+
mysql tables in use 1, locked 1
|
|
55
|
+
MySQL thread id 3, query id 0 handlersocket: mode=rd, 12 conns, 7 active
|
|
56
|
+
---TRANSACTION EDA36080, not started, process no 4533, OS thread id 1247189312
|
|
57
|
+
mysql tables in use 1, locked 1
|
|
58
|
+
MySQL thread id 2, query id 0 handlersocket: mode=rd, 36 conns, 18 active
|
|
59
|
+
---TRANSACTION EDA36082, ACTIVE 0 sec, process no 4533, OS thread id 1263974720 committing
|
|
60
|
+
MySQL thread id 4, query id 0 handlersocket: mode=rd, 37 conns, 20 active
|
|
61
|
+
Trx read view will not see trx with id >= EDA36083, sees < EDA3607D
|
|
62
|
+
---TRANSACTION EDA3607D, ACTIVE 0 sec, process no 4533, OS thread id 1272367424, thread declared inside InnoDB 500
|
|
63
|
+
mysql tables in use 1, locked 1
|
|
64
|
+
MySQL thread id 5, query id 0 handlersocket: mode=rd, 15 conns, 9 active
|
|
65
|
+
Trx read view will not see trx with id >= EDA3607E, sees < EDA36079
|
|
66
|
+
--------
|
|
67
|
+
FILE I/O
|
|
68
|
+
--------
|
|
69
|
+
I/O thread 0 state: waiting for i/o request (insert buffer thread)
|
|
70
|
+
I/O thread 1 state: waiting for i/o request (log thread)
|
|
71
|
+
I/O thread 2 state: waiting for i/o request (read thread)
|
|
72
|
+
I/O thread 3 state: waiting for i/o request (read thread)
|
|
73
|
+
I/O thread 4 state: waiting for i/o request (read thread)
|
|
74
|
+
I/O thread 5 state: waiting for i/o request (read thread)
|
|
75
|
+
I/O thread 6 state: waiting for i/o request (write thread)
|
|
76
|
+
I/O thread 7 state: waiting for i/o request (write thread)
|
|
77
|
+
I/O thread 8 state: waiting for i/o request (write thread)
|
|
78
|
+
I/O thread 9 state: waiting for i/o request (write thread)
|
|
79
|
+
Pending normal aio reads: 0, aio writes: 0,
|
|
80
|
+
ibuf aio reads: 0, log i/o's: 0, sync i/o's: 0
|
|
81
|
+
Pending flushes (fsync) log: 0; buffer pool: 0
|
|
82
|
+
71 OS file reads, 235 OS file writes, 235 OS fsyncs
|
|
83
|
+
0.00 reads/s, 0 avg bytes/read, 1.00 writes/s, 1.00 fsyncs/s
|
|
84
|
+
-------------------------------------
|
|
85
|
+
INSERT BUFFER AND ADAPTIVE HASH INDEX
|
|
86
|
+
-------------------------------------
|
|
87
|
+
Ibuf: size 1, free list len 0, seg size 2,
|
|
88
|
+
0 inserts, 0 merged recs, 0 merges
|
|
89
|
+
Hash table size 12750011, node heap has 2 buffer(s)
|
|
90
|
+
267203.76 hash searches/s, 0.00 non-hash searches/s
|
|
91
|
+
---
|
|
92
|
+
LOG
|
|
93
|
+
---
|
|
94
|
+
Log sequence number 147179727377
|
|
95
|
+
Log flushed up to 147179726685
|
|
96
|
+
Last checkpoint at 147179716475
|
|
97
|
+
0 pending log writes, 0 pending chkp writes
|
|
98
|
+
194 log i/o's done, 1.00 log i/o's/second
|
|
99
|
+
----------------------
|
|
100
|
+
BUFFER POOL AND MEMORY
|
|
101
|
+
----------------------
|
|
102
|
+
Total memory allocated 6587154432; in additional pool allocated 0
|
|
103
|
+
Dictionary memory allocated 33640
|
|
104
|
+
Buffer pool size 393216
|
|
105
|
+
Free buffers 393154
|
|
106
|
+
Database pages 60
|
|
107
|
+
Old database pages 0
|
|
108
|
+
Modified db pages 1
|
|
109
|
+
Pending reads 0
|
|
110
|
+
Pending writes: LRU 0, flush list 0, single page 0
|
|
111
|
+
Pages made young 0, not young 0
|
|
112
|
+
0.00 youngs/s, 0.00 non-youngs/s
|
|
113
|
+
Pages read 60, created 0, written 23
|
|
114
|
+
0.00 reads/s, 0.00 creates/s, 0.00 writes/s
|
|
115
|
+
Buffer pool hit rate 1000 / 1000, young-making rate 0 / 1000 not 0 / 1000
|
|
116
|
+
Pages read ahead 0.00/s, evicted without access 0.00/s
|
|
117
|
+
LRU len: 60, unzip_LRU len: 0
|
|
118
|
+
I/O sum[0]:cur[0], unzip sum[0]:cur[0]
|
|
119
|
+
--------------
|
|
120
|
+
ROW OPERATIONS
|
|
121
|
+
--------------
|
|
122
|
+
2 queries inside InnoDB, 0 queries in queue
|
|
123
|
+
3 read views open inside InnoDB
|
|
124
|
+
Main thread process no. 4533, id 1230403904, state: sleeping
|
|
125
|
+
Number of rows inserted 0, updated 0, deleted 0, read 37653556
|
|
126
|
+
0.00 inserts/s, 0.00 updates/s, 0.00 deletes/s, 266608.28 reads/s
|
|
127
|
+
----------------------------
|
|
128
|
+
END OF INNODB MONITOR OUTPUT
|
|
129
|
+
============================
|
|
130
|
+
|