[prev in list] [next in list] [prev in thread] [next in thread]
List: avro-commits
Subject: svn commit: r1561874 - in /avro/trunk: ./ lang/csharp/src/apache/ipc/ lang/csharp/src/apache/ipc/Spe
From: cutting () apache ! org
Date: 2014-01-27 22:05:54
Message-ID: 20140127220554.4D7A923888D7 () eris ! apache ! org
[Download RAW message or body]
Author: cutting
Date: Mon Jan 27 22:05:53 2014
New Revision: 1561874
URL: http://svn.apache.org/r1561874
Log:
AVRO-1446. C#: Correctly handle system errors in RPC. Contributed by David Taylor.
Modified:
avro/trunk/CHANGES.txt
avro/trunk/lang/csharp/src/apache/ipc/Responder.cs
avro/trunk/lang/csharp/src/apache/ipc/Specific/SpecificRequestor.cs
avro/trunk/lang/csharp/src/apache/main/Protocol/Message.cs
avro/trunk/lang/csharp/src/apache/test/Ipc/SocketServerWithCallbacksTest.cs
Modified: avro/trunk/CHANGES.txt
URL: http://svn.apache.org/viewvc/avro/trunk/CHANGES.txt?rev=1561874&r1=1561873&r2=1561874&view=diff
==============================================================================
--- avro/trunk/CHANGES.txt (original)
+++ avro/trunk/CHANGES.txt Mon Jan 27 22:05:53 2014
@@ -10,6 +10,9 @@ Trunk (not yet released)
BUG FIXES
+ AVRO-1446. C#: Correctly handle system errors in RPC.
+ (David Taylor via cutting)
+
Avro 1.7.6 (15 January 2014)
NEW FEATURES
Modified: avro/trunk/lang/csharp/src/apache/ipc/Responder.cs
URL: http://svn.apache.org/viewvc/avro/trunk/lang/csharp/src/apache/ipc/Responder.cs?rev=1561874&r1=1561873&r2=1561874&view=diff
==============================================================================
--- avro/trunk/lang/csharp/src/apache/ipc/Responder.cs (original)
+++ avro/trunk/lang/csharp/src/apache/ipc/Responder.cs Mon Jan 27 22:05:53 2014
@@ -181,7 +181,15 @@ namespace Avro.ipc
WriteResponse(m.Response, response, output);
else
{
- WriteError(m.Error, error, output);
+ try
+ {
+ WriteError(m.SupportedErrors, error, output);
+ }
+ catch (Exception)
+ {
+ // Presumably no match on the exception, throw the original
+ throw error;
+ }
}
}
catch (Exception e)
@@ -215,18 +223,6 @@ namespace Avro.ipc
return bbo.GetBufferList();
}
- static StringSchema errorSchema = new StringSchema();
- private class StringSchema : Schema {
-
- public StringSchema() : base(Type.String, new PropertyMap())
- {
- }
-
- public override string Name
- {
- get { return "String"; }
- }
- }
-
+ static Schema errorSchema = Schema.Parse("[\"string\"]");
}
}
\ No newline at end of file
Modified: avro/trunk/lang/csharp/src/apache/ipc/Specific/SpecificRequestor.cs
URL: http://svn.apache.org/viewvc/avro/trunk/lang/csharp/src/apache/ipc/Specific/SpecificRequestor.cs?rev=1561874&r1=1561873&r2=1561874&view=diff
==============================================================================
--- avro/trunk/lang/csharp/src/apache/ipc/Specific/SpecificRequestor.cs (original)
+++ avro/trunk/lang/csharp/src/apache/ipc/Specific/SpecificRequestor.cs Mon Jan 27 \
22:05:53 2014 @@ -87,9 +87,13 @@ namespace Avro.ipc.Specific
public override Exception ReadError(Schema writer, Schema reader, Decoder \
decoder) {
- var response = new SpecificReader<object>(writer, reader).Read(null, \
decoder); + var response = new SpecificReader<object>(writer, \
reader).Read(null, decoder); +
+ var error = response as Exception;
+ if(error != null)
+ return error;
- throw (Exception) response;
+ return new Exception(response.ToString());
}
private static bool LastArgumentIsCallback(object o)
Modified: avro/trunk/lang/csharp/src/apache/main/Protocol/Message.cs
URL: http://svn.apache.org/viewvc/avro/trunk/lang/csharp/src/apache/main/Protocol/Message.cs?rev=1561874&r1=1561873&r2=1561874&view=diff
==============================================================================
--- avro/trunk/lang/csharp/src/apache/main/Protocol/Message.cs (original)
+++ avro/trunk/lang/csharp/src/apache/main/Protocol/Message.cs Mon Jan 27 22:05:53 \
2014 @@ -78,7 +78,7 @@ namespace Avro
this.Doc = doc;
this.Oneway = oneway;
- if (error != null && error.CanRead(Schema.Parse("[\"string\"]")))
+ if (error != null && error.CanRead(Schema.Parse("string")))
{
this.SupportedErrors = error;
}
Modified: avro/trunk/lang/csharp/src/apache/test/Ipc/SocketServerWithCallbacksTest.cs
URL: http://svn.apache.org/viewvc/avro/trunk/lang/csharp/src/apache/test/Ipc/SocketServerWithCallbacksTest.cs?rev=1561874&r1=1561873&r2=1561874&view=diff
==============================================================================
--- avro/trunk/lang/csharp/src/apache/test/Ipc/SocketServerWithCallbacksTest.cs \
(original)
+++ avro/trunk/lang/csharp/src/apache/test/Ipc/SocketServerWithCallbacksTest.cs Mon \
Jan 27 22:05:53 2014 @@ -557,24 +557,33 @@ namespace Avro.Test.Ipc
Assert.AreEqual(byteBuffer, future2.WaitForResult(2000));
Assert.IsNull(future2.Error);
- }
+ }
+
+ [Test, TestCase(false, TestName = "Specific error"), TestCase(true, TestName \
= "System error")] + public void Error(bool systemError)
+ {
+ Type expected;
+
+ if(systemError)
+ {
+ expected = typeof(Exception);
+ SimpleImpl.throwSystemError = true;
+ }
+ else
+ {
+ expected = typeof(TestError);
+ SimpleImpl.throwSystemError = false;
+ }
- [Test]
- public void Error()
- {
// Test synchronous RPC:
try
{
- simpleClient.error();
- Assert.Fail("Expected " + typeof (TestError).Name + " to be \
thrown");
- }
- catch (TestError)
- {
- // Expected
+ simpleClient.error();
+ Assert.Fail("Expected " + expected.Name + " to be thrown");
}
catch (Exception e)
{
- Assert.Fail("Unexpected error: " + e);
+ Assert.AreEqual(expected, e.GetType());
}
// Test asynchronous RPC (future):
@@ -583,21 +592,22 @@ namespace Avro.Test.Ipc
try
{
future.WaitForResult(2000);
- Assert.Fail("Expected " + typeof (TestError).Name + " to be \
thrown");
- }
- catch (TestError)
- {
+ Assert.Fail("Expected " + expected.Name + " to be thrown");
+ }
+ catch (Exception e)
+ {
+ Assert.AreEqual(expected, e.GetType());
}
Assert.IsNotNull(future.Error);
- Assert.AreEqual(typeof (TestError), future.Error.GetType());
+ Assert.AreEqual(expected, future.Error.GetType());
Assert.IsNull(future.Result);
// Test asynchronous RPC (callback):
Exception errorRef = null;
var latch = new CountdownLatch(1);
simpleClient.error(new CallbackCallFuture<object>(
- result => Assert.Fail("Expected " + typeof \
(TestError).Name), + result => \
Assert.Fail("Expected " + expected.Name), exception =>
{
errorRef = exception;
@@ -606,9 +616,9 @@ namespace Avro.Test.Ipc
Assert.IsTrue(latch.Wait(2000), "Timed out waiting for error");
Assert.IsNotNull(errorRef);
- Assert.AreEqual(typeof (TestError), errorRef.GetType());
- }
-
+ Assert.AreEqual(expected, errorRef.GetType());
+ }
+
[Test]
public void Greeting()
{
@@ -754,7 +764,9 @@ namespace Avro.Test.Ipc
}
private class SimpleImpl : Simple
- {
+ {
+ public static bool throwSystemError = false;
+
public override string hello(string greeting)
{
return "Hello, " + greeting;
@@ -777,7 +789,10 @@ namespace Avro.Test.Ipc
public override object error()
{
- throw new TestError { message = "Test Message" };
+ if(throwSystemError)
+ throw new SystemException("System error");
+ else
+ throw new TestError { message = "Test Message" };
}
public override void ack()
[prev in list] [next in list] [prev in thread] [next in thread]
Configure |
About |
News |
Add a list |
Sponsored by KoreLogic