MySQL 5.6.14 Source Code Document
Main Page
Related Pages
Modules
Namespaces
Classes
Files
Examples
File List
File Members
MySQL 5.6.14 Source Code Document
replication of field metadata works.
ndbapi_simple.cpp
ndbapi_async.cpp
ndbapi_async1.cpp
ndbapi_retries.cpp
ndbapi_simple_index.cpp
ndbapi_scan.cpp
ndbapi_event.cpp
Adaptive Send Algorithm
MySQL Cluster Concepts
basic.cpp
common.hpp
br_test.cpp
ptr_binding_test.cpp
The Performance Schema main page
Performance schema: instrumentation interface page.
Performance schema: the aggregates page.
Todo List
Deprecated List
Modules
Namespaces
Classes
Files
File List
client
cmake
cmd-line-utils
dbug
extra
include
libevent
libmysql
libmysqld
libservices
mysql-test
mysys
mysys_ssl
packaging
plugin
regex
scripts
sql
sql-common
storage
archive
blackhole
csv
example
federated
heap
innobase
myisam
myisammrg
ndb
clusterj
include
ndbapi-examples
src
common
cw
kernel
mgmapi
mgmclient
mgmsrv
ndbapi
API.hpp
ClusterMgr.cpp
ClusterMgr.hpp
DictCache.cpp
DictCache.hpp
Ndb.cpp
ndb_cluster_connection.cpp
ndb_cluster_connection_impl.hpp
ndb_internal.cpp
ndb_internal.hpp
NdbApiSignal.cpp
NdbApiSignal.hpp
NdbBlob.cpp
NdbBlobImpl.hpp
NdbDictionary.cpp
NdbDictionaryImpl.cpp
NdbDictionaryImpl.hpp
Ndberr.cpp
ndberror.c
ndberror_check.cpp
NdbErrorOut.cpp
NdbEventOperation.cpp
NdbEventOperationImpl.cpp
NdbEventOperationImpl.hpp
Ndbif.cpp
NdbImpl.hpp
NdbIndexOperation.cpp
NdbIndexStat.cpp
NdbIndexStatFrmData.cpp
NdbIndexStatImpl.cpp
NdbIndexStatImpl.hpp
NdbInfo.cpp
NdbInfo.hpp
NdbInfoRecAttr.hpp
NdbInfoScanOperation.cpp
NdbInfoScanOperation.hpp
Ndbinit.cpp
NdbInterpretedCode.cpp
NdbLinHash.hpp
Ndblist.cpp
NdbOperation.cpp
NdbOperationDefine.cpp
NdbOperationExec.cpp
NdbOperationInt.cpp
NdbOperationScan.cpp
NdbOperationSearch.cpp
NdbPool.cpp
NdbPoolImpl.cpp
NdbPoolImpl.hpp
NdbQueryBuilder.cpp
NdbQueryBuilder.hpp
NdbQueryBuilderImpl.hpp
NdbQueryOperation.cpp
NdbQueryOperation.hpp
NdbQueryOperationImpl.hpp
NdbRecAttr.cpp
NdbReceiver.cpp
NdbRecord.hpp
NdbScanFilter.cpp
NdbScanOperation.cpp
NdbTransaction.cpp
NdbTransactionScan.cpp
NdbUtil.cpp
NdbUtil.hpp
NdbWaiter.hpp
ObjectMap.cpp
ObjectMap.hpp
SignalSender.cpp
SignalSender.hpp
TransporterFacade.cpp
TransporterFacade.hpp
trp_buffer.cpp
trp_buffer.hpp
trp_client.cpp
trp_client.hpp
trp_node.cpp
trp_node.hpp
ndbjtie
dummy.cpp
test
tools
perfschema
strings
support-files
tests
unittest
vio
zlib
File Members
Examples
•
All
Classes
Namespaces
Files
Functions
Variables
Typedefs
Enumerations
Enumerator
Friends
Macros
Groups
Pages
trp_buffer.hpp
1
/*
2
Copyright (c) 2010, 2011, Oracle and/or its affiliates. All rights reserved.
3
4
This program is free software; you can redistribute it and/or modify
5
it under the terms of the GNU General Public License as published by
6
the Free Software Foundation; version 2 of the License.
7
8
This program is distributed in the hope that it will be useful,
9
but WITHOUT ANY WARRANTY; without even the implied warranty of
10
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
11
GNU General Public License for more details.
12
13
You should have received a copy of the GNU General Public License
14
along with this program; if not, write to the Free Software
15
Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA
16
*/
17
18
#ifndef trp_buffer_hpp
19
#define trp_buffer_hpp
20
21
#include <ndb_global.h>
22
#include <ndb_socket.h>
// struct iovec
23
24
struct
TFPage
25
{
26
inline
Uint32 max_data_bytes()
const
{
27
return
m_size
;
28
}
29
30
inline
Uint32 get_free_bytes()
const
{
31
return
m_size
-
m_bytes
;
32
}
33
34
inline
bool
is_full()
const
{
35
return
m_bytes
==
m_size
;
36
}
37
38
inline
void
init () {
39
m_bytes
= 0;
40
m_start
= 0;
41
m_ref_count
= 0;
42
}
43
44
static
TFPage
* ptr(
struct
iovec
p) {
45
UintPtr v = UintPtr(p.iov_base);
46
v -= offsetof(
TFPage
,
m_data
);
47
return
(
TFPage
*)v;
48
}
49
50
54
Uint16
m_bytes
;
55
59
Uint16
m_start
;
60
64
Uint16
m_size
;
65
69
Uint16
m_ref_count
;
70
74
struct
TFPage
*
m_next
;
75
79
char
m_data
[8];
80
};
81
86
struct
TFSentinel
87
{
88
Uint64 data[
sizeof
(
TFPage
) / 8];
89
90
TFSentinel
() {
91
for
(Uint32
i
= 0;
i
< NDB_ARRAY_SIZE(data);
i
++)
92
data[
i
] = 0;
93
}
94
95
TFPage
* getPtr() {
return
new
(&data[0])
TFPage
;}
96
};
97
98
struct
TFBuffer
99
{
100
TFBuffer
() { m_bytes_in_buffer = 0; m_head = m_tail = 0;}
101
Uint32 m_bytes_in_buffer;
102
struct
TFPage
* m_head;
103
struct
TFPage
* m_tail;
104
105
void
validate()
const
;
106
};
107
108
struct
TFBufferGuard
109
{
110
#ifdef VM_TRACE
111
const
TFBuffer
&
buf
;
112
TFBuffer
m_save;
113
TFBufferGuard
(
const
TFBuffer
& _buf) :
buf
(_buf), m_save(_buf) {
114
buf
.validate();
115
}
116
~
TFBufferGuard
() {
117
buf
.validate();
118
}
119
#else
120
TFBufferGuard
(
const
TFBuffer
&) {}
121
#endif
122
};
123
124
class
TFPool
125
{
126
unsigned
char
* m_alloc_ptr;
127
TFPage
* m_first_free;
128
public
:
129
TFPool
();
130
~
TFPool
();
131
132
bool
init(
size_t
total_memory,
size_t
page_sz = 32768);
133
bool
inited()
const
{
return
m_alloc_ptr != 0;}
134
135
TFPage
* try_alloc(Uint32 N);
// Return linked list of most N pages
136
Uint32 try_alloc(
struct
iovec
tmp[], Uint32 cnt);
137
138
void
release(
TFPage
* first,
TFPage
* last);
139
void
release_list(
TFPage
*);
140
};
141
142
inline
143
TFPage
*
144
TFPool::try_alloc(Uint32
n
)
145
{
146
TFPage
* h = m_first_free;
147
if
(h)
148
{
149
TFPage
* p = h;
150
TFPage
* prev = 0;
151
while
(p != 0 && n != 0)
152
{
153
prev = p;
154
p = p->
m_next
;
155
n--;
156
}
157
prev->
m_next
= 0;
158
m_first_free = p;
159
}
160
return
h;
161
}
162
163
inline
164
Uint32
165
TFPool::try_alloc(
struct
iovec
tmp[], Uint32 cnt)
166
{
167
TFPage
* p = try_alloc(cnt);
168
Uint32
i
= 0;
169
while
(p)
170
{
171
p->init();
172
tmp[
i
].iov_base = p->
m_data
;
173
tmp[
i
].iov_len = p->
m_size
;
174
175
i++;
176
p = p->
m_next
;
177
}
178
return
i
;
179
}
180
181
inline
182
void
183
TFPool::release(
TFPage
* first,
TFPage
* last)
184
{
185
last->
m_next
= m_first_free;
186
m_first_free = first;
187
}
188
189
inline
190
void
191
TFPool::release_list(
TFPage
* head)
192
{
193
TFPage
* tail = head;
194
while
(tail->
m_next
!= 0)
195
tail = tail->
m_next
;
196
release(head, tail);
197
}
198
199
#endif
storage
ndb
src
ndbapi
trp_buffer.hpp
Generated on Sat Nov 9 2013 01:28:10 for MySQL 5.6.14 Source Code Document by
1.8.1.2