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 2020/07/13 14:58:56 UTC

[lucene-solr] branch reference_impl updated (4888bd2 -> ea6476d)

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

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


    from 4888bd2  #111 Fix thread ignore to catch more.
     new 4707645  #112 Try and buff this close speed - can hit a slow case.
     new ea6476d  #112 - Tighten SolrCore leak prevention.

The 2 revisions listed above as "new" are entirely new to this
repository and will be described in separate emails.  The revisions
listed as "add" were already present in the repository and have only
been added to this reference.


Summary of changes:
 .../java/org/apache/solr/core/CoreContainer.java   |  4 +--
 .../src/java/org/apache/solr/core/SolrCores.java   | 11 +++++--
 .../apache/solr/common/cloud/SolrZooKeeper.java    | 36 ++++++++++++++--------
 .../org/apache/zookeeper/ZooKeeperExposed.java     |  4 +++
 4 files changed, 38 insertions(+), 17 deletions(-)


[lucene-solr] 01/02: #112 Try and buff this close speed - can hit a slow case.

Posted by ma...@apache.org.
This is an automated email from the ASF dual-hosted git repository.

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

commit 470764500b7dac7ad443dd1959a7361d156e6680
Author: markrmiller@gmail.com <ma...@gmail.com>
AuthorDate: Mon Jul 13 09:57:40 2020 -0500

    #112 Try and buff this close speed - can hit a slow case.
---
 .../apache/solr/common/cloud/SolrZooKeeper.java    | 36 ++++++++++++++--------
 .../org/apache/zookeeper/ZooKeeperExposed.java     |  4 +++
 2 files changed, 27 insertions(+), 13 deletions(-)

diff --git a/solr/solrj/src/java/org/apache/solr/common/cloud/SolrZooKeeper.java b/solr/solrj/src/java/org/apache/solr/common/cloud/SolrZooKeeper.java
index 529849d..90fa686 100644
--- a/solr/solrj/src/java/org/apache/solr/common/cloud/SolrZooKeeper.java
+++ b/solr/solrj/src/java/org/apache/solr/common/cloud/SolrZooKeeper.java
@@ -130,7 +130,16 @@ public class SolrZooKeeper extends ZooKeeper {
 //     /   zkcall(cnxn, "sendThread", "close", null);
         // zkcall(cnxn, "sendThread", "close", null);
       }); // we don't wait for close because we wait below
-
+      worker.collect( () -> {
+        ZooKeeperExposed exposed = new ZooKeeperExposed(this, cnxn);
+        exposed.intteruptSendThread();
+        exposed.intteruptSendThread();
+      });
+      worker.collect( () -> {
+        ZooKeeperExposed exposed = new ZooKeeperExposed(this, cnxn);
+        exposed.intteruptSendThread();
+        exposed.intteruptSendThread();
+      });// we don't wait for close because we wait below
       worker.addCollect("zkServer");
 
       worker.collect(() -> {
@@ -138,20 +147,21 @@ public class SolrZooKeeper extends ZooKeeper {
           t.interrupt();
         }
       });
-      worker.collect(() -> {
-        zkcall(cnxn, "sendThread", "interrupt", null);
-        zkcall(cnxn, "eventThread", "interrupt", null);
-//
-//      //  zkcall(cnxn, "sendThread", "join", 10l);
-//      //  zkcall(cnxn, "eventThread", "join", 10l);
-//
+      worker.addCollect("spawnedThreads");
+//      worker.collect(() -> {
 //        zkcall(cnxn, "sendThread", "interrupt", null);
 //        zkcall(cnxn, "eventThread", "interrupt", null);
-//
-//        zkcall(cnxn, "sendThread", "join", 10l);
-//        zkcall(cnxn, "eventThread", "join", 10l);
-      });
-      worker.addCollect("zkClientClose");
+////
+////      //  zkcall(cnxn, "sendThread", "join", 10l);
+////      //  zkcall(cnxn, "eventThread", "join", 10l);
+////
+////        zkcall(cnxn, "sendThread", "interrupt", null);
+////        zkcall(cnxn, "eventThread", "interrupt", null);
+////
+////        zkcall(cnxn, "sendThread", "join", 10l);
+////        zkcall(cnxn, "eventThread", "join", 10l);
+//      });
+//      worker.addCollect("zkClientClose");
     }
   }
 
