From fa1f80f40da0bb629c40bf09791c6c90f2608774 Mon Sep 17 00:00:00 2001 From: Jonathan Ellis Date: Fri, 17 Apr 2009 20:08:10 +0000 Subject: [PATCH] make GC_GRACE_IN_SECONDS customizable in storage.conf. patch by jbellis; reviewed by Eric Evans for #33 git-svn-id: https://svn.apache.org/repos/asf/incubator/cassandra/trunk@766134 13f79535-47bb-0310-9956-ffa450edef68 --- conf/storage-conf.xml | 6 ++++++ .../cassandra/config/DatabaseDescriptor.java | 18 +++++++++++++----- .../apache/cassandra/db/ColumnFamilyStore.java | 4 +--- 3 files changed, 20 insertions(+), 8 deletions(-) diff --git a/conf/storage-conf.xml b/conf/storage-conf.xml index 254619b7cb..129362f506 100644 --- a/conf/storage-conf.xml +++ b/conf/storage-conf.xml @@ -45,6 +45,12 @@ /var/cassandra/bootstrap /var/cassandra/staging false + + 864000 diff --git a/src/org/apache/cassandra/config/DatabaseDescriptor.java b/src/org/apache/cassandra/config/DatabaseDescriptor.java index 4572985095..d0acc30993 100644 --- a/src/org/apache/cassandra/config/DatabaseDescriptor.java +++ b/src/org/apache/cassandra/config/DatabaseDescriptor.java @@ -27,14 +27,11 @@ import org.apache.log4j.Logger; import org.apache.cassandra.db.ColumnFamily; import org.apache.cassandra.db.Table; import org.apache.cassandra.db.TypeInfo; -import org.apache.cassandra.db.DBManager; import org.apache.cassandra.db.SystemTable; -import org.apache.cassandra.db.Table.TableMetadata; import org.apache.cassandra.utils.FileUtils; import org.apache.cassandra.utils.XMLUtils; import org.w3c.dom.Node; import org.w3c.dom.NodeList; -import org.apache.cassandra.io.*; /** @@ -116,10 +113,12 @@ public class DatabaseDescriptor private static String jobTrackerHost_; /* Zookeeper session timeout. */ private static int zkSessionTimeout_ = 30000; - + /* time to wait before garbage collecting tombstones (deletion markers) */ + private static int gcGraceInSeconds_ = 10 * 24 * 3600; // 10 days + // the path qualified config file (storage-conf.xml) name private static String configFileName_; - + static { try @@ -148,6 +147,10 @@ public class DatabaseDescriptor /* Job Jar file location */ jobJarFileLocation_ = xmlUtils.getNodeValue("/Storage/JobJarFileLocation"); + String gcGrace = xmlUtils.getNodeValue("/Storage/GCGraceSeconds"); + if ( gcGrace != null ) + gcGraceInSeconds_ = Integer.parseInt(gcGrace); + /* Zookeeper's session timeout */ String zkSessionTimeout = xmlUtils.getNodeValue("/Storage/ZookeeperSessionTimeout"); if ( zkSessionTimeout != null ) @@ -462,6 +465,11 @@ public class DatabaseDescriptor } } + public static int getGcGraceInSeconds() + { + return gcGraceInSeconds_; + } + public static String getHashingStrategy() { return hashingStrategy_; diff --git a/src/org/apache/cassandra/db/ColumnFamilyStore.java b/src/org/apache/cassandra/db/ColumnFamilyStore.java index 6cb974fbf4..fbfa0f8be0 100644 --- a/src/org/apache/cassandra/db/ColumnFamilyStore.java +++ b/src/org/apache/cassandra/db/ColumnFamilyStore.java @@ -616,8 +616,6 @@ public class ColumnFamilyStore implements ColumnFamilyStoreMBean return removeDeleted(cf); } - static final int GC_GRACE_IN_SECONDS = 10 * 24 * 3600; // 10 days - /* This is complicated because we need to preserve deleted columns, supercolumns, and columnfamilies until they have been deleted for at least GC_GRACE_IN_SECONDS. But, we do not need to preserve @@ -626,7 +624,7 @@ public class ColumnFamilyStore implements ColumnFamilyStoreMBean */ static ColumnFamily removeDeleted(ColumnFamily cf) { - return removeDeleted(cf, (int)(System.currentTimeMillis() / 1000) - GC_GRACE_IN_SECONDS); + return removeDeleted(cf, (int)(System.currentTimeMillis() / 1000) - DatabaseDescriptor.getGcGraceInSeconds()); } static ColumnFamily removeDeleted(ColumnFamily cf, int gcBefore)