[ https://issues.apache.org/jira/browse/CAMEL-9035?page=com.atlassian.jira.plugin.system.issuetabpanels:all-tabpanel ]
Claus Ibsen updated CAMEL-9035: ------------------------------- Fix Version/s: 2.16.0 > unbind smpp connection bug > --------------------------- > > Key: CAMEL-9035 > URL: https://issues.apache.org/jira/browse/CAMEL-9035 > Project: Camel > Issue Type: Bug > Components: camel-smpp > Affects Versions: 2.14.0, 2.15.2 > Reporter: imran raza khan > Labels: patch > Fix For: 2.15.2, 2.16.0 > > > Suppose SMSC allowed one connection to client and due to any reason if > session.unbindAndClose failed it will set session to null and dont retry to > unbind. > Connection/Session will remain open on SMSC till its TransactionTimeOut, > mostly SMSc Admin set it to 5 to 10 mins. > Following are snippet of org.apache.camel.component.smpp.SmppProducer and > details are like > 1- if for any reason Camel try to unbind connection and it got failed below > code print log and set session=null in both success/fail cases. > 2- After sending unbind it will try to reconnect. > 3- As SMSc allowed 1 connection which was not unbinded successfull it will > not allowed second connection so reconnect will get failed. > 4- Camel call closesession on reconnection failure and will verify if session > != null, as session is already null so this code will not send unbind again > and apache camel will not able to get connection from SMSc until timeout > happen on SMSc and this will results in 10 mins outage. > If we change closeSession() like below > current: > {code} > private void closeSession() { > if (session != null) { > > session.removeSessionStateListener(this.internalSessionStateListener); > try { > Thread.sleep(1000); > session.unbindAndClose(); > } catch (Exception e) { > LOG.warn("Could not close session " + session); > } > session = null; > } > } > {code} > Suggested: > {code} > private void closeSession() { > if (session != null) { > > session.removeSessionStateListener(this.internalSessionStateListener); > try { > Thread.sleep(1000); > session.unbindAndClose(); > session = null; // if we put here then it will retry for > unbind > } catch (Exception e) { > LOG.warn("Could not close session " + session); > } > session = null; // remove his line > } > } > {code} -- This message was sent by Atlassian JIRA (v6.3.4#6332)