This is an automated email from the ASF dual-hosted git repository.

dsmiley 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 9ae053218b9 SOLR-17564 Assign.java: remove old back-compat logic 
(#2871)
9ae053218b9 is described below

commit 9ae053218b9398fb5335a9b398cc359ceb10c8f7
Author: pjmcarthur <[email protected]>
AuthorDate: Fri Nov 22 13:04:22 2024 -0800

    SOLR-17564 Assign.java: remove old back-compat logic (#2871)
    
    Remove code in Assign.java that was required for compatibility with 
collections created before 7.0
    Assign is part of SolrCloud's replica naming and node assignment logic.
    
    Co-authored-by: pmcarthur-apache <[email protected]>
---
 solr/CHANGES.txt                                   |   2 +
 .../apache/solr/cloud/api/collections/Assign.java  |  77 ++-----------
 .../cloud/api/collections/CreateCollectionCmd.java |   4 +-
 .../cloud/AssignBackwardCompatibilityTest.java     | 126 ---------------------
 4 files changed, 12 insertions(+), 197 deletions(-)

diff --git a/solr/CHANGES.txt b/solr/CHANGES.txt
index 1ddedd3ec42..28660398656 100644
--- a/solr/CHANGES.txt
+++ b/solr/CHANGES.txt
@@ -91,6 +91,8 @@ Deprecation Removals
 * SOLR-17256: Previously deprecated `SolrRequest` methods `setBasePath` and 
`getBasePath` have been removed.  SolrJ users
   wishing to temporarily override an HTTP client's base URL may use 
`Http2SolrClient.requestWithBaseUrl` instead. (Jason Gerlowski)
 
+* SOLR-17564: Remove code in Assign used for backwards compatibility with 
Collections created prior to 7.0 (Paul McArthur)
+
 Dependency Upgrades
 ---------------------
 (No changes)
diff --git 
a/solr/core/src/java/org/apache/solr/cloud/api/collections/Assign.java 
b/solr/core/src/java/org/apache/solr/cloud/api/collections/Assign.java
index 1d7d3a4087d..13caeea36ec 100644
--- a/solr/core/src/java/org/apache/solr/cloud/api/collections/Assign.java
+++ b/solr/core/src/java/org/apache/solr/cloud/api/collections/Assign.java
@@ -17,7 +17,6 @@
 package org.apache.solr.cloud.api.collections;
 
 import static 
org.apache.solr.cloud.api.collections.CollectionHandlingUtils.CREATE_NODE_SET;
-import static org.apache.solr.common.cloud.ZkStateReader.CORE_NAME_PROP;
 
 import java.io.IOException;
 import java.lang.invoke.MethodHandles;
@@ -70,8 +69,7 @@ public class Assign {
     return ZkStateReader.COLLECTIONS_ZKNODE + "/" + collection + "/counter";
   }
 
-  public static int incAndGetId(
-      DistribStateManager stateManager, String collection, int defaultValue) {
+  public static int incAndGetId(DistribStateManager stateManager, String 
collection) {
     String path = ZkStateReader.COLLECTIONS_ZKNODE + "/" + collection;
     try {
       if (!stateManager.hasData(path)) {
@@ -84,8 +82,7 @@ public class Assign {
       path += "/counter";
       if (!stateManager.hasData(path)) {
         try {
-          stateManager.createData(
-              path, NumberUtils.intToBytes(defaultValue), 
CreateMode.PERSISTENT);
+          stateManager.createData(path, NumberUtils.intToBytes(0), 
CreateMode.PERSISTENT);
         } catch (AlreadyExistsException e) {
           // it's okay if another beats us creating the node
         }
@@ -116,7 +113,7 @@ public class Assign {
         stateManager.setData(path, bytes, version);
         return currentId;
       } catch (BadVersionException e) {
-        continue;
+        // Outdated version, try again
       } catch (IOException | KeeperException e) {
         throw new SolrException(
             SolrException.ErrorCode.SERVER_ERROR,
@@ -134,16 +131,7 @@ public class Assign {
 
   public static String assignCoreNodeName(
       DistribStateManager stateManager, DocCollection collection) {
-    // for backward compatibility;
-    int defaultValue = defaultCounterValue(collection, false);
-    String coreNodeName =
-        "core_node" + incAndGetId(stateManager, collection.getName(), 
defaultValue);
-    while (collection.getReplica(coreNodeName) != null) {
-      // there is wee chance that, the new coreNodeName id not totally unique,
-      // but this will be guaranteed unique for new collections
-      coreNodeName = "core_node" + incAndGetId(stateManager, 
collection.getName(), defaultValue);
-    }
-    return coreNodeName;
+    return "core_node" + incAndGetId(stateManager, collection.getName());
   }
 
   /**
@@ -204,63 +192,16 @@ public class Assign {
         replicaNum);
   }
 
-  private static int defaultCounterValue(
-      DocCollection collection, boolean newCollection, String shard) {
-    if (newCollection || collection == null) return 0;
-
-    int defaultValue;
-    if (collection.getSlice(shard) != null && 
collection.getSlice(shard).getReplicas().isEmpty()) {
-      return 0;
-    } else {
-      defaultValue = collection.getReplicas().size() * 2;
-    }
-
-    if (collection.getReplicationFactor() != null) {
-      // numReplicas and replicationFactor * numSlices can be not equals,
-      // in case of many addReplicas or deleteReplicas are executed
-      defaultValue =
-          Math.max(defaultValue, collection.getReplicationFactor() * 
collection.getSlices().size());
-    }
-    return defaultValue;
-  }
-
-  private static int defaultCounterValue(DocCollection collection, boolean 
newCollection) {
-    if (newCollection) return 0;
-    int defaultValue = collection.getReplicas().size();
-    return defaultValue;
-  }
-
   public static String buildSolrCoreName(
-      DistribStateManager stateManager,
-      String collectionName,
-      DocCollection collection,
-      String shard,
-      Replica.Type type,
-      boolean newCollection) {
-
-    int defaultValue = defaultCounterValue(collection, newCollection, shard);
-    int replicaNum = incAndGetId(stateManager, collectionName, defaultValue);
-    String coreName = buildSolrCoreName(collectionName, shard, type, 
replicaNum);
-    while (collection != null && existCoreName(coreName, 
collection.getSlice(shard))) {
-      replicaNum = incAndGetId(stateManager, collectionName, defaultValue);
-      coreName = buildSolrCoreName(collectionName, shard, type, replicaNum);
-    }
-    return coreName;
+      DistribStateManager stateManager, String collectionName, String shard, 
Replica.Type type) {
+
+    int replicaNum = incAndGetId(stateManager, collectionName);
+    return buildSolrCoreName(collectionName, shard, type, replicaNum);
   }
 
   public static String buildSolrCoreName(
       DistribStateManager stateManager, DocCollection collection, String 
shard, Replica.Type type) {
-    return buildSolrCoreName(stateManager, collection.getName(), collection, 
shard, type, false);
-  }
-
-  private static boolean existCoreName(String coreName, Slice slice) {
-    if (slice == null) return false;
-    for (Replica replica : slice.getReplicas()) {
-      if (coreName.equals(replica.getStr(CORE_NAME_PROP))) {
-        return true;
-      }
-    }
-    return false;
+    return buildSolrCoreName(stateManager, collection.getName(), shard, type);
   }
 
   public static List<String> getLiveOrLiveAndCreateNodeSetList(
diff --git 
a/solr/core/src/java/org/apache/solr/cloud/api/collections/CreateCollectionCmd.java
 
b/solr/core/src/java/org/apache/solr/cloud/api/collections/CreateCollectionCmd.java
index 5592303580a..2b8a5007bf1 100644
--- 
a/solr/core/src/java/org/apache/solr/cloud/api/collections/CreateCollectionCmd.java
+++ 
b/solr/core/src/java/org/apache/solr/cloud/api/collections/CreateCollectionCmd.java
@@ -293,10 +293,8 @@ public class CreateCollectionCmd implements 
CollApiCmds.CollectionApiCommand {
             Assign.buildSolrCoreName(
                 ccc.getSolrCloudManager().getDistribStateManager(),
                 collectionName,
-                
ccc.getSolrCloudManager().getClusterState().getCollectionOrNull(collectionName),
                 replicaPosition.shard,
-                replicaPosition.type,
-                true);
+                replicaPosition.type);
         if (log.isDebugEnabled()) {
           log.debug(
               formatString(
diff --git 
a/solr/core/src/test/org/apache/solr/cloud/AssignBackwardCompatibilityTest.java 
b/solr/core/src/test/org/apache/solr/cloud/AssignBackwardCompatibilityTest.java
deleted file mode 100644
index 0587fada196..00000000000
--- 
a/solr/core/src/test/org/apache/solr/cloud/AssignBackwardCompatibilityTest.java
+++ /dev/null
@@ -1,126 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one or more
- * contributor license agreements.  See the NOTICE file distributed with
- * this work for additional information regarding copyright ownership.
- * The ASF licenses this file to You under the Apache License, Version 2.0
- * (the "License"); you may not use this file except in compliance with
- * the License.  You may obtain a copy of the License at
- *
- *     http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-package org.apache.solr.cloud;
-
-import java.io.IOException;
-import java.lang.invoke.MethodHandles;
-import java.util.HashSet;
-import java.util.Set;
-import org.apache.solr.client.solrj.SolrServerException;
-import org.apache.solr.client.solrj.request.CollectionAdminRequest;
-import org.apache.solr.client.solrj.response.CollectionAdminResponse;
-import org.apache.solr.common.cloud.DocCollection;
-import org.apache.solr.common.cloud.Replica;
-import org.apache.solr.util.NumberUtils;
-import org.apache.zookeeper.KeeperException;
-import org.apache.zookeeper.data.Stat;
-import org.junit.BeforeClass;
-import org.junit.Test;
-import org.slf4j.Logger;
-import org.slf4j.LoggerFactory;
-
-// TODO Remove in Solr 9.0
-/**
- * Test for backward compatibility when users update from 6.x or 7.0 to 7.1, 
then the counter of
- * collection does not exist in Zk
- */
-public class AssignBackwardCompatibilityTest extends SolrCloudTestCase {
-  private static final Logger log = 
LoggerFactory.getLogger(MethodHandles.lookup().lookupClass());
-
-  private static final String COLLECTION = "collection1";
-
-  @BeforeClass
-  public static void setupCluster() throws Exception {
-    configureCluster(4)
-        .addConfig(
-            "conf1", 
TEST_PATH().resolve("configsets").resolve("cloud-dynamic").resolve("conf"))
-        .configure();
-    CollectionAdminRequest.createCollection(COLLECTION, 1, 
4).process(cluster.getSolrClient());
-    cluster.waitForActiveCollection(COLLECTION, 1, 4);
-  }
-
-  @Test
-  public void test()
-      throws IOException, SolrServerException, KeeperException, 
InterruptedException {
-    Set<String> coreNames = new HashSet<>();
-    Set<String> coreNodeNames = new HashSet<>();
-
-    int numOperations = random().nextInt(15) + 15;
-    int numLiveReplicas = 4;
-
-    boolean clearedCounter = false;
-    for (int i = 0; i < numOperations; i++) {
-      if (log.isInfoEnabled()) {
-        log.info("Collection counter={} i={}", getCounter(), i);
-      }
-      boolean deleteReplica = random().nextBoolean() && numLiveReplicas > 1;
-      // No need to clear counter more than one time
-      if (random().nextBoolean() && i > 5 && !clearedCounter) {
-        log.info("Clear collection counter");
-        // clear counter
-        cluster.getZkClient().delete("/collections/" + COLLECTION + 
"/counter", -1, true);
-        clearedCounter = true;
-      }
-      if (deleteReplica) {
-        cluster.waitForActiveCollection(COLLECTION, 1, numLiveReplicas);
-        DocCollection dc = getCollectionState(COLLECTION);
-        Replica replica =
-            getRandomReplica(dc.getSlice("shard1"), (r) -> r.getState() == 
Replica.State.ACTIVE);
-        CollectionAdminRequest.deleteReplica(COLLECTION, "shard1", 
replica.getName())
-            .process(cluster.getSolrClient());
-        coreNames.remove(replica.getCoreName());
-        numLiveReplicas--;
-      } else {
-        CollectionAdminResponse response =
-            CollectionAdminRequest.addReplicaToShard(COLLECTION, "shard1")
-                .process(cluster.getSolrClient());
-        assertTrue(response.isSuccess());
-        String coreName = 
response.getCollectionCoresStatus().keySet().iterator().next();
-        assertFalse(
-            "Core name is not unique coreName=" + coreName + " " + coreNames,
-            coreNames.contains(coreName));
-        coreNames.add(coreName);
-        numLiveReplicas++;
-        cluster.waitForActiveCollection(COLLECTION, 1, numLiveReplicas);
-
-        Replica newReplica =
-            getCollectionState(COLLECTION).getReplicas().stream()
-                .filter(r -> r.getCoreName().equals(coreName))
-                .findAny()
-                .get();
-        String coreNodeName = newReplica.getName();
-        assertFalse("Core node name is not unique", 
coreNodeNames.contains(coreName));
-        coreNodeNames.add(coreNodeName);
-      }
-    }
-  }
-
-  private int getCounter() throws InterruptedException {
-    try {
-      byte[] data =
-          cluster
-              .getZkClient()
-              .getData("/collections/" + COLLECTION + "/counter", null, new 
Stat(), true);
-      int count = NumberUtils.bytesToInt(data);
-      if (count < 0) throw new AssertionError("Found negative collection 
counter " + count);
-      return count;
-    } catch (KeeperException e) {
-      return -1;
-    }
-  }
-}

Reply via email to