You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@ignite.apache.org by pt...@apache.org on 2019/02/03 17:19:33 UTC

[ignite] branch master updated: IGNITE-11168 .NET: Fix TxTimeoutOnPartitionMapExchange propagation

This is an automated email from the ASF dual-hosted git repository.

ptupitsyn pushed a commit to branch master
in repository https://gitbox.apache.org/repos/asf/ignite.git


The following commit(s) were added to refs/heads/master by this push:
     new 1fc82730 IGNITE-11168 .NET: Fix TxTimeoutOnPartitionMapExchange propagation
1fc82730 is described below

commit 1fc82730f6b9bb1a2bb1c26a185323d64263bb40
Author: Ivan Daschinskiy <iv...@gmail.com>
AuthorDate: Sun Feb 3 20:19:06 2019 +0300

    IGNITE-11168 .NET: Fix TxTimeoutOnPartitionMapExchange propagation
    
    This closes #6003
---
 .../transactions/PlatformTransactions.java         |   2 +
 .../Cache/CacheTimeoutOnPmeTransactionalTest.cs    | 108 +++++++++++++--------
 .../Apache.Ignite.Core/IgniteConfiguration.cs      |   2 +-
 .../dotnet/Apache.Ignite.Core/Impl/Ignite.cs       |   2 +-
 .../Impl/Transactions/Transaction.cs               |   6 ++
 .../Impl/Transactions/TransactionImpl.cs           |  15 ++-
 .../Impl/Transactions/TransactionsImpl.cs          |  14 ++-
 .../Transactions/ITransaction.cs                   |   8 ++
 8 files changed, 112 insertions(+), 45 deletions(-)

diff --git a/modules/core/src/main/java/org/apache/ignite/internal/processors/platform/transactions/PlatformTransactions.java b/modules/core/src/main/java/org/apache/ignite/internal/processors/platform/transactions/PlatformTransactions.java
index f557ff5..76b9d5f 100644
--- a/modules/core/src/main/java/org/apache/ignite/internal/processors/platform/transactions/PlatformTransactions.java
+++ b/modules/core/src/main/java/org/apache/ignite/internal/processors/platform/transactions/PlatformTransactions.java
@@ -305,6 +305,8 @@ public class PlatformTransactions extends PlatformAbstractTarget {
                         writer.writeInt(tx.isolation().ordinal());
 
                         writer.writeLong(tx.timeout());
+                        
+                        writer.writeString(tx.label());
                     }
                 });
 
