commons-dev mailing list archives

Site index · List index
Message view « Date » · « Thread »
Top « Date » · « Thread »
From Cservenak Tamas <cserve...@is-micro.hu>
Subject [transaction] Duplicated TxId generation under heavy load
Date Tue, 22 Nov 2005 12:28:18 GMT
Hi all!

The generatedUniqueTxId() method in FileResourceManager uses
System.currentTimeMillis() to generate txId's.

On my system it causes duplicate txId generation and FRM failure. I have
4 threads accessing one FRM instance.

This simple patch adds "salt" to it, with a little overhead to solve
this problem.


tx
~t~



Index:
/home/cstamas/worx/projects/ext/eclipse/commons-transaction/src/java/org/apache/commons/transaction/file/FileResourceManager.java
===================================================================
---
/home/cstamas/worx/projects/ext/eclipse/commons-transaction/src/java/org/apache/commons/transaction/file/FileResourceManager.java
  
(revision 348140)
+++
/home/cstamas/worx/projects/ext/eclipse/commons-transaction/src/java/org/apache/commons/transaction/file/FileResourceManager.java
  
(working copy)
@@ -144,6 +144,9 @@
     protected static final String WORK_DELETE_DIR = "delete";
 
     protected static final String CONTEXT_FILE = "transaction.log";
+   
+    // XXX used in txId generation
+    protected static long salt = 1;
 
     /*
      * --- Static helper methods ---
@@ -884,7 +887,8 @@
         String txId;
         synchronized (globalTransactions) {
             do {
-                txId = Long.toHexString(System.currentTimeMillis());
+                // XXX to prevent same txId generation on heavy load
+                txId = Long.toHexString(System.currentTimeMillis() +
salt++);
                 // XXX busy loop
             } while (getContext(txId) != null);
         }



Mime
View raw message