activemq-dev mailing list archives

Site index · List index
Message view « Date » · « Thread »
Top « Date » · « Thread »
From "Jim Gomes (JIRA)" <jira+amq...@apache.org>
Subject [jira] Commented: (AMQNET-152) Infinit exception at reconnect on Mono with failover transport.
Date Mon, 08 Jun 2009 20:16:35 GMT

    [ https://issues.apache.org/activemq/browse/AMQNET-152?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=52133#action_52133
] 

Jim Gomes commented on AMQNET-152:
----------------------------------

I think something got broken with the latest failover code.  It doesn't seem to be retrying
the connection.  It's possible I broke something with a recent check-in.  In a related fix
for this issue, I have renamed the SynchronizedCollection and SynchronizedDictionary, because
they conflict with .NET Framework class names.  This may be the reason why the invalid cast
exception is being thrown my Mono.  Even if the naming of the classes is not confusing the
compiler, it definitely confuses the developer.  These classes have been renamed to AtomicCollection
and AtomicDictionary to clarify the underlying object and to fit it with existing NMS naming
conventions (e.g., AtomicBoolean).

> Infinit exception at reconnect on Mono with failover transport.
> ---------------------------------------------------------------
>
>                 Key: AMQNET-152
>                 URL: https://issues.apache.org/activemq/browse/AMQNET-152
>             Project: ActiveMQ .Net
>          Issue Type: Bug
>          Components: ActiveMQ Client
>         Environment: Mono 1.9.1 framework on both Windows/Linux system.
>            Reporter: Tomasz Wiczling
>            Assignee: Jim Gomes
>             Fix For: 1.1
>
>
> I'm testing failover transport on Mono.
> I've downloaded latest revision of ActiveMQ .Net project (rev. 752559).
> I've made tests on:
> - both Windows and Linux
> - Mono 1.9.1 and Mono 2.0
> - ActiveMQ 5.1 and ActiveMQ 5.2
> All test ended with an exception.
> I wrote simple program that was listening on topic.
> namespace IssueExample
> {
>         internal class ConsoleTracer : ITrace
>         {
>                 public bool IsDebugEnabled { get { return true; } }
>                 public bool IsInfoEnabled { get { return true; } }
>                 public bool IsWarnEnabled { get { return true; } }
>                 public bool IsErrorEnabled { get { return true; } }
>                 public bool IsFatalEnabled { get { return true; } }
>                 public void Debug(string message) { Console.WriteLine("DEBUG:" + message);
}
>                 public void Info(string message) { Console.WriteLine("INFO:" + message);
}
>                 public void Warn(string message) { Console.WriteLine("WARN:" + message);
}
>                 public void Error(string message) { Console.WriteLine("ERROR:" + message);
}
>                 public void Fatal(string message) { Console.WriteLine("FATAL:" + message);
}
>         }
>         class Program
>         {
>                 public static void Main(string[] args)
>                 {
>                         if (args.Length < 2)
>                         {
>                                 Console.WriteLine("USAGE: IssueExample <AMQURI>
<TOPIC_NAME>");
>                                 return;
>                         }
>                         Tracer.Trace = new ConsoleTracer();
>                         IConnectionFactory factory = new ConnectionFactory(args[0]);
>                         IConnection connection = factory.CreateConnection();
>                         ISession session = connection.CreateSession();
>                         IDestination destination = session.GetTopic(args[1]);
>                         IMessageConsumer consumer = session.CreateConsumer(destination);
>                         consumer.Listener += onMessage;
>                         connection.Start();
>                         Console.WriteLine("Successfully connected to Topic '" + args[1]
+ "' on '" + args[0] + "' - waiting Any Key to be pressed");
>                         Console.ReadKey();
>                         consumer.Close();
>                         connection.Dispose();
>                         Console.WriteLine("Connected and Disconnected successfully toTopic
'" + args[1] + "' on '" + args[0] + "' - Press any key to terminate program.");
>                         Console.ReadKey();
>                 }
>                 private static void onMessage(IMessage msg)
>                 {
>                         Console.WriteLine("\tRECEIVING: " + msg);
>                 }
>         }
> }
> The test was made with execution:
> # mono IssueExample.exe failover:(tcp://localhost:61616) test.topic
> Program works fine till the test of reconnection.
> While the program is running I restart the AMQ server.
> For a while I get loop of:
> (...)
> DEBUG:Waiting 1280 ms before attempting connection.
> DEBUG:Attempting connect to: tcp://localhost:61616/
> DEBUG:Opening socket to: localhost on port: 61616
> DEBUG:Connect fail to: tcp://localhost:61616/, reason: System.Net.Sockets.SocketException:
Connection refused
>   at System.Net.Sockets.Socket.Connect (System.Net.EndPoint remote_end) [0x00000]
>   at Apache.NMS.ActiveMQ.Transport.Tcp.TcpTransportFactory.Connect (System.String host,
Int32 port) [0x00000]
>   at Apache.NMS.ActiveMQ.Transport.Tcp.TcpTransportFactory.CompositeConnect (System.Uri
location) [0x00000]
>   at Apache.NMS.ActiveMQ.Transport.TransportFactory.CompositeConnect (System.Uri location)
[0x00000]
>   at Apache.NMS.ActiveMQ.Transport.Failover.FailoverTransport.doReconnect () [0x00000]
> (...)
> And it is OK, but ...
> When server resumes work, I get:
> (...)
> DEBUG:Waiting 20480 ms before attempting connection.
> DEBUG:Parsing type: 2 with: Apache.NMS.ActiveMQ.OpenWire.V2.BrokerInfoMarshaller
> DEBUG:Parsing type: 30 with: Apache.NMS.ActiveMQ.OpenWire.V2.ResponseMarshaller
> ERROR:Unknown response ID: 0 for response: Response[ CorrelationId=1 ]
> DEBUG:Parsing type: 10 with: Apache.NMS.ActiveMQ.OpenWire.V2.KeepAliveInfoMarshaller
> INFO:Keep alive message received.
> INFO:Waiting for transport to reconnect.
> DEBUG:Attempting connect to: tcp://localhost:61616/
> DEBUG:Opening socket to: localhost on port: 61616
> DEBUG:Parsing type: 1 with: Apache.NMS.ActiveMQ.OpenWire.V1.WireFormatInfoMarshaller
> DEBUG:Connect fail to: tcp://localhost:61616/, reason: System.InvalidCastException: Cannot
cast from source type to destination type.
>   at System.Collections.Generic.Dictionary`2+ValueCollection[Apache.NMS.ActiveMQ.Commands.SessionId,Apache.NMS.ActiveMQ.State.SessionState].System.Collections.ICollection.CopyTo
(System.Array array, Int32 index) [0x00000]
>   at System.Collections.ArrayList.InsertRange (Int32 index, ICollection c) [0x00000]
>   at System.Collections.ArrayList.AddRange (ICollection c) [0x00000]
>   at System.Collections.ArrayList..ctor (ICollection c) [0x00000]
>   at Apache.NMS.ActiveMQ.State.SynchronizedCollection`1[Apache.NMS.ActiveMQ.State.SessionState]..ctor
(ICollection c) [0x00000]
>   at Apache.NMS.ActiveMQ.State.SynchronizedDictionary`2[Apache.NMS.ActiveMQ.Commands.SessionId,Apache.NMS.ActiveMQ.State.SessionState].get_Values
() [0x00000]
>   at Apache.NMS.ActiveMQ.State.ConnectionState.get_SessionStates () [0x00000]
>   at Apache.NMS.ActiveMQ.State.ConnectionStateTracker.DoRestoreSessions (ITransport transport,
Apache.NMS.ActiveMQ.State.ConnectionState connectionState) [0x00000]
>   at Apache.NMS.ActiveMQ.State.ConnectionStateTracker.DoRestore (ITransport transport)
[0x00000]
>   at Apache.NMS.ActiveMQ.Transport.Failover.FailoverTransport.restoreTransport (ITransport
t) [0x00000]
>   at Apache.NMS.ActiveMQ.Transport.Failover.FailoverTransport.doReconnect () [0x00000]
> (...)
> And this is permanent state.

-- 
This message is automatically generated by JIRA.
-
You can reply to this email to add a comment to the issue online.


Mime
View raw message