You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@ignite.apache.org by vo...@apache.org on 2017/07/07 09:34:36 UTC

[33/46] ignite git commit: IGNITE-5441 .NET: Propagate CacheStore exception stack traces to the caller node

IGNITE-5441 .NET: Propagate CacheStore exception stack traces to the caller node

This closes #2247


Project: http://git-wip-us.apache.org/repos/asf/ignite/repo
Commit: http://git-wip-us.apache.org/repos/asf/ignite/commit/c396b0bc
Tree: http://git-wip-us.apache.org/repos/asf/ignite/tree/c396b0bc
Diff: http://git-wip-us.apache.org/repos/asf/ignite/diff/c396b0bc

Branch: refs/heads/ignite-2.1
Commit: c396b0bcfa5f959013c94ece47dc1111fa650d97
Parents: 333e32b
Author: Pavel Tupitsyn <pt...@apache.org>
Authored: Thu Jul 6 13:03:50 2017 +0300
Committer: Pavel Tupitsyn <pt...@apache.org>
Committed: Thu Jul 6 13:03:50 2017 +0300

----------------------------------------------------------------------
 .../Cache/CacheAbstractTest.cs                  | 26 +++++++++-----------
 .../Cache/PersistentStoreTest.cs                |  1 -
 .../Cache/Store/CacheStoreTest.cs               | 21 +++++++++++++---
 .../Apache.Ignite.Core/Common/JavaException.cs  | 15 ++++++++++-
 .../Apache.Ignite.Core/Impl/ExceptionUtils.cs   |  5 ++--
 5 files changed, 44 insertions(+), 24 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/ignite/blob/c396b0bc/modules/platforms/dotnet/Apache.Ignite.Core.Tests/Cache/CacheAbstractTest.cs
----------------------------------------------------------------------
diff --git a/modules/platforms/dotnet/Apache.Ignite.Core.Tests/Cache/CacheAbstractTest.cs b/modules/platforms/dotnet/Apache.Ignite.Core.Tests/Cache/CacheAbstractTest.cs
index 351c25c..9e44720 100644
--- a/modules/platforms/dotnet/Apache.Ignite.Core.Tests/Cache/CacheAbstractTest.cs
+++ b/modules/platforms/dotnet/Apache.Ignite.Core.Tests/Cache/CacheAbstractTest.cs
@@ -2091,26 +2091,22 @@ namespace Apache.Ignite.Core.Tests.Cache
                 () => cache.Invoke(key, new T { ThrowErrNonSerializable = true }, arg), "ExpectedException");
         }
 
