You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@activemq.apache.org by ta...@apache.org on 2010/07/27 23:06:24 UTC
svn commit: r979873 - in
/activemq/activemq-dotnet/Apache.NMS.ActiveMQ/trunk/src:
main/csharp/Transport/Failover/ main/csharp/Transport/Mock/
test/csharp/Transport/failover/
Author: tabish
Date: Tue Jul 27 21:06:24 2010
New Revision: 979873
URL: http://svn.apache.org/viewvc?rev=979873&view=rev
Log:
Fix for: https://issues.apache.org/activemq/browse/AMQNET-266
Modified:
activemq/activemq-dotnet/Apache.NMS.ActiveMQ/trunk/src/main/csharp/Transport/Failover/FailoverTransport.cs
activemq/activemq-dotnet/Apache.NMS.ActiveMQ/trunk/src/main/csharp/Transport/Mock/MockTransport.cs
activemq/activemq-dotnet/Apache.NMS.ActiveMQ/trunk/src/main/csharp/Transport/Mock/MockTransportFactory.cs
activemq/activemq-dotnet/Apache.NMS.ActiveMQ/trunk/src/test/csharp/Transport/failover/FailoverTransportTest.cs
Modified: activemq/activemq-dotnet/Apache.NMS.ActiveMQ/trunk/src/main/csharp/Transport/Failover/FailoverTransport.cs
URL: http://svn.apache.org/viewvc/activemq/activemq-dotnet/Apache.NMS.ActiveMQ/trunk/src/main/csharp/Transport/Failover/FailoverTransport.cs?rev=979873&r1=979872&r2=979873&view=diff
==============================================================================
--- activemq/activemq-dotnet/Apache.NMS.ActiveMQ/trunk/src/main/csharp/Transport/Failover/FailoverTransport.cs (original)
+++ activemq/activemq-dotnet/Apache.NMS.ActiveMQ/trunk/src/main/csharp/Transport/Failover/FailoverTransport.cs Tue Jul 27 21:06:24 2010
@@ -740,6 +740,24 @@ namespace Apache.NMS.ActiveMQ.Transport.
"ActiveMQ Failover Worker: " + this.GetHashCode().ToString());
}
+ if(rebalance)
+ {
+ ITransport transport = connectedTransport.GetAndSet(null);
+ if(transport != null)
+ {
+ transport.Command = new CommandHandler(disposedOnCommand);
+ transport.Exception = new ExceptionHandler(disposedOnException);
+ try
+ {
+ transport.Stop();
+ }
+ catch(Exception ex)
+ {
+ ex.GetType(); // Ignore errors but this lets us see the error during debugging
+ }
+ }
+ }
+
Tracer.Debug("Waking up reconnect task");
try
{
@@ -1188,7 +1206,7 @@ namespace Apache.NMS.ActiveMQ.Transport.
{
if(copy.Remove(uri) == false)
{
- uriSet.Add(uri);
+ added.Add(uri);
}
}
Modified: activemq/activemq-dotnet/Apache.NMS.ActiveMQ/trunk/src/main/csharp/Transport/Mock/MockTransport.cs
URL: http://svn.apache.org/viewvc/activemq/activemq-dotnet/Apache.NMS.ActiveMQ/trunk/src/main/csharp/Transport/Mock/MockTransport.cs?rev=979873&r1=979872&r2=979873&view=diff
==============================================================================
--- activemq/activemq-dotnet/Apache.NMS.ActiveMQ/trunk/src/main/csharp/Transport/Mock/MockTransport.cs (original)
+++ activemq/activemq-dotnet/Apache.NMS.ActiveMQ/trunk/src/main/csharp/Transport/Mock/MockTransport.cs Tue Jul 27 21:06:24 2010
@@ -34,7 +34,8 @@ namespace Apache.NMS.ActiveMQ.Transport.
public class MockTransport : ITransport
{
#region Properties
-
+
+ private string name;
private bool failOnSendMessage = false;
private int numSentMessagesBeforeFail = -1;
private int numSentMessages = 0;
@@ -263,6 +264,12 @@ namespace Apache.NMS.ActiveMQ.Transport.
#region Property Accessors
+ public string Name
+ {
+ get { return this.name; }
+ set { this.name = value; }
+ }
+
public CommandHandler Command
{
get { return commandHandler; }
Modified: activemq/activemq-dotnet/Apache.NMS.ActiveMQ/trunk/src/main/csharp/Transport/Mock/MockTransportFactory.cs
URL: http://svn.apache.org/viewvc/activemq/activemq-dotnet/Apache.NMS.ActiveMQ/trunk/src/main/csharp/Transport/Mock/MockTransportFactory.cs?rev=979873&r1=979872&r2=979873&view=diff
==============================================================================
--- activemq/activemq-dotnet/Apache.NMS.ActiveMQ/trunk/src/main/csharp/Transport/Mock/MockTransportFactory.cs (original)
+++ activemq/activemq-dotnet/Apache.NMS.ActiveMQ/trunk/src/main/csharp/Transport/Mock/MockTransportFactory.cs Tue Jul 27 21:06:24 2010
@@ -74,6 +74,13 @@ namespace Apache.NMS.ActiveMQ.Transport.
set { this.failOnCreate = value; }
}
+ private string name = null;
+ public string Name
+ {
+ get { return this.name; }
+ set { this.name = value; }
+ }
+
#endregion
public ITransport CreateTransport(Uri location)
@@ -108,6 +115,7 @@ namespace Apache.NMS.ActiveMQ.Transport.
transport.NumReceivedMessagesBeforeFail = this.NumReceivedMessagesBeforeFail;
transport.FailOnSendMessage = this.FailOnSendMessage;
transport.NumSentMessagesBeforeFail = this.NumSentMessagesBeforeFail;
+ transport.Name = this.Name;
return transport;
}
Modified: activemq/activemq-dotnet/Apache.NMS.ActiveMQ/trunk/src/test/csharp/Transport/failover/FailoverTransportTest.cs
URL: http://svn.apache.org/viewvc/activemq/activemq-dotnet/Apache.NMS.ActiveMQ/trunk/src/test/csharp/Transport/failover/FailoverTransportTest.cs?rev=979873&r1=979872&r2=979873&view=diff
==============================================================================
--- activemq/activemq-dotnet/Apache.NMS.ActiveMQ/trunk/src/test/csharp/Transport/failover/FailoverTransportTest.cs (original)
+++ activemq/activemq-dotnet/Apache.NMS.ActiveMQ/trunk/src/test/csharp/Transport/failover/FailoverTransportTest.cs Tue Jul 27 21:06:24 2010
@@ -543,5 +543,52 @@ namespace Apache.NMS.ActiveMQ.Test
transport.Oneway( command );
}
+ [Test]
+ public void TestFailoverTransportConnectionControlHandling()
+ {
+ Uri uri = new Uri("failover:(mock://localhost:61613)?randomize=false");
+
+ string reconnectTo = "mock://localhost:61616?transport.name=Reconnected";
+ string connectedBrokers = "mock://localhost:61616?transport.name=Broker1," +
+ "mock://localhost:61617?transport.name=Broker2";
+
+ ConnectionControl cmd = new ConnectionControl();
+ cmd.FaultTolerant = true;
+ cmd.ReconnectTo = reconnectTo;
+ cmd.ConnectedBrokers = connectedBrokers;
+
+ FailoverTransportFactory factory = new FailoverTransportFactory();
+
+ ITransport transport = factory.CreateTransport( uri );
+ Assert.IsNotNull( transport );
+ transport.Command = new CommandHandler(OnCommand);
+ transport.Exception = new ExceptionHandler(OnException);
+
+ FailoverTransport failover = (FailoverTransport) transport.Narrow(typeof(FailoverTransport));
+ Assert.IsNotNull(failover);
+ Assert.IsFalse(failover.Randomize);
+
+ transport.Start();
+
+ MockTransport mock = null;
+ while(mock == null ) {
+ mock = (MockTransport) transport.Narrow(typeof(MockTransport));
+ }
+
+ mock.InjectCommand(cmd);
+
+ failover.Remove(true, new Uri[] {new Uri("mock://localhost:61613")});
+
+ Thread.Sleep(1000);
+
+ mock = null;
+
+ while(mock == null) {
+ mock = (MockTransport) transport.Narrow(typeof(MockTransport));
+ }
+
+ Assert.AreEqual("Reconnected", mock.Name);
+
+ }
}
}