I added a fix in the Jira AMQ-2774 thread.

Eric-AWL


Eric-AWL wrote:
> 
> yes, it seems to be better and, finally easier to manage. I will try. 
> 
> Do you confirm me that, in a normal situation, the transport connection
> should always be deleted from the current list before a new similar one
> wants to be created (thread synchronization) ? 
> I don't know how specific functions (failover connections for example) are
> managed.
> 
> Thank you
> Eric-AWL
> 
> 
> rajdavies wrote:
>> 
>> wouldn't you want to do it the other way round - destroy the current
>> connection and use the new one ?
>> 
>> On 21 Jul 2010, at 17:27, Eric-AWL wrote:
>> 
>>> 
>>> 
>>> in TransportConnection class.
>>> 
>>> This TransportConnection is associated to a TransportConnector
>>> 
>>> public Response processBrokerInfo(BrokerInfo info) {
>>> ....
>>> } else if (info.isNetworkConnection() && info.isDuplexConnection()) {
>>>          try {
>>>                Properties properties =
>>> MarshallingSupport.stringToProperties(info.getNetworkProperties());
>>>                Map<String, String> props = createMap(properties);
>>> 
>>> 
>>>            duplexBridge = NetworkBridgeFactory.createBridge(config,
>>> localTransport, remoteBridgeTransport);
>>>                duplexBridge.setBrokerService(broker.getBrokerService());
>>>                // now turn duplex off this side
>>>                info.setDuplexConnection(false);
>>>                duplexBridge.setCreatedByDuplex(true);
>>>                duplexBridge.duplexStart(this, brokerInfo, info);
>>>                LOG.info("Created Duplex Bridge back to " +
>>> info.getBrokerName());
>>> ...
>>> 
>>> I could use the current list of TransportConnection managed by the
>>> "parent"
>>> TransportConnector (which can be retreived in the TransportConnection
>>> class), to verify that a connection with the same
>>> brokerInfo.getBrokerId()
>>> is not already launched and throw an exception (and try to send it back)
>>> if
>>> the connection is always active ? Is it Ok ?
>>> 
>>> On the Transport Side, the new bridge won't be created while the
>>> InactivityMonitor doesn't destroy the old bridge.
>>> 
>>> 
>>> Eric-AWL
>>> 
>>> 
>>> Eric-AWL wrote:
>>>> 
>>>> Ok, I will try to add some code lines to avoid this case.... Not easy
>>>> at
>>>> first view.
>>>> 
>>>> Eric-AWL
>>>> 
>>>> 
>>>> rajdavies wrote:
>>>>> 
>>>>> Hi Eric,
>>>>> 
>>>>> yes I think this is the case - I think we need to ensure that the old
>>>>> connection is destroyed when the new one joins
>>>>> 
>>>>> cheers,
>>>>> 
>>>>> Rob
>>>>> 
>>>>> 
>>>>> Rob Davies
>>>>> follow me: http://twitter.com/rajdavies
>>>>> I work here: http://fusesource.com
>>>>> My Blog: http://rajdavies.blogspot.com/
>>>>> I wrote this: http://www.manning.com/snyder/
>>>>> 
>>>>> 
>>>>> 
>>>>> 
>>>>> On 21 Jul 2010, at 10:09, Eric-AWL wrote:
>>>>> 
>>>>>> 
>>>>>> I was wrong.
>>>>>> 
>>>>>> here :
>>>>>> 
>>>>>> STOP : Network Fault : Network Off
>>>>>> 
>>>>>> Link 1 : ADMIN Link port 61601 : (DUPLEX back) Link from SIBBusModule
>>>>>> TestDeCharge(Client) to SIBBusSupervisor port 61601, broken
>>>>>> 2010-07-19 14:00:23,733 [isor-td0sib01s]] INFO 
>>>>>> DemandForwardingBridge        
>>>>>> - SIBBusSupervisor-td0sib01s bridge to
>>>>>> SIBBusModule-TestDeCharge-td0sib01v
>>>>>> stopped
>>>>>> 
>>>>>> So the bridge was only destroyed by the InactivityMonitor thread.
>>>>>> 
>>>>>> This trace was associated to another not Duplex bridge with the same
>>>>>> brokers, and not the duplex one.
>>>>>> 
>>>>>> 
>>>>>> But I have two questions :
>>>>>> 
>>>>>> I understand that when a network fault is detected on the "network
>>>>>> connector" side of a duplex connection, the bridge is stopped on this
>>>>>> side,
>>>>>> but the other bridge side (transport side) is detected only by the
>>>>>> InactivityMonitor. Is this true ?
>>>>>> 
>>>>>> In this case, if a new DemandForwardingBridge is created between the
>>>>>> 2
>>>>>> brokers, then the "transport side" sees temporarily (while
>>>>>> InactivityMonitor
>>>>>> doesn't destroy the first bridge) 2 brokers instead of one, and can
>>>>>> send
>>>>>> back some messages by using the faulty connection. Is this true ?
>>>>>> 
>>>>>> Thank you in advance
>>>>>> 
>>>>>> Eric-AWL
>>>>>> 
>>>>>> 
>>>>>> 
>>>>>> Eric-AWL wrote:
>>>>>>> 
>>>>>>> SIBBusModule-TestDeCharge-td0sib01v  Log
>>>>>>> Link 1 : ADMIN Link port 61601 : Try to connect (DUPLEX initiator)
>>>>>>> from
>>>>>>> SIBBusModule TestDeCharge (Client) to SIBBusSupervisor port 61601
>>>>>>> 2010-07-19 09:57:18,896 [arge-td0sib01v]] INFO 
>>>>>>> DiscoveryNetworkConnector     
>>>>>>> - Establishing network connection from
>>>>>>> vm://SIBBusModule-TestDeCharge-td0sib01v to
>>>>>>> tcp://td0sib01s.priv.atos.fr:61601?useLocalHost=false
>>>>>>> 
>>>>>>> Link 1 : ADMIN Link port 61601 : Connect (DUPLEX initiator)  from
>>>>>>> SIBBusModule TestDeCharge (Client) to SIBBusSupervisor port 61601
>>>>>>> 2010-07-19 09:57:19,068 [rge-td0sib01v#4] INFO 
>>>>>>> DemandForwardingBridge        
>>>>>>> - Network connection between
>>>>>>> vm://SIBBusModule-TestDeCharge-td0sib01v#4
>>>>>>> and
>>>>>>> tcp://td0sib01s.priv.atos.fr/10.21.195.130:61601(SIBBusSupervisor-td0sib01s)
>>>>>>> has been established.
>>>>>>> 
>>>>>>> 
>>>>>>> STOP : Network Fault : Network Off
>>>>>>> 
>>>>>>> Link 1 : ADMIN Link port 61601 : (DUPLEX initiator) Link from
>>>>>>> SIBBusModule
>>>>>>> TestDeCharge(Client) to SIBBusSupervisor port 61601, broken
>>>>>>> 2010-07-19 14:00:23,258 [arge-td0sib01v]] INFO 
>>>>>>> DemandForwardingBridge        
>>>>>>> - SIBBusModule-TestDeCharge-td0sib01v bridge to
>>>>>>> SIBBusSupervisor-td0sib01s
>>>>>>> stopped
>>>>>>> 
>>>>>>> Reconnect Processus : Network On
>>>>>>> 
>>>>>>> Link 1 new : ADMIN Link port 61601 : Try to connect (DUPLEX
>>>>>>> initiator)
>>>>>>> SIBBusModule TestDeCharge(Client) to SIBBusSupervisor port 61601
>>>>>>> 2010-07-19 14:00:55,737 [arge-td0sib01v]] INFO 
>>>>>>> DiscoveryNetworkConnector     
>>>>>>> - Establishing network connection from
>>>>>>> vm://SIBBusModule-TestDeCharge-td0sib01v to
>>>>>>> tcp://td0sib01s.priv.atos.fr:61601?useLocalHost=false
>>>>>>> 
>>>>>>> Link 1 new : ADMIN Link port 61601 : Connect (DUPLEX
>>>>>>> initiator)SIBBusModule TestDeCharge(Client) to SIBBusSupervisor port
>>>>>>> 61601
>>>>>>> 2010-07-19 14:00:55,857 [ge-td0sib01v#11] INFO 
>>>>>>> DemandForwardingBridge        
>>>>>>> - Network connection between
>>>>>>> vm://SIBBusModule-TestDeCharge-td0sib01v#11
>>>>>>> and
>>>>>>> tcp://td0sib01s.priv.atos.fr/10.21.195.130:61601(SIBBusSupervisor-td0sib01s)
>>>>>>> has been established.
>>>>>>> 
>>>>>>> 
>>>>>>> Link 1 doesn’t seem to work. 
>>>>>>> 
>>>>>>> SIBBusSupervisor log
>>>>>>> 
>>>>>>> Link 1 : ADMIN Link port 61601 : Connect (DUPLEX back) from
>>>>>>> SIBBusModule
>>>>>>> TestDeCharge (Client) port 36485 to SIBBusSupervisor port 61601
>>>>>>> 2010-07-19 09:57:19,097 [0.29.12.1:36485] INFO  TransportConnection     
>>>>>>>       
>>>>>>> - Created Duplex Bridge back to SIBBusModule-TestDeCharge-td0sib01v
>>>>>>> 2010-07-19 09:57:19,097 [or-td0sib01s#12] INFO 
>>>>>>> DemandForwardingBridge        
>>>>>>> - Network connection between vm://SIBBusSupervisor-td0sib01s#12 and
>>>>>>> tcp:///10.29.12.1:36485(SIBBusModule-TestDeCharge-td0sib01v) has
>>>>>>> been
>>>>>>> established.
>>>>>>> 
>>>>>>> STOP : Network Fault : Network Off
>>>>>>> 
>>>>>>> Link 1 : ADMIN Link port 61601 : (DUPLEX back) Link from
>>>>>>> SIBBusModule
>>>>>>> TestDeCharge(Client) to SIBBusSupervisor port 61601, broken
>>>>>>> 2010-07-19 14:00:23,733 [isor-td0sib01s]] INFO 
>>>>>>> DemandForwardingBridge        
>>>>>>> - SIBBusSupervisor-td0sib01s bridge to
>>>>>>> SIBBusModule-TestDeCharge-td0sib01v
>>>>>>> stopped
>>>>>>> 
>>>>>>> 
>>>>>>> Reconnect Processus : Network On
>>>>>>> 
>>>>>>> Link 1 new : ADMIN Link port 61601 : Connect (DUPLEX back) from
>>>>>>> SIBBusModule TestDeCharge (Client) port 33840 to SIBBusSupervisor
>>>>>>> port
>>>>>>> 61601
>>>>>>> 2010-07-19 14:00:55,920 [0.29.12.1:33840] INFO  TransportConnection     
>>>>>>>       
>>>>>>> - Created Duplex Bridge back to SIBBusModule-TestDeCharge-td0sib01v
>>>>>>> 2010-07-19 14:00:55,921 [or-td0sib01s#22] INFO 
>>>>>>> DemandForwardingBridge        
>>>>>>> - Network connection between vm://SIBBusSupervisor-td0sib01s#22 and
>>>>>>> tcp:///10.29.12.1:33840(SIBBusModule-TestDeCharge-td0sib01v) has
>>>>>>> been
>>>>>>> established.
>>>>>>> 
>>>>>>> STOP Old DUPLEX back Connection
>>>>>>> 
>>>>>>> Link 1 old : ADMIN Link port 61601 : (DUPLEX back) Link SIBBusModule
>>>>>>> TestDeCharge (Client) port 36485 to SIBBusSupervisor port 61601 is
>>>>>>> broken
>>>>>>> 2010-07-19 14:00:58,939 [wor...@1ecc696e] WARN 
>>>>>>> DemandForwardingBridge        
>>>>>>> - Network connection between vm://SIBBusSupervisor-td0sib01s#12 and
>>>>>>> tcp:///10.29.12.1:36485 shutdown due to a remote error:
>>>>>>> org.apache.activemq.transport.InactivityIOException: Channel was
>>>>>>> inactive
>>>>>>> for too long: /10.29.12.1:36485
>>>>>>> 2010-07-19 14:00:58,945 [0.29.12.1:36485] INFO 
>>>>>>> DemandForwardingBridge        
>>>>>>> - SIBBusSupervisor-td0sib01s bridge to
>>>>>>> SIBBusModule-TestDeCharge-td0sib01v
>>>>>>> stopped
>>>>>>> 
>>>>>>> 
>>>>>>> It seems that bridge on Link 1 is finally broken ???
>>>>>>> 
>>>>>>> Eric-AWL
>>>>>>> 
>>>>>>> 
>>>>>>> Eric-AWL wrote:
>>>>>>>> 
>>>>>>>> Hi
>>>>>>>> 
>>>>>>>> In the case where network is alternatively on/off in a duplex
>>>>>>>> multicast
>>>>>>>> configuration, I first discovered that the "network connector side"
>>>>>>>> broker was sometimes blocked on "RemoteBrokerNameKnownLatch" latch.
>>>>>>>> 
>>>>>>>> I think that I resolved this problem by 
>>>>>>>> - adding a countdown() call on this latch at the end of the stop()
>>>>>>>> method
>>>>>>>> - correctly managing an exception to alert the discovery connector
>>>>>>>> that
>>>>>>>> the bridge was disposed during the start call.
>>>>>>>> 
>>>>>>>> Now, I think that I have a problem on the other side with this
>>>>>>>> configuration.
>>>>>>>> T0                                   - A duplex connection is
>>>>>>>> correctly
>>>>>>>> established
>>>>>>>> T0+X minutes                    - the network is down, the duplex
>>>>>>>> bridge
>>>>>>>> back is stopped, but the corresponding transport (back) connection
>>>>>>>> seems
>>>>>>>> not to be closed
>>>>>>>> T0+X minutes + x ms          - the networl is up : a new transport
>>>>>>>> connection want to be established and is established
>>>>>>>> T0+X minutes + y seconds   - the transport inactivity thread closes
>>>>>>>> the
>>>>>>>> old transport connection
>>>>>>>> 
>>>>>>>> (y seconds >> x milliseconds)
>>>>>>>> 
>>>>>>>> All seems Ok, but no message are exchanged with this bridge.
>>>>>>>> 
>>>>>>>> Eric-AWL
>>>>>>>> 
>>>>>>> 
>>>>>>> 
>>>>>> 
>>>>>> -- 
>>>>>> View this message in context:
>>>>>> http://old.nabble.com/Duplex-and-network-fault.-tp29205793p29223448.html
>>>>>> Sent from the ActiveMQ - User mailing list archive at Nabble.com.
>>>>>> 
>>>>> 
>>>>> 
>>>>> 
>>>> 
>>>> 
>>> 
>>> -- 
>>> View this message in context:
>>> http://old.nabble.com/Duplex-and-network-fault.-tp29205793p29228003.html
>>> Sent from the ActiveMQ - User mailing list archive at Nabble.com.
>>> 
>> 
>> 
>> 
> 
> 

-- 
View this message in context: 
http://old.nabble.com/Duplex-and-network-fault.-tp29205793p29236964.html
Sent from the ActiveMQ - User mailing list archive at Nabble.com.

Reply via email to