summaryrefslogtreecommitdiffstats
path: root/pki/base/common/src/com/netscape/cmscore/ldapconn
diff options
context:
space:
mode:
authorjmagne <jmagne@c9f7a03b-bd48-0410-a16d-cbbf54688b0b>2010-09-03 23:27:53 +0000
committerjmagne <jmagne@c9f7a03b-bd48-0410-a16d-cbbf54688b0b>2010-09-03 23:27:53 +0000
commit02f8779c71771c63cdd52da976197d1cc170fb82 (patch)
treef634e79c5b1a1311500d4362211960bd195a9cdc /pki/base/common/src/com/netscape/cmscore/ldapconn
parente083e81d526101349f3208507139573425d5aafd (diff)
downloadpki-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.java51
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,