You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@lucene.apache.org by ma...@apache.org on 2021/02/25 15:05:15 UTC

[lucene-solr] 02/02: @1396 Finish not retrying on session expiration in some key spots.

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

markrmiller pushed a commit to branch reference_impl_dev
in repository https://gitbox.apache.org/repos/asf/lucene-solr.git

commit 27ca69752bf86c3ac78e0a523e628b40c33bc3bb
Author: markrmiller@gmail.com <ma...@gmail.com>
AuthorDate: Thu Feb 25 09:04:16 2021 -0600

    @1396 Finish not retrying on session expiration in some key spots.
    
    Took 11 minutes
---
 .../src/java/org/apache/solr/cloud/Overseer.java   |  2 +-
 .../java/org/apache/solr/cloud/ZkController.java   |  4 +-
 .../org/apache/solr/cloud/ZkDistributedQueue.java  | 46 ++++------------------
 .../apache/solr/cloud/overseer/ZkStateWriter.java  |  9 +++--
 .../java/org/apache/solr/core/CoreContainer.java   |  9 -----
 .../solr/client/solrj/cloud/DistributedQueue.java  |  7 +---
 .../org/apache/solr/common/cloud/SolrZkClient.java |  2 +-
 7 files changed, 18 insertions(+), 61 deletions(-)