diff --git a/solr/solrj/src/java/org/apache/zookeeper/ZooKeeperExposed.java b/solr/solrj/src/java/org/apache/zookeeper/ZooKeeperExposed.java
index 56576f6..dd688c9 100644
--- a/solr/solrj/src/java/org/apache/zookeeper/ZooKeeperExposed.java
+++ b/solr/solrj/src/java/org/apache/zookeeper/ZooKeeperExposed.java
@@ -20,6 +20,10 @@ public class ZooKeeperExposed {
         clientCnxn.eventThread.queueEventOfDeath();
     }
 
+    public void intteruptSendThread() {
+        clientCnxn.sendThread.interrupt();
+        clientCnxn.eventThread.interrupt();
+    }
 //    @Override
 //    public void injectSessionExpiration() {
 //        LOG.info("injectSessionExpiration() called");


[lucene-solr] 02/02: #112 - Tighten SolrCore leak prevention.

Posted by ma...@apache.org.
This is an automated email from the ASF dual-hosted git repository.

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

commit ea6476de3ca91b6929bf1b85a41b355507ee6931
Author: markrmiller@gmail.com <ma...@gmail.com>
AuthorDate: Mon Jul 13 09:58:30 2020 -0500

    #112 - Tighten SolrCore leak prevention.
---
 solr/core/src/java/org/apache/solr/core/CoreContainer.java |  4 ++--
 solr/core/src/java/org/apache/solr/core/SolrCores.java     | 11 +++++++++--
 2 files changed, 11 insertions(+), 4 deletions(-)

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 cf125f3..029bdff 100644
--- a/solr/core/src/java/org/apache/solr/core/CoreContainer.java
+++ b/solr/core/src/java/org/apache/solr/core/CoreContainer.java
@@ -1651,8 +1651,8 @@ public class CoreContainer implements Closeable {
         coreInitFailures.put(cd.getName(), new CoreLoadFailure(cd, e));
         throw new SolrException(ErrorCode.SERVER_ERROR, "Unable to reload core [" + cd.getName() + "]", e);
       } finally {
-        if (!success && newCore != null && newCore.getOpenCount() > 0) {
-          IOUtils.closeQuietly(newCore);
+        if (!success && newCore != null) {
+          ParWork.close(newCore);
         }
         solrCores.removeFromPendingOps(cd.getName());
       }
diff --git a/solr/core/src/java/org/apache/solr/core/SolrCores.java b/solr/core/src/java/org/apache/solr/core/SolrCores.java
index e9e1ddf..89067ae 100644
--- a/solr/core/src/java/org/apache/solr/core/SolrCores.java
+++ b/solr/core/src/java/org/apache/solr/core/SolrCores.java
@@ -127,7 +127,7 @@ class SolrCores implements Closeable {
     if (transientSolrCoreCache != null) {
       coreList.addAll(transientSolrCoreCache.prepareForShutdown());
     }
-
+    cores.clear();
     coreList.addAll(pendingCloses);
     pendingCloses.forEach((c) -> coreList.add(c));
 
@@ -159,6 +159,9 @@ class SolrCores implements Closeable {
   // Returns the old core if there was a core of the same name.
   //WARNING! This should be the _only_ place you put anything into the list of transient cores!
   protected SolrCore putCore(CoreDescriptor cd, SolrCore core) {
+    if (isClosed()) {
+      throw new AlreadyClosedException();
+    }
     if (cd.isTransient()) {
       if (getTransientCacheHandler() != null) {
         return getTransientCacheHandler().addCore(cd.getName(), core);
@@ -246,7 +249,7 @@ class SolrCores implements Closeable {
   }
 
   protected void swap(String n0, String n1) {
-    if (closed) {
+    if (isClosed()) {
       throw new AlreadyClosedException();
     }
     synchronized (cores) {
@@ -281,6 +284,10 @@ class SolrCores implements Closeable {
 
   }
 
+  private boolean isClosed() {
+    return closed || container.isShutDown();
+  }
+
   protected SolrCore remove(String name) {
     SolrCore ret = cores.remove(name);
     // It could have been a newly-created core. It could have been a transient core. The newly-created cores