[
https://issues.apache.org/jira/browse/CAMEL-9035?page=com.atlassian.jira.plugin.system.issuetabpanels:all-tabpanel
]
Claus Ibsen resolved CAMEL-9035.
--------------------------------
Resolution: Fixed
Fix Version/s: (was: 2.15.2)
2.15.3
Thanks for the patch.
> 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
> Assignee: Claus Ibsen
> Priority: Minor
> Labels: patch
> Fix For: 2.16.0, 2.15.3
>
>
> 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)