Details

    • Type: New Feature New Feature
    • Status: Closed
    • Priority: Major Major
    • Resolution: Fixed
    • Affects Version/s: 1.6.1
    • Fix Version/s: 1.7.6
    • Component/s: csharp
    • Labels:
      None
    1. Responder.cs.diff
      6 kB
      David Taylor
    2. Protocol.cs.diff
      0.5 kB
      David Taylor
    3. Avro-975-complate5.patch
      258 kB
      Mark Lamley
    4. types_main.diff
      21 kB
      Bruce Collie
    5. types_ipc.diff
      7 kB
      Bruce Collie
    6. Avro-975-complete4.patch
      253 kB
      Mark Lamley
    7. Avro-975-complete3.patch
      225 kB
      Mark Lamley
    8. Avro-975-complete2.patch
      225 kB
      Mark Lamley
    9. timeout-unhandled-exception.diff
      0.9 kB
      Bruce Collie
    10. java-compat.diff
      0.5 kB
      Bruce Collie
    11. propagate-exception.diff
      2 kB
      David Taylor
    12. errors-and-remote-protocols.975.diff
      2 kB
      David Taylor
    13. Castle.Core.dll
      421 kB
      Mark Lamley
    14. Avro975-complete.patch
      225 kB
      Mark Lamley
    15. Avro-975-00.patch
      126 kB
      Mark Lamley
    16. buildtask.patch
      6 kB
      Andrew Craft
    17. 975.patch
      52 kB
      Andrew Craft

      Activity

      Hide
      Andrew Craft added a comment -

      Basic working version of ipc transciever, socket version, basic tests work with a remote server:
      TODO:

      • create a proper "Stream" wrapper for list of buffers, currently hacked into one array to make work,
      • Build on mono (review use of msbuild task), currently use msbuild to create generated dependency for shared schemas
      • handle all different schema handshake
      • async support

      Submitted now in case anyone wants to collaborate, but will continue with complete implementation and resubmit.

      Show
      Andrew Craft added a comment - Basic working version of ipc transciever, socket version, basic tests work with a remote server: TODO: create a proper "Stream" wrapper for list of buffers, currently hacked into one array to make work, Build on mono (review use of msbuild task), currently use msbuild to create generated dependency for shared schemas handle all different schema handshake async support Submitted now in case anyone wants to collaborate, but will continue with complete implementation and resubmit.
      Hide
      Andrew Craft added a comment -

      main patch
      depends on including castle core in main\lib http://www.castleproject.org/castle/download.html for proxy generation

      Show
      Andrew Craft added a comment - main patch depends on including castle core in main\lib http://www.castleproject.org/castle/download.html for proxy generation
      Hide
      Doug Cutting added a comment -

      Andrew, is this the complete implementation? If so, can anyone review it?

      The patches don't apply cleanly for me on Linux, perhaps due to EOL differences.

      Also, it would be great to be able to add this to the tests in share/test/interop/test_rpc_interop.sh. These use HTTP, though.

      Show
      Doug Cutting added a comment - Andrew, is this the complete implementation? If so, can anyone review it? The patches don't apply cleanly for me on Linux, perhaps due to EOL differences. Also, it would be great to be able to add this to the tests in share/test/interop/test_rpc_interop.sh. These use HTTP, though.
      Hide
      Andrew Craft added a comment -

      I have tidied it up a bit and will try and build the http client and see if i can get working in the test_rpc_interop.sh and building correctly in mono. Currently was testing with the netty server. Just need to find the time to spend a few hours on it......will try to get another patch in a week.

      Show
      Andrew Craft added a comment - I have tidied it up a bit and will try and build the http client and see if i can get working in the test_rpc_interop.sh and building correctly in mono. Currently was testing with the netty server. Just need to find the time to spend a few hours on it......will try to get another patch in a week.
      Hide
      David Taylor added a comment -

      Thank you for this patch, I was able to apply it to 1.6.3 with Cygwin without problems. There are a few issues that I ran into with the patch:
      1. The error specification is not handled correctly as it does not include the default "string" schema for unlisted errors.
      2. Type.Error is not uniformly supported.
      3. Requestor does not resend after a failed handshake.
      4. Requestor handshake logic assumes that all transceivers maintain connection state.
      5. Generic messages cannot be sent as Requestor uses SpecificWriter for serializing the request.

      I was able to patch for items 1-3 with minimal changes. For items 4 & 5 I was able to patch for my specific use case but would require more work for a general fix. I can send you my changes if you like.

      Show
      David Taylor added a comment - Thank you for this patch, I was able to apply it to 1.6.3 with Cygwin without problems. There are a few issues that I ran into with the patch: 1. The error specification is not handled correctly as it does not include the default "string" schema for unlisted errors. 2. Type.Error is not uniformly supported. 3. Requestor does not resend after a failed handshake. 4. Requestor handshake logic assumes that all transceivers maintain connection state. 5. Generic messages cannot be sent as Requestor uses SpecificWriter for serializing the request. I was able to patch for items 1-3 with minimal changes. For items 4 & 5 I was able to patch for my specific use case but would require more work for a general fix. I can send you my changes if you like.
      Hide
      Harish Mandala added a comment -

      Thank you for the patch. However, I was not able to compile Avro.ipc in Visual Studio 2010. I get the following error:
      The type or namespace name 'HandshakeResponse' could not be found (are you missing a using directive or an assembly reference?)and a similar error for HandshakeRequest. I could not find the C# definition of this class anywhere.
      Also, I do not understand what is behind the "using org.apache.avro.ipc". It gives me a compile error. Did you compile the java ipc classes into a .dll?

      Show
      Harish Mandala added a comment - Thank you for the patch. However, I was not able to compile Avro.ipc in Visual Studio 2010. I get the following error: The type or namespace name 'HandshakeResponse' could not be found (are you missing a using directive or an assembly reference?)and a similar error for HandshakeRequest. I could not find the C# definition of this class anywhere. Also, I do not understand what is behind the "using org.apache.avro.ipc". It gives me a compile error. Did you compile the java ipc classes into a .dll?
      Hide
      Mark Lamley added a comment -

      avro-975-00.patch is attached. This patch is independent of the other patches. It is mainly a port of the Java IPC code. My goal is to get C# and NLog talking to a Flume Avro Sink. I have successfully used this code with my existing NLog-Flume Client and it works!

      What is in Avro-975-00.patch:

      • A SocketTransceiver compatible with Java's NettyTransceiver
      • GenericRequestor/GenericResponder
      • 7 nunit tests similar to the Java tests.

      What remains:

      • Code Generation of the IPC Interface
      • SpecificRequestor/SpecificResponder
      • The additional tests. Porting the remaining Java tests will be much easier with the generated code.

      Next, I want to do the code generation updates and SpecificRequestor support. I'd like to get feedback on what I have done before continuing.

      One area where I'm not sure about is the SocketTransceiver. Java's SocketTransceiver is deprecated, but the other languages such as Ruby seem to be compatible with SocketTransceiver. To talk to the NettyTransceiver a few extra bytes are needed. My patch supports Netty and not the deprecated SocketTransceiver - I can make it support both. Should it support both?

      The patch is tested on Win8/VS 2012 & MacOS 10.83/MonoDevelop.
      To apply the patch on the Mac, I had to change the line endings on Avro.sln before applying the patch (tr -d '\r' < Avro.sln > Avro-fixed.sln). Other than that the patch applies cleanly on both platforms and all tests pass.

      Show
      Mark Lamley added a comment - avro-975-00.patch is attached. This patch is independent of the other patches. It is mainly a port of the Java IPC code. My goal is to get C# and NLog talking to a Flume Avro Sink. I have successfully used this code with my existing NLog-Flume Client and it works! What is in Avro-975-00.patch: A SocketTransceiver compatible with Java's NettyTransceiver GenericRequestor/GenericResponder 7 nunit tests similar to the Java tests. What remains: Code Generation of the IPC Interface SpecificRequestor/SpecificResponder The additional tests. Porting the remaining Java tests will be much easier with the generated code. Next, I want to do the code generation updates and SpecificRequestor support. I'd like to get feedback on what I have done before continuing. One area where I'm not sure about is the SocketTransceiver. Java's SocketTransceiver is deprecated, but the other languages such as Ruby seem to be compatible with SocketTransceiver. To talk to the NettyTransceiver a few extra bytes are needed. My patch supports Netty and not the deprecated SocketTransceiver - I can make it support both. Should it support both? The patch is tested on Win8/VS 2012 & MacOS 10.83/MonoDevelop. To apply the patch on the Mac, I had to change the line endings on Avro.sln before applying the patch (tr -d '\r' < Avro.sln > Avro-fixed.sln). Other than that the patch applies cleanly on both platforms and all tests pass.
      Hide
      Doug Cutting added a comment -

      Compatibility with SocketTransciever should not be a priority. NettyTransceiver is probably the most widely deployed format of Avro RPC, but it does not support authentication and authorization, as does SaslTransceiver. Long-term we need something that supports both async (like NettyTransceiver) and security (like SaslTransceiver). We'll likely do this either by extending NettyTransceiver's format (adding SASL to connection initiation) or extending SaslTransceiver's format to support async (adding request IDs). Until these converge, it makes some sense to continue to invest in both. Variety in formats is the bane of interoperability, and SocketTransciever has no role in the path to convergence since it supports neither async nor security, so we should not invest in it further. (See also AVRO-625.)

      Show
      Doug Cutting added a comment - Compatibility with SocketTransciever should not be a priority. NettyTransceiver is probably the most widely deployed format of Avro RPC, but it does not support authentication and authorization, as does SaslTransceiver. Long-term we need something that supports both async (like NettyTransceiver) and security (like SaslTransceiver). We'll likely do this either by extending NettyTransceiver's format (adding SASL to connection initiation) or extending SaslTransceiver's format to support async (adding request IDs). Until these converge, it makes some sense to continue to invest in both. Variety in formats is the bane of interoperability, and SocketTransciever has no role in the path to convergence since it supports neither async nor security, so we should not invest in it further. (See also AVRO-625 .)
      Hide
      Mark Lamley added a comment -

      Ah AVRO-625 makes things clear. Thank you. I read through the wiki and everything made sense until testing revealed my SocketTransceiver didn't work with the NettyTransceiver. It sounds like i made the right choice, but next time I'll chat before starting.

      Adding Sasl C# support should be an additive change (I hope) similar to adding it to the Java NettyTransceiver. I can have a look at adding SASL support to the C# code. Hmm in terms of I think SpecificRequestor support is higher priority?

      Show
      Mark Lamley added a comment - Ah AVRO-625 makes things clear. Thank you. I read through the wiki and everything made sense until testing revealed my SocketTransceiver didn't work with the NettyTransceiver. It sounds like i made the right choice, but next time I'll chat before starting. Adding Sasl C# support should be an additive change (I hope) similar to adding it to the Java NettyTransceiver. I can have a look at adding SASL support to the C# code. Hmm in terms of I think SpecificRequestor support is higher priority?
      Hide
      Mark Lamley added a comment -

      Avro975-complete.patch + Castle.Core.dll is I complete. It's fully compatible with the NettyTransceiver. I added all the same tests that exist in Java. I tested with Mono & VS 2012, Win8 and OSX 10.8.3, .Net 3.5 & .Net 4.0.

      It's lacking 2 things that I think are better handled as part of other tickets:

      • Out-of-order responses + SASL&SSL support. This patch is already pretty big. I figure the additional work is better done as part of AVRO-625.
      • Running tests from test_rpc_interop.sh. This depends on AVRO-823 data file support.

      How I applied the patch:
      1. Remove '\r' line endings from Avro.sln
      2. Apply avro975complete.patch to /lang/csharp/
      3. Put Castle.core.dll in /lang/csharp/lib/main

      Show
      Mark Lamley added a comment - Avro975-complete.patch + Castle.Core.dll is I complete. It's fully compatible with the NettyTransceiver. I added all the same tests that exist in Java. I tested with Mono & VS 2012, Win8 and OSX 10.8.3, .Net 3.5 & .Net 4.0. It's lacking 2 things that I think are better handled as part of other tickets: Out-of-order responses + SASL&SSL support. This patch is already pretty big. I figure the additional work is better done as part of AVRO-625 . Running tests from test_rpc_interop.sh. This depends on AVRO-823 data file support. How I applied the patch: 1. Remove '\r' line endings from Avro.sln 2. Apply avro975complete.patch to /lang/csharp/ 3. Put Castle.core.dll in /lang/csharp/lib/main
      Hide
      David Taylor added a comment -

      Mark,

      Thank you for completing this. I was able to apply against 1.7.4 without problems. I did need to make a couple of changes for it to work for me though. The protocol errors from the Java server always include a "string" schema for uncaught errors. I believe that needs to be considered on the C# side as well. Also, the remote protocol caching was using MD5.Schema as the cache key, not the MD5 value. As the MD5.Schema is the same for all protocols the wrong protocol would be used as soon as you have more than one protocol in play. With these two minor changes I was able to use your implementation in place of the original patch from Andrew with minimal changes to my code (just the ITransceiver / Transceiver signature change).

      Show
      David Taylor added a comment - Mark, Thank you for completing this. I was able to apply against 1.7.4 without problems. I did need to make a couple of changes for it to work for me though. The protocol errors from the Java server always include a "string" schema for uncaught errors. I believe that needs to be considered on the C# side as well. Also, the remote protocol caching was using MD5.Schema as the cache key, not the MD5 value. As the MD5.Schema is the same for all protocols the wrong protocol would be used as soon as you have more than one protocol in play. With these two minor changes I was able to use your implementation in place of the original patch from Andrew with minimal changes to my code (just the ITransceiver / Transceiver signature change).
      Hide
      Mark Lamley added a comment -

      That's great to hear! Thank for reviewing it so thoroughly. I'm sorry I missed those things. Let me know if I can help anymore on it.

      Show
      Mark Lamley added a comment - That's great to hear! Thank for reviewing it so thoroughly. I'm sorry I missed those things. Let me know if I can help anymore on it.
      Hide
      David Taylor added a comment -

      One more. In Requestor.cs if an exception is thrown while processing the handshake the exception is caught and ignored. This will then cause a different and possibly confusing exception to be raised at the next step as the read buffer is likely to be in a bad state (in my case I was getting an overflow exception). I think the handshake exception should be allowed to propagate.

      Show
      David Taylor added a comment - One more. In Requestor.cs if an exception is thrown while processing the handshake the exception is caught and ignored. This will then cause a different and possibly confusing exception to be raised at the next step as the read buffer is likely to be in a bad state (in my case I was getting an overflow exception). I think the handshake exception should be allowed to propagate.
      Hide
      Bruce Collie added a comment -

      RPC compatibility fix between .NET and Java

      Show
      Bruce Collie added a comment - RPC compatibility fix between .NET and Java
      Hide
      Bruce Collie added a comment -

      java-compat.diff is a patch to fix packet sequencing that I encountered with a java client trying to talk to a .NET avro server.

      Show
      Bruce Collie added a comment - java-compat.diff is a patch to fix packet sequencing that I encountered with a java client trying to talk to a .NET avro server.
      Hide
      Bruce Collie added a comment -

      When a java(possibly any) client closed the connection to a .NET server, eventually a TimeoutException is raised in SocketTransceiver.

      Show
      Bruce Collie added a comment - When a java(possibly any) client closed the connection to a .NET server, eventually a TimeoutException is raised in SocketTransceiver.
      Hide
      Bruce Collie added a comment -

      timeout-unhandled-exception.diff fixes the unhandled timeout exception as well as adding some cleanup code when a client is disconnected.

      Show
      Bruce Collie added a comment - timeout-unhandled-exception.diff fixes the unhandled timeout exception as well as adding some cleanup code when a client is disconnected.
      Hide
      Doug Cutting added a comment -

      Can someone please combine these patches into a single complete patch that's proposed for commit? Thanks!

      Show
      Doug Cutting added a comment - Can someone please combine these patches into a single complete patch that's proposed for commit? Thanks!
      Hide
      Mark Lamley added a comment -

      Attached is Avro-975-complete2.patch. It combines the following:

      Avro975-complete.patch
      errors-remote-protocols.975.diff
      java-compat.diff
      propagate-exception.diff
      timeout-unhandled-exception.diff

      I tested the patch on todays trunk on Windows with VS 2012 and on Mac with .Net 3.5 and Mono 2.10&3.0.

      Show
      Mark Lamley added a comment - Attached is Avro-975-complete2.patch. It combines the following: Avro975-complete.patch errors-remote-protocols.975.diff java-compat.diff propagate-exception.diff timeout-unhandled-exception.diff I tested the patch on todays trunk on Windows with VS 2012 and on Mac with .Net 3.5 and Mono 2.10&3.0.
      Hide
      Doug Cutting added a comment - - edited

      I'm getting two errors when trying to build this with Mono on Linux:

      Specific/SpecificRequestor.cs(23,7): error CS0246: The type or namespace name `Castle' could not be found. Are you missing a using directive or an assembly reference?
      Specific/SpecificRequestor.cs(42,31): error CS0246: The type or namespace name `IInvocation' could not be found. Are you missing a using directive or an assembly reference?
      
      Show
      Doug Cutting added a comment - - edited I'm getting two errors when trying to build this with Mono on Linux: Specific/SpecificRequestor.cs(23,7): error CS0246: The type or namespace name `Castle' could not be found. Are you missing a using directive or an assembly reference? Specific/SpecificRequestor.cs(42,31): error CS0246: The type or namespace name `IInvocation' could not be found. Are you missing a using directive or an assembly reference?
      Hide
      Mark Lamley added a comment -

      Castle.Core.dll is not in the patch. I attached it to the ticket separately. It needs to be in /lang/csharp/lib/main.

      Show
      Mark Lamley added a comment - Castle.Core.dll is not in the patch. I attached it to the ticket separately. It needs to be in /lang/csharp/lib/main.
      Hide
      Doug Cutting added a comment -

      Ah, right. I forgot that. With Castle.Core.dll in place I now see:

      Tests run: 519, Errors: 1, Failures: 0, Inconclusive: 0, Time: 46.54818 seconds
        Not run: 1, Invalid: 0, Ignored: 1, Skipped: 0
      
      Errors and Failures:
      1) Test Error : Avro.Test.Ipc.SocketServerTest.TestBadRequest
         System.Net.Sockets.SocketException : Connection reset by peer
      

      Is that error expected?

      Show
      Doug Cutting added a comment - Ah, right. I forgot that. With Castle.Core.dll in place I now see: Tests run: 519, Errors: 1, Failures: 0, Inconclusive: 0, Time: 46.54818 seconds Not run: 1, Invalid: 0, Ignored: 1, Skipped: 0 Errors and Failures: 1) Test Error : Avro.Test.Ipc.SocketServerTest.TestBadRequest System .Net.Sockets.SocketException : Connection reset by peer Is that error expected?
      Hide
      Mark Lamley added a comment -

      Strange. Nope there should not be that error. What OS and mono version? I ran the unit tests with Mono 2.10 and 3.0 from Monodevelop on Mac OS.

      Show
      Mark Lamley added a comment - Strange. Nope there should not be that error. What OS and mono version? I ran the unit tests with Mono 2.10 and 3.0 from Monodevelop on Mac OS.
      Hide
      Doug Cutting added a comment -

      Mono 2.10.8.1 on 64-bit Ubuntu 12.04.

      The full stack trace is:

      Test Error : Avro.Test.Ipc.SocketServerTest.TestBadRequest
         System.Net.Sockets.SocketException : Connection reset by peer
        at System.Net.Sockets.Socket.Receive (System.Byte[] buffer) [0x00000] in <filename unknown>:0 
        at Avro.Test.Ipc.SocketServerTest.TestBadRequest () [0x00000] in <filename unknown>:0 
        at (wrapper managed-to-native) System.Reflection.MonoMethod:InternalInvoke (System.Reflection.MonoMethod,object,object[],System.Exception&)
        at System.Reflection.MonoMethod.Invoke (System.Object obj, BindingFlags invokeAttr, System.Reflection.Binder binder, System.Object[] parameters, System.Globalization.CultureInfo culture) [0x00000] in <filename unknown>:0 
      
      Show
      Doug Cutting added a comment - Mono 2.10.8.1 on 64-bit Ubuntu 12.04. The full stack trace is: Test Error : Avro.Test.Ipc.SocketServerTest.TestBadRequest System .Net.Sockets.SocketException : Connection reset by peer at System .Net.Sockets.Socket.Receive ( System . Byte [] buffer) [0x00000] in <filename unknown>:0 at Avro.Test.Ipc.SocketServerTest.TestBadRequest () [0x00000] in <filename unknown>:0 at (wrapper managed-to- native ) System .Reflection.MonoMethod:InternalInvoke ( System .Reflection.MonoMethod,object,object[], System .Exception&) at System .Reflection.MonoMethod.Invoke ( System . Object obj, BindingFlags invokeAttr, System .Reflection.Binder binder, System . Object [] parameters, System .Globalization.CultureInfo culture) [0x00000] in <filename unknown>:0
      Hide
      Mark Lamley added a comment -

      Thank you. I'll try and reproduce it later tonight.

      Show
      Mark Lamley added a comment - Thank you. I'll try and reproduce it later tonight.
      Hide
      Mark Lamley added a comment -

      I was able to reproduce the failing test with Ubuntu 64bit + VirtualBox. Mono's Socket.Disconnect() behaves differently on Ubuntu then OSX.

      Attached is Avro-975-complete3.patch.

      This patch is Avro-975-complete2.patch plus it makes the C# SocketTransceiver (on Win,OSX&Ubuntu) close the connection immediately when a bad request is detected. This seems preferable than returning 0 bytes to a consumer when they make a bad request.

      Show
      Mark Lamley added a comment - I was able to reproduce the failing test with Ubuntu 64bit + VirtualBox. Mono's Socket.Disconnect() behaves differently on Ubuntu then OSX. Attached is Avro-975-complete3.patch. This patch is Avro-975-complete2.patch plus it makes the C# SocketTransceiver (on Win,OSX&Ubuntu) close the connection immediately when a bad request is detected. This seems preferable than returning 0 bytes to a consumer when they make a bad request.
      Hide
      Bruce Collie added a comment -

      I have just discovered a type mapping issue when using arrays or maps as ipc parameters, I will try to submit a patch before the weekend.

      Show
      Bruce Collie added a comment - I have just discovered a type mapping issue when using arrays or maps as ipc parameters, I will try to submit a patch before the weekend.
      Hide
      Mark Lamley added a comment -

      Bruce, do you have any update on this? I have some time now I can spend on it.

      Show
      Mark Lamley added a comment - Bruce, do you have any update on this? I have some time now I can spend on it.
      Hide
      Mark Lamley added a comment -

      Attached is Avro-975-complete4.patch with a fix for arrays and maps not working for ipc parameters. I added two tests EchoClass + EchoParameters that test this area of the code more heavily.

      The patch is tested on Windows, OSX + Ubuntu.

      Show
      Mark Lamley added a comment - Attached is Avro-975-complete4.patch with a fix for arrays and maps not working for ipc parameters. I added two tests EchoClass + EchoParameters that test this area of the code more heavily. The patch is tested on Windows, OSX + Ubuntu.
      Hide
      Bruce Collie added a comment -

      I had problems trying to apply the latest rollup patch (Avro-975-complete4.patch), broken chunks in the sln and the test csproj.

      So Instead of a rollup patch here are diffs for the two files I changed for better type handling

      Show
      Bruce Collie added a comment - I had problems trying to apply the latest rollup patch (Avro-975-complete4.patch), broken chunks in the sln and the test csproj. So Instead of a rollup patch here are diffs for the two files I changed for better type handling
      Hide
      Bruce Collie added a comment -

      Instead of using simple type names, this change attempts to resolve to a .NET type, this has been written in a similar fashion the the Java code. The advantage of this approach is that it should support arrays of arrays etc.

      Show
      Bruce Collie added a comment - Instead of using simple type names, this change attempts to resolve to a .NET type, this has been written in a similar fashion the the Java code. The advantage of this approach is that it should support arrays of arrays etc.
      Hide
      Bruce Collie added a comment -

      Also a big apology for the tardiness of this patch, I wasn't able to spare the time as I expected.

      Show
      Bruce Collie added a comment - Also a big apology for the tardiness of this patch, I wasn't able to spare the time as I expected.
      Hide
      Mark Lamley added a comment -

      Nice, that's a much better approach. I applied your patches types_ipc.diff&types_main.diff cleanly on top of the Avro-975-Complete4.patch and all tests pass.

      To apply Avro-975-Complete4.patch I remove all \r line endings from Avro.sln first then it applies cleanly. I haven't had problems with the test project file.

      Show
      Mark Lamley added a comment - Nice, that's a much better approach. I applied your patches types_ipc.diff&types_main.diff cleanly on top of the Avro-975-Complete4.patch and all tests pass. To apply Avro-975-Complete4.patch I remove all \r line endings from Avro.sln first then it applies cleanly. I haven't had problems with the test project file.
      Hide
      Doug Cutting added a comment -

      Can someone please submit a complete patch? Thanks!

      Show
      Doug Cutting added a comment - Can someone please submit a complete patch? Thanks!
      Hide
      Mark Lamley added a comment -

      Sure thing. I'll do it tonight.

      Show
      Mark Lamley added a comment - Sure thing. I'll do it tonight.
      Hide
      Mark Lamley added a comment -

      Avro-975-complete5.patch has everything.

      Tested on Win8, OSX + Ubuntu by:
      1. Remove '\r' line endings from Avro.sln
      2. Apply Avro-975-complete5.patch to /lang/csharp/
      3. Put Castle.core.dll in /lang/csharp/lib/main

      Show
      Mark Lamley added a comment - Avro-975-complete5.patch has everything. Tested on Win8, OSX + Ubuntu by: 1. Remove '\r' line endings from Avro.sln 2. Apply Avro-975-complete5.patch to /lang/csharp/ 3. Put Castle.core.dll in /lang/csharp/lib/main
      Hide
      Doug Cutting added a comment -

      This works for me on Ubuntu. I'll commit it soon unless someone objects.

      Show
      Doug Cutting added a comment - This works for me on Ubuntu. I'll commit it soon unless someone objects.
      Hide
      ASF subversion and git services added a comment -

      Commit 1515933 from Doug Cutting in branch 'avro/trunk'
      [ https://svn.apache.org/r1515933 ]

      AVRO-975. C#: Add RPC support. Contributed by Mark Lamley.

      Show
      ASF subversion and git services added a comment - Commit 1515933 from Doug Cutting in branch 'avro/trunk' [ https://svn.apache.org/r1515933 ] AVRO-975 . C#: Add RPC support. Contributed by Mark Lamley.
      Hide
      Doug Cutting added a comment -

      I committed this. Thanks, Mark!

      Show
      Doug Cutting added a comment - I committed this. Thanks, Mark!
      Hide
      Hudson added a comment -

      SUCCESS: Integrated in AvroJava #392 (See https://builds.apache.org/job/AvroJava/392/)
      AVRO-975. C#: Add RPC support. Contributed by Mark Lamley. (cutting: rev 1515933)

      • /avro/trunk/CHANGES.txt
      • /avro/trunk/lang/csharp
      • /avro/trunk/lang/csharp/.gitignore
      • /avro/trunk/lang/csharp/Avro.nunit
      • /avro/trunk/lang/csharp/Avro.sln
      • /avro/trunk/lang/csharp/lib/main/Castle.Core.dll
      • /avro/trunk/lang/csharp/src/apache/codegen/AvroGen.cs
      • /avro/trunk/lang/csharp/src/apache/codegen/Properties/AssemblyInfo.cs
      • /avro/trunk/lang/csharp/src/apache/ipc
      • /avro/trunk/lang/csharp/src/apache/ipc/Avro.ipc.csproj
      • /avro/trunk/lang/csharp/src/apache/ipc/CallFuture.cs
      • /avro/trunk/lang/csharp/src/apache/ipc/CountdownLatch.cs
      • /avro/trunk/lang/csharp/src/apache/ipc/Generic
      • /avro/trunk/lang/csharp/src/apache/ipc/Generic/GenericRequestor.cs
      • /avro/trunk/lang/csharp/src/apache/ipc/Generic/GenericResponder.cs
      • /avro/trunk/lang/csharp/src/apache/ipc/LocalTransceiver.cs
      • /avro/trunk/lang/csharp/src/apache/ipc/OutputStream.cs
      • /avro/trunk/lang/csharp/src/apache/ipc/Properties
      • /avro/trunk/lang/csharp/src/apache/ipc/Properties/AssemblyInfo.cs
      • /avro/trunk/lang/csharp/src/apache/ipc/Requestor.cs
      • /avro/trunk/lang/csharp/src/apache/ipc/Responder.cs
      • /avro/trunk/lang/csharp/src/apache/ipc/RpcContext.cs
      • /avro/trunk/lang/csharp/src/apache/ipc/RpcRequest.cs
      • /avro/trunk/lang/csharp/src/apache/ipc/SocketServer.cs
      • /avro/trunk/lang/csharp/src/apache/ipc/SocketTransceiver.cs
      • /avro/trunk/lang/csharp/src/apache/ipc/Specific
      • /avro/trunk/lang/csharp/src/apache/ipc/Specific/SpecificRequestor.cs
      • /avro/trunk/lang/csharp/src/apache/ipc/Specific/SpecificResponder.cs
      • /avro/trunk/lang/csharp/src/apache/ipc/Transceiver.cs
      • /avro/trunk/lang/csharp/src/apache/ipc/org
      • /avro/trunk/lang/csharp/src/apache/ipc/org/apache
      • /avro/trunk/lang/csharp/src/apache/ipc/org/apache/avro
      • /avro/trunk/lang/csharp/src/apache/ipc/org/apache/avro/ipc
      • /avro/trunk/lang/csharp/src/apache/ipc/org/apache/avro/ipc/HandshakeMatch.cs
      • /avro/trunk/lang/csharp/src/apache/ipc/org/apache/avro/ipc/HandshakeRequest.cs
      • /avro/trunk/lang/csharp/src/apache/ipc/org/apache/avro/ipc/HandshakeResponse.cs
      • /avro/trunk/lang/csharp/src/apache/ipc/org/apache/avro/ipc/MD5.cs
      • /avro/trunk/lang/csharp/src/apache/main/Avro.main.csproj
      • /avro/trunk/lang/csharp/src/apache/main/CodeGen/CodeGen.cs
      • /avro/trunk/lang/csharp/src/apache/main/File/DataFileReader.cs
      • /avro/trunk/lang/csharp/src/apache/main/Generic/GenericReader.cs
      • /avro/trunk/lang/csharp/src/apache/main/Generic/GenericWriter.cs
      • /avro/trunk/lang/csharp/src/apache/main/IO/BinaryEncoder.cs
      • /avro/trunk/lang/csharp/src/apache/main/IO/ByteBufferInputStream.cs
      • /avro/trunk/lang/csharp/src/apache/main/IO/ByteBufferOutputStream.cs
      • /avro/trunk/lang/csharp/src/apache/main/IO/ICallback.cs
      • /avro/trunk/lang/csharp/src/apache/main/IO/InputStream.cs
      • /avro/trunk/lang/csharp/src/apache/main/IO/OutputStream.cs
      • /avro/trunk/lang/csharp/src/apache/main/Properties/AssemblyInfo.cs
      • /avro/trunk/lang/csharp/src/apache/main/Protocol/Message.cs
      • /avro/trunk/lang/csharp/src/apache/main/Schema/MapSchema.cs
      • /avro/trunk/lang/csharp/src/apache/main/Schema/RecordSchema.cs
      • /avro/trunk/lang/csharp/src/apache/main/Specific/ObjectCreator.cs
      • /avro/trunk/lang/csharp/src/apache/main/Specific/SpecificException.cs
      • /avro/trunk/lang/csharp/src/apache/main/Specific/SpecificFixed.cs
      • /avro/trunk/lang/csharp/src/apache/main/Specific/SpecificProtocol.cs
      • /avro/trunk/lang/csharp/src/apache/main/Specific/SpecificReader.cs
      • /avro/trunk/lang/csharp/src/apache/main/Specific/SpecificWriter.cs
      • /avro/trunk/lang/csharp/src/apache/msbuild
      • /avro/trunk/lang/csharp/src/apache/msbuild/Avro.msbuild.csproj
      • /avro/trunk/lang/csharp/src/apache/msbuild/AvroBuilldTask.cs
      • /avro/trunk/lang/csharp/src/apache/msbuild/Properties
      • /avro/trunk/lang/csharp/src/apache/msbuild/Properties/AssemblyInfo.cs
      • /avro/trunk/lang/csharp/src/apache/test/Avro.test.csproj
      • /avro/trunk/lang/csharp/src/apache/test/CodGen/CodeGenTest.cs
      • /avro/trunk/lang/csharp/src/apache/test/Ipc
      • /avro/trunk/lang/csharp/src/apache/test/Ipc/GeneratedFiles
      • /avro/trunk/lang/csharp/src/apache/test/Ipc/GeneratedFiles/org
      • /avro/trunk/lang/csharp/src/apache/test/Ipc/GeneratedFiles/org/apache
      • /avro/trunk/lang/csharp/src/apache/test/Ipc/GeneratedFiles/org/apache/avro
      • /avro/trunk/lang/csharp/src/apache/test/Ipc/GeneratedFiles/org/apache/avro/test
      • /avro/trunk/lang/csharp/src/apache/test/Ipc/GeneratedFiles/org/apache/avro/test/All.cs
      • /avro/trunk/lang/csharp/src/apache/test/Ipc/GeneratedFiles/org/apache/avro/test/AllCallback.cs
      • /avro/trunk/lang/csharp/src/apache/test/Ipc/GeneratedFiles/org/apache/avro/test/AllEnum.cs
      • /avro/trunk/lang/csharp/src/apache/test/Ipc/GeneratedFiles/org/apache/avro/test/AllTestRecord.cs
      • /avro/trunk/lang/csharp/src/apache/test/Ipc/GeneratedFiles/org/apache/avro/test/AllTestRecordPartial.cs
      • /avro/trunk/lang/csharp/src/apache/test/Ipc/GeneratedFiles/org/apache/avro/test/FixedTest.cs
      • /avro/trunk/lang/csharp/src/apache/test/Ipc/GeneratedFiles/org/apache/avro/test/Kind.cs
      • /avro/trunk/lang/csharp/src/apache/test/Ipc/GeneratedFiles/org/apache/avro/test/MD5.cs
      • /avro/trunk/lang/csharp/src/apache/test/Ipc/GeneratedFiles/org/apache/avro/test/Mail.cs
      • /avro/trunk/lang/csharp/src/apache/test/Ipc/GeneratedFiles/org/apache/avro/test/MailCallback.cs
      • /avro/trunk/lang/csharp/src/apache/test/Ipc/GeneratedFiles/org/apache/avro/test/Message.cs
      • /avro/trunk/lang/csharp/src/apache/test/Ipc/GeneratedFiles/org/apache/avro/test/Simple.cs
      • /avro/trunk/lang/csharp/src/apache/test/Ipc/GeneratedFiles/org/apache/avro/test/SimpleCallback.cs
      • /avro/trunk/lang/csharp/src/apache/test/Ipc/GeneratedFiles/org/apache/avro/test/TestError.cs
      • /avro/trunk/lang/csharp/src/apache/test/Ipc/GeneratedFiles/org/apache/avro/test/TestRecord.cs
      • /avro/trunk/lang/csharp/src/apache/test/Ipc/GeneratedFiles/org/apache/avro/test/TestRecordExtensions.cs
      • /avro/trunk/lang/csharp/src/apache/test/Ipc/GeneratedFiles/org/apache/avro/test/TestRecordWithUnion.cs
      • /avro/trunk/lang/csharp/src/apache/test/Ipc/LocalTransceiverTest.cs
      • /avro/trunk/lang/csharp/src/apache/test/Ipc/MailResponder.cs
      • /avro/trunk/lang/csharp/src/apache/test/Ipc/SerializationTest.cs
      • /avro/trunk/lang/csharp/src/apache/test/Ipc/SocketServerConcurrentExecutionTest.cs
      • /avro/trunk/lang/csharp/src/apache/test/Ipc/SocketServerTest.cs
      • /avro/trunk/lang/csharp/src/apache/test/Ipc/SocketServerWithCallbacksTest.cs
      • /avro/trunk/lang/csharp/src/apache/test/Ipc/SocketTransceiverWhenServerStopsTest.cs
      • /avro/trunk/lang/csharp/src/apache/test/Properties/AssemblyInfo.cs
      • /avro/trunk/lang/csharp/src/apache/test/Specific/SpecificTests.cs
      Show
      Hudson added a comment - SUCCESS: Integrated in AvroJava #392 (See https://builds.apache.org/job/AvroJava/392/ ) AVRO-975 . C#: Add RPC support. Contributed by Mark Lamley. (cutting: rev 1515933) /avro/trunk/CHANGES.txt /avro/trunk/lang/csharp /avro/trunk/lang/csharp/.gitignore /avro/trunk/lang/csharp/Avro.nunit /avro/trunk/lang/csharp/Avro.sln /avro/trunk/lang/csharp/lib/main/Castle.Core.dll /avro/trunk/lang/csharp/src/apache/codegen/AvroGen.cs /avro/trunk/lang/csharp/src/apache/codegen/Properties/AssemblyInfo.cs /avro/trunk/lang/csharp/src/apache/ipc /avro/trunk/lang/csharp/src/apache/ipc/Avro.ipc.csproj /avro/trunk/lang/csharp/src/apache/ipc/CallFuture.cs /avro/trunk/lang/csharp/src/apache/ipc/CountdownLatch.cs /avro/trunk/lang/csharp/src/apache/ipc/Generic /avro/trunk/lang/csharp/src/apache/ipc/Generic/GenericRequestor.cs /avro/trunk/lang/csharp/src/apache/ipc/Generic/GenericResponder.cs /avro/trunk/lang/csharp/src/apache/ipc/LocalTransceiver.cs /avro/trunk/lang/csharp/src/apache/ipc/OutputStream.cs /avro/trunk/lang/csharp/src/apache/ipc/Properties /avro/trunk/lang/csharp/src/apache/ipc/Properties/AssemblyInfo.cs /avro/trunk/lang/csharp/src/apache/ipc/Requestor.cs /avro/trunk/lang/csharp/src/apache/ipc/Responder.cs /avro/trunk/lang/csharp/src/apache/ipc/RpcContext.cs /avro/trunk/lang/csharp/src/apache/ipc/RpcRequest.cs /avro/trunk/lang/csharp/src/apache/ipc/SocketServer.cs /avro/trunk/lang/csharp/src/apache/ipc/SocketTransceiver.cs /avro/trunk/lang/csharp/src/apache/ipc/Specific /avro/trunk/lang/csharp/src/apache/ipc/Specific/SpecificRequestor.cs /avro/trunk/lang/csharp/src/apache/ipc/Specific/SpecificResponder.cs /avro/trunk/lang/csharp/src/apache/ipc/Transceiver.cs /avro/trunk/lang/csharp/src/apache/ipc/org /avro/trunk/lang/csharp/src/apache/ipc/org/apache /avro/trunk/lang/csharp/src/apache/ipc/org/apache/avro /avro/trunk/lang/csharp/src/apache/ipc/org/apache/avro/ipc /avro/trunk/lang/csharp/src/apache/ipc/org/apache/avro/ipc/HandshakeMatch.cs /avro/trunk/lang/csharp/src/apache/ipc/org/apache/avro/ipc/HandshakeRequest.cs /avro/trunk/lang/csharp/src/apache/ipc/org/apache/avro/ipc/HandshakeResponse.cs /avro/trunk/lang/csharp/src/apache/ipc/org/apache/avro/ipc/MD5.cs /avro/trunk/lang/csharp/src/apache/main/Avro.main.csproj /avro/trunk/lang/csharp/src/apache/main/CodeGen/CodeGen.cs /avro/trunk/lang/csharp/src/apache/main/File/DataFileReader.cs /avro/trunk/lang/csharp/src/apache/main/Generic/GenericReader.cs /avro/trunk/lang/csharp/src/apache/main/Generic/GenericWriter.cs /avro/trunk/lang/csharp/src/apache/main/IO/BinaryEncoder.cs /avro/trunk/lang/csharp/src/apache/main/IO/ByteBufferInputStream.cs /avro/trunk/lang/csharp/src/apache/main/IO/ByteBufferOutputStream.cs /avro/trunk/lang/csharp/src/apache/main/IO/ICallback.cs /avro/trunk/lang/csharp/src/apache/main/IO/InputStream.cs /avro/trunk/lang/csharp/src/apache/main/IO/OutputStream.cs /avro/trunk/lang/csharp/src/apache/main/Properties/AssemblyInfo.cs /avro/trunk/lang/csharp/src/apache/main/Protocol/Message.cs /avro/trunk/lang/csharp/src/apache/main/Schema/MapSchema.cs /avro/trunk/lang/csharp/src/apache/main/Schema/RecordSchema.cs /avro/trunk/lang/csharp/src/apache/main/Specific/ObjectCreator.cs /avro/trunk/lang/csharp/src/apache/main/Specific/SpecificException.cs /avro/trunk/lang/csharp/src/apache/main/Specific/SpecificFixed.cs /avro/trunk/lang/csharp/src/apache/main/Specific/SpecificProtocol.cs /avro/trunk/lang/csharp/src/apache/main/Specific/SpecificReader.cs /avro/trunk/lang/csharp/src/apache/main/Specific/SpecificWriter.cs /avro/trunk/lang/csharp/src/apache/msbuild /avro/trunk/lang/csharp/src/apache/msbuild/Avro.msbuild.csproj /avro/trunk/lang/csharp/src/apache/msbuild/AvroBuilldTask.cs /avro/trunk/lang/csharp/src/apache/msbuild/Properties /avro/trunk/lang/csharp/src/apache/msbuild/Properties/AssemblyInfo.cs /avro/trunk/lang/csharp/src/apache/test/Avro.test.csproj /avro/trunk/lang/csharp/src/apache/test/CodGen/CodeGenTest.cs /avro/trunk/lang/csharp/src/apache/test/Ipc /avro/trunk/lang/csharp/src/apache/test/Ipc/GeneratedFiles /avro/trunk/lang/csharp/src/apache/test/Ipc/GeneratedFiles/org /avro/trunk/lang/csharp/src/apache/test/Ipc/GeneratedFiles/org/apache /avro/trunk/lang/csharp/src/apache/test/Ipc/GeneratedFiles/org/apache/avro /avro/trunk/lang/csharp/src/apache/test/Ipc/GeneratedFiles/org/apache/avro/test /avro/trunk/lang/csharp/src/apache/test/Ipc/GeneratedFiles/org/apache/avro/test/All.cs /avro/trunk/lang/csharp/src/apache/test/Ipc/GeneratedFiles/org/apache/avro/test/AllCallback.cs /avro/trunk/lang/csharp/src/apache/test/Ipc/GeneratedFiles/org/apache/avro/test/AllEnum.cs /avro/trunk/lang/csharp/src/apache/test/Ipc/GeneratedFiles/org/apache/avro/test/AllTestRecord.cs /avro/trunk/lang/csharp/src/apache/test/Ipc/GeneratedFiles/org/apache/avro/test/AllTestRecordPartial.cs /avro/trunk/lang/csharp/src/apache/test/Ipc/GeneratedFiles/org/apache/avro/test/FixedTest.cs /avro/trunk/lang/csharp/src/apache/test/Ipc/GeneratedFiles/org/apache/avro/test/Kind.cs /avro/trunk/lang/csharp/src/apache/test/Ipc/GeneratedFiles/org/apache/avro/test/MD5.cs /avro/trunk/lang/csharp/src/apache/test/Ipc/GeneratedFiles/org/apache/avro/test/Mail.cs /avro/trunk/lang/csharp/src/apache/test/Ipc/GeneratedFiles/org/apache/avro/test/MailCallback.cs /avro/trunk/lang/csharp/src/apache/test/Ipc/GeneratedFiles/org/apache/avro/test/Message.cs /avro/trunk/lang/csharp/src/apache/test/Ipc/GeneratedFiles/org/apache/avro/test/Simple.cs /avro/trunk/lang/csharp/src/apache/test/Ipc/GeneratedFiles/org/apache/avro/test/SimpleCallback.cs /avro/trunk/lang/csharp/src/apache/test/Ipc/GeneratedFiles/org/apache/avro/test/TestError.cs /avro/trunk/lang/csharp/src/apache/test/Ipc/GeneratedFiles/org/apache/avro/test/TestRecord.cs /avro/trunk/lang/csharp/src/apache/test/Ipc/GeneratedFiles/org/apache/avro/test/TestRecordExtensions.cs /avro/trunk/lang/csharp/src/apache/test/Ipc/GeneratedFiles/org/apache/avro/test/TestRecordWithUnion.cs /avro/trunk/lang/csharp/src/apache/test/Ipc/LocalTransceiverTest.cs /avro/trunk/lang/csharp/src/apache/test/Ipc/MailResponder.cs /avro/trunk/lang/csharp/src/apache/test/Ipc/SerializationTest.cs /avro/trunk/lang/csharp/src/apache/test/Ipc/SocketServerConcurrentExecutionTest.cs /avro/trunk/lang/csharp/src/apache/test/Ipc/SocketServerTest.cs /avro/trunk/lang/csharp/src/apache/test/Ipc/SocketServerWithCallbacksTest.cs /avro/trunk/lang/csharp/src/apache/test/Ipc/SocketTransceiverWhenServerStopsTest.cs /avro/trunk/lang/csharp/src/apache/test/Properties/AssemblyInfo.cs /avro/trunk/lang/csharp/src/apache/test/Specific/SpecificTests.cs
      Hide
      ASF subversion and git services added a comment -

      Commit 1556885 from Doug Cutting in branch 'avro/trunk'
      [ https://svn.apache.org/r1556885 ]

      AVRO-975. Fix licensing.

      Show
      ASF subversion and git services added a comment - Commit 1556885 from Doug Cutting in branch 'avro/trunk' [ https://svn.apache.org/r1556885 ] AVRO-975 . Fix licensing.
      Hide
      Hudson added a comment -

      SUCCESS: Integrated in AvroJava #420 (See https://builds.apache.org/job/AvroJava/420/)
      AVRO-975. Fix licensing. (cutting: rev 1556885)

      • /avro/trunk/lang/csharp/src/apache/ipc/Avro.ipc.csproj
      • /avro/trunk/lang/csharp/src/apache/main/IO/InputStream.cs
      • /avro/trunk/lang/csharp/src/apache/main/IO/OutputStream.cs
      • /avro/trunk/lang/csharp/src/apache/msbuild/Avro.msbuild.csproj
      • /avro/trunk/share/rat-excludes.txt
      Show
      Hudson added a comment - SUCCESS: Integrated in AvroJava #420 (See https://builds.apache.org/job/AvroJava/420/ ) AVRO-975 . Fix licensing. (cutting: rev 1556885) /avro/trunk/lang/csharp/src/apache/ipc/Avro.ipc.csproj /avro/trunk/lang/csharp/src/apache/main/IO/InputStream.cs /avro/trunk/lang/csharp/src/apache/main/IO/OutputStream.cs /avro/trunk/lang/csharp/src/apache/msbuild/Avro.msbuild.csproj /avro/trunk/share/rat-excludes.txt
      Hide
      Sid S added a comment -

      Does this patch also enable SSL? We're looking into getting Avro C# RPC over SSL.

      Show
      Sid S added a comment - Does this patch also enable SSL? We're looking into getting Avro C# RPC over SSL.
      Hide
      Doug Cutting added a comment -

      The current C# implementation only has a SocketTransceiver implementation, which does not support secure connections. If you want to interoperate with Java and other implementations, then we should probably implement an HttpTransceiver for C# and use HTTPS. This should be straightforward to implement using C#'s standard
      HttpWebRequest.

      Show
      Doug Cutting added a comment - The current C# implementation only has a SocketTransceiver implementation, which does not support secure connections. If you want to interoperate with Java and other implementations, then we should probably implement an HttpTransceiver for C# and use HTTPS. This should be straightforward to implement using C#'s standard HttpWebRequest.
      Hide
      David Taylor added a comment -

      There seems to be problem with the patch. A line from the errors-and-remote-protocols.975.diff patch I submitted was changed. The code is now checking if a union can read a union, something that will never be true as I understand it.

      Show
      David Taylor added a comment - There seems to be problem with the patch. A line from the errors-and-remote-protocols.975.diff patch I submitted was changed. The code is now checking if a union can read a union, something that will never be true as I understand it.
      Hide
      David Taylor added a comment -

      Attached is a one line fix.

      Show
      David Taylor added a comment - Attached is a one line fix.
      Hide
      David Taylor added a comment -

      Apologies, the patch was named Protocol.cs.diff but the patch is to Message.cs.

      Show
      David Taylor added a comment - Apologies, the patch was named Protocol.cs.diff but the patch is to Message.cs.
      Hide
      David Taylor added a comment -

      The responder also need to include generic string error messages in its schema.

      Show
      David Taylor added a comment - The responder also need to include generic string error messages in its schema.
      Hide
      David Taylor added a comment -

      Updated the Responder patch. The system error needs to be a union schema, not a simple string. This is how the Java implementation works. The specific reader also need to handle both exception and string error return. I have updated the error test to include both a specific error and a system error.

      Show
      David Taylor added a comment - Updated the Responder patch. The system error needs to be a union schema, not a simple string. This is how the Java implementation works. The specific reader also need to handle both exception and string error return. I have updated the error test to include both a specific error and a system error.
      Hide
      Doug Cutting added a comment -

      David, this was included in Avro 1.7.6 without your latest fixes. I'd prefer we mark this issue as fixed in 1.7.6 and file a new issue for these subsequent changes. Does that make sense?

      Show
      Doug Cutting added a comment - David, this was included in Avro 1.7.6 without your latest fixes. I'd prefer we mark this issue as fixed in 1.7.6 and file a new issue for these subsequent changes. Does that make sense?
      Hide
      David Taylor added a comment -

      No problem. Raised with suggested fix included as issue 1446.

      Show
      David Taylor added a comment - No problem. Raised with suggested fix included as issue 1446.

        People

        • Assignee:
          Mark Lamley
          Reporter:
          Jeff Hammerbacher
        • Votes:
          4 Vote for this issue
          Watchers:
          11 Start watching this issue

          Dates

          • Created:
            Updated:
            Resolved:

            Development