Find this useful? Enter your email to receive occasional updates for securing PHP code.

Signing you up...

Thank you for signing up!

PHP Decode

--TEST-- PS, autocommit, GTID nowait Write Consistency --SKIPIF-- <?php if (version_compar..

Decoded Output download

--TEST--
PS, autocommit, GTID nowait Write Consistency
--SKIPIF--
<?php
if (version_compare(PHP_VERSION, '5.3.99-dev', '<'))
	die(sprintf("SKIP Requires PHP >= 5.3.99, using " . PHP_VERSION));

require_once('skipif.inc');
require_once("connect.inc");

_skipif_check_extensions(array("mysqli"));
_skipif_connect($emulated_master_host_only, $user, $passwd, $db, $emulated_master_port, $emulated_master_socket);
_skipif_connect($slave_host_only, $user, $passwd, $db, $slave_port, $slave_socket);
_skipif_connect($master_host_only, $user, $passwd, $db, $master_port, $master_socket);


include_once("util.inc");
$ret = mst_mysqli_server_supports_gtid($master_host_only, $user, $passwd, $db, $master_port, $master_socket);
if (is_string($ret))
	die(sprintf("SKIP Failed to check if server has built-in GTID support, %s
", $ret));

if (true != $ret)
	die(sprintf("SKIP Server has no built-in GTID support (want MySQL 5.6.16+)"));

$ret = mst_mysqli_server_supports_session_track_gtid($master_host_only, $user, $passwd, $db, $master_port, $master_socket);
if (is_string($ret))
	die(sprintf("SKIP Failed to check if server support SESSION TRACK GTID, %s
", $ret));

if (true != $ret)
	die(sprintf("SKIP Server has no SESSION TRACK GTID support (want MySQL 5.7.6+ and SESSION_TRACK_GTIDS=OWN_GTID)"));

$ret = mst_mysqli_server_supports_memcached_plugin($emulated_master_host_only, $user, $passwd, $db, $emulated_master_port, $emulated_master_socket);
if (is_string($ret))
	die(sprintf("SKIP Failed to check if server support MEMCACHED plugin, %s
", $ret));

if (true != $ret)
	die(sprintf("SKIP Server has no MEMCACHED plugin support (want MySQL 5.6.0+ and active daemon_memcached plugin)"));

$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
", $ret));

if (true != $ret)
	die("SKIP Configured master and slave seem not to be part of a replication cluster
");

$ret = mst_is_slave_of($master_host_only, $master_port, $master_socket, $slave_host_only, $slave_port, $slave_socket, $user, $passwd, $db);
if (is_string($ret))
	die(sprintf("SKIP Failed to check relation of configured multi master, %s
", $ret));

if (true != $ret)
	die("SKIP Configured masters seem not to be part of a circular replication cluster
");

$sql = mst_get_gtid_memcached($db);

$settings = array(
	"myapp" => array(
		'master' => array(
			"master1" => array(
				'host' 		=> $master_host_only,
				'port' 		=> (int)$master_port,
				'socket' 	=> $master_socket,
			),
			"master2" => array(
				'host' 	=> $slave_host_only, // will be used as master
				'port' 	=> (int)$slave_port,
				'socket' => $slave_socket,
			),			
			"master3" => array(
				'host' 	=> $emulated_master_host_only,
				'port' 	=> (int)$emulated_master_port,
				'socket' => $emulated_master_socket,
			),			
		),
		'slave' => array(),
		'global_transaction_id_injection' => array(
		 	'type'						=> 2,
			'fetch_last_gtid'			=> $sql['fetch_last_gtid'],
			'report_error'				=> true,
			'memcached_host'			=> $emulated_master_host_only,
			'memcached_port'			=> $emulated_master_port + $memcached_port_add_hack,
			'memcached_key'				=> $sql['global_key'],
			'memcached_wkey'			=> $sql['global_wkey'],
			'race_avoid'				=> 1,
			'use_get'					=> 1
			),

		'lazy_connections' => 1,
		'trx_stickiness' => 'on',
		'filters' => array(
			"quality_of_service" => array(
				"session_consistency" => 1,
			),
			"roundrobin" => array(),
		),
	),

);

if ($error = mst_create_config("test_mysqlnd_ms_gtid_nw_ps_wc_basics.ini", $settings))
	die(sprintf("SKIP %s
", $error));
if ($error = mst_mysqli_setup_gtid_memcached($emulated_master_host_only, $user, $passwd, $db, $emulated_master_port, $emulated_master_socket))
  	die(sprintf("Failed to setup GTID memcached on emulated master, %s
", $error));
if ($error = mst_mysqli_create_gtid_test_table($master_host_only, $user, $passwd, $db, $master_port, $master_socket))
	die(sprintf("Failed to create test table on master %s
", $error));
if ($error = mst_mysqli_create_gtid_test_table($emulated_master_host_only, $user, $passwd, $db, $emulated_master_port, $emulated_master_socket))
	die(sprintf("Failed to create test table on emulated master %s
", $error));
?>
--INI--
mysqlnd_ms.enable=1
mysqlnd_ms.config_file=test_mysqlnd_ms_gtid_nw_ps_wc_basics.ini
mysqlnd_ms.collect_statistics=1
mysqlnd_ms.multi_master=1
--FILE--
<?php
	require_once("connect.inc");
	require_once("util.inc");
 	$sql = mst_get_gtid_memcached($db);
    $rwhere = "m.id = '" . $sql['global_key'] . ":0'";
   	$wwhere = "m.id = '" . $sql['global_wkey'] . "'";
	$link = mst_mysqli_connect("myapp", $user, $passwd, $db, $port, $socket);
	if (mysqli_connect_errno()) {
		printf("[".(string)1/*offset*/."] [%d] %s
", mysqli_connect_errno(), mysqli_connect_error());
	}
	$link1 = mst_mysqli_connect("myapp", $user, $passwd, $db, $port, $socket);
	if (mysqli_connect_errno()) {
		printf("[".(string)1/*offset*/."] [%d] %s
", mysqli_connect_errno(), mysqli_connect_error());
	}
	/* we need an extra non-MS link for checking memcached GTID. */
	$memc_link = mst_mysqli_connect($emulated_master_host_only, $user, $passwd, $db, $emulated_master_port, $emulated_master_socket);
	$master1_link = mst_mysqli_connect($master_host_only, $user, $passwd, $db, $master_port, $master_socket);
	$master2_link = mst_mysqli_connect($slave_host_only, $user, $passwd, $db, $slave_port, $slave_socket);
 //   $link = $master1_link;
	if (!($stmt = $link->prepare("SET @myrole = ?"))) // Prepared on master1
		printf("[".(string)4/*offset*/."] [%d] %s
", $link->errno, $link->error);
	
	if (!($stmt2 = $link->prepare("/*".MYSQLND_MS_LAST_USED_SWITCH."*/SELECT @myrole AS _role FROM DUAL"))) // Prepared on master1
		printf("[".(string)5/*offset*/."] [%d] %s
", $link->errno, $link->error);

	if (!($stmt3 = $link->prepare("INSERT INTO gtid_test(id) VALUES(CONCAT(@myrole,'-',@@server_uuid))"))) // Prepared on master2
		printf("[".(string)6/*offset*/."] [%d] %s
", $link->errno, $link->error);

	if (!($stmt4 = $link->prepare("SELECT CONCAT(@myrole,'-',id) AS _ext_id FROM gtid_test ORDER BY _ext_id"))) // Prepared on master3
		printf("[".(string)7/*offset*/."] [%d] %s
", $link->errno, $link->error);

	$role = NULL;
	if (!$stmt2->bind_result($role)) 
		printf("[".(string)8/*offset*/."] [%d] %s
", $link->errno, $link->error);

	$server_uid = NULL;
	if (!$stmt4->bind_result($server_uid)) 
		printf("[".(string)9/*offset*/."] [%d] %s
", $link->errno, $link->error);

	if (!$stmt->bind_param('s',$master)) 
		printf("[".(string)10/*offset*/."] [%d] %s
", $link->errno, $link->error);
	$master = 'Master1';
	if (!$stmt->execute()) // Execute on master1
		printf("[".(string)11/*offset*/."] [%d] %s
", $link->errno, $link->error);
	if (!$stmt2->execute()) // Execute on master1
		printf("[".(string)12/*offset*/."] [%d] %s
", $link->errno, $link->error);
	while ($stmt2->fetch()) 
		printf("Role %s
", $role);
	
	$master = 'Master2';
	if (!$stmt->execute()) // Execute on master2
		printf("[".(string)13/*offset*/."] [%d] %s
", $link->errno, $link->error);
	if (!$stmt2->execute()) // Execute on master2
		printf("[".(string)14/*offset*/."] [%d] %s
", $link->errno, $link->error);
	while ($stmt2->fetch()) 
		printf("Role %s
", $role);
		
	$master = 'Master3';
	if (!$stmt->execute()) // Execute on master3
		printf("[".(string)15/*offset*/."] [%d] %s
", $link->errno, $link->error);
	if (!$stmt2->execute()) // Execute on master3
		printf("[".(string)16/*offset*/."] [%d] %s
", $link->errno, $link->error);
	while ($stmt2->fetch()) 
		printf("Role %s
", $role);

	$res = mst_mysqli_query(17/*offset*/, $link, "SELECT @myrole AS _role FROM DUAL");
	var_dump($res->fetch_assoc());
	$res = mst_mysqli_query(18/*offset*/, $link, "SELECT @myrole AS _role FROM DUAL");
	var_dump($res->fetch_assoc());
	$res = mst_mysqli_query(19/*offset*/, $link, "SELECT @myrole AS _role FROM DUAL");
	var_dump($res->fetch_assoc());
	
	if (!$stmt3->execute()) // Execute on master1
		printf("[".(string)20/*offset*/."] [%d] %s
", $link->errno, $link->error);
	printf("Num_rows %d
",  $stmt3->affected_rows);
	$gtid = mysqlnd_ms_get_last_gtid($link);
	if (!$gtid)
		printf("[".(string)21/*offset*/."] Expecting gtid got empty, [%d] %s
", $link->errno, $link->error);	
	$rgtid = mst_mysqli_fetch_gtid_memcached(22/*offset*/, $memc_link, $db, $rwhere, true);
	$wgtid = mst_mysqli_fetch_wgtid_memcached(23/*offset*/, $memc_link, $db, $wwhere, true);
	if ($rgtid[1] != $gtid || $wgtid[1] != $gtid)
		printf("[".(string)24/*offset*/."] Expecting gtid %s on memcached got %s %s
", $gtid, $rgtid, $wgtid[1]);	
	if (!mst_mysqli_wait_gtid_memcached(25/*offset*/, $master2_link, $db, $gtid))
		printf("[".(string)26/*offset*/."] Timeout or gtid not replicated for %s, [%d] %s
", $gtid, $master2_link->errno, $master2_link->error);	
		
	if (!$stmt4->execute()) // Execute on master1, The list of masters has now changed so the roundrobin filter will reset context and we are again on first position 
		printf("[".(string)27/*offset*/."] [%d] %s
", $link->errno, $link->error);
	while ($stmt4->fetch()) {
        printf("Server uid %s
", $server_uid);
    }
	
	if (!$stmt3->execute()) // Execute on master2
		printf("[".(string)28/*offset*/."] [%d] %s
", $link->errno, $link->error);
	printf("Num_rows %d
", $stmt3->affected_rows);
	$gtid = mysqlnd_ms_get_last_gtid($link);
	if (!$gtid)
		printf("[".(string)29/*offset*/."] Expecting gtid got empty, [%d] %s
", $link->errno, $link->error);	
	$rgtid = mst_mysqli_fetch_gtid_memcached(30/*offset*/, $memc_link, $db, $rwhere, true);
	$wgtid = mst_mysqli_fetch_wgtid_memcached(31/*offset*/, $memc_link, $db, $wwhere, true);
	if ($rgtid[1] != $gtid || $wgtid[1] != $gtid)
		printf("[".(string)32/*offset*/."] Expecting gtid %s on memcached got %s %s
", $gtid, $rgtid, $wgtid[1]);	
	if (!mst_mysqli_wait_gtid_memcached(33/*offset*/, $master1_link, $db, $gtid))
		printf("[".(string)34/*offset*/."] Timeout or gtid not replicated for %s, [%d] %s
", $gtid, $master1_link->errno, $master1_link->error);	
	
	if (!$stmt4->execute()) // Execute on master1
		printf("[".(string)35/*offset*/."] [%d] %s
", $link->errno, $link->error);
	while ($stmt4->fetch()) {
        printf("Server uid %s
", $server_uid);
    }

	if (!$stmt4->execute()) // Execute on master2
		printf("[".(string)36/*offset*/."] [%d] %s
", $link->errno, $link->error);
	while ($stmt4->fetch()) {
        printf("Server uid %s
", $server_uid);
    }

	if (!$stmt4->execute()) // Execute on master1
		printf("[".(string)37/*offset*/."] [%d] %s
", $link->errno, $link->error);
	while ($stmt4->fetch()) {
        printf("Server uid %s
", $server_uid);
    }


	$res = mst_mysqli_query(38/*offset*/, $link1, "SET @myrole1 = 'Master2'"); // First in list is now Master2 
	$res = mst_mysqli_query(39/*offset*/, $link1, "SET @myrole1 = 'Master1'"); // Execute on master1
	$res = mst_mysqli_query(40/*offset*/, $link1, "SET @myrole1 = CONCAT('Master2','-',@myrole1)"); // Execute on master2
	$res = mst_mysqli_query(41/*offset*/, $link1, "SET @myrole1 = CONCAT('Master1','-',@myrole1)"); // Execute on master1

	$res = mst_mysqli_query(42/*offset*/, $link1, "SELECT @myrole1 AS _role FROM DUAL"); // First in list is now Master2 
	var_dump($res->fetch_assoc());
	$res = mst_mysqli_query(43/*offset*/, $link1, "SELECT @myrole1 AS _role FROM DUAL"); // First in list is now Master1
	var_dump($res->fetch_assoc());
	$res = mst_mysqli_query(44/*offset*/, $link1, "SELECT @myrole1 AS _role FROM DUAL"); // Execute on master2
	var_dump($res->fetch_assoc());
	$res = mst_mysqli_query(45/*offset*/, $link1, "SELECT @myrole1 AS _role FROM DUAL"); // Execute on master1
	var_dump($res->fetch_assoc());

	$res = mst_mysqli_query(46/*offset*/, $memc_link, "SELECT id FROM gtid_test");
	var_dump($res->fetch_assoc());
	
	print "done!";
?>
--CLEAN--
<?php
	if (!unlink("test_mysqlnd_ms_gtid_nw_ps_wc_basics.ini"))
		printf("[clean] Cannot unlink ini file 'test_mysqlnd_ms_gtid_nw_ps_wc_basics.ini'.
");

	require_once("connect.inc");
	require_once("util.inc");
	if ($error = mst_mysqli_drop_gtid_memcached($emulated_master_host_only, $user, $passwd, $db, $emulated_master_port, $emulated_master_socket))
		printf("[clean] %s
", $error);
	if ($error = mst_mysqli_drop_gtid_test_table($master_host_only, $user, $passwd, $db, $master_port, $master_socket))
		printf("[clean] %s
", $error);
	if ($error = mst_mysqli_drop_gtid_test_table($emulated_master_host_only, $user, $passwd, $db, $emulated_master_port, $emulated_master_socket))
		printf("[clean] %s
", $error);
?>
--EXPECTF--
Role Master1
Role Master2
Role Master3
array(1) {
  ["_role"]=>
  string(7) "Master1"
}
array(1) {
  ["_role"]=>
  string(7) "Master2"
}
array(1) {
  ["_role"]=>
  string(7) "Master3"
}
Num_rows 1
Server uid Master1-Master1-%s
Server uid Master1-MY_EXECUTED_GTID
Num_rows 1
Server uid Master1-Master1-%s
Server uid Master1-Master2-%s
Server uid Master1-MY_EXECUTED_GTID
Server uid Master2-Master1-%s
Server uid Master2-Master2-%s
Server uid Master2-MY_EXECUTED_GTID
Server uid Master1-Master1-%s
Server uid Master1-Master2-%s
Server uid Master1-MY_EXECUTED_GTID
array(1) {
  ["_role"]=>
  string(15) "Master1-Master1"
}
array(1) {
  ["_role"]=>
  string(15) "Master2-Master2"
}
array(1) {
  ["_role"]=>
  string(15) "Master1-Master1"
}
array(1) {
  ["_role"]=>
  string(15) "Master2-Master2"
}
array(1) {
  ["id"]=>
  string(16) "MY_EXECUTED_GTID"
}
done!

Did this file decode correctly?

Original Code

--TEST--
PS, autocommit, GTID nowait Write Consistency
--SKIPIF--
<?php
if (version_compare(PHP_VERSION, '5.3.99-dev', '<'))
	die(sprintf("SKIP Requires PHP >= 5.3.99, using " . PHP_VERSION));

require_once('skipif.inc');
require_once("connect.inc");

_skipif_check_extensions(array("mysqli"));
_skipif_connect($emulated_master_host_only, $user, $passwd, $db, $emulated_master_port, $emulated_master_socket);
_skipif_connect($slave_host_only, $user, $passwd, $db, $slave_port, $slave_socket);
_skipif_connect($master_host_only, $user, $passwd, $db, $master_port, $master_socket);


include_once("util.inc");
$ret = mst_mysqli_server_supports_gtid($master_host_only, $user, $passwd, $db, $master_port, $master_socket);
if (is_string($ret))
	die(sprintf("SKIP Failed to check if server has built-in GTID support, %s\n", $ret));

if (true != $ret)
	die(sprintf("SKIP Server has no built-in GTID support (want MySQL 5.6.16+)"));

$ret = mst_mysqli_server_supports_session_track_gtid($master_host_only, $user, $passwd, $db, $master_port, $master_socket);
if (is_string($ret))
	die(sprintf("SKIP Failed to check if server support SESSION TRACK GTID, %s\n", $ret));

if (true != $ret)
	die(sprintf("SKIP Server has no SESSION TRACK GTID support (want MySQL 5.7.6+ and SESSION_TRACK_GTIDS=OWN_GTID)"));

$ret = mst_mysqli_server_supports_memcached_plugin($emulated_master_host_only, $user, $passwd, $db, $emulated_master_port, $emulated_master_socket);
if (is_string($ret))
	die(sprintf("SKIP Failed to check if server support MEMCACHED plugin, %s\n", $ret));

if (true != $ret)
	die(sprintf("SKIP Server has no MEMCACHED plugin support (want MySQL 5.6.0+ and active daemon_memcached plugin)"));

$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));

if (true != $ret)
	die("SKIP Configured master and slave seem not to be part of a replication cluster\n");

$ret = mst_is_slave_of($master_host_only, $master_port, $master_socket, $slave_host_only, $slave_port, $slave_socket, $user, $passwd, $db);
if (is_string($ret))
	die(sprintf("SKIP Failed to check relation of configured multi master, %s\n", $ret));

if (true != $ret)
	die("SKIP Configured masters seem not to be part of a circular replication cluster\n");

$sql = mst_get_gtid_memcached($db);

$settings = array(
	"myapp" => array(
		'master' => array(
			"master1" => array(
				'host' 		=> $master_host_only,
				'port' 		=> (int)$master_port,
				'socket' 	=> $master_socket,
			),
			"master2" => array(
				'host' 	=> $slave_host_only, // will be used as master
				'port' 	=> (int)$slave_port,
				'socket' => $slave_socket,
			),			
			"master3" => array(
				'host' 	=> $emulated_master_host_only,
				'port' 	=> (int)$emulated_master_port,
				'socket' => $emulated_master_socket,
			),			
		),
		'slave' => array(),
		'global_transaction_id_injection' => array(
		 	'type'						=> 2,
			'fetch_last_gtid'			=> $sql['fetch_last_gtid'],
			'report_error'				=> true,
			'memcached_host'			=> $emulated_master_host_only,
			'memcached_port'			=> $emulated_master_port + $memcached_port_add_hack,
			'memcached_key'				=> $sql['global_key'],
			'memcached_wkey'			=> $sql['global_wkey'],
			'race_avoid'				=> 1,
			'use_get'					=> 1
			),

		'lazy_connections' => 1,
		'trx_stickiness' => 'on',
		'filters' => array(
			"quality_of_service" => array(
				"session_consistency" => 1,
			),
			"roundrobin" => array(),
		),
	),

);

if ($error = mst_create_config("test_mysqlnd_ms_gtid_nw_ps_wc_basics.ini", $settings))
	die(sprintf("SKIP %s\n", $error));
if ($error = mst_mysqli_setup_gtid_memcached($emulated_master_host_only, $user, $passwd, $db, $emulated_master_port, $emulated_master_socket))
  	die(sprintf("Failed to setup GTID memcached on emulated master, %s\n", $error));
if ($error = mst_mysqli_create_gtid_test_table($master_host_only, $user, $passwd, $db, $master_port, $master_socket))
	die(sprintf("Failed to create test table on master %s\n", $error));
if ($error = mst_mysqli_create_gtid_test_table($emulated_master_host_only, $user, $passwd, $db, $emulated_master_port, $emulated_master_socket))
	die(sprintf("Failed to create test table on emulated master %s\n", $error));
?>
--INI--
mysqlnd_ms.enable=1
mysqlnd_ms.config_file=test_mysqlnd_ms_gtid_nw_ps_wc_basics.ini
mysqlnd_ms.collect_statistics=1
mysqlnd_ms.multi_master=1
--FILE--
<?php
	require_once("connect.inc");
	require_once("util.inc");
 	$sql = mst_get_gtid_memcached($db);
    $rwhere = "m.id = '" . $sql['global_key'] . ":0'";
   	$wwhere = "m.id = '" . $sql['global_wkey'] . "'";
	$link = mst_mysqli_connect("myapp", $user, $passwd, $db, $port, $socket);
	if (mysqli_connect_errno()) {
		printf("[".(string)1/*offset*/."] [%d] %s\n", mysqli_connect_errno(), mysqli_connect_error());
	}
	$link1 = mst_mysqli_connect("myapp", $user, $passwd, $db, $port, $socket);
	if (mysqli_connect_errno()) {
		printf("[".(string)1/*offset*/."] [%d] %s\n", mysqli_connect_errno(), mysqli_connect_error());
	}
	/* we need an extra non-MS link for checking memcached GTID. */
	$memc_link = mst_mysqli_connect($emulated_master_host_only, $user, $passwd, $db, $emulated_master_port, $emulated_master_socket);
	$master1_link = mst_mysqli_connect($master_host_only, $user, $passwd, $db, $master_port, $master_socket);
	$master2_link = mst_mysqli_connect($slave_host_only, $user, $passwd, $db, $slave_port, $slave_socket);
 //   $link = $master1_link;
	if (!($stmt = $link->prepare("SET @myrole = ?"))) // Prepared on master1
		printf("[".(string)4/*offset*/."] [%d] %s\n", $link->errno, $link->error);
	
	if (!($stmt2 = $link->prepare("/*".MYSQLND_MS_LAST_USED_SWITCH."*/SELECT @myrole AS _role FROM DUAL"))) // Prepared on master1
		printf("[".(string)5/*offset*/."] [%d] %s\n", $link->errno, $link->error);

	if (!($stmt3 = $link->prepare("INSERT INTO gtid_test(id) VALUES(CONCAT(@myrole,'-',@@server_uuid))"))) // Prepared on master2
		printf("[".(string)6/*offset*/."] [%d] %s\n", $link->errno, $link->error);

	if (!($stmt4 = $link->prepare("SELECT CONCAT(@myrole,'-',id) AS _ext_id FROM gtid_test ORDER BY _ext_id"))) // Prepared on master3
		printf("[".(string)7/*offset*/."] [%d] %s\n", $link->errno, $link->error);

	$role = NULL;
	if (!$stmt2->bind_result($role)) 
		printf("[".(string)8/*offset*/."] [%d] %s\n", $link->errno, $link->error);

	$server_uid = NULL;
	if (!$stmt4->bind_result($server_uid)) 
		printf("[".(string)9/*offset*/."] [%d] %s\n", $link->errno, $link->error);

	if (!$stmt->bind_param('s',$master)) 
		printf("[".(string)10/*offset*/."] [%d] %s\n", $link->errno, $link->error);
	$master = 'Master1';
	if (!$stmt->execute()) // Execute on master1
		printf("[".(string)11/*offset*/."] [%d] %s\n", $link->errno, $link->error);
	if (!$stmt2->execute()) // Execute on master1
		printf("[".(string)12/*offset*/."] [%d] %s\n", $link->errno, $link->error);
	while ($stmt2->fetch()) 
		printf("Role %s\n", $role);
	
	$master = 'Master2';
	if (!$stmt->execute()) // Execute on master2
		printf("[".(string)13/*offset*/."] [%d] %s\n", $link->errno, $link->error);
	if (!$stmt2->execute()) // Execute on master2
		printf("[".(string)14/*offset*/."] [%d] %s\n", $link->errno, $link->error);
	while ($stmt2->fetch()) 
		printf("Role %s\n", $role);
		
	$master = 'Master3';
	if (!$stmt->execute()) // Execute on master3
		printf("[".(string)15/*offset*/."] [%d] %s\n", $link->errno, $link->error);
	if (!$stmt2->execute()) // Execute on master3
		printf("[".(string)16/*offset*/."] [%d] %s\n", $link->errno, $link->error);
	while ($stmt2->fetch()) 
		printf("Role %s\n", $role);

	$res = mst_mysqli_query(17/*offset*/, $link, "SELECT @myrole AS _role FROM DUAL");
	var_dump($res->fetch_assoc());
	$res = mst_mysqli_query(18/*offset*/, $link, "SELECT @myrole AS _role FROM DUAL");
	var_dump($res->fetch_assoc());
	$res = mst_mysqli_query(19/*offset*/, $link, "SELECT @myrole AS _role FROM DUAL");
	var_dump($res->fetch_assoc());
	
	if (!$stmt3->execute()) // Execute on master1
		printf("[".(string)20/*offset*/."] [%d] %s\n", $link->errno, $link->error);
	printf("Num_rows %d\n",  $stmt3->affected_rows);
	$gtid = mysqlnd_ms_get_last_gtid($link);
	if (!$gtid)
		printf("[".(string)21/*offset*/."] Expecting gtid got empty, [%d] %s\n", $link->errno, $link->error);	
	$rgtid = mst_mysqli_fetch_gtid_memcached(22/*offset*/, $memc_link, $db, $rwhere, true);
	$wgtid = mst_mysqli_fetch_wgtid_memcached(23/*offset*/, $memc_link, $db, $wwhere, true);
	if ($rgtid[1] != $gtid || $wgtid[1] != $gtid)
		printf("[".(string)24/*offset*/."] Expecting gtid %s on memcached got %s %s\n", $gtid, $rgtid, $wgtid[1]);	
	if (!mst_mysqli_wait_gtid_memcached(25/*offset*/, $master2_link, $db, $gtid))
		printf("[".(string)26/*offset*/."] Timeout or gtid not replicated for %s, [%d] %s\n", $gtid, $master2_link->errno, $master2_link->error);	
		
	if (!$stmt4->execute()) // Execute on master1, The list of masters has now changed so the roundrobin filter will reset context and we are again on first position 
		printf("[".(string)27/*offset*/."] [%d] %s\n", $link->errno, $link->error);
	while ($stmt4->fetch()) {
        printf("Server uid %s\n", $server_uid);
    }
	
	if (!$stmt3->execute()) // Execute on master2
		printf("[".(string)28/*offset*/."] [%d] %s\n", $link->errno, $link->error);
	printf("Num_rows %d\n", $stmt3->affected_rows);
	$gtid = mysqlnd_ms_get_last_gtid($link);
	if (!$gtid)
		printf("[".(string)29/*offset*/."] Expecting gtid got empty, [%d] %s\n", $link->errno, $link->error);	
	$rgtid = mst_mysqli_fetch_gtid_memcached(30/*offset*/, $memc_link, $db, $rwhere, true);
	$wgtid = mst_mysqli_fetch_wgtid_memcached(31/*offset*/, $memc_link, $db, $wwhere, true);
	if ($rgtid[1] != $gtid || $wgtid[1] != $gtid)
		printf("[".(string)32/*offset*/."] Expecting gtid %s on memcached got %s %s\n", $gtid, $rgtid, $wgtid[1]);	
	if (!mst_mysqli_wait_gtid_memcached(33/*offset*/, $master1_link, $db, $gtid))
		printf("[".(string)34/*offset*/."] Timeout or gtid not replicated for %s, [%d] %s\n", $gtid, $master1_link->errno, $master1_link->error);	
	
	if (!$stmt4->execute()) // Execute on master1
		printf("[".(string)35/*offset*/."] [%d] %s\n", $link->errno, $link->error);
	while ($stmt4->fetch()) {
        printf("Server uid %s\n", $server_uid);
    }

	if (!$stmt4->execute()) // Execute on master2
		printf("[".(string)36/*offset*/."] [%d] %s\n", $link->errno, $link->error);
	while ($stmt4->fetch()) {
        printf("Server uid %s\n", $server_uid);
    }

	if (!$stmt4->execute()) // Execute on master1
		printf("[".(string)37/*offset*/."] [%d] %s\n", $link->errno, $link->error);
	while ($stmt4->fetch()) {
        printf("Server uid %s\n", $server_uid);
    }


	$res = mst_mysqli_query(38/*offset*/, $link1, "SET @myrole1 = 'Master2'"); // First in list is now Master2 
	$res = mst_mysqli_query(39/*offset*/, $link1, "SET @myrole1 = 'Master1'"); // Execute on master1
	$res = mst_mysqli_query(40/*offset*/, $link1, "SET @myrole1 = CONCAT('Master2','-',@myrole1)"); // Execute on master2
	$res = mst_mysqli_query(41/*offset*/, $link1, "SET @myrole1 = CONCAT('Master1','-',@myrole1)"); // Execute on master1

	$res = mst_mysqli_query(42/*offset*/, $link1, "SELECT @myrole1 AS _role FROM DUAL"); // First in list is now Master2 
	var_dump($res->fetch_assoc());
	$res = mst_mysqli_query(43/*offset*/, $link1, "SELECT @myrole1 AS _role FROM DUAL"); // First in list is now Master1
	var_dump($res->fetch_assoc());
	$res = mst_mysqli_query(44/*offset*/, $link1, "SELECT @myrole1 AS _role FROM DUAL"); // Execute on master2
	var_dump($res->fetch_assoc());
	$res = mst_mysqli_query(45/*offset*/, $link1, "SELECT @myrole1 AS _role FROM DUAL"); // Execute on master1
	var_dump($res->fetch_assoc());

	$res = mst_mysqli_query(46/*offset*/, $memc_link, "SELECT id FROM gtid_test");
	var_dump($res->fetch_assoc());
	
	print "done!";
?>
--CLEAN--
<?php
	if (!unlink("test_mysqlnd_ms_gtid_nw_ps_wc_basics.ini"))
		printf("[clean] Cannot unlink ini file 'test_mysqlnd_ms_gtid_nw_ps_wc_basics.ini'.\n");

	require_once("connect.inc");
	require_once("util.inc");
	if ($error = mst_mysqli_drop_gtid_memcached($emulated_master_host_only, $user, $passwd, $db, $emulated_master_port, $emulated_master_socket))
		printf("[clean] %s\n", $error);
	if ($error = mst_mysqli_drop_gtid_test_table($master_host_only, $user, $passwd, $db, $master_port, $master_socket))
		printf("[clean] %s\n", $error);
	if ($error = mst_mysqli_drop_gtid_test_table($emulated_master_host_only, $user, $passwd, $db, $emulated_master_port, $emulated_master_socket))
		printf("[clean] %s\n", $error);
?>
--EXPECTF--
Role Master1
Role Master2
Role Master3
array(1) {
  ["_role"]=>
  string(7) "Master1"
}
array(1) {
  ["_role"]=>
  string(7) "Master2"
}
array(1) {
  ["_role"]=>
  string(7) "Master3"
}
Num_rows 1
Server uid Master1-Master1-%s
Server uid Master1-MY_EXECUTED_GTID
Num_rows 1
Server uid Master1-Master1-%s
Server uid Master1-Master2-%s
Server uid Master1-MY_EXECUTED_GTID
Server uid Master2-Master1-%s
Server uid Master2-Master2-%s
Server uid Master2-MY_EXECUTED_GTID
Server uid Master1-Master1-%s
Server uid Master1-Master2-%s
Server uid Master1-MY_EXECUTED_GTID
array(1) {
  ["_role"]=>
  string(15) "Master1-Master1"
}
array(1) {
  ["_role"]=>
  string(15) "Master2-Master2"
}
array(1) {
  ["_role"]=>
  string(15) "Master1-Master1"
}
array(1) {
  ["_role"]=>
  string(15) "Master2-Master2"
}
array(1) {
  ["id"]=>
  string(16) "MY_EXECUTED_GTID"
}
done!

Function Calls

None

Variables

None

Stats

MD5 775797621add5e2db8568db01fdb5cf9
Eval Count 0
Decode Time 142 ms