Repository: cassandra
Updated Branches:
  refs/heads/trunk 39d7cf50e -> d6ceb940e


Avoid un-needed system flushes on startup

patch by Corentin Chary, reviewed by Ariel Weisberg for CASSANDRA-13031


Project: http://git-wip-us.apache.org/repos/asf/cassandra/repo
Commit: http://git-wip-us.apache.org/repos/asf/cassandra/commit/d6ceb940
Tree: http://git-wip-us.apache.org/repos/asf/cassandra/tree/d6ceb940
Diff: http://git-wip-us.apache.org/repos/asf/cassandra/diff/d6ceb940

Branch: refs/heads/trunk
Commit: d6ceb940e3dc9484ec197c539aa65c41116ce660
Parents: 39d7cf5
Author: Corentin Chary <[email protected]>
Authored: Thu Dec 22 12:39:50 2016 -0500
Committer: Jason Brown <[email protected]>
Committed: Wed Jan 18 05:10:18 2017 -0800

----------------------------------------------------------------------
 .../org/apache/cassandra/db/SystemKeyspace.java | 26 +++++++++++++++++---
 1 file changed, 22 insertions(+), 4 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/cassandra/blob/d6ceb940/src/java/org/apache/cassandra/db/SystemKeyspace.java
----------------------------------------------------------------------
diff --git a/src/java/org/apache/cassandra/db/SystemKeyspace.java 
b/src/java/org/apache/cassandra/db/SystemKeyspace.java
index 36f0605..5b63ba6 100644
--- a/src/java/org/apache/cassandra/db/SystemKeyspace.java
+++ b/src/java/org/apache/cassandra/db/SystemKeyspace.java
@@ -413,6 +413,9 @@ public final class SystemKeyspace
 
     public static void setViewBuilt(String keyspaceName, String viewName, 
boolean replicated)
     {
+        if (isViewBuilt(keyspaceName, viewName) && 
isViewStatusReplicated(keyspaceName, viewName) == replicated)
+            return;
+
         String req = "INSERT INTO %s.\"%s\" (keyspace_name, view_name, 
status_replicated) VALUES (?, ?, ?)";
         executeInternal(String.format(req, 
SchemaConstants.SYSTEM_KEYSPACE_NAME, BUILT_VIEWS), keyspaceName, viewName, 
replicated);
         forceBlockingFlush(BUILT_VIEWS);
@@ -420,11 +423,11 @@ public final class SystemKeyspace
 
     public static void setViewRemoved(String keyspaceName, String viewName)
     {
-        String buildReq = "DELETE FROM %S.%s WHERE keyspace_name = ? AND 
view_name = ?";
+        String buildReq = "DELETE FROM %S.%s WHERE keyspace_name = ? AND 
view_name = ? IF EXISTS";
         executeInternal(String.format(buildReq, 
SchemaConstants.SYSTEM_KEYSPACE_NAME, VIEWS_BUILDS_IN_PROGRESS), keyspaceName, 
viewName);
         forceBlockingFlush(VIEWS_BUILDS_IN_PROGRESS);
 
-        String builtReq = "DELETE FROM %s.\"%s\" WHERE keyspace_name = ? AND 
view_name = ?";
+        String builtReq = "DELETE FROM %s.\"%s\" WHERE keyspace_name = ? AND 
view_name = ? IF EXISTS";
         executeInternal(String.format(builtReq, 
SchemaConstants.SYSTEM_KEYSPACE_NAME, BUILT_VIEWS), keyspaceName, viewName);
         forceBlockingFlush(BUILT_VIEWS);
     }
@@ -445,7 +448,7 @@ public final class SystemKeyspace
         // Also, if writing to the built_view succeeds, but the 
view_builds_in_progress deletion fails, we will be able
         // to skip the view build next boot.
         setViewBuilt(ksname, viewName, false);
-        executeInternal(String.format("DELETE FROM system.%s WHERE 
keyspace_name = ? AND view_name = ?", VIEWS_BUILDS_IN_PROGRESS), ksname, 
viewName);
+        executeInternal(String.format("DELETE FROM system.%s WHERE 
keyspace_name = ? AND view_name = ? IF EXISTS", VIEWS_BUILDS_IN_PROGRESS), 
ksname, viewName);
         forceBlockingFlush(VIEWS_BUILDS_IN_PROGRESS);
     }
 
@@ -496,6 +499,10 @@ public final class SystemKeyspace
      */
     public static synchronized void removeTruncationRecord(UUID cfId)
     {
+        Pair<CommitLogPosition, Long> truncationRecord = 
getTruncationRecord(cfId);
+        if (truncationRecord == null)
+            return;
+
         String req = "DELETE truncated_at[?] from system.%s WHERE key = '%s'";
         executeInternal(String.format(req, LOCAL, LOCAL), cfId);
         truncationRecords = null;
@@ -577,6 +584,9 @@ public final class SystemKeyspace
 
     public static synchronized void updatePreferredIP(InetAddress ep, 
InetAddress preferred_ip)
     {
+        if (getPreferredIP(ep) == preferred_ip)
+            return;
+
         String req = "INSERT INTO system.%s (peer, preferred_ip) VALUES (?, 
?)";
         executeInternal(String.format(req, PEERS), ep, preferred_ip);
         forceBlockingFlush(PEERS);
@@ -640,6 +650,11 @@ public final class SystemKeyspace
     public static synchronized void updateTokens(Collection<Token> tokens)
     {
         assert !tokens.isEmpty() : "removeEndpoint should be used instead";
+
+        Collection<Token> savedTokens = getSavedTokens();
+        if (tokens.containsAll(savedTokens) && tokens.size() == 
savedTokens.size())
+            return;
+
         String req = "INSERT INTO system.%s (key, tokens) VALUES ('%s', ?)";
         executeInternal(String.format(req, LOCAL, LOCAL), tokensAsSet(tokens));
         forceBlockingFlush(LOCAL);
@@ -867,6 +882,9 @@ public final class SystemKeyspace
 
     public static void setBootstrapState(BootstrapState state)
     {
+        if (getBootstrapState() == state)
+            return;
+
         String req = "INSERT INTO system.%s (key, bootstrapped) VALUES ('%s', 
?)";
         executeInternal(String.format(req, LOCAL, LOCAL), state.name());
         forceBlockingFlush(LOCAL);
@@ -888,7 +906,7 @@ public final class SystemKeyspace
 
     public static void setIndexRemoved(String keyspaceName, String indexName)
     {
-        String req = "DELETE FROM %s.\"%s\" WHERE table_name = ? AND 
index_name = ?";
+        String req = "DELETE FROM %s.\"%s\" WHERE table_name = ? AND 
index_name = ? IF EXISTS";
         executeInternal(String.format(req, 
SchemaConstants.SYSTEM_KEYSPACE_NAME, BUILT_INDEXES), keyspaceName, indexName);
         forceBlockingFlush(BUILT_INDEXES);
     }

Reply via email to