diff --git a/solr/core/src/java/org/apache/solr/cloud/Overseer.java b/solr/core/src/java/org/apache/solr/cloud/Overseer.java
index 52e5d48..1304bb9 100644
--- a/solr/core/src/java/org/apache/solr/cloud/Overseer.java
+++ b/solr/core/src/java/org/apache/solr/cloud/Overseer.java
@@ -723,7 +723,7 @@ public class Overseer implements SolrCloseable {
   }
 
   public void offerStateUpdate(byte[] data) throws KeeperException, InterruptedException {
-    getStateUpdateQueue().offer(data);
+    getStateUpdateQueue().offer(data, false);
   }
 
   public boolean processQueueItem(ZkNodeProps message) throws InterruptedException {
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 fcec460..9e6d08b 100644
--- a/solr/core/src/java/org/apache/solr/cloud/ZkController.java
+++ b/solr/core/src/java/org/apache/solr/cloud/ZkController.java
@@ -702,7 +702,7 @@ public class ZkController implements Closeable, Runnable {
           props.put(COLLECTION_PROP, cd.getCollectionName());
           props.put(SHARD_ID_PROP, shard.getName());
           props.put(REPLICA_PROP, cd.getName());
-          getOverseerCollectionQueue().offer(Utils.toJSON(new ZkNodeProps(props)));
+          getOverseerCollectionQueue().offer(Utils.toJSON(new ZkNodeProps(props)), false);
 
           props.clear();
           props.put(Overseer.QUEUE_OPERATION, "addreplica");
@@ -710,7 +710,7 @@ public class ZkController implements Closeable, Runnable {
           props.put(SHARD_ID_PROP, shard.getName());
           props.put(ZkStateReader.REPLICA_TYPE, cd.getCloudDescriptor().getReplicaType().name().toUpperCase(Locale.ROOT));
           props.put(CoreAdminParams.NODE, getNodeName());
-          getOverseerCollectionQueue().offer(Utils.toJSON(new ZkNodeProps(props)));
+          getOverseerCollectionQueue().offer(Utils.toJSON(new ZkNodeProps(props)), false);
         } catch (Exception e) {
           ParWork.propagateInterrupt(e);
           // Exceptions are not bubbled up. giveupLeadership is best effort, and is only called in case of some other
diff --git a/solr/core/src/java/org/apache/solr/cloud/ZkDistributedQueue.java b/solr/core/src/java/org/apache/solr/cloud/ZkDistributedQueue.java
index c3567b2..592674e 100644
--- a/solr/core/src/java/org/apache/solr/cloud/ZkDistributedQueue.java
+++ b/solr/core/src/java/org/apache/solr/cloud/ZkDistributedQueue.java
@@ -133,47 +133,15 @@ public class ZkDistributedQueue implements DistributedQueue {
    * will be immediately visible when this method returns.
    */
   @Override
-  public void offer(byte[] data) throws KeeperException, InterruptedException {
-//    CountDownLatch latch = new CountDownLatch(1);
-//    Stat stat = zookeeper.exists(dir, new Watcher() {
-//      @Override
-//      public void process(WatchedEvent event) {
-//        if (event.getType() == Watcher.Event.EventType.NodeChildrenChanged) {
-//          try {
-//            Stat stat = zookeeper.exists(dir, this);
-//            if (stat.getNumChildren() <= 30) {
-//              latch.countDown();
-//              try {
-//                zookeeper.getSolrZooKeeper().removeWatches(dir, this, WatcherType.Any, true);
-//              } catch (Exception e) {
-//                log.info("could not remove watch {} {}", e.getClass().getSimpleName(), e.getMessage());
-//              }
-//            }
-//          } catch (Exception e) {
-//            latch.countDown();
-//            log.error("", e);
-//          }
-//          return;
-//        }
-//        try {
-//          Stat stat2 = zookeeper.exists(dir, this);
-//          if (stat2.getNumChildren() <= 30) {
-//            latch.countDown();
-//          }
-//        } catch (Exception e) {
-//          latch.countDown();
-//          log.error("", e);
-//        }
-//      }
-//    });
-//
-//    if (stat.getNumChildren() > 15) {
-//      latch.await();
-//    }
+  public void offer(byte[] data, boolean retryOnExpiration) throws KeeperException, InterruptedException {
 
     // TODO - if too many items on the queue, just block
-    zookeeper.create(dir + "/" + PREFIX, data, CreateMode.PERSISTENT_SEQUENTIAL, true);
-    return;
+    zookeeper.create(dir + "/" + PREFIX, data, CreateMode.PERSISTENT_SEQUENTIAL, true, retryOnExpiration);
+  }
+
+  @Override
+  public void offer(byte[] data) throws KeeperException, InterruptedException {
+    offer(data, true);
   }
 
   public Stats getZkStats() {
diff --git a/solr/core/src/java/org/apache/solr/cloud/overseer/ZkStateWriter.java b/solr/core/src/java/org/apache/solr/cloud/overseer/ZkStateWriter.java
index b68ce33..349e7c9 100644
--- a/solr/core/src/java/org/apache/solr/cloud/overseer/ZkStateWriter.java
+++ b/solr/core/src/java/org/apache/solr/cloud/overseer/ZkStateWriter.java
@@ -290,10 +290,11 @@ public class ZkStateWriter {
             }
 
             break;
-          //          case ADDROUTINGRULE:
-          //            return new SliceMutator(cloudManager).addRoutingRule(clusterState, message);
-          //          case REMOVEROUTINGRULE:
-          //            return new SliceMutator(cloudManager).removeRoutingRule(clusterState, message);
+            // MRM TODO:
+//          case ADDROUTINGRULE:
+//            return new SliceMutator(cloudManager).addRoutingRule(clusterState, message);
+//          case REMOVEROUTINGRULE:
+//            return new SliceMutator(cloudManager).removeRoutingRule(clusterState, message);
           case UPDATESHARDSTATE:  // MRM TODO: look at how we handle this and make it so it can use StatePublisher
             String collection = message.getStr("collection");
             message.getProperties().remove("collection");
diff --git a/solr/core/src/java/org/apache/solr/core/CoreContainer.java b/solr/core/src/java/org/apache/solr/core/CoreContainer.java
index f1c27da..408752a 100644
--- a/solr/core/src/java/org/apache/solr/core/CoreContainer.java
+++ b/solr/core/src/java/org/apache/solr/core/CoreContainer.java
@@ -2048,15 +2048,6 @@ public class CoreContainer implements Closeable {
     }
   }
 
-  void deleteCoreNode(String collectionName, String nodeName, String baseUrl, String core) throws Exception {
-    ZkNodeProps m = new ZkNodeProps(
-        Overseer.QUEUE_OPERATION, OverseerAction.DELETECORE.toLower(),
-        ZkStateReader.CORE_NAME_PROP, core,
-        ZkStateReader.NODE_NAME_PROP, nodeName,
-        ZkStateReader.COLLECTION_PROP, collectionName);
-    getZkController().getOverseer().offerStateUpdate(Utils.toJSON(m));
-  }
-
   public void rename(String name, String toName) {
     SolrIdentifierValidator.validateCoreName(toName);
     try (SolrCore core = getCore(name)) {
diff --git a/solr/solrj/src/java/org/apache/solr/client/solrj/cloud/DistributedQueue.java b/solr/solrj/src/java/org/apache/solr/client/solrj/cloud/DistributedQueue.java
index e5d6fed..1d6f04c 100644
--- a/solr/solrj/src/java/org/apache/solr/client/solrj/cloud/DistributedQueue.java
+++ b/solr/solrj/src/java/org/apache/solr/client/solrj/cloud/DistributedQueue.java
@@ -16,11 +16,7 @@
  */
 package org.apache.solr.client.solrj.cloud;
 
-import java.util.Collection;
 import java.util.Map;
-import java.util.function.Predicate;
-
-import org.apache.solr.common.util.Pair;
 
 /**
  * Distributed queue component. Methods largely follow those in {@link java.util.Queue}.
@@ -29,10 +25,11 @@ public interface DistributedQueue {
 
   void offer(byte[] data) throws Exception;
 
+  void offer(byte[] data, boolean retryOnExpiration) throws Exception;
+
   /**
    * Retrieve statistics about the queue size, operations and their timings.
    */
   Map<String, Object> getStats();
 
-
 }
diff --git a/solr/solrj/src/java/org/apache/solr/common/cloud/SolrZkClient.java b/solr/solrj/src/java/org/apache/solr/common/cloud/SolrZkClient.java
index ebc0232..a4502c6 100644
--- a/solr/solrj/src/java/org/apache/solr/common/cloud/SolrZkClient.java
+++ b/solr/solrj/src/java/org/apache/solr/common/cloud/SolrZkClient.java
@@ -461,7 +461,7 @@ public class SolrZkClient implements Closeable {
     List<ACL> acls = zkACLProvider.getACLsToAdd(path);
     ZooKeeper keeper = connManager.getKeeper();
     if (retryOnConnLoss) {
-      return ZkCmdExecutor.retryOperation(zkCmdExecutor, () -> keeper.create(path, data, acls, createMode));
+      return ZkCmdExecutor.retryOperation(zkCmdExecutor, () -> keeper.create(path, data, acls, createMode), retryOnSessionExp);
     } else {
       return keeper.create(path, data, acls, createMode);
     }