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

jonmeredith pushed a commit to branch cassandra-3.11
in repository https://gitbox.apache.org/repos/asf/cassandra.git

commit beb456305af307b20376b0190fea6c33d6b38ac6
Merge: bfab1fd 9ff28fc
Author: Jon Meredith <jonmered...@apache.org>
AuthorDate: Thu Feb 3 14:22:52 2022 -0700

    Merge branch 'cassandra-3.0' into cassandra-3.11

 src/java/org/apache/cassandra/service/StorageService.java  | 14 ++++++++++----
 .../apache/cassandra/distributed/impl/AbstractCluster.java |  8 +++++++-
 .../org/apache/cassandra/distributed/impl/Instance.java    | 10 ++++++++++
 .../org/apache/cassandra/distributed/test/GossipTest.java  |  3 ---
 4 files changed, 27 insertions(+), 8 deletions(-)

diff --cc src/java/org/apache/cassandra/service/StorageService.java
index 1a0d5b0,22040c1..49f3835
--- a/src/java/org/apache/cassandra/service/StorageService.java
+++ b/src/java/org/apache/cassandra/service/StorageService.java
@@@ -4760,61 -4460,17 +4757,70 @@@ public class StorageService extends Not
          {
              logger.error("Caught an exception while draining ", t);
          }
 +        finally
 +        {
 +            Throwable postShutdownHookThrowable = Throwables.perform(null, 
postShutdownHooks.stream().map(h -> h::run));
 +            if (postShutdownHookThrowable != null)
 +                logger.error("Post-shutdown hooks returned exception", 
postShutdownHookThrowable);
 +        }
 +    }
 +
 +    /**
 +     * Add a runnable which will be called before shut down or drain. This is 
useful for other
 +     * applications running in the same JVM which may want to shut down first 
rather than time
 +     * out attempting to use Cassandra calls which will no longer work.
 +     * @param hook: the code to run
 +     * @return true on success, false if Cassandra is already shutting down, 
in which case the runnable
 +     * has NOT been added.
 +     */
 +    public synchronized boolean addPreShutdownHook(Runnable hook)
 +    {
 +        if (!isDraining() && !isDrained())
 +            return preShutdownHooks.add(hook);
 +
 +        return false;
 +    }
 +
 +    /**
 +     * Remove a preshutdown hook
 +     */
 +    public synchronized boolean removePreShutdownHook(Runnable hook)
 +    {
 +        return preShutdownHooks.remove(hook);
 +    }
 +
 +    /**
 +     * Add a runnable which will be called after shutdown or drain. This is 
useful for other applications
 +     * running in the same JVM that Cassandra needs to work and should shut 
down later.
 +     * @param hook: the code to run
 +     * @return true on success, false if Cassandra is already shutting down, 
in which case the runnable has NOT been
 +     * added.
 +     */
 +    public synchronized boolean addPostShutdownHook(Runnable hook)
 +    {
 +        if (!isDraining() && !isDrained())
 +            return postShutdownHooks.add(hook);
 +
 +        return false;
 +    }
 +
 +    /**
 +     * Remove a postshutdownhook
 +     */
 +    public synchronized boolean removePostShutdownHook(Runnable hook)
 +    {
 +        return postShutdownHooks.remove(hook);
      }
  
+     @VisibleForTesting
+     public void disableAutoCompaction()
+     {
+         // disable autocompaction - we don't want to start any new 
compactions while we are draining
+         for (Keyspace keyspace : Keyspace.all())
+             for (ColumnFamilyStore cfs : keyspace.getColumnFamilyStores())
+                 cfs.disableAutoCompaction();
+     }
+ 
      /**
       * Some services are shutdown during draining and we should not attempt 
to start them again.
       *
diff --cc test/distributed/org/apache/cassandra/distributed/impl/Instance.java
index 80728e2,776def3..1859742
--- a/test/distributed/org/apache/cassandra/distributed/impl/Instance.java
+++ b/test/distributed/org/apache/cassandra/distributed/impl/Instance.java
@@@ -717,8 -770,14 +725,10 @@@ public class Instance extends IsolatedE
              if (config.has(GOSSIP) || config.has(NETWORK))
              {
                  StorageService.instance.shutdownServer();
 -
 -                error = parallelRun(error, executor,
 -                                    () -> 
NanoTimeToCurrentTimeMillis.shutdown(MINUTES.toMillis(1L))
 -                );
              }
  
+             error = parallelRun(error, executor, 
StorageService.instance::disableAutoCompaction);
+ 
              error = parallelRun(error, executor,
                                  () -> 
Gossiper.instance.stopShutdownAndWait(1L, MINUTES),
                                  CompactionManager.instance::forceShutdown,

---------------------------------------------------------------------
To unsubscribe, e-mail: commits-unsubscr...@cassandra.apache.org
For additional commands, e-mail: commits-h...@cassandra.apache.org

Reply via email to