transactd 3.4.1 → 3.5.0
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.
- checksums.yaml +4 -4
- data/CMakeLists.txt +2 -2
- data/bin/common/tdclc_32_3_5.dll +0 -0
- data/bin/common/tdclc_64_3_5.dll +0 -0
- data/build/common/options.cmake +12 -0
- data/build/common/transactd_cl_common.cmake +1 -0
- data/build/common/transactd_required.cmake +5 -0
- data/build/swig/ruby/tdclrb_wrap.cpp +1029 -130
- data/build/swig/tdcl.i +60 -5
- data/build/tdclc/CMakeLists.txt +30 -32
- data/build/tdclc/libtdclcm.map +1 -1
- data/build/tdclc/tdclc.cbproj +1 -1
- data/build/tdclc/tdclc.rc +4 -4
- data/build/tdclcpp/CMakeLists.txt +39 -48
- data/build/tdclcpp/tdclcpp.rc +4 -4
- data/build/tdclcpp/tdclcpp_bc.cbproj +4 -1
- data/build/tdclrb/CMakeLists.txt +5 -4
- data/build/tdclrb/tdclrb.rc +4 -4
- data/source/bzs/db/engine/mysql/database.cpp +45 -35
- data/source/bzs/db/engine/mysql/database.h +6 -8
- data/source/bzs/db/engine/mysql/dbManager.cpp +11 -0
- data/source/bzs/db/engine/mysql/dbManager.h +1 -0
- data/source/bzs/db/engine/mysql/ha.cpp +174 -0
- data/source/bzs/db/engine/mysql/ha.h +50 -0
- data/source/bzs/db/engine/mysql/mysqlInternal.h +18 -1
- data/source/bzs/db/engine/mysql/mysqlProtocol.cpp +222 -9
- data/source/bzs/db/engine/mysql/mysqlProtocol.h +5 -0
- data/source/bzs/db/protocol/tdap/client/client.cpp +23 -9
- data/source/bzs/db/protocol/tdap/client/client.h +125 -94
- data/source/bzs/db/protocol/tdap/client/connMgr.cpp +139 -30
- data/source/bzs/db/protocol/tdap/client/connMgr.h +40 -8
- data/source/bzs/db/protocol/tdap/client/database.cpp +17 -17
- data/source/bzs/db/protocol/tdap/client/database.h +15 -0
- data/source/bzs/db/protocol/tdap/client/dllmain.cpp +10 -4
- data/source/bzs/db/protocol/tdap/client/haNameResolver.cpp +486 -0
- data/source/bzs/db/protocol/tdap/client/haNameResolver.h +74 -0
- data/source/bzs/db/protocol/tdap/client/nsDatabase.cpp +102 -71
- data/source/bzs/db/protocol/tdap/client/nsDatabase.h +15 -3
- data/source/bzs/db/protocol/tdap/client/nsTable.cpp +2 -5
- data/source/bzs/db/protocol/tdap/client/nsTable.h +2 -1
- data/source/bzs/db/protocol/tdap/client/sqlBuilder.cpp +2 -2
- data/source/bzs/db/protocol/tdap/client/table.cpp +1 -2
- data/source/bzs/db/protocol/tdap/client/trdboostapi.h +13 -0
- data/source/bzs/db/protocol/tdap/client/trnsctcl.def +1 -0
- data/source/bzs/db/protocol/tdap/mysql/databaseSchema.cpp +9 -7
- data/source/bzs/db/protocol/tdap/mysql/recordsetReader.h +2 -2
- data/source/bzs/db/protocol/tdap/mysql/tdapCommandExecuter.cpp +328 -117
- data/source/bzs/db/protocol/tdap/mysql/tdapCommandExecuter.h +7 -8
- data/source/bzs/db/protocol/tdap/tdapcapi.h +81 -41
- data/source/bzs/db/transactd/connManager.cpp +118 -93
- data/source/bzs/db/transactd/connManager.h +6 -1
- data/source/bzs/db/transactd/connectionRecord.h +27 -7
- data/source/bzs/db/transactd/transactd.cpp +24 -13
- data/source/bzs/env/crosscompile.h +2 -0
- data/source/bzs/netsvc/client/iconnection.h +2 -0
- data/source/bzs/netsvc/client/tcpClient.cpp +45 -14
- data/source/bzs/netsvc/client/tcpClient.h +21 -4
- data/source/bzs/netsvc/server/IAppModule.h +1 -0
- data/source/bzs/netsvc/server/serverCpt.cpp +1 -1
- data/source/bzs/netsvc/server/serverPipe.cpp +2 -0
- data/source/bzs/netsvc/server/serverTpool.cpp +3 -5
- data/source/bzs/test/tdclatl/test_v3.js +91 -3
- data/source/bzs/test/tdclphp/transactd_v3_Test.php +89 -3
- data/source/bzs/test/tdclrb/transactd_v3_spec.rb +69 -2
- data/source/bzs/test/trdclengn/testField.h +19 -1
- data/source/bzs/test/trdclengn/test_tdclcpp_ha.cpp +388 -0
- data/source/bzs/test/trdclengn/test_tdclcpp_v3.cpp +6 -1
- data/source/bzs/test/trdclengn/test_trdclengn.cpp +1 -0
- data/source/bzs/test/trdclengn/testbase.h +7 -1
- data/source/global/replication/haCommand.cpp +843 -0
- data/source/global/replication/haCommand.h +78 -0
- data/source/global/replication/haMgr.cpp +321 -0
- data/source/global/replication/replCommand.cpp +696 -0
- data/source/global/replication/replCommand.h +161 -0
- data/source/global/tdclatl/BinlogPos.cpp +10 -0
- data/source/global/tdclatl/BinlogPos.h +1 -0
- data/source/global/tdclatl/ConnMgr.cpp +89 -2
- data/source/global/tdclatl/ConnMgr.h +13 -1
- data/source/global/tdclatl/ConnRecord.cpp +8 -2
- data/source/global/tdclatl/ConnRecord.h +4 -3
- data/source/global/tdclatl/Database.cpp +13 -0
- data/source/global/tdclatl/Database.h +2 -0
- data/source/global/tdclatl/HaNameREsolver.cpp +54 -0
- data/source/global/tdclatl/HaNameREsolver.h +68 -0
- data/source/global/tdclatl/resource.h +0 -0
- data/source/global/tdclatl/tdclatl.idl +76 -5
- metadata +16 -6
- data/bin/common/tdclc_32_3_4.dll +0 -0
- data/bin/common/tdclc_64_3_4.dll +0 -0
- data/source/bzs/db/protocol/tdap/mysql/debuglog.cpp +0 -423
- data/source/bzs/db/protocol/tdap/mysql/debuglog.h +0 -116
|
@@ -0,0 +1,50 @@
|
|
|
1
|
+
#ifndef BZS_DB_ENGINE_MYSQL_HA_H
|
|
2
|
+
#define BZS_DB_ENGINE_MYSQL_HA_H
|
|
3
|
+
/*=================================================================
|
|
4
|
+
Copyright (C) 2016 BizStation Corp All rights reserved.
|
|
5
|
+
|
|
6
|
+
This program is free software; you can redistribute it and/or
|
|
7
|
+
modify it under the terms of the GNU General Public License
|
|
8
|
+
as published by the Free Software Foundation; either version 2
|
|
9
|
+
of the License, or (at your option) any later version.
|
|
10
|
+
|
|
11
|
+
This program is distributed in the hope that it will be useful,
|
|
12
|
+
but WITHOUT ANY WARRANTY; without even the implied warranty of
|
|
13
|
+
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
|
14
|
+
GNU General Public License for more details.
|
|
15
|
+
|
|
16
|
+
You should have received a copy of the GNU General Public License
|
|
17
|
+
along with this program; if not, write to the Free Software
|
|
18
|
+
Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA
|
|
19
|
+
02111-1307, USA.
|
|
20
|
+
=================================================================*/
|
|
21
|
+
|
|
22
|
+
const static bool trx_block = false;
|
|
23
|
+
const static bool trx_noblock = true;
|
|
24
|
+
extern bool trx_blocking;
|
|
25
|
+
|
|
26
|
+
namespace bzs
|
|
27
|
+
{
|
|
28
|
+
namespace db
|
|
29
|
+
{
|
|
30
|
+
namespace engine
|
|
31
|
+
{
|
|
32
|
+
namespace mysql
|
|
33
|
+
{
|
|
34
|
+
|
|
35
|
+
int initHa();
|
|
36
|
+
bool haLock();
|
|
37
|
+
bool haUnlock();
|
|
38
|
+
bool setRole(int isMaster);
|
|
39
|
+
int getRole();
|
|
40
|
+
bool setEnableFailover(bool enable);
|
|
41
|
+
bool getEnableFailover();
|
|
42
|
+
bool setTrxBlock(bool v);
|
|
43
|
+
inline bool isTrxBlocking() { return trx_blocking == trx_block;}
|
|
44
|
+
|
|
45
|
+
} // namespace mysql
|
|
46
|
+
} // namespace engine
|
|
47
|
+
} // namespace db
|
|
48
|
+
} // namespace bzs
|
|
49
|
+
|
|
50
|
+
#endif // BZS_DB_ENGINE_MYSQL_HA_H
|
|
@@ -75,6 +75,10 @@
|
|
|
75
75
|
#include "my_global.h"
|
|
76
76
|
#include <math.h>
|
|
77
77
|
#if defined(MYSQL_5_7)
|
|
78
|
+
#ifndef HAVE_REPLICATION
|
|
79
|
+
#define HAVE_REPLICATION
|
|
80
|
+
#endif
|
|
81
|
+
|
|
78
82
|
// Not use malloc service
|
|
79
83
|
#define MYSQL_SERVICE_MYSQL_ALLOC_INCLUDED
|
|
80
84
|
typedef unsigned int PSI_memory_key;
|
|
@@ -229,11 +233,21 @@ inline void cp_restore_globals(THD* thd)
|
|
|
229
233
|
my_pthread_setspecific_ptr(THR_THD, 0);
|
|
230
234
|
my_pthread_setspecific_ptr(THR_MALLOC, 0);
|
|
231
235
|
}
|
|
232
|
-
|
|
236
|
+
#if (MYSQL_VERSION_ID < 50600)
|
|
233
237
|
inline void cp_thd_set_read_only(THD* thd, bool v) {}
|
|
234
238
|
|
|
235
239
|
inline bool cp_thd_get_global_read_only(THD* thd) { return false; }
|
|
240
|
+
#else
|
|
241
|
+
inline void cp_thd_set_read_only(THD* thd, bool v)
|
|
242
|
+
{
|
|
243
|
+
thd->tx_read_only = (v || thd->variables.tx_read_only);
|
|
244
|
+
}
|
|
236
245
|
|
|
246
|
+
inline bool cp_thd_get_global_read_only(THD* thd)
|
|
247
|
+
{
|
|
248
|
+
return (thd->variables.tx_read_only != 0);
|
|
249
|
+
}
|
|
250
|
+
#endif
|
|
237
251
|
inline bool cp_open_table(THD* thd, TABLE_LIST* tables,
|
|
238
252
|
Open_table_context* ot_act)
|
|
239
253
|
{
|
|
@@ -477,7 +491,9 @@ inline int cp_store_create_info(THD *thd, TABLE_LIST *table_list, String *packet
|
|
|
477
491
|
}
|
|
478
492
|
|
|
479
493
|
#define cp_get_executed_gtids get_executed_gtids
|
|
494
|
+
extern MYSQL_PLUGIN_IMPORT my_bool opt_show_slave_auth_info;
|
|
480
495
|
|
|
496
|
+
#define STATUS_VAR_SCOPE ,SHOW_SCOPE_GLOBAL
|
|
481
497
|
#else //Not MySQL 5.7
|
|
482
498
|
|
|
483
499
|
#define OPEN_TABLE_FLAG_TYPE MYSQL_OPEN_GET_NEW_TABLE
|
|
@@ -619,6 +635,7 @@ inline int cp_store_create_info(THD *thd, TABLE_LIST *table_list, String *packet
|
|
|
619
635
|
|
|
620
636
|
#endif // Not MARIADB_10_1 || MARIADB_10_0
|
|
621
637
|
|
|
638
|
+
#define STATUS_VAR_SCOPE
|
|
622
639
|
#endif // Not MySQL 5.7
|
|
623
640
|
|
|
624
641
|
|
|
@@ -17,11 +17,15 @@
|
|
|
17
17
|
02111-1307, USA.
|
|
18
18
|
================================================================= */
|
|
19
19
|
/* MySQL 5.5 and Mariadb are no-rtti */
|
|
20
|
+
#include <my_config.h>
|
|
21
|
+
# include <string>
|
|
22
|
+
|
|
20
23
|
#ifdef __GNUC__
|
|
21
24
|
# pragma implementation "mysqlInternal.h"
|
|
22
25
|
#endif
|
|
23
26
|
|
|
24
27
|
#include "mysqlProtocol.h"
|
|
28
|
+
|
|
25
29
|
#include <bzs/env/crosscompile.h>
|
|
26
30
|
#include <bzs/db/protocol/tdap/tdapcapi.h>
|
|
27
31
|
#include <bzs/db/IBlobBuffer.h>
|
|
@@ -214,12 +218,13 @@ safe_commit_lock::~safe_commit_lock()
|
|
|
214
218
|
|
|
215
219
|
|
|
216
220
|
#ifdef NOTUSE_BINLOG_VAR //Only MySQL 5.6 Windows
|
|
217
|
-
|
|
221
|
+
inline short getBinlogPosInternal(THD* currentThd, binlogPos* bpos, THD* tmpThd, bzs::db::IblobBuffer* bb)
|
|
218
222
|
{
|
|
219
223
|
short result = 0;
|
|
220
224
|
{
|
|
221
225
|
attachThd(tmpThd);
|
|
222
|
-
|
|
226
|
+
if (tmpThd != currentThd)
|
|
227
|
+
copyGrant(tmpThd, currentThd, NULL);
|
|
223
228
|
masterStatus p(tmpThd, bpos, bb);
|
|
224
229
|
cp_query_command(tmpThd, "show master status");
|
|
225
230
|
if (tmpThd->is_error())
|
|
@@ -232,7 +237,7 @@ safe_commit_lock::~safe_commit_lock()
|
|
|
232
237
|
#endif
|
|
233
238
|
|
|
234
239
|
#ifdef USE_BINLOG_GTID //MariaDB 10-
|
|
235
|
-
|
|
240
|
+
inline short getBinlogPosInternal(THD* currentThd, binlogPos* bpos, THD* /*tmpThd*/, bzs::db::IblobBuffer* /*bb*/)
|
|
236
241
|
{
|
|
237
242
|
if (mysql_bin_log.is_open())
|
|
238
243
|
{
|
|
@@ -266,7 +271,7 @@ safe_commit_lock::~safe_commit_lock()
|
|
|
266
271
|
if (size > 1024) buf = new char[size];
|
|
267
272
|
gtid_set->to_string(buf);
|
|
268
273
|
bpos->type = REPL_POSTYPE_GTID;
|
|
269
|
-
bb->addBlob((unsigned int)size,
|
|
274
|
+
bb->addBlob((unsigned int)size, TD_EXTENDED_VAR_BINLOG_GTID, (const unsigned char *)buf);
|
|
270
275
|
bb->setFieldCount(1);
|
|
271
276
|
if (p != buf) delete[] buf;
|
|
272
277
|
}
|
|
@@ -275,7 +280,7 @@ safe_commit_lock::~safe_commit_lock()
|
|
|
275
280
|
}
|
|
276
281
|
|
|
277
282
|
// Linux MySQL can access to the mysql_bin_log variable
|
|
278
|
-
|
|
283
|
+
inline short getBinlogPosInternal(THD*, binlogPos* bpos, THD* /*tmpThd*/, bzs::db::IblobBuffer* bb)
|
|
279
284
|
{
|
|
280
285
|
if (mysql_bin_log.is_open())
|
|
281
286
|
{
|
|
@@ -315,13 +320,17 @@ int execSql(THD* thd, const char* sql)
|
|
|
315
320
|
using namespace bzs::db::transactd;
|
|
316
321
|
class slaveStatus : public dummyProtocol
|
|
317
322
|
{
|
|
323
|
+
protected:
|
|
318
324
|
connection::records& m_records;
|
|
319
325
|
bzs::db::IblobBuffer* m_bb;
|
|
320
326
|
int m_blobfields;
|
|
321
327
|
connection::record& getRec()
|
|
322
328
|
{
|
|
323
329
|
m_records.push_back(connection::record());
|
|
324
|
-
|
|
330
|
+
size_t id = m_records.size() - 1;
|
|
331
|
+
connection::record& rec = m_records[id];
|
|
332
|
+
rec.id = (unsigned int)id;
|
|
333
|
+
return rec;
|
|
325
334
|
}
|
|
326
335
|
public:
|
|
327
336
|
inline slaveStatus(THD *thd_arg, connection::records& recs, bzs::db::IblobBuffer* bb) :
|
|
@@ -329,7 +338,7 @@ public:
|
|
|
329
338
|
{
|
|
330
339
|
m_records.clear();
|
|
331
340
|
}
|
|
332
|
-
~slaveStatus()
|
|
341
|
+
virtual ~slaveStatus()
|
|
333
342
|
{
|
|
334
343
|
m_bb->setFieldCount(m_blobfields);
|
|
335
344
|
}
|
|
@@ -378,10 +387,214 @@ public:
|
|
|
378
387
|
#endif
|
|
379
388
|
};
|
|
380
389
|
|
|
381
|
-
|
|
390
|
+
//----------------------------------------------------------------------
|
|
391
|
+
// slaveHosts
|
|
392
|
+
//----------------------------------------------------------------------
|
|
393
|
+
// rec.id = server_id
|
|
394
|
+
// rec.readCount = port
|
|
395
|
+
// rec.name = host
|
|
396
|
+
// opt_show_slave_auth_info
|
|
397
|
+
class slaveInfo
|
|
398
|
+
{
|
|
399
|
+
public:
|
|
400
|
+
std::string host;
|
|
401
|
+
std::string user;
|
|
402
|
+
std::string passwd;
|
|
403
|
+
std::string uuid;
|
|
404
|
+
void reset()
|
|
405
|
+
{
|
|
406
|
+
host = "";
|
|
407
|
+
user = "";
|
|
408
|
+
passwd = "";
|
|
409
|
+
uuid = "";
|
|
410
|
+
|
|
411
|
+
}
|
|
412
|
+
std::string tabSeparateValue()
|
|
413
|
+
{
|
|
414
|
+
return host + "\t" + user + "\t" + passwd + "\t" + uuid;
|
|
415
|
+
}
|
|
416
|
+
};
|
|
417
|
+
|
|
418
|
+
|
|
419
|
+
class slaveHosts : public slaveStatus
|
|
420
|
+
{
|
|
421
|
+
connection::record m_rec;
|
|
422
|
+
slaveInfo m_sinfo;
|
|
423
|
+
int m_strCount;
|
|
424
|
+
public:
|
|
425
|
+
inline slaveHosts(THD *thd_arg, connection::records& recs, bzs::db::IblobBuffer* bb) :
|
|
426
|
+
slaveStatus(thd_arg, recs, bb), m_strCount(0){}
|
|
427
|
+
|
|
428
|
+
bool store_longlong(longlong from, bool unsigned_flag)
|
|
429
|
+
{
|
|
430
|
+
if (m_rec.id == 0)
|
|
431
|
+
m_rec.id = (unsigned int)from;
|
|
432
|
+
else if (m_rec.readCount == 0)
|
|
433
|
+
m_rec.readCount = (unsigned int)from;
|
|
434
|
+
return false;
|
|
435
|
+
}
|
|
436
|
+
bool store_null()
|
|
437
|
+
{
|
|
438
|
+
return false;
|
|
439
|
+
}
|
|
440
|
+
bool str_store(const char *from, size_t length)
|
|
441
|
+
{
|
|
442
|
+
if (m_strCount == 0)
|
|
443
|
+
m_sinfo.host = from;
|
|
444
|
+
#if (defined(MYSQL_5_7))
|
|
445
|
+
else if (opt_show_slave_auth_info)
|
|
446
|
+
{
|
|
447
|
+
if (m_strCount == 1)
|
|
448
|
+
m_sinfo.user = from;
|
|
449
|
+
else if (m_strCount == 2)
|
|
450
|
+
m_sinfo.passwd = from;
|
|
451
|
+
else if (m_strCount == 3)
|
|
452
|
+
m_sinfo.uuid = from;
|
|
453
|
+
}
|
|
454
|
+
#endif
|
|
455
|
+
else if (m_strCount == 1)
|
|
456
|
+
m_sinfo.uuid = from;
|
|
457
|
+
|
|
458
|
+
++m_strCount;
|
|
459
|
+
return false;
|
|
460
|
+
}
|
|
461
|
+
|
|
462
|
+
void addHostInfo()
|
|
463
|
+
{
|
|
464
|
+
std::string s = m_sinfo.tabSeparateValue();
|
|
465
|
+
m_rec.type = 1;
|
|
466
|
+
if (s.size() >= CON_REC_VALUE_SIZE)
|
|
467
|
+
{
|
|
468
|
+
++m_blobfields;
|
|
469
|
+
m_rec.type = 2;
|
|
470
|
+
m_bb->addBlob((unsigned int)s.size() + 1, (unsigned short)m_records.size(),
|
|
471
|
+
(const unsigned char*)s.c_str());
|
|
472
|
+
}
|
|
473
|
+
else
|
|
474
|
+
strncpy(m_rec.name, s.c_str(), CON_REC_VALUE_SIZE);
|
|
475
|
+
}
|
|
476
|
+
|
|
477
|
+
#if (MYSQL_VERSION_ID < 50600 || defined(MARIADB_BASE_VERSION)) // MySQL 5.5
|
|
478
|
+
bool store(const char *from, size_t length, CHARSET_INFO *cs)
|
|
479
|
+
{
|
|
480
|
+
return str_store(from, length);
|
|
481
|
+
}
|
|
482
|
+
bool write()
|
|
483
|
+
{
|
|
484
|
+
addHostInfo();
|
|
485
|
+
m_records.push_back(m_rec);
|
|
486
|
+
m_rec.reset();
|
|
487
|
+
m_sinfo.reset();
|
|
488
|
+
m_strCount = 0;
|
|
489
|
+
return false;
|
|
490
|
+
}
|
|
491
|
+
#else
|
|
492
|
+
bool store(const char *from, size_t length, const CHARSET_INFO *cs)
|
|
493
|
+
{
|
|
494
|
+
return str_store(from, length);
|
|
495
|
+
}
|
|
496
|
+
bool end_row()
|
|
497
|
+
{
|
|
498
|
+
if (m_rec.id)
|
|
499
|
+
{
|
|
500
|
+
addHostInfo();
|
|
501
|
+
m_records.push_back(m_rec);
|
|
502
|
+
}
|
|
503
|
+
m_rec.reset();
|
|
504
|
+
m_sinfo.reset();
|
|
505
|
+
m_strCount = 0;
|
|
506
|
+
return false;
|
|
507
|
+
}
|
|
508
|
+
#endif
|
|
509
|
+
};
|
|
510
|
+
|
|
511
|
+
|
|
512
|
+
//----------------------------------------------------------------------
|
|
513
|
+
// channel
|
|
514
|
+
//----------------------------------------------------------------------
|
|
515
|
+
#pragma warning(disable : 4800)
|
|
516
|
+
#pragma warning(disable : 4271)
|
|
517
|
+
#pragma warning(disable : 4267)
|
|
518
|
+
#pragma warning(disable : 4244)
|
|
519
|
+
#if (defined(MARIADB_10_0) || defined(MARIADB_10_1))
|
|
520
|
+
#include "sql/slave.h"
|
|
521
|
+
#include "sql/rpl_mi.h"
|
|
522
|
+
|
|
523
|
+
|
|
524
|
+
int getChannels(THD* /*thd*/, connection::records& recs)
|
|
525
|
+
{
|
|
526
|
+
mysql_mutex_assert_owner(&LOCK_active_mi);
|
|
527
|
+
if (master_info_index)
|
|
528
|
+
{
|
|
529
|
+
uint_td size = master_info_index->master_info_hash.records;
|
|
530
|
+
for (uint_td i = 0;i < size; ++i)
|
|
531
|
+
{
|
|
532
|
+
Master_info* mi = (Master_info*)my_hash_element(&master_info_index->master_info_hash, i);
|
|
533
|
+
if (mi->host[0])
|
|
534
|
+
{
|
|
535
|
+
connection::record rec;
|
|
536
|
+
rec.type = 1;
|
|
537
|
+
strcpy_s(rec.name, CON_REC_VALUE_SIZE, mi->connection_name.str);
|
|
538
|
+
recs.push_back(rec);
|
|
539
|
+
}
|
|
540
|
+
}
|
|
541
|
+
}
|
|
542
|
+
return 0;
|
|
543
|
+
}
|
|
544
|
+
#elif defined(MYSQL_5_7)
|
|
545
|
+
#include "sql/rpl_msr.h" //channel_map
|
|
546
|
+
int getChannels(THD* thd, connection::records& recs)
|
|
547
|
+
{
|
|
548
|
+
channel_map.rdlock();
|
|
549
|
+
uint_td size = channel_map.get_num_instances();
|
|
550
|
+
if (size)
|
|
551
|
+
{
|
|
552
|
+
for (mi_map::iterator it = channel_map.begin(); it != channel_map.end(); it++)
|
|
553
|
+
{
|
|
554
|
+
Master_info* mi = it->second;
|
|
555
|
+
if (mi && mi->host[0])
|
|
556
|
+
{
|
|
557
|
+
connection::record rec;
|
|
558
|
+
rec.type = 1;
|
|
559
|
+
strcpy_s(rec.name, CON_REC_VALUE_SIZE, mi->get_channel());
|
|
560
|
+
recs.push_back(rec);
|
|
561
|
+
}
|
|
562
|
+
}
|
|
563
|
+
}
|
|
564
|
+
channel_map.unlock();
|
|
565
|
+
return 0;
|
|
566
|
+
}
|
|
567
|
+
|
|
568
|
+
#else
|
|
569
|
+
int getChannels(THD* thd, connection::records& recs)
|
|
570
|
+
{
|
|
571
|
+
return 0;
|
|
572
|
+
}
|
|
573
|
+
#endif
|
|
574
|
+
#pragma warning(default : 4800)
|
|
575
|
+
#pragma warning(default : 4271)
|
|
576
|
+
#pragma warning(default : 4267)
|
|
577
|
+
#pragma warning(default : 4244)
|
|
578
|
+
//------------------------------------------------------------------------------
|
|
579
|
+
|
|
580
|
+
int getSlaveStatus(THD* thd, const char* channel, connection::records& recs, bzs::db::IblobBuffer* bb)
|
|
382
581
|
{
|
|
383
582
|
slaveStatus ss(thd, recs, bb);
|
|
384
|
-
|
|
583
|
+
char tmp[128];
|
|
584
|
+
#if (defined(MYSQL_5_7))
|
|
585
|
+
sprintf_s(tmp, 128, "show slave status for channel '%s'", channel);
|
|
586
|
+
#elif (defined(MARIADB_10_1) || defined(MARIADB_10_0))
|
|
587
|
+
sprintf_s(tmp, 128, "show slave '%s' status", channel);
|
|
588
|
+
#else
|
|
589
|
+
sprintf_s(tmp, 128, "show slave status");
|
|
590
|
+
#endif
|
|
591
|
+
return execSql(thd, tmp);
|
|
592
|
+
}
|
|
593
|
+
|
|
594
|
+
int getSlaveHosts(THD* thd, connection::records& recs, bzs::db::IblobBuffer* bb)
|
|
595
|
+
{
|
|
596
|
+
slaveHosts ss(thd, recs, bb);
|
|
597
|
+
return execSql(thd, "show slave hosts");
|
|
385
598
|
}
|
|
386
599
|
|
|
387
600
|
#pragma GCC diagnostic warning "-Woverloaded-virtual"
|
|
@@ -19,10 +19,11 @@
|
|
|
19
19
|
#include "client.h"
|
|
20
20
|
#include "sqlBuilder.h"
|
|
21
21
|
#include "stringConverter.h"
|
|
22
|
-
|
|
22
|
+
#include <errno.h>
|
|
23
23
|
using namespace bzs::db::protocol::tdap::client;
|
|
24
24
|
|
|
25
|
-
|
|
25
|
+
bnet::connections* m_cons = NULL;
|
|
26
|
+
extern void writeErrorLog(int err, const char* msg);
|
|
26
27
|
|
|
27
28
|
namespace bzs
|
|
28
29
|
{
|
|
@@ -51,6 +52,9 @@ short errorCode(const boost::system::error_code& e)
|
|
|
51
52
|
{
|
|
52
53
|
case 11004:
|
|
53
54
|
case 11001:
|
|
55
|
+
case 109: // destination address required
|
|
56
|
+
case 2: //No such file or directory
|
|
57
|
+
case 1: //operation not permitted
|
|
54
58
|
ret = ERROR_TD_HOSTNAME_NOT_FOUND;
|
|
55
59
|
break;
|
|
56
60
|
case 10060:
|
|
@@ -64,20 +68,21 @@ short errorCode(const boost::system::error_code& e)
|
|
|
64
68
|
case 111: //connect: Connection refused
|
|
65
69
|
case 10061:
|
|
66
70
|
case 10053:
|
|
71
|
+
case 995: //Win32 WSA_OPERATION_ABORTED
|
|
67
72
|
ret = ERROR_TD_CONNECTION_FAILURE;
|
|
68
73
|
break;
|
|
69
74
|
case 104: //write: Connection reset by peer
|
|
70
75
|
case 10054:
|
|
71
|
-
ret = ERROR_TD_NET_REMOTE_DISCONNECT;
|
|
72
|
-
break;
|
|
73
76
|
case 232:
|
|
74
|
-
|
|
75
|
-
case 2:
|
|
76
|
-
case 1:
|
|
77
|
-
ret = ERROR_TD_INVALID_CLINETHOST;
|
|
77
|
+
ret = ERROR_TD_NET_REMOTE_DISCONNECT;
|
|
78
78
|
break;
|
|
79
79
|
default:
|
|
80
|
+
{
|
|
80
81
|
ret = ERROR_TD_NET_OTHER;
|
|
82
|
+
char tmp[512];
|
|
83
|
+
sprintf_s(tmp, 512, "native socket error code %d", e.value());
|
|
84
|
+
writeErrorLog(ret, tmp);
|
|
85
|
+
}
|
|
81
86
|
}
|
|
82
87
|
return ret;
|
|
83
88
|
}
|
|
@@ -87,9 +92,14 @@ short errorCode(const boost::system::error_code& e)
|
|
|
87
92
|
|
|
88
93
|
int client::getServerCharsetIndex()
|
|
89
94
|
{
|
|
90
|
-
|
|
95
|
+
assert(m_preResult == 0);
|
|
96
|
+
m_preResult = 0;
|
|
97
|
+
bnet::connection* c = con();
|
|
91
98
|
if (!c)
|
|
99
|
+
{
|
|
100
|
+
m_preResult = ERROR_TD_NOT_CONNECTED;
|
|
92
101
|
return -1;
|
|
102
|
+
}
|
|
93
103
|
int v = c->charsetServer();
|
|
94
104
|
if (v != -1)
|
|
95
105
|
return v;
|
|
@@ -117,11 +127,15 @@ int client::getServerCharsetIndex()
|
|
|
117
127
|
if (req.result == 0 && req.resultLen)
|
|
118
128
|
{
|
|
119
129
|
if (!checkVersion(ver))
|
|
130
|
+
{
|
|
131
|
+
m_preResult = SERVER_CLIENT_NOT_COMPATIBLE;
|
|
120
132
|
return -1;
|
|
133
|
+
}
|
|
121
134
|
c->setCharsetServer(mysql::charsetIndex(vers.cherserServer));
|
|
122
135
|
return c->charsetServer();
|
|
123
136
|
}
|
|
124
137
|
}
|
|
138
|
+
m_preResult = errorCode(con()->error());
|
|
125
139
|
return -1;
|
|
126
140
|
}
|
|
127
141
|
|