+        /// <summary>
+        /// Asserts that specified action throws a CacheEntryProcessorException.
+        /// </summary>
         private static void AssertThrowsCacheEntryProcessorException(Action action, string containsText = null)
         {
-            try
-            {
-                action();
+            var ex = Assert.Throws<CacheEntryProcessorException>(() => action());
 
-                Assert.Fail();
+            Assert.IsInstanceOf<JavaException>(ex.InnerException);
+
+            if (string.IsNullOrEmpty(containsText))
+            {
+                Assert.AreEqual(AddArgCacheEntryProcessor.ExceptionText, ex.GetBaseException().Message);
             }
-            catch (Exception ex)
+            else
             {
-                Assert.IsInstanceOf<CacheEntryProcessorException>(ex);
-
-                if (string.IsNullOrEmpty(containsText))
-                {
-                    Assert.IsNotNull(ex.InnerException);
-                    Assert.AreEqual(AddArgCacheEntryProcessor.ExceptionText, ex.InnerException.Message);
-                }
-                else
-                    Assert.IsTrue(ex.ToString().Contains(containsText), 
-                        "Expected: " + containsText + ", actual: " + ex);
+                Assert.IsTrue(ex.ToString().Contains(containsText), "Expected: " + containsText + ", actual: " + ex);
             }
         }
 

http://git-wip-us.apache.org/repos/asf/ignite/blob/c396b0bc/modules/platforms/dotnet/Apache.Ignite.Core.Tests/Cache/PersistentStoreTest.cs
----------------------------------------------------------------------
diff --git a/modules/platforms/dotnet/Apache.Ignite.Core.Tests/Cache/PersistentStoreTest.cs b/modules/platforms/dotnet/Apache.Ignite.Core.Tests/Cache/PersistentStoreTest.cs
index cc72147..adb91ef 100644
--- a/modules/platforms/dotnet/Apache.Ignite.Core.Tests/Cache/PersistentStoreTest.cs
+++ b/modules/platforms/dotnet/Apache.Ignite.Core.Tests/Cache/PersistentStoreTest.cs
@@ -18,7 +18,6 @@
 namespace Apache.Ignite.Core.Tests.Cache
 {
     using Apache.Ignite.Core.Common;
-    using Apache.Ignite.Core.Configuration;
     using Apache.Ignite.Core.PersistentStore;
     using NUnit.Framework;
 

http://git-wip-us.apache.org/repos/asf/ignite/blob/c396b0bc/modules/platforms/dotnet/Apache.Ignite.Core.Tests/Cache/Store/CacheStoreTest.cs
----------------------------------------------------------------------
diff --git a/modules/platforms/dotnet/Apache.Ignite.Core.Tests/Cache/Store/CacheStoreTest.cs b/modules/platforms/dotnet/Apache.Ignite.Core.Tests/Cache/Store/CacheStoreTest.cs
index 12c442d..e05f4bd 100644
--- a/modules/platforms/dotnet/Apache.Ignite.Core.Tests/Cache/Store/CacheStoreTest.cs
+++ b/modules/platforms/dotnet/Apache.Ignite.Core.Tests/Cache/Store/CacheStoreTest.cs
@@ -24,6 +24,7 @@ namespace Apache.Ignite.Core.Tests.Cache.Store
     using Apache.Ignite.Core.Binary;
     using Apache.Ignite.Core.Cache;
     using Apache.Ignite.Core.Cache.Store;
+    using Apache.Ignite.Core.Common;
     using Apache.Ignite.Core.Impl;
     using NUnit.Framework;
 
@@ -203,6 +204,9 @@ namespace Apache.Ignite.Core.Tests.Cache.Store
             Assert.AreEqual(1, cache.GetSize());
         }
 
+        /// <summary>
+        /// Tests that exceptions from user code are propagated properly.
+        /// </summary>
         [Test]
         public void TestExceptions()
         {
@@ -211,7 +215,18 @@ namespace Apache.Ignite.Core.Tests.Cache.Store
             cache.Put(1, "val");
 
             CacheTestStore.ThrowError = true;
-            CheckCustomStoreError(Assert.Throws<CacheStoreException>(() => cache.Put(-2, "fail")).InnerException);
+            
+            var ex = Assert.Throws<CacheStoreException>(() => cache.Put(-2, "fail"));
+
+            Assert.IsTrue(ex.ToString().Contains(
+                "at Apache.Ignite.Core.Tests.Cache.Store.CacheTestStore.ThrowIfNeeded"));  // Check proper stack trace.
+
+            Assert.IsNotNull(ex.InnerException);  // RollbackException.
+
+            var javaEx = ex.InnerException.InnerException as JavaException;
+            Assert.IsNotNull(javaEx);
+
+            CheckCustomStoreError(javaEx.InnerException);
 
             // TODO: IGNITE-4535
             //cache.LocalEvict(new[] {1});
@@ -599,11 +614,9 @@ namespace Apache.Ignite.Core.Tests.Cache.Store
         /// </summary>
         private static void CheckCustomStoreError(Exception err)
         {
-            var customErr = err as CacheTestStore.CustomStoreException ??
-                         err.InnerException as CacheTestStore.CustomStoreException;
+            var customErr = err.GetBaseException() as CacheTestStore.CustomStoreException;
 
             Assert.IsNotNull(customErr);
-
             Assert.AreEqual(customErr.Message, customErr.Details);
         }
     }

http://git-wip-us.apache.org/repos/asf/ignite/blob/c396b0bc/modules/platforms/dotnet/Apache.Ignite.Core/Common/JavaException.cs
----------------------------------------------------------------------
diff --git a/modules/platforms/dotnet/Apache.Ignite.Core/Common/JavaException.cs b/modules/platforms/dotnet/Apache.Ignite.Core/Common/JavaException.cs
index 1988335..e6c6f7b 100644
--- a/modules/platforms/dotnet/Apache.Ignite.Core/Common/JavaException.cs
+++ b/modules/platforms/dotnet/Apache.Ignite.Core/Common/JavaException.cs
@@ -62,7 +62,20 @@ namespace Apache.Ignite.Core.Common
         /// <param name="javaMessage">Java exception message.</param>
         /// <param name="stackTrace">Java stack trace.</param>
         public JavaException(string javaClassName, string javaMessage, string stackTrace)
-            : base(stackTrace ?? javaMessage)
+            : this(javaClassName, javaMessage, stackTrace, null)
+        {
+            // No-op.
+        }
+
+        /// <summary>
+        /// Initializes a new instance of the <see cref="JavaException" /> class.
+        /// </summary>
+        /// <param name="javaClassName">Java exception class name.</param>
+        /// <param name="javaMessage">Java exception message.</param>
+        /// <param name="stackTrace">Java stack trace.</param>
+        /// <param name="cause">The cause.</param>
+        public JavaException(string javaClassName, string javaMessage, string stackTrace, Exception cause)
+            : base(stackTrace ?? javaMessage, cause)
         {
             // Send stackTrace to base ctor because it has all information, including class names and messages.
             // Store ClassName and Message separately for mapping purposes.

http://git-wip-us.apache.org/repos/asf/ignite/blob/c396b0bc/modules/platforms/dotnet/Apache.Ignite.Core/Impl/ExceptionUtils.cs
----------------------------------------------------------------------
diff --git a/modules/platforms/dotnet/Apache.Ignite.Core/Impl/ExceptionUtils.cs b/modules/platforms/dotnet/Apache.Ignite.Core/Impl/ExceptionUtils.cs
index dd70f5a..ebfcc28 100644
--- a/modules/platforms/dotnet/Apache.Ignite.Core/Impl/ExceptionUtils.cs
+++ b/modules/platforms/dotnet/Apache.Ignite.Core/Impl/ExceptionUtils.cs
@@ -121,9 +121,8 @@ namespace Apache.Ignite.Core.Impl
         public static Exception GetException(Ignite ignite, string clsName, string msg, string stackTrace,
             BinaryReader reader = null, Exception innerException = null)
         {
-            // Set JavaException as inner only if there is no InnerException.
-            if (innerException == null)
-                innerException = new JavaException(clsName, msg, stackTrace);
+            // Set JavaException as immediate inner.
+            innerException = new JavaException(clsName, msg, stackTrace, innerException);
 
             ExceptionFactory ctor;