[ 
https://issues.apache.org/jira/browse/IGNITE-6827?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=16422805#comment-16422805
 ] 

Andrey Gura edited comment on IGNITE-6827 at 4/3/18 10:30 AM:
--------------------------------------------------------------

[~ascherbakov] I've reviewed changes and have some comments.

First of all, it seems strange that {{rollbackOnTopologyChangeTimeout}} 
parameter is part of {{TransactionConfiguration}}. Actually PME uses this value 
and it is PME's responsibility to rollback transactions, so timeout should be 
parameter of exchange.


Some minor comments:

* Some TODO's added but isn't resolved in classes: {{IgniteTxManager}}, 
{{GridCacheAdapter}}, {{GridCAcheMvccManager}}.
* {{IgniteTxAdapter.remainingTime}}: {{timedOut}} flag value checking is 
redundant because the same work will be done in couple lines below.
* {{GridCachePartitionExchangeManager.body0()}}: two calls of 
{{cfg.getTransactionConfiguration().getRollbackOnTopologyChangeTimeout()}} can 
be rewritten in more concise and convenient form:

Before:

{code:java}
boolean rollbackEnabled = 
cfg.getTransactionConfiguration().getRollbackOnTopologyChangeTimeout() > 0;

                            final long dumpTimeout = 2 * 
cctx.gridConfig().getNetworkTimeout();

                            long nextDumpTime = 0;

                            while (true) {
                                try {
                                    resVer = exchFut.get(rollbackEnabled ? 
cfg.getTransactionConfiguration().
                                        getRollbackOnTopologyChangeTimeout() : 
dumpTimeout, TimeUnit.MILLISECONDS);

                                    break;
                                }
{code}

After: 

{code:java}
                            long rollbackTimeout = 
cfg.getTransactionConfiguration().getRollbackOnTopologyChangeTimeout();

                            final long dumpTimeout = 2 * 
cctx.gridConfig().getNetworkTimeout();

                            long nextDumpTime = 0;

                            while (true) {
                                try {
                                    resVer = exchFut.get(rollbackTimeout > 0 ? 
rollbackTimeout : dumpTimeout, TimeUnit.MILLISECONDS);

                                    break;
                                }
{code}


was (Author: agura):
[~ascherbakov] I've reviewed changes and have some comments.

First of all, it seems strange that {{rollbackOnTopologyChangeTimeout}} 
parameter is part of {{TransactionConfiguration}}. Actually PME uses this value 
and it is PME's responsibility to rollback transactions, so timeout should be 
parameter of exchange.

{{GridDistributedTxFinishRequest}} contains new field {{timedout}}. I believe 
that we can use bit from {{flags}} field instead of new boolean field. In this 
case message format will n't be changed.

Some minor comments:

* Some TODO's added but isn't resolved in classes: {{IgniteTxManager}}, 
{{GridCacheAdapter}}, {{GridCAcheMvccManager}}.
* {{IgniteTxAdapter.remainingTime}}: {{timedOut}} flag value checking is 
redundant because the same work will be done in couple lines below.
* {{GridCachePartitionExchangeManager.body0()}}: two calls of 
{{cfg.getTransactionConfiguration().getRollbackOnTopologyChangeTimeout()}} can 
be rewritten in more concise and convenient form:

Before:

{code:java}
boolean rollbackEnabled = 
cfg.getTransactionConfiguration().getRollbackOnTopologyChangeTimeout() > 0;

                            final long dumpTimeout = 2 * 
cctx.gridConfig().getNetworkTimeout();

                            long nextDumpTime = 0;

                            while (true) {
                                try {
                                    resVer = exchFut.get(rollbackEnabled ? 
cfg.getTransactionConfiguration().
                                        getRollbackOnTopologyChangeTimeout() : 
dumpTimeout, TimeUnit.MILLISECONDS);

                                    break;
                                }
{code}

After: 

{code:java}
                            long rollbackTimeout = 
cfg.getTransactionConfiguration().getRollbackOnTopologyChangeTimeout();

                            final long dumpTimeout = 2 * 
cctx.gridConfig().getNetworkTimeout();

                            long nextDumpTime = 0;

                            while (true) {
                                try {
                                    resVer = exchFut.get(rollbackTimeout > 0 ? 
rollbackTimeout : dumpTimeout, TimeUnit.MILLISECONDS);

                                    break;
                                }
{code}

> Configurable rollback for long running transactions before partition exchange
> -----------------------------------------------------------------------------
>
>                 Key: IGNITE-6827
>                 URL: https://issues.apache.org/jira/browse/IGNITE-6827
>             Project: Ignite
>          Issue Type: Improvement
>    Affects Versions: 2.0
>            Reporter: Alexei Scherbakov
>            Assignee: Alexei Scherbakov
>            Priority: Major
>             Fix For: 2.5
>
>
> Currently long running / buggy user transactions force partition exchange 
> block on waiting for 
> org.apache.ignite.internal.processors.cache.GridCacheSharedContext#partitionReleaseFuture,
>  preventing all grid progress.
> I suggest introducing new global flag in TransactionConfiguration, like 
> {{txRollbackTimeoutOnTopologyChange}}
> which will rollback exchange blocking transaction after the timeout.
> Still need to think what to do with other topology locking activities.



--
This message was sent by Atlassian JIRA
(v7.6.3#76005)

Reply via email to