diff --git a/modules/platforms/dotnet/Apache.Ignite.Core.Tests/Cache/CacheTimeoutOnPmeTransactionalTest.cs b/modules/platforms/dotnet/Apache.Ignite.Core.Tests/Cache/CacheTimeoutOnPmeTransactionalTest.cs
index c0bade0..2acaea3 100644
--- a/modules/platforms/dotnet/Apache.Ignite.Core.Tests/Cache/CacheTimeoutOnPmeTransactionalTest.cs
+++ b/modules/platforms/dotnet/Apache.Ignite.Core.Tests/Cache/CacheTimeoutOnPmeTransactionalTest.cs
@@ -18,24 +18,74 @@
 namespace Apache.Ignite.Core.Tests.Cache
 {
     using System;
+    using System.Collections.Generic;
     using System.Linq;
+    using Apache.Ignite.Core.Cache.Configuration;
     using Apache.Ignite.Core.Transactions;
     using NUnit.Framework;
 
-    [Category(TestUtils.CategoryIntensive)]
-    public class CacheTimeoutOnPmeTransactionalTest : CacheAbstractTransactionalTest
+    /// <summary>
+    /// Tests setting transactions timeout on partition map exchange.
+    /// </summary>
+    public class CacheTimeoutOnPmeTransactionalTest
     {
+        /** */
+        private static readonly TimeSpan TxPartitionMapExchangeTimeout = TimeSpan.FromSeconds(5);
+        
+        /** */
+        private const string DefaultCacheName = "default";
+        
+        /** */
+        private const string TxLabel = "tx-label";
+
+        /** */
+        private IIgnite _grid;
+
+        /// <summary>
+        /// Fixture setup.
+        /// </summary>
+        [TestFixtureSetUp]
+        public void StartGrids()
+        {
+            IgniteConfiguration cfg = new IgniteConfiguration(TestUtils.GetTestConfiguration())
+            {
+                TransactionConfiguration = new TransactionConfiguration()
+                {
+                    DefaultTimeoutOnPartitionMapExchange = TxPartitionMapExchangeTimeout
+                },
+                CacheConfiguration = new List<CacheConfiguration>()
+                {
+                    new CacheConfiguration(new CacheConfiguration(DefaultCacheName))
+                }
+            };
+            
+            _grid = Ignition.Start(cfg);
+        }
+         
+        /// <summary>
+        /// Fixture teardown.
+        /// </summary>
+        [TestFixtureTearDown]
+        public void StopGrids()
+        {
+            Ignition.StopAll(true);
+        }
+ 
         /// <summary>
-        /// Tests that setting transaction PME timeout works and changes are propagated to Transactions.
+        /// Tests that setting transaction PME timeout works and changes are propagated to Transactions,
+        /// also tests that passing timeout from <see cref="IgniteConfiguration"/> also works.
         /// </summary>
         [Test]
         public void TestSettingPartitionMapExchangeTimeout()
         {
-            IIgnite ignite = GetIgnite(0);
+            var txTimeoutFromConfig =
+                _grid.GetConfiguration().TransactionConfiguration.DefaultTimeoutOnPartitionMapExchange;
             
-            ignite.GetCluster().SetTxTimeoutOnPartitionMapExchange(TimeSpan.FromSeconds(12));
+            Assert.AreEqual(TxPartitionMapExchangeTimeout, txTimeoutFromConfig);
+            
+            _grid.GetCluster().SetTxTimeoutOnPartitionMapExchange(TimeSpan.FromSeconds(12));
 
-            Assert.AreEqual(ignite.GetTransactions().DefaultTimeoutOnPartitionMapExchange, TimeSpan.FromSeconds(12));
+            Assert.AreEqual(_grid.GetTransactions().DefaultTimeoutOnPartitionMapExchange, TimeSpan.FromSeconds(12));
         }
         
         /// <summary>
@@ -44,11 +94,9 @@ namespace Apache.Ignite.Core.Tests.Cache
         [Test]
         public void TestLocalActiveTransactions()
         {
-            IIgnite ignite = GetIgnite(0);
-
-            using (var tx = ignite.GetTransactions().TxStart(TransactionConcurrency.Optimistic, 
+            using (var tx = _grid.GetTransactions().WithLabel(TxLabel).TxStart(TransactionConcurrency.Optimistic,
                 TransactionIsolation.ReadCommitted, TimeSpan.FromSeconds(20), 1))
-            using (var activeTxCollection = ignite.GetTransactions().GetLocalActiveTransactions())
+            using (var activeTxCollection = _grid.GetTransactions().GetLocalActiveTransactions())
             {
                 Assert.IsNotEmpty(activeTxCollection);
                 
@@ -59,50 +107,32 @@ namespace Apache.Ignite.Core.Tests.Cache
                 Assert.AreEqual(testTx.Isolation, tx.Isolation);
 
                 Assert.AreEqual(testTx.Timeout, tx.Timeout);
+                
+                Assert.AreEqual(testTx.Label, tx.Label);
+                
+                Assert.AreEqual(testTx.Label, TxLabel);
             
                 tx.Commit();
                  
-                Assert.AreEqual(testTx.State, TransactionState.Committed);
-                
+                Assert.AreEqual(testTx.State, TransactionState.Committed);    
             }
             
-            using (var tx = ignite.GetTransactions().TxStart(TransactionConcurrency.Optimistic, 
+            using (var tx = _grid.GetTransactions().TxStart(TransactionConcurrency.Optimistic, 
                 TransactionIsolation.ReadCommitted, TimeSpan.FromSeconds(20), 1))
-            using (var activeTxCollection = ignite.GetTransactions().GetLocalActiveTransactions())
+            using (var activeTxCollection = _grid.GetTransactions().GetLocalActiveTransactions())
             {
                 Assert.IsNotEmpty(activeTxCollection);
                 
                 var testTx = activeTxCollection.ElementAt(0);
 
                 testTx.Rollback();
+                
+                Assert.AreEqual(tx.Label, null);
+                
+                Assert.AreEqual(testTx.Label, null);
 
                 Assert.AreEqual(tx.State, TransactionState.RolledBack);
             }
         }
-        
-        protected override ITransactions Transactions
-        {
-            get { return GetIgnite(0).GetTransactions().WithLabel("test-tx"); }
-        }
-        
-        protected override int GridCount()
-        {
-            return 3;
-        }
-
-        protected override string CacheName()
-        {
-            return "partitioned";
-        }
-
-        protected override bool NearEnabled()
-        {
-            return false;
-        }
-
-        protected override int Backups()
-        {
-            return 1;
-        }
     }
 }
diff --git a/modules/platforms/dotnet/Apache.Ignite.Core/IgniteConfiguration.cs b/modules/platforms/dotnet/Apache.Ignite.Core/IgniteConfiguration.cs
index 523ca65..425a232 100644
--- a/modules/platforms/dotnet/Apache.Ignite.Core/IgniteConfiguration.cs
+++ b/modules/platforms/dotnet/Apache.Ignite.Core/IgniteConfiguration.cs
@@ -514,7 +514,7 @@ namespace Apache.Ignite.Core
                 writer.WriteInt((int) TransactionConfiguration.DefaultTransactionIsolation);
                 writer.WriteLong((long) TransactionConfiguration.DefaultTimeout.TotalMilliseconds);
                 writer.WriteInt((int) TransactionConfiguration.PessimisticTransactionLogLinger.TotalMilliseconds);
-                writer.WriteLong((long) TransactionConfiguration.DefaultDefaultTimeoutOnPartitionMapExchange.TotalMilliseconds);
+                writer.WriteLong((long) TransactionConfiguration.DefaultTimeoutOnPartitionMapExchange.TotalMilliseconds);
                 writer.WriteLong((long) TransactionConfiguration.DeadlockTimeout.TotalMilliseconds);
             }
             else
diff --git a/modules/platforms/dotnet/Apache.Ignite.Core/Impl/Ignite.cs b/modules/platforms/dotnet/Apache.Ignite.Core/Impl/Ignite.cs
index ecec768..bff92fc 100644
--- a/modules/platforms/dotnet/Apache.Ignite.Core/Impl/Ignite.cs
+++ b/modules/platforms/dotnet/Apache.Ignite.Core/Impl/Ignite.cs
@@ -963,7 +963,7 @@ namespace Apache.Ignite.Core.Impl
                 w.WriteString(label);
             });
             
-            return new TransactionsImpl(this, platformTargetInternal, GetLocalNode().Id);
+            return new TransactionsImpl(this, platformTargetInternal, GetLocalNode().Id, label);
         }
 
         /// <summary>
