Uploaded image for project: 'Infinispan'
  1. Infinispan
  2. ISPN-2813

DummyTransaction do not commit is last resource transaction is read-only

    Details

      Description

      Currently HEAD DummyTransaction.java has this code:
      ...
      for (XAResource res : resources) {
      try {
      int prepareStatus = res.prepare(xid);
      transaction.setPrepareStatus(prepareStatus);
      ...
      This means that transaction gets prepare status of the last resource (cache in case of infinispan) enlisted.
      Also it has next code:
      ...
      if (transaction.getPrepareStatus() == XAResource.XA_RDONLY)

      { log.debug("This is a read-only tx"); }

      else {
      ... Do commit ...
      ...
      This means that if last resource returned XA_RDONLY (e.g. when on last cache only get was performed) all other resources are not committed.

      For me this results in locks held indefinitely and transaction leak.

      Correct would be to remember prepare status per-resource and act accordinly.

        Gliffy Diagrams

          Attachments

            Activity

              People

              • Assignee:
                pruivo Pedro Ruivo
                Reporter:
                tivv00 Vitalii Tymchyshyn
              • Votes:
                0 Vote for this issue
                Watchers:
                2 Start watching this issue

                Dates

                • Created:
                  Updated:
                  Resolved: