You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@solr.apache.org by kr...@apache.org on 2023/03/24 17:16:44 UTC
[solr] branch main updated: SOLR-15446: Fix three off-by-one ArrayList initialCapacity choices when calling ZooKeeper.multi API. (#156)
This is an automated email from the ASF dual-hosted git repository.
krisden pushed a commit to branch main
in repository https://gitbox.apache.org/repos/asf/solr.git
The following commit(s) were added to refs/heads/main by this push:
new 07286c09119 SOLR-15446: Fix three off-by-one ArrayList initialCapacity choices when calling ZooKeeper.multi API. (#156)
07286c09119 is described below
commit 07286c09119b7a86d886218467f482acaeb75a2a
Author: Christine Poerschke <cp...@apache.org>
AuthorDate: Fri Mar 24 17:16:37 2023 +0000
SOLR-15446: Fix three off-by-one ArrayList initialCapacity choices when calling ZooKeeper.multi API. (#156)
Co-authored-by: Kevin Risden <kr...@apache.org>
---
.../solr/cloud/ShardLeaderElectionContextBase.java | 6 ++---
.../java/org/apache/solr/cloud/ZkController.java | 26 ++++++++++------------
2 files changed, 14 insertions(+), 18 deletions(-)
diff --git a/solr/core/src/java/org/apache/solr/cloud/ShardLeaderElectionContextBase.java b/solr/core/src/java/org/apache/solr/cloud/ShardLeaderElectionContextBase.java
index c38521bf35c..b99764bdc42 100644
--- a/solr/core/src/java/org/apache/solr/cloud/ShardLeaderElectionContextBase.java
+++ b/solr/core/src/java/org/apache/solr/cloud/ShardLeaderElectionContextBase.java
@@ -18,7 +18,6 @@
package org.apache.solr.cloud;
import java.lang.invoke.MethodHandles;
-import java.util.ArrayList;
import java.util.List;
import org.apache.solr.cloud.overseer.OverseerAction;
import org.apache.solr.common.SolrException;
@@ -110,10 +109,9 @@ class ShardLeaderElectionContextBase extends ElectionContext {
"Removing leader registration node on cancel: {} {}",
leaderPath,
leaderZkNodeParentVersion);
- List<Op> ops = new ArrayList<>(2);
String parent = ZkMaintenanceUtils.getZkParent(leaderPath);
- ops.add(Op.check(parent, leaderZkNodeParentVersion));
- ops.add(Op.delete(leaderPath, -1));
+ List<Op> ops =
+ List.of(Op.check(parent, leaderZkNodeParentVersion), Op.delete(leaderPath, -1));
zkClient.multi(ops, true);
} catch (InterruptedException e) {
throw e;
diff --git a/solr/core/src/java/org/apache/solr/cloud/ZkController.java b/solr/core/src/java/org/apache/solr/cloud/ZkController.java
index 246081bb7cc..a44cf3e8a6d 100644
--- a/solr/core/src/java/org/apache/solr/cloud/ZkController.java
+++ b/solr/core/src/java/org/apache/solr/cloud/ZkController.java
@@ -1217,7 +1217,8 @@ public class ZkController implements Closeable {
String nodeName = getNodeName();
String nodePath = ZkStateReader.LIVE_NODES_ZKNODE + "/" + nodeName;
log.info("Register node as live in ZooKeeper:{}", nodePath);
- List<Op> ops = new ArrayList<>(2);
+ Map<NodeRoles.Role, String> roles = cc.nodeRoles.getRoles();
+ List<Op> ops = new ArrayList<>(roles.size() + 1);
ops.add(
Op.create(
nodePath,
@@ -1226,16 +1227,14 @@ public class ZkController implements Closeable {
CreateMode.EPHEMERAL));
// Create the roles node as well
- cc.nodeRoles
- .getRoles()
- .forEach(
- (role, mode) ->
- ops.add(
- Op.create(
- NodeRoles.getZNodeForRoleMode(role, mode) + "/" + nodeName,
- null,
- zkClient.getZkACLProvider().getACLsToAdd(nodePath),
- CreateMode.EPHEMERAL)));
+ roles.forEach(
+ (role, mode) ->
+ ops.add(
+ Op.create(
+ NodeRoles.getZNodeForRoleMode(role, mode) + "/" + nodeName,
+ null,
+ zkClient.getZkACLProvider().getACLsToAdd(nodePath),
+ CreateMode.EPHEMERAL)));
zkClient.multi(ops, true);
}
@@ -1247,8 +1246,7 @@ public class ZkController implements Closeable {
String nodeName = getNodeName();
String nodePath = ZkStateReader.LIVE_NODES_ZKNODE + "/" + nodeName;
log.info("Remove node as live in ZooKeeper:{}", nodePath);
- List<Op> ops = new ArrayList<>(2);
- ops.add(Op.delete(nodePath, -1));
+ List<Op> ops = List.of(Op.delete(nodePath, -1));
try {
zkClient.multi(ops, true);
@@ -2947,7 +2945,7 @@ public class ZkController implements Closeable {
&& processedCollections.add(collName)
&& (coll = zkStateReader.getCollection(collName)) != null
&& coll.isPerReplicaState()) {
- final List<String> replicasToDown = new ArrayList<>();
+ final List<String> replicasToDown = new ArrayList<>(coll.getSlicesMap().size());
coll.forEachReplica(
(s, replica) -> {
if (replica.getNodeName().equals(nodeName)) {