You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@cassandra.apache.org by jb...@apache.org on 2012/04/03 18:14:26 UTC
[4/10] git commit: relax path length requirement for sstable files
when upgrading on non-Windows platforms patch by jbellis;
reviewed by slebresne for CASSANDRA-4110
relax path length requirement for sstable files when upgrading on non-Windows platforms
patch by jbellis; reviewed by slebresne for CASSANDRA-4110
Project: http://git-wip-us.apache.org/repos/asf/cassandra/repo
Commit: http://git-wip-us.apache.org/repos/asf/cassandra/commit/e9917c47
Tree: http://git-wip-us.apache.org/repos/asf/cassandra/tree/e9917c47
Diff: http://git-wip-us.apache.org/repos/asf/cassandra/diff/e9917c47
Branch: refs/heads/trunk
Commit: e9917c4794d9647792239efe24d4846f8163ab1e
Parents: 83371eb
Author: Jonathan Ellis <jb...@apache.org>
Authored: Tue Apr 3 11:13:44 2012 -0500
Committer: Jonathan Ellis <jb...@apache.org>
Committed: Tue Apr 3 11:13:44 2012 -0500
----------------------------------------------------------------------
CHANGES.txt | 5 +++-
src/java/org/apache/cassandra/db/Directories.java | 20 +++++++++++++--
2 files changed, 21 insertions(+), 4 deletions(-)
----------------------------------------------------------------------
http://git-wip-us.apache.org/repos/asf/cassandra/blob/e9917c47/CHANGES.txt
----------------------------------------------------------------------
diff --git a/CHANGES.txt b/CHANGES.txt
index 7fceeee..4af75a3 100644
--- a/CHANGES.txt
+++ b/CHANGES.txt
@@ -4,7 +4,10 @@
* fix KEYS index from skipping results (CASSANDRA-3996)
* Remove sliced_buffer_size_in_kb dead option (CASSANDRA-4076)
* make loadNewSStable preserve sstable version (CASSANDRA-4077)
- * Respect 1.0 cache settings as much as possible when upgrading (CASSANDRA-4088)
+ * Respect 1.0 cache settings as much as possible when upgrading
+ (CASSANDRA-4088)
+ * relax path length requirement for sstable files when upgrading on
+ non-Windows platforms (CASSANDRA-4110)
1.1-beta2
http://git-wip-us.apache.org/repos/asf/cassandra/blob/e9917c47/src/java/org/apache/cassandra/db/Directories.java
----------------------------------------------------------------------
diff --git a/src/java/org/apache/cassandra/db/Directories.java b/src/java/org/apache/cassandra/db/Directories.java
index d2c98c8..1441fd2 100644
--- a/src/java/org/apache/cassandra/db/Directories.java
+++ b/src/java/org/apache/cassandra/db/Directories.java
@@ -416,7 +416,7 @@ public class Directories
// This is a brand new node.
return false;
- // Check whether the migration migth create too long a filename
+ // Check whether the migration might create too long a filename
int longestLocation = -1;
try
{
@@ -428,18 +428,32 @@ public class Directories
throw new IOError(e);
}
+ // Check that migration won't error out halfway through from too-long paths. For Windows, we need to check
+ // total path length <= 255 (see http://msdn.microsoft.com/en-us/library/aa365247.aspx and discussion on CASSANDRA-2749);
+ // elsewhere, we just need to make sure filename is <= 255.
for (KSMetaData ksm : Schema.instance.getTableDefinitions())
{
String ksname = ksm.name;
for (Map.Entry<String, CFMetaData> entry : ksm.cfMetaData().entrySet())
{
String cfname = entry.getKey();
- // max path is roughly (guess-estimate) <location>/ksname/cfname/snapshots/1324314347102-somename/ksname-cfname-tmp-hb-1024-Statistics.db
- if (longestLocation + (ksname.length() + cfname.length()) * 2 + 62 > 256)
+
+ // max path is roughly (guess-estimate) <location>/ksname/cfname/snapshots/1324314347102-somename/ksname-cfname-tmp-hb-65536-Statistics.db
+ if (System.getProperty("os.name").startsWith("Windows")
+ && longestLocation + (ksname.length() + cfname.length()) * 2 + 63 > 255)
+ {
throw new RuntimeException("Starting with 1.1, keyspace names and column family names must be less than 32 characters long. "
+ ksname + "/" + cfname + " doesn't respect that restriction. Please rename your keyspace/column families to respect that restriction before updating.");
+ }
+
+ if (ksm.name.length() + cfname.length() + 28 > 255)
+ {
+ throw new RuntimeException("Starting with 1.1, the keyspace name is included in data filenames. For "
+ + ksm.name + "/" + cfname + ", this puts you over the largest possible filename of 255 characters");
+ }
}
}
+
return true;
}