diff --git a/modules/platforms/dotnet/Apache.Ignite.Core/Impl/Transactions/Transaction.cs b/modules/platforms/dotnet/Apache.Ignite.Core/Impl/Transactions/Transaction.cs
index f700bfd..7f20339 100644
--- a/modules/platforms/dotnet/Apache.Ignite.Core/Impl/Transactions/Transaction.cs
+++ b/modules/platforms/dotnet/Apache.Ignite.Core/Impl/Transactions/Transaction.cs
@@ -90,6 +90,12 @@ namespace Apache.Ignite.Core.Impl.Transactions
         }
 
         /** <inheritDoc /> */
+        public string Label
+        {
+            get { return _tx.Label; } 
+        }
+
+        /** <inheritDoc /> */
         public bool IsRollbackOnly
         {
             get { return _tx.IsRollbackOnly; }
diff --git a/modules/platforms/dotnet/Apache.Ignite.Core/Impl/Transactions/TransactionImpl.cs b/modules/platforms/dotnet/Apache.Ignite.Core/Impl/Transactions/TransactionImpl.cs
index 396171c..df90fd7 100644
--- a/modules/platforms/dotnet/Apache.Ignite.Core/Impl/Transactions/TransactionImpl.cs
+++ b/modules/platforms/dotnet/Apache.Ignite.Core/Impl/Transactions/TransactionImpl.cs
@@ -47,6 +47,9 @@ namespace Apache.Ignite.Core.Impl.Transactions
         /** Timeout. */
         private readonly TimeSpan _timeout;
 
+        /** TX label. */
+        private readonly string _label;
+
         /** Start time. */
         private readonly DateTime _startTime;
 
@@ -72,15 +75,17 @@ namespace Apache.Ignite.Core.Impl.Transactions
         /// <param name="concurrency">TX concurrency.</param>
         /// <param name="isolation">TX isolation.</param>
         /// <param name="timeout">Timeout.</param>
+        /// <param name="label">TX label.</param>
         /// <param name="nodeId">The originating node identifier.</param>
         /// <param name="bindToThread">Bind transaction to current thread or not.</param>
         public TransactionImpl(long id, TransactionsImpl txs, TransactionConcurrency concurrency,
-            TransactionIsolation isolation, TimeSpan timeout, Guid nodeId, bool bindToThread = true) {
+            TransactionIsolation isolation, TimeSpan timeout, string label, Guid nodeId, bool bindToThread = true) {
             _id = id;
             _txs = txs;
             _concurrency = concurrency;
             _isolation = isolation;
             _timeout = timeout;
+            _label = label;
             _nodeId = nodeId;
 
             _startTime = DateTime.Now;
@@ -223,6 +228,14 @@ namespace Apache.Ignite.Core.Impl.Transactions
         }
 
         /// <summary>
+        /// Label of current transaction.
+        /// </summary>
+        public string Label
+        {
+            get { return _label; }
+        }
+
+        /// <summary>
         /// Gets the start time.
         /// </summary>
         public DateTime StartTime
diff --git a/modules/platforms/dotnet/Apache.Ignite.Core/Impl/Transactions/TransactionsImpl.cs b/modules/platforms/dotnet/Apache.Ignite.Core/Impl/Transactions/TransactionsImpl.cs
index 99cb837..cdf5641 100644
--- a/modules/platforms/dotnet/Apache.Ignite.Core/Impl/Transactions/TransactionsImpl.cs
+++ b/modules/platforms/dotnet/Apache.Ignite.Core/Impl/Transactions/TransactionsImpl.cs
@@ -89,13 +89,18 @@ namespace Apache.Ignite.Core.Impl.Transactions
         /** */
         private readonly Ignite _ignite;
 
+        /** */
+        private readonly string _label;
+
         /// <summary>
         /// Initializes a new instance of the <see cref="TransactionsImpl" /> class.
         /// </summary>
         /// <param name="ignite">Parent target, actually <see cref="Ignite"/> (used for withLabel)</param>
         /// <param name="target">Target.</param>
         /// <param name="localNodeId">Local node id.</param>
-        public TransactionsImpl(Ignite ignite, IPlatformTargetInternal target, Guid localNodeId) : base(target)
+        /// <param name="label">TX label. </param>
+        public TransactionsImpl(Ignite ignite, IPlatformTargetInternal target, Guid localNodeId, string label = null) 
+            : base(target)
         {
             _localNodeId = localNodeId;
 
@@ -111,6 +116,7 @@ namespace Apache.Ignite.Core.Impl.Transactions
             _dfltTimeout = res.Item3;
             _dfltTimeoutOnPartitionMapExchange = res.Item4;
             _ignite = ignite;
+            _label = label;
         }
 
         /** <inheritDoc /> */
@@ -138,7 +144,7 @@ namespace Apache.Ignite.Core.Impl.Transactions
                 w.WriteInt(txSize);
             }, s => s.ReadLong());
 
-            var innerTx = new TransactionImpl(id, this, concurrency, isolation, timeout, _localNodeId);
+            var innerTx = new TransactionImpl(id, this, concurrency, isolation, timeout, _label, _localNodeId);
 
             return new Transaction(innerTx);
         }
@@ -195,8 +201,10 @@ namespace Apache.Ignite.Core.Impl.Transactions
 
                     var timeout = reader.ReadLongAsTimespan();
 
+                    var label = reader.ReadString();
+
                     var innerTx = new TransactionImpl(id, this, (TransactionConcurrency) concurrency,
-                        (TransactionIsolation) isolation, timeout, _localNodeId, false);
+                        (TransactionIsolation) isolation, timeout, label, _localNodeId, false);
 
                     result.Add(new Transaction(innerTx));
                 }
diff --git a/modules/platforms/dotnet/Apache.Ignite.Core/Transactions/ITransaction.cs b/modules/platforms/dotnet/Apache.Ignite.Core/Transactions/ITransaction.cs
index 488b85f..31c2b1a 100644
--- a/modules/platforms/dotnet/Apache.Ignite.Core/Transactions/ITransaction.cs
+++ b/modules/platforms/dotnet/Apache.Ignite.Core/Transactions/ITransaction.cs
@@ -176,6 +176,14 @@ namespace Apache.Ignite.Core.Transactions
         }
 
         /// <summary>
+        /// Label of current transaction.
+        /// </summary>
+        string Label
+        {
+            get;
+        }
+
+        /// <summary>
         /// Gets a value indicating whether this transaction was marked as rollback-only.
         /// </summary>
         bool IsRollbackOnly