diff --git a/solr/core/src/java/org/apache/solr/cloud/AddReplicaCmd.java b/solr/core/src/java/org/apache/solr/cloud/AddReplicaCmd.java index e6e7ae766f4..b5101f57528 100644 --- a/solr/core/src/java/org/apache/solr/cloud/AddReplicaCmd.java +++ b/solr/core/src/java/org/apache/solr/cloud/AddReplicaCmd.java @@ -222,7 +222,7 @@ public class AddReplicaCmd implements OverseerCollectionMessageHandler.Cmd { ocmh.waitForCoreNodeName(collection, fnode, fcoreName); if (policyVersionAfter.get() > -1) { PolicyHelper.REF_VERSION.remove(); - ocmh.policySessionRef.decref(policyVersionAfter.get()); + PolicyHelper.getPolicySessionRef(ocmh.overseer.getSolrCloudManager()).decref(policyVersionAfter.get()); } if (onComplete != null) onComplete.run(); }; diff --git a/solr/core/src/java/org/apache/solr/cloud/Assign.java b/solr/core/src/java/org/apache/solr/cloud/Assign.java index ad4ffead9d0..c7bd577eeda 100644 --- a/solr/core/src/java/org/apache/solr/cloud/Assign.java +++ b/solr/core/src/java/org/apache/solr/cloud/Assign.java @@ -294,14 +294,13 @@ public class Assign { if (message.getStr(CREATE_NODE_SET) == null) nodeList = Collections.emptyList();// unless explicitly specified do not pass node list to Policy synchronized (ocmh) { - PolicyHelper.SESSION_REF.set(ocmh.policySessionRef); + PolicyHelper.SESSION_REF.set(PolicyHelper.getPolicySessionRef(ocmh.overseer.getSolrCloudManager())); try { return getPositionsUsingPolicy(collectionName, shardNames, numNrtReplicas, numTlogReplicas, numPullReplicas, policyName, ocmh.overseer.getSolrCloudManager(), nodeList); } finally { PolicyHelper.SESSION_REF.remove(); } - } } } diff --git a/solr/core/src/java/org/apache/solr/cloud/CreateCollectionCmd.java b/solr/core/src/java/org/apache/solr/cloud/CreateCollectionCmd.java index 3925a7e9988..94d7d9ff449 100644 --- a/solr/core/src/java/org/apache/solr/cloud/CreateCollectionCmd.java +++ b/solr/core/src/java/org/apache/solr/cloud/CreateCollectionCmd.java @@ -318,7 +318,7 @@ public class CreateCollectionCmd implements Cmd { } catch (Exception ex) { throw new SolrException(SolrException.ErrorCode.SERVER_ERROR, null, ex); } finally { - PolicyHelper.clearFlagAndDecref(ocmh.policySessionRef); + PolicyHelper.clearFlagAndDecref(PolicyHelper.getPolicySessionRef(ocmh.overseer.getSolrCloudManager())); } } diff --git a/solr/core/src/java/org/apache/solr/cloud/CreateShardCmd.java b/solr/core/src/java/org/apache/solr/cloud/CreateShardCmd.java index 03fc0458d98..73ac7ffc2ea 100644 --- a/solr/core/src/java/org/apache/solr/cloud/CreateShardCmd.java +++ b/solr/core/src/java/org/apache/solr/cloud/CreateShardCmd.java @@ -164,7 +164,7 @@ public class CreateShardCmd implements Cmd { }); } } finally { - PolicyHelper.clearFlagAndDecref(ocmh.policySessionRef); + PolicyHelper.clearFlagAndDecref(PolicyHelper.getPolicySessionRef(ocmh.overseer.getSolrCloudManager())); } log.debug("Waiting for create shard action to complete"); diff --git a/solr/core/src/java/org/apache/solr/cloud/OverseerCollectionMessageHandler.java b/solr/core/src/java/org/apache/solr/cloud/OverseerCollectionMessageHandler.java index 12bc49febe5..9a9c949dd8a 100644 --- a/solr/core/src/java/org/apache/solr/cloud/OverseerCollectionMessageHandler.java +++ b/solr/core/src/java/org/apache/solr/cloud/OverseerCollectionMessageHandler.java @@ -36,7 +36,6 @@ import org.apache.commons.lang.StringUtils; import org.apache.solr.client.solrj.SolrResponse; import org.apache.solr.client.solrj.SolrServerException; import org.apache.solr.client.solrj.cloud.DistributedQueue; -import org.apache.solr.client.solrj.cloud.autoscaling.PolicyHelper; import org.apache.solr.client.solrj.impl.HttpSolrClient; import org.apache.solr.client.solrj.impl.HttpSolrClient.RemoteSolrException; import org.apache.solr.client.solrj.request.AbstractUpdateRequest; @@ -971,7 +970,6 @@ public class OverseerCollectionMessageHandler implements OverseerMessageHandler, ); } - public final PolicyHelper.SessionRef policySessionRef = new PolicyHelper.SessionRef(); @Override public void close() throws IOException { diff --git a/solr/core/src/java/org/apache/solr/cloud/RestoreCmd.java b/solr/core/src/java/org/apache/solr/cloud/RestoreCmd.java index a1990b441e5..1f9d64a4c01 100644 --- a/solr/core/src/java/org/apache/solr/cloud/RestoreCmd.java +++ b/solr/core/src/java/org/apache/solr/cloud/RestoreCmd.java @@ -350,7 +350,7 @@ public class RestoreCmd implements OverseerCollectionMessageHandler.Cmd { log.info("Completed restoring collection={} backupName={}", restoreCollection, backupName); } finally { - PolicyHelper.clearFlagAndDecref(ocmh.policySessionRef); + PolicyHelper.clearFlagAndDecref(PolicyHelper.getPolicySessionRef(ocmh.overseer.getSolrCloudManager())); } } diff --git a/solr/core/src/java/org/apache/solr/cloud/SplitShardCmd.java b/solr/core/src/java/org/apache/solr/cloud/SplitShardCmd.java index 4a91ba58c85..2c1e5d606ad 100644 --- a/solr/core/src/java/org/apache/solr/cloud/SplitShardCmd.java +++ b/solr/core/src/java/org/apache/solr/cloud/SplitShardCmd.java @@ -32,7 +32,6 @@ import org.apache.solr.client.solrj.cloud.autoscaling.PolicyHelper; import org.apache.solr.client.solrj.request.CoreAdminRequest; import org.apache.solr.cloud.OverseerCollectionMessageHandler.Cmd; import org.apache.solr.cloud.overseer.OverseerAction; -import org.apache.solr.common.cloud.ReplicaPosition; import org.apache.solr.common.SolrException; import org.apache.solr.common.cloud.ClusterState; import org.apache.solr.common.cloud.CompositeIdRouter; @@ -40,6 +39,7 @@ import org.apache.solr.common.cloud.DocCollection; import org.apache.solr.common.cloud.DocRouter; import org.apache.solr.common.cloud.PlainIdRouter; import org.apache.solr.common.cloud.Replica; +import org.apache.solr.common.cloud.ReplicaPosition; import org.apache.solr.common.cloud.Slice; import org.apache.solr.common.cloud.ZkNodeProps; import org.apache.solr.common.cloud.ZkStateReader; @@ -513,7 +513,7 @@ public class SplitShardCmd implements Cmd { log.error("Error executing split operation for collection: " + collectionName + " parent shard: " + slice, e); throw new SolrException(SolrException.ErrorCode.SERVER_ERROR, null, e); } finally { - PolicyHelper.clearFlagAndDecref(ocmh.policySessionRef); + PolicyHelper.clearFlagAndDecref(PolicyHelper.getPolicySessionRef(ocmh.overseer.getSolrCloudManager())); } } } diff --git a/solr/solrj/src/java/org/apache/solr/client/solrj/cloud/autoscaling/PolicyHelper.java b/solr/solrj/src/java/org/apache/solr/client/solrj/cloud/autoscaling/PolicyHelper.java index daafb8f7133..5d179b7ba6c 100644 --- a/solr/solrj/src/java/org/apache/solr/client/solrj/cloud/autoscaling/PolicyHelper.java +++ b/solr/solrj/src/java/org/apache/solr/client/solrj/cloud/autoscaling/PolicyHelper.java @@ -223,6 +223,10 @@ public class PolicyHelper { if (refVersion != null) policySessionRef.decref(refVersion); REF_VERSION.remove(); } + public static PolicyHelper.SessionRef getPolicySessionRef(SolrCloudManager cloudManager){ + return (SessionRef) cloudManager.getObjectCache().computeIfAbsent(SessionRef.class.getName(), s -> new SessionRef()); + } + public static ThreadLocal SESSION_REF = new ThreadLocal<>();