1 Reply Latest reply on Nov 26, 2015 6:55 AM by tomjenkinson

    Narayana behavior when transactions log store is full

    hhovsepy

      Want to share my research results in testing of transactions behavior, when TX log object store is pointed to some partition which is full.

       

      The reason of testing was to check how TM will handle the new transactions when log store is full and logs for the new transactions can not be saved.

      Testing was done on RHEL7.x86_64 machine using Narayana 5.2.7.Final version.

       

      For testing this, the following file system configuration was done:

      "JBOSS_HOME/standalone/data/tx-object-store" path was made as a symbolic link to "/mnt/small-partition/tx-object-store" directory.

       

      The following two scenarios were executed:

      --------------------------------------------------------------

      The first scenario is with 2PC.

       

      1. Client starts first bunch of 2PC transactions on server side with 2 XA resources.

      2. Checks that this bunch of transactions are committed successfully.

      3. Fill the TX log store partition. It is done by Linux "dd" command.

      4. As in step 1, client starts the second bunch of 2PC transactions on server side with 2 XA resources.

       

      Here in step 4 client gets "javax.transaction.TransactionRolledbackException" and the second bunch of transactions are not committed.

      And in server log file, the following error is logged for each time client starts transaction on server side:

      "java.io.IOException: No space left on device ...."

      ------------------------------------------------------------

       

      ------------------------------------------------------------

      The second scenario is with 1PC.

       

      1. Client starts first bunch of 1PC transactions on server side with 1 XA resource. So 1PC will be executed. XA resource is designed in a way that it throws "javax.transaction.HeuristicMixedException" on "commit".

      2. Client gets "javax.transaction.HeuristicMixedException" on each call. And the first bunch for transactions are not committed.

      3. Fills the TX log store partition. It is done by Linux "dd" command.

      4. As in step 1, client starts second bunch of 1PC transactions on server side with 1 XA resource. And again XA resource commit throws "javax.transaction.HeuristicMixedException".

       

      Here in step 4 client gets "javax.transaction.HeuristicMixedException" and transactions are not committed.

      And as in first scenario, in server log file, the following error is logged for each time client starts transaction on server side:

      "java.io.IOException: No space left on device ...."

      -------------------------------------------------------------

       

      So the result of these both scenarios are:

      Transactions are NOT committed and NO any data inconsistency problem happens.

       

      Regards,

      Hayk Hovsepyan