diff options
author | jmagne <jmagne@c9f7a03b-bd48-0410-a16d-cbbf54688b0b> | 2010-09-03 23:27:53 +0000 |
---|---|---|
committer | jmagne <jmagne@c9f7a03b-bd48-0410-a16d-cbbf54688b0b> | 2010-09-03 23:27:53 +0000 |
commit | 02f8779c71771c63cdd52da976197d1cc170fb82 (patch) | |
tree | f634e79c5b1a1311500d4362211960bd195a9cdc /pki/base/common/src/com/netscape/cmscore/ldapconn | |
parent | e083e81d526101349f3208507139573425d5aafd (diff) | |
download | pki-02f8779c71771c63cdd52da976197d1cc170fb82.tar.gz pki-02f8779c71771c63cdd52da976197d1cc170fb82.tar.xz pki-02f8779c71771c63cdd52da976197d1cc170fb82.zip |
Fix Bug 503838 - rhcs71-80 external publishing ldap connection pools not reliable - improve connections or discovery.
git-svn-id: svn+ssh://svn.fedorahosted.org/svn/pki/trunk@1263 c9f7a03b-bd48-0410-a16d-cbbf54688b0b
Diffstat (limited to 'pki/base/common/src/com/netscape/cmscore/ldapconn')
-rw-r--r-- | pki/base/common/src/com/netscape/cmscore/ldapconn/LdapBoundConnFactory.java | 51 |
1 files changed, 47 insertions, 4 deletions
diff --git a/pki/base/common/src/com/netscape/cmscore/ldapconn/LdapBoundConnFactory.java b/pki/base/common/src/com/netscape/cmscore/ldapconn/LdapBoundConnFactory.java index f5709222e..31e3dca1c 100644 --- a/pki/base/common/src/com/netscape/cmscore/ldapconn/LdapBoundConnFactory.java +++ b/pki/base/common/src/com/netscape/cmscore/ldapconn/LdapBoundConnFactory.java @@ -230,7 +230,7 @@ public class LdapBoundConnFactory implements ILdapBoundConnFactory { * makes the minumum number of connections */ private void makeMinimum() throws ELdapException { - if (mMasterConn == null) + if (mMasterConn == null || mMasterConn.isConnected() == false) return; int increment; @@ -307,9 +307,22 @@ public class LdapBoundConnFactory implements ILdapBoundConnFactory { throws ELdapException { boolean waited = false; - if (mMasterConn == null) { - makeConnection(true); + CMS.debug("In LdapBoundConnFactory::getConn()"); + if(mMasterConn != null) + CMS.debug("masterConn is connected: " + mMasterConn.isConnected()); + else + CMS.debug("masterConn is null."); + + if (mMasterConn == null || !mMasterConn.isConnected()) { + try { + makeConnection(true); + } catch (ELdapException e) { + mMasterConn = null; + CMS.debug("Can't create master connection in LdapBoundConnFactory::getConn! " + e.toString()); + throw e; + } } + if (mNumConns == 0) makeMinimum(); if (mNumConns == 0) { @@ -333,7 +346,37 @@ public class LdapBoundConnFactory implements ILdapBoundConnFactory { mNumConns--; LDAPConnection conn = mConns[mNumConns]; - mConns[mNumConns] = null; + boolean isConnected = false; + if(conn != null) { + isConnected = conn.isConnected(); + } + + CMS.debug("getConn: conn is connected " + isConnected); + + //If masterConn is still alive, lets try to bring this one + //back to life + + if((isConnected == false) && (mMasterConn != null) + && (mMasterConn.isConnected() == true)) { + CMS.debug("Attempt to bring back down connection."); + + if(doCloning == true) { + mConns[mNumConns] = (BoundConnection) mMasterConn.clone(); + } + else { + try { + mConns[mNumConns] = (BoundConnection) makeNewConnection(true); + } + catch (ELdapException e) { + mConns[mNumConns] = null; + } + } + conn = mConns[mNumConns]; + + CMS.debug("Re-animated connection: " + conn); + } + + mConns[mNumConns] = null; if (waited) { log(ILogger.LL_WARN, |