[prev in list] [next in list] [prev in thread] [next in thread]
List: pecl-cvs
Subject: [PECL-CVS] =?utf-8?q?svn:_/pecl/mysqlnd=5Fms/trunk/_mysqlnd=5Fms=5Ffilter=5Fqos.c_tests/mysqlnd=5Fms
From: Ulf_Wendel <uw () php ! net>
Date: 2011-11-30 15:59:24
Message-ID: svn-uw-1322668764-320200-105293496 () svn ! php ! net
[Download RAW message or body]
uw Wed, 30 Nov 2011 15:59:24 +0000
Revision: http://svn.php.net/viewvc?view=revision&revision=320200
Log:
Changing error handling. Don't bubble up error. It will stop execution although we \
can easily continue and use master only. Continuing is what makes most sense for a \
drop-in solution. Emit warning to inform user about issue. Needs 5.3 code, 5.3 and \
5.4 behaviour differ after push. Leaving to Andrey to fix.
Changed paths:
U pecl/mysqlnd_ms/trunk/mysqlnd_ms_filter_qos.c
U pecl/mysqlnd_ms/trunk/tests/mysqlnd_ms_filter_qos_rt_gtid.phpt
U pecl/mysqlnd_ms/trunk/tests/mysqlnd_ms_set_qos_gtid_lost_connection.phpt
U pecl/mysqlnd_ms/trunk/tests/mysqlnd_ms_set_qos_gtid_sql_error.phpt
U pecl/mysqlnd_ms/trunk/tests/mysqlnd_ms_set_qos_gtid_sql_error2.phpt
U pecl/mysqlnd_ms/trunk/tests/mysqlnd_ms_set_qos_gtid_sql_parsing2.phpt
["svn-diffs-320200.txt" (text/x-diff)]
Modified: pecl/mysqlnd_ms/trunk/mysqlnd_ms_filter_qos.c
===================================================================
--- pecl/mysqlnd_ms/trunk/mysqlnd_ms_filter_qos.c 2011-11-30 14:36:26 UTC (rev \
320199)
+++ pecl/mysqlnd_ms/trunk/mysqlnd_ms_filter_qos.c 2011-11-30 15:59:24 UTC (rev \
320200) @@ -41,12 +41,21 @@
/* {{{ mysqlnd_ms_qos_get_gtid */
static enum_func_status mysqlnd_ms_qos_server_has_gtid(MYSQLND_CONN_DATA * conn,
- MYSQLND_MS_CONN_DATA ** conn_data, char *sql, size_t sql_len TSRMLS_DC) {
+ MYSQLND_MS_CONN_DATA ** conn_data, char *sql, size_t sql_len, MYSQLND_ERROR_INFO * \
tmp_error_info TSRMLS_DC) { MYSQLND_RES * res = NULL;
enum_func_status ret = FAIL;
+ /* TODO Andrey */
+#if MYSQLND_VERSION_ID >= 50010
+ MYSQLND_ERROR_INFO * org_error_info = NULL;
+#endif
DBG_ENTER("mysqlnd_ms_qos_server_has_gtid");
+#if MYSQLND_VERSION_ID >= 50010
+ /* hide errors from user */
+ org_error_info = conn->error_info;
+ conn->error_info = tmp_error_info;
+#endif
(*conn_data)->skip_ms_calls = TRUE;
if ((PASS == MS_CALL_ORIGINAL_CONN_DATA_METHOD(send_query)(conn, sql, sql_len \
TSRMLS_CC)) && (PASS == MS_CALL_ORIGINAL_CONN_DATA_METHOD(reap_query)(conn \
TSRMLS_CC)) && @@ -54,6 +63,10 @@
ret = (MYSQLND_MS_UPSERT_STATUS(conn).affected_rows) ? PASS : FAIL;
}
(*conn_data)->skip_ms_calls = FALSE;
+#if MYSQLND_VERSION_ID >= 50010
+ conn->error_info = org_error_info;
+#endif
+
if (res) {
res->m.free_result(res, FALSE TSRMLS_CC);
}
@@ -100,50 +113,59 @@
MYSQLND_MS_LIST_DATA * element = NULL;
MYSQLND_CONN_DATA * connection = NULL;
MYSQLND_MS_CONN_DATA ** conn_data = NULL;
+ MYSQLND_ERROR_INFO *tmp_error_info = mnd_ecalloc(1,sizeof(MYSQLND_ERROR_INFO));
+ smart_str sql = {0};
+ zend_bool exit_loop = FALSE;
BEGIN_ITERATE_OVER_SERVER_LIST(element, slave_list);
- if (element->conn) {
+ if (element->conn && !exit_loop) {
connection = element->conn;
MS_LOAD_CONN_DATA(conn_data, connection);
if (conn_data && (*conn_data) && (*conn_data)->global_trx.check_for_gtid &&
(CONN_GET_STATE(connection) != CONN_QUIT_SENT) &&
((CONN_GET_STATE(connection) > CONN_ALLOCED) || (PASS == \
mysqlnd_ms_lazy_connect(element, TRUE TSRMLS_CC)))) {
- smart_str sql = {0};
- char * pos;
- char buf[32];
- DBG_INF_FMT("Checking slave connection "MYSQLND_LLU_SPEC"", \
connection->thread_id); + DBG_INF_FMT("Checking slave connection \
"MYSQLND_LLU_SPEC"", connection->thread_id);
- pos = strstr((*conn_data)->global_trx.check_for_gtid, "#GTID");
- if (pos) {
- smart_str_appendl(&sql, (*conn_data)->global_trx.check_for_gtid, pos - \
((*conn_data)->global_trx.check_for_gtid));
- snprintf(buf, sizeof(buf), "%ld", filter_data->option_value);
- smart_str_appends(&sql, buf);
- smart_str_appendc(&sql, '\0');
- if (PASS == mysqlnd_ms_qos_server_has_gtid(connection, conn_data, sql.c, \
sql.len - 1 TSRMLS_CC)) {
- zend_llist_add_element(selected_slaves, &element);
+ if (!sql.c) {
+ char * pos;
+ char buf[32];
+ pos = strstr((*conn_data)->global_trx.check_for_gtid, "#GTID");
+ if (pos) {
+ smart_str_appendl(&sql, (*conn_data)->global_trx.check_for_gtid, pos - \
((*conn_data)->global_trx.check_for_gtid)); + snprintf(buf, sizeof(buf), \
"%ld", filter_data->option_value); + smart_str_appends(&sql, buf);
+ smart_str_appendc(&sql, '\0');
} else {
- MYSQLND_ERROR_INFO connection_error_info = \
MYSQLND_MS_ERROR_INFO(connection); char error_buf[256];
- snprintf(error_buf, sizeof(error_buf), MYSQLND_MS_ERROR_PREFIX " SQL error \
while checking slave for GTID: '%s'", connection_error_info.error); \
+ snprintf(error_buf, sizeof(error_buf), MYSQLND_MS_ERROR_PREFIX " Failed \
parse SQL for checking GTID. Cannot find #GTID placeholder"); \
error_buf[sizeof(error_buf) - 1] = '\0';
- SET_CLIENT_ERROR((*error_info), CR_UNKNOWN_ERROR, UNKNOWN_SQLSTATE, \
error_buf); php_error_docref(NULL TSRMLS_CC, E_WARNING, "%s", error_buf);
+ exit_loop = TRUE;
}
- smart_str_free(&sql);
- } else {
- char error_buf[256];
- snprintf(error_buf, sizeof(error_buf), MYSQLND_MS_ERROR_PREFIX " Failed \
parse SQL for checking GTID. Cannot find #GTID placeholder");
- error_buf[sizeof(error_buf) - 1] = '\0';
- SET_CLIENT_ERROR((*error_info), CR_UNKNOWN_ERROR, UNKNOWN_SQLSTATE, \
error_buf);
- php_error_docref(NULL TSRMLS_CC, E_WARNING, "%s", error_buf);
}
+ if (sql.c) {
+ tmp_error_info->error_no = 0;
+ if (PASS == mysqlnd_ms_qos_server_has_gtid(connection, conn_data, sql.c, \
sql.len - 1, tmp_error_info TSRMLS_CC)) { \
+ zend_llist_add_element(selected_slaves, &element); + } else if \
(tmp_error_info->error_no) { + char error_buf[256];
+ snprintf(error_buf, sizeof(error_buf), MYSQLND_MS_ERROR_PREFIX " SQL error \
while checking slave for GTID: %d/'%s'", tmp_error_info->error_no, \
tmp_error_info->error); + error_buf[sizeof(error_buf) - 1] = '\0';
+ php_error_docref(NULL TSRMLS_CC, E_WARNING, "%s", error_buf);
+ }
+ }
}
}
i++;
END_ITERATE_OVER_SERVER_LIST;
+ if (sql.c)
+ smart_str_free(&sql);
+
+ mnd_efree(tmp_error_info);
+
zend_llist_copy(selected_masters, master_list);
break;
}
@@ -170,8 +192,11 @@
We may inject mysqlnd_qc per-query TTL SQL hints here to
replace a slave access with a call access.
*/
+ if (QOS_OPTION_AGE == filter_data->option) {
+ } else {
+ zend_llist_copy(selected_slaves, slave_list);
+ }
zend_llist_copy(selected_masters, master_list);
- zend_llist_copy(selected_slaves, slave_list);
break;
default:
Modified: pecl/mysqlnd_ms/trunk/tests/mysqlnd_ms_filter_qos_rt_gtid.phpt
===================================================================
--- pecl/mysqlnd_ms/trunk/tests/mysqlnd_ms_filter_qos_rt_gtid.phpt 2011-11-30 \
14:36:26 UTC (rev 320199)
+++ pecl/mysqlnd_ms/trunk/tests/mysqlnd_ms_filter_qos_rt_gtid.phpt 2011-11-30 \
15:59:24 UTC (rev 320200) @@ -17,11 +17,18 @@
_skipif_connect($slave_host_only, $user, $passwd, $db, $slave_port, $slave_socket);
include_once("util.inc");
+$ret = mst_is_slave_of($slave_host_only, $slave_port, $slave_socket, \
$master_host_only, $master_port, $master_socket, $user, $passwd, $db); +if \
(is_string($ret)) + die(sprintf("SKIP Failed to check relation of configured master \
and slave, %s\n", $ret)); +
$sql = mst_get_gtid_sql($db);
if ($error = mst_mysqli_setup_gtid_table($master_host_only, $user, $passwd, $db, \
$master_port, $master_socket)) die(sprintf("SKIP Failed to setup GTID on master, \
%s\n", $error));
+if ($error = mst_mysqli_drop_gtid_table($slave_host_only, $user, $passwd, $db, \
$slave_port, $slave_socket)) + die(sprintf("SKIP Failed to drop GTID table on slave \
%s\n", $error));
+
$settings = array(
"myapp" => array(
'master' => array(
@@ -120,7 +127,9 @@
string(1) "1"
}
}
-GTID '%d'
+GTID '5'
+
+Warning: mysqli::query(): (mysqlnd_ms) SQL error while checking slave for GTID: \
1146/'%s' in %s on line %d array(1) {
[0]=>
array(1) {
@@ -128,5 +137,7 @@
string(1) "1"
}
}
-[009] Run on %s
+
+Warning: mysqli::query(): (mysqlnd_ms) SQL error while checking slave for GTID: \
1146/'%s' in %s on line %d +[009] Run on master1-%s
done!
\ No newline at end of file
Modified: pecl/mysqlnd_ms/trunk/tests/mysqlnd_ms_set_qos_gtid_lost_connection.phpt
===================================================================
--- pecl/mysqlnd_ms/trunk/tests/mysqlnd_ms_set_qos_gtid_lost_connection.phpt 2011-11-30 \
14:36:26 UTC (rev 320199)
+++ pecl/mysqlnd_ms/trunk/tests/mysqlnd_ms_set_qos_gtid_lost_connection.phpt 2011-11-30 \
15:59:24 UTC (rev 320200) @@ -131,7 +131,7 @@
if ($error = mst_mysqli_drop_gtid_table($master_host_only, $user, $passwd, $db, \
$master_port, $master_socket)) printf("[clean] %s\n", $error));
?>
---XFAIL--
-Some warning, which one depends on upcoming implementation from Andrey
--EXPECTF--
+[006] [%d] %s
+[007] [%d] %s
done!
\ No newline at end of file
Modified: pecl/mysqlnd_ms/trunk/tests/mysqlnd_ms_set_qos_gtid_sql_error.phpt
===================================================================
--- pecl/mysqlnd_ms/trunk/tests/mysqlnd_ms_set_qos_gtid_sql_error.phpt 2011-11-30 \
14:36:26 UTC (rev 320199)
+++ pecl/mysqlnd_ms/trunk/tests/mysqlnd_ms_set_qos_gtid_sql_error.phpt 2011-11-30 \
15:59:24 UTC (rev 320200) @@ -107,8 +107,12 @@
?>
--EXPECTF--
Warning: mysqli::query(): (mysqlnd_ms) Failed parse SQL for checking GTID. Cannot \
find #GTID placeholder in %s on line %d
-
-Warning: mysqli::query(): (mysqlnd_ms) Failed parse SQL for checking GTID. Cannot \
find #GTID placeholder in %s on line %d
-[006] [2000] (mysqlnd_ms) Failed parse SQL for checking GTID. Cannot find #GTID \
placeholder
-[007] [2000] '(mysqlnd_ms) Failed parse SQL for checking GTID. Cannot find #GTID \
placeholder' +array(1) {
+ [0]=>
+ array(1) {
+ [0]=>
+ string(1) "1"
+ }
+}
+[007] [0] ''
done!
\ No newline at end of file
Modified: pecl/mysqlnd_ms/trunk/tests/mysqlnd_ms_set_qos_gtid_sql_error2.phpt
===================================================================
--- pecl/mysqlnd_ms/trunk/tests/mysqlnd_ms_set_qos_gtid_sql_error2.phpt 2011-11-30 \
14:36:26 UTC (rev 320199)
+++ pecl/mysqlnd_ms/trunk/tests/mysqlnd_ms_set_qos_gtid_sql_error2.phpt 2011-11-30 \
15:59:24 UTC (rev 320200) @@ -17,6 +17,11 @@
_skipif_connect($slave_host_only, $user, $passwd, $db, $slave_port, $slave_socket);
include_once("util.inc");
+$ret = mst_is_slave_of($slave_host_only, $slave_port, $slave_socket, \
$master_host_only, $master_port, $master_socket, $user, $passwd, $db); +if \
(is_string($ret)) + die(sprintf("SKIP Failed to check relation of configured master \
and slave, %s\n", $ret)); +
+include_once("util.inc");
$sql = mst_get_gtid_sql($db);
if ($error = mst_mysqli_setup_gtid_table($master_host_only, $user, $passwd, $db, \
$master_port, $master_socket)) die(sprintf("SKIP Failed to setup GTID on master, \
%s\n", $error)); @@ -106,9 +111,15 @@
printf("[clean] %s\n", $error));
?>
--EXPECTF--
-Warning: mysqli::query(): (mysqlnd_ms) SQL error while checking slave for GTID: '%s' \
in %s on line %d +Warning: mysqli::query(): (mysqlnd_ms) SQL error while checking \
slave for GTID: 1064/'%s' at line 1' in %s on line %d
-Warning: mysqli::query(): (mysqlnd_ms) SQL error while checking slave for GTID: '%s' \
in %s on line %d
-[006] [2000] (mysqlnd_ms) SQL error while checking slave for GTID: '%s'
-[007] [2000] '(mysqlnd_ms) SQL error while checking slave for GTID: '%s''
+Warning: mysqli::query(): (mysqlnd_ms) SQL error while checking slave for GTID: \
1064/'%s' at line 1' in %s on line %d +array(1) {
+ [0]=>
+ array(1) {
+ [0]=>
+ string(1) "1"
+ }
+}
+[007] [0] ''
done!
\ No newline at end of file
Modified: pecl/mysqlnd_ms/trunk/tests/mysqlnd_ms_set_qos_gtid_sql_parsing2.phpt
===================================================================
--- pecl/mysqlnd_ms/trunk/tests/mysqlnd_ms_set_qos_gtid_sql_parsing2.phpt 2011-11-30 \
14:36:26 UTC (rev 320199)
+++ pecl/mysqlnd_ms/trunk/tests/mysqlnd_ms_set_qos_gtid_sql_parsing2.phpt 2011-11-30 \
15:59:24 UTC (rev 320200) @@ -106,6 +106,9 @@
printf("[clean] %s\n", $error));
?>
--EXPECTF--
+Warning: mysqli::query(): (mysqlnd_ms) SQL error while checking slave for GTID: \
1064/'%s' in %s on line %d +
+Warning: mysqli::query(): (mysqlnd_ms) SQL error while checking slave for GTID: \
1064/'%s' in %s on line %d array(1) {
[0]=>
array(1) {
--
PECL CVS Mailing List
To unsubscribe, visit: http://www.php.net/unsub.php
[prev in list] [next in list] [prev in thread] [next in thread]
Configure |
About |
News |
Add a list |
Sponsored by KoreLogic