ignite-user mailing list archives

Site index · List index
Message view « Date » · « Thread »
Top « Date » · « Thread »
From Dmitriy Setrakyan <dsetrak...@apache.org>
Subject Re: transaction not timing out
Date Fri, 24 Jun 2016 07:14:01 GMT
On Thu, Jun 23, 2016 at 10:39 PM, Denis Magda <dmagda@gridgain.com> wrote:

> Hi Binti,
>
> Probably the issue is related to the fact that you’re working with the
> cache inside of CacheStore.writeAll method. Have you tried to use
> PESSIMISTIC/REPEATABLE_READ mode? Is the situation the same? Please attach
> thread dumps from all the nodes after the hang is reproduced one more time.
>
> In the meanwhile, *Alex G*. or *Sam* as I see in the code of
> IgniteTxManager.commitTx we remove timeout object after a transaction is
> moved into a COMMITTING state
>
> if (tx.timeout() > 0) {
>     cctx.time().removeTimeoutObject(tx);
>
>     if (log.isDebugEnabled())
>         log.debug("Unregistered transaction with timeout processor: " + tx);
> }
>
>
> What is the reason of that behavior? Am I missing something?
>

I think that the main reason must be to prevent failures (even timeout
failures) during the commit phase. Failures during commits may cause data
consistency issues.


>
> —
> Denis
>
> On Jun 17, 2016, at 6:24 PM, bintisepaha <binti.sepaha@tudor.com> wrote:
>
> Denis, the txn timeout works in the code as long as it happens before
> commit
> is called.
> I am thinking if its in committing state, it does not honor timeout.
>
> When the framework calls the checkValid() method in IgniteTxLocalAdapter,
> it
> makes a call to the below
>
>  if (remainingTime() == -1 && setRollbackOnly())
>            throw new IgniteTxTimeoutCheckedException("Cache transaction
> timed out " +
>                "(was rolled back automatically): " + this);
>
> setRollbackOnly() calls state(MARKED_ROLLBACK)
> and here I see that it will only return true if it was in one of the below
> states
>
>
>                case MARKED_ROLLBACK: {
>                    valid = prev == ACTIVE || prev == PREPARING || prev ==
> PREPARED;
>
>                    break;
>                }
>
> So if it was in COMMITTING, we would not throw a Txn Timeout exception. Is
> this correct?
>
> here is the sample code from our project, we maintain an
> orderUpdateLossPrevention cache in case of node failures when primary node
> fails before it write behinds the entry to the DB Store. if the write
> behind
> finishes, we remove the entry.
>
> First TXN that updates a transaction cache
> (orderUpdateLossPrevention.put(order.getOrderKey(), order)) along with
> other
> caches (all transactional)
>
> Transaction tx = null;
> try {
> if (txns == null)
> txns = ignite.transactions();
> tx=ignite.transactions().txStart(TransactionConcurrency.OPTIMISTIC,
> TransactionIsolation.SERIALIZABLE);
> tx.timeout(10*1000);
> for (OrderHolder oh : orderHolderList) {
> Order order = oh.getOrder();
> if(order!=null){
> OrderHelper.saveOrder(order);
> orderUpdateLossPrevention.put(order.getOrderKey(), order);
>
> }
> }
> // more code
> tx.commit();  // the thread hangs here forever, because some other thread
> on
> some other node is doing the below...stuck on write behind.
>
> Second Transaction where the same entry is removed when the writebehind is
> finished. its a part of the method call from CacheStore writeAll().
>
> IgniteTransactions txns = null;
> Transaction tx = null;
> Ignite ignite = Ignition.ignite(Global.DATA_GRID_NAME);
> try {
> if (txns == null)
>         txns = ignite.transactions();
> tx=ignite.transactions().txStart(TransactionConcurrency.OPTIMISTIC,
> TransactionIsolation.SERIALIZABLE);
> tx.timeout(2*1000);
> orderUpdateLossPreventionCache.remove(entry.getKey());
> tx.commit();
> } catch (IgniteException e) {
> logger.error("Received IgniteException - rolling back transaction", e);
>        tx.rollback();
> throw e;
> }
>
>
>
>
>
> --
> View this message in context:
> http://apache-ignite-users.70518.x6.nabble.com/transaction-not-timing-out-tp5540p5725.html
> Sent from the Apache Ignite Users mailing list archive at Nabble.com
> <http://nabble.com>.
>
>
>

Mime
View raw message