<?xml version="1.0" encoding="utf-8"?>
<launchpad-bug id="803649">
  <date_last_updated>2011-06-29 21:21:28.213101+00:00</date_last_updated>
  <api_links>
    <bug_api_link>https://api.launchpad.net/1.0/bugs/803649</bug_api_link>
    <bug_owner_link>https://api.launchpad.net/1.0/~svar</bug_owner_link>
    <milestone_link></milestone_link>
    <linked_branches_collection_link>https://api.launchpad.net/1.0/bugs/803649/linked_branches</linked_branches_collection_link>
    <activity_link>https://api.launchpad.net/1.0/bugs/803649/activity</activity_link>
  </api_links>
  <bug_web_link>https://bugs.launchpad.net/bugs/803649</bug_web_link>
  <owner>Stephane VAROQUI</owner>
  <assignee></assignee>
  <milestone_title></milestone_title>
  <duplicate_link></duplicate_link>
  <duplicate_bug_id></duplicate_bug_id>
  <title>Xa recovery failed on client disconnection</title>
  <status>New</status>
  <importance>Undecided</importance>
  <created>2011-06-29 21:17:27.420067+00:00</created>
  <description>
<![CDATA[Dispite prepare phase have been rich you will get nothing when doing a xa recover if the client get disconnected befor commit 

In the following php script an error is generated to force the  COMMIT to failed  cf:XA COMMITEE and close the connection.
 
<?php

$dt = date_create();
$xid = date_timestamp_get($dt);
echo "xid : ".$xid;

$logger1 = new mysqli('localhost', 'root', 'xxxxx', 'test');
if (mysqli_connect_error()) {
    die('Erreur de connexion (' . mysqli_connect_errno() . ') '. mysqli_connect_error());
}
$potest = new mysqli('192.168.45.166', 'test', 'xxxxxxx', 'test');
if (mysqli_connect_error()) {
    $logger1->close();
    die('Erreur de connexion (' . mysqli_connect_errno() . ') '. mysqli_connect_error());
}

echo 'SuccËs logger1 ' . $logger1->host_info . "\n";
echo 'SuccËs potest ' . $potest->host_info . "\n";


##################################
$queryXA = 'XA START "'.$xid.'"';

$queryRes = $logger1->query($queryXA);
if (!$queryRes) {
    $message  = 'RequÍte invalide logger1: ' . $logger1->error . "\n";
    $message .= 'RequÍte complËte : ' . $queryXA;
    $logger1->close();
    $potest->close();
    die($message);
}
$queryRes = $potest->query($queryXA);
if (!$queryRes) {
    $message  = 'RequÍte invalide potest: ' . $potest->error . "\n";
    $message .= 'RequÍte complËte : ' . $queryXA;
    $logger1->close();
    $potest->close();
    die($message);
}
##################################


##################################
$queryXA = 'INSERT INTO mthoxa(xamtho_tc) values ("'.$xid.'")';
$queryRes = $logger1->query($queryXA);
if (!$queryRes) {
    $message  = 'RequÍte invalide logger1: ' . $logger1->error . "\n";
    $message .= 'RequÍte complËte : ' . $queryXA;
    $logger1->close();
    $potest->close();
    die($message);
}

$queryRes = $potest->query($queryXA);
if (!$queryRes) {
    $message  = 'RequÍte invalide logger1: ' . $logger1->error . "\n";
    $message .= 'RequÍte complËte : ' . $queryXA;
    $logger1->close();
    $potest->close();
    die($message);
}
##################################


##################################
$queryXA = 'XA END "'.$xid.'"';

$queryRes = $logger1->query($queryXA);
if (!$queryRes) {
    $message  = 'RequÍte invalide logger1: ' . $logger1->error . "\n";
    $message .= 'RequÍte complËte : ' . $queryXA;
    $logger1->close();
    $potest->close();
    die($message);
}
$queryRes = $potest->query($queryXA);
if (!$queryRes) {
    $message  = 'RequÍte invalide potest: ' . $potest->error . "\n";
    $message .= 'RequÍte complËte : ' . $queryXA;
    $logger1->close();
    $potest->close();
    die($message);
}
##################################


##################################
$queryXA = 'XA PREPARE "'.$xid.'"';
$queryRes = $logger1->query($queryXA);
if (!$queryRes) {
    $message  = 'RequÍte invalide logger1: ' . $logger1->error . "\n";
    $message .= 'RequÍte complËte : ' . $queryXA;
    $logger1->close();
    $potest->close();
    die($message);
}

$queryRes = $potest->query($queryXA);
if (!$queryRes) {
    $message  = 'RequÍte invalide potest: ' . $potest->error . "\n";
    $message .= 'RequÍte complËte : ' . $queryXA;
    $logger1->close();
    $potest->close();
    die($message);
}

##################################


##################################
$queryXA = 'XA COMMIT "'.$xid.'"';
$queryRes = $logger1->query($queryXA);
if (!$queryRes) {
    $message  = 'RequÍte invalide logger1: ' . $logger1->error . "\n";
    $message .= 'RequÍte complËte : ' . $queryXA;
    $logger1->close();
    $potest->close();
    die($message);
}

$queryXA = 'XA COMMITEE "'.$xid.'"';
$queryRes = $potest->query($queryXA);
if (!$queryRes) {
    $message  = 'RequÍte invalide potest: ' . $potest->error . "\n";
    $message .= 'RequÍte complËte : ' . $queryXA;
    
    $queryXA = 'XA RECOVER';
    $queryRes = $potest->query($queryXA);
    while ($r=$queryRes->fetch_assoc())
    	print_r($r);
    
    
    $logger1->close();
    $potest->close();
    die($message);
}
##################################

$logger1->close();
$potest->close();

echo "Finish !\n"

?>]]>  </description>
  <activities>
    <activity datechanged="2011-06-29T21:17:27.420067+00:00">
      <oldvalue>
<![CDATA[]]>      </oldvalue>
      <newvalue>
<![CDATA[]]>      </newvalue>
      <whatchanged>bug</whatchanged>
      <person>Stephane VAROQUI</person>
      <message>added bug</message>
    </activity>
    <activity datechanged="2011-06-29T21:21:26.780683+00:00">
      <oldvalue>
<![CDATA[infinidb]]>      </oldvalue>
      <newvalue>
<![CDATA[maria]]>      </newvalue>
      <whatchanged>affects</whatchanged>
      <person>Stephane VAROQUI</person>
      <message></message>
    </activity>
  </activities>
</launchpad-bug>
