98 lines
2.8 KiB
C++
98 lines
2.8 KiB
C++
/*
|
|
Copyright (c) 2011, 2017, Oracle and/or its affiliates. All rights reserved.
|
|
|
|
This program is free software; you can redistribute it and/or modify
|
|
it under the terms of the GNU General Public License, version 2.0,
|
|
as published by the Free Software Foundation.
|
|
|
|
This program is also distributed with certain software (including
|
|
but not limited to OpenSSL) that is licensed under separate terms,
|
|
as designated in a particular file or component or in included license
|
|
documentation. The authors of MySQL hereby grant you an additional
|
|
permission to link the program and your derivative works with the
|
|
separately licensed software that they have included with MySQL.
|
|
|
|
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, version 2.0, 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., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA
|
|
*/
|
|
|
|
#include "my_config.h"
|
|
#include <unistd.h>
|
|
|
|
#include "all_tests.h"
|
|
|
|
|
|
int run_pool_test(QueryPlan *plan, Ndb *db1, int v) {
|
|
int conn_retries = 0;
|
|
int r;
|
|
Ndb_cluster_connection &main_conn = db1->get_ndb_cluster_connection();
|
|
|
|
/* The pooled connection */
|
|
Ndb_cluster_connection * nc = new Ndb_cluster_connection(connect_string, & main_conn);
|
|
|
|
/* Set name that appears in the cluster log file */
|
|
nc->set_name("memcached.pool");
|
|
|
|
detail(v, "#1 node_id: %d\n", nc->node_id());
|
|
|
|
while(conn_retries < 5) {
|
|
r = nc->connect(1,1,0);
|
|
if(r == 0) // success
|
|
break;
|
|
else if(r == -1) // unrecoverable error
|
|
break;
|
|
else if (r == 1 && conn_retries < 5) { // recoverable error
|
|
sleep(1);
|
|
conn_retries++;
|
|
}
|
|
}
|
|
|
|
detail(v, "connect() returns %d\n", r);
|
|
require(r >= 0);
|
|
|
|
detail(v, "#2 node_id: %d\n", nc->node_id());
|
|
|
|
if(nc->node_id() == 0) {
|
|
detail(v, "starting connect thread\n");
|
|
nc->start_connect_thread();
|
|
}
|
|
else {
|
|
detail(v, "not starting connect thread\n");
|
|
}
|
|
|
|
detail(v, "#3 node_id: %d \n", nc->node_id());
|
|
|
|
int ready_nodes = nc->wait_until_ready(2, 2);
|
|
detail(v, "wait_until_ready(): %d \n", ready_nodes);
|
|
require(ready_nodes > 0);
|
|
|
|
detail(v, "#4 node_id: %d \n", nc->node_id());
|
|
|
|
// while(nc->node_id() == 0 && retries++ < 5) sleep(1);
|
|
|
|
detail(v, "Node %d connected to %s:%d\n",
|
|
nc->node_id(), nc->get_connected_host(), nc->get_connected_port());
|
|
require(nc->node_id());
|
|
|
|
Ndb *db2 = new Ndb(nc);
|
|
require(db2);
|
|
detail(v, "Created an Ndb object.\n");
|
|
|
|
db2->init(4);
|
|
|
|
NdbTransaction *tx = db2->startTransaction();
|
|
require(tx);
|
|
detail(v, "Started a transaction.\n");
|
|
|
|
tx->close();
|
|
|
|
pass;
|
|
}
|
|
|