Author: kpvdr
Date: Wed Nov 26 08:27:32 2008
New Revision: 720910

URL: http://svn.apache.org/viewvc?rev=720910&view=rev
Log:
Fixed problem of recurring xids (0, 1, 2...) on successive txtest runs which 
can cause journal txn recover failures. The xid is now the 36-char string 
representation of a UUID and should have a great test-to-test diversity.

Modified:
    incubator/qpid/trunk/qpid/cpp/src/tests/txtest.cpp

Modified: incubator/qpid/trunk/qpid/cpp/src/tests/txtest.cpp
URL: 
http://svn.apache.org/viewvc/incubator/qpid/trunk/qpid/cpp/src/tests/txtest.cpp?rev=720910&r1=720909&r2=720910&view=diff
==============================================================================
--- incubator/qpid/trunk/qpid/cpp/src/tests/txtest.cpp (original)
+++ incubator/qpid/trunk/qpid/cpp/src/tests/txtest.cpp Wed Nov 26 08:27:32 2008
@@ -33,6 +33,7 @@
 #include "qpid/client/SubscriptionManager.h"
 #include "qpid/framing/Array.h"
 #include "qpid/framing/Buffer.h"
+#include "qpid/sys/uuid.h"
 
 using namespace qpid;
 using namespace qpid::client;
@@ -128,10 +129,11 @@
     std::string src;
     std::string dest;
     Thread thread;
-    unsigned long xid_cnt;
+    uuid_t uuid;
+    char uuidStr[37]; // Format: xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx + 
trailing \0
     framing::Xid xid;
 
-    Transfer(const std::string& to, const std::string& from) : src(to), 
dest(from), xid_cnt(0), xid(0x4c414e47, "", from) {}
+    Transfer(const std::string& to, const std::string& from) : src(to), 
dest(from), xid(0x4c414e47, "", from) {}
 
     void run() 
     {
@@ -150,7 +152,7 @@
                 Message in;
                 Message out("", dest);
                 if (opts.dtx) {
-                    setNextXid(xid);
+                    setNewXid(xid);
                     session.dtxStart(arg::xid=xid);
                 }
                 for (uint m = 0; m < opts.msgsPerTx; m++) {
@@ -174,10 +176,10 @@
         }
     }
 
-    void setNextXid(framing::Xid& xid) {
-        std::ostringstream oss;
-        oss << std::setfill('0') << std::hex << "xid-" << std::setw(12) << 
(++xid_cnt);
-        xid.setGlobalId(oss.str());
+    void setNewXid(framing::Xid& xid) {
+        ::uuid_generate(uuid);
+        ::uuid_unparse(uuid, uuidStr);
+        xid.setGlobalId(uuidStr);
     }
 };
 


Reply via email to