vincentchu-handlersocket 0.0.1
Sign up to get free protection for your applications and to get access to all the features.
- 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
|
+
|