You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@hbase.apache.org by st...@apache.org on 2009/04/23 18:09:00 UTC
svn commit: r767953 - in /hadoop/hbase/trunk: CHANGES.txt
src/java/org/apache/hadoop/hbase/master/HMaster.java
src/java/org/apache/hadoop/hbase/util/FSUtils.java
Author: stack
Date: Thu Apr 23 16:08:59 2009
New Revision: 767953
URL: http://svn.apache.org/viewvc?rev=767953&view=rev
Log:
HBASE-1195 If HBase directory exists but version file is inexistent, still proceed with bootstrapping
Modified:
hadoop/hbase/trunk/CHANGES.txt
hadoop/hbase/trunk/src/java/org/apache/hadoop/hbase/master/HMaster.java
hadoop/hbase/trunk/src/java/org/apache/hadoop/hbase/util/FSUtils.java
Modified: hadoop/hbase/trunk/CHANGES.txt
URL: http://svn.apache.org/viewvc/hadoop/hbase/trunk/CHANGES.txt?rev=767953&r1=767952&r2=767953&view=diff
==============================================================================
--- hadoop/hbase/trunk/CHANGES.txt (original)
+++ hadoop/hbase/trunk/CHANGES.txt Thu Apr 23 16:08:59 2009
@@ -152,6 +152,8 @@
HBASE-1235 Add table enabled status to shell and UI
(Lars George via Stack)
HBASE-1333 RowCounter updates
+ HBASE-1195 If HBase directory exists but version file is inexistent, still
+ proceed with bootstrapping (Evgeny Ryabitskiy via Stack)
Release 0.19.0 - 01/21/2009
INCOMPATIBLE CHANGES
Modified: hadoop/hbase/trunk/src/java/org/apache/hadoop/hbase/master/HMaster.java
URL: http://svn.apache.org/viewvc/hadoop/hbase/trunk/src/java/org/apache/hadoop/hbase/master/HMaster.java?rev=767953&r1=767952&r2=767953&view=diff
==============================================================================
--- hadoop/hbase/trunk/src/java/org/apache/hadoop/hbase/master/HMaster.java (original)
+++ hadoop/hbase/trunk/src/java/org/apache/hadoop/hbase/master/HMaster.java Thu Apr 23 16:08:59 2009
@@ -201,12 +201,9 @@
}
this.conf.set(HConstants.HBASE_DIR, this.rootdir.toString());
this.rand = new Random();
- Path rootRegionDir =
- HRegion.getRegionDir(rootdir, HRegionInfo.ROOT_REGIONINFO);
- LOG.info("Root region dir: " + rootRegionDir.toString());
try {
- // Make sure the root directory exists!
+ // Make sure the hbase root directory exists!
if (!fs.exists(rootdir)) {
fs.mkdirs(rootdir);
FSUtils.setVersion(fs, rootdir);
@@ -214,7 +211,8 @@
FSUtils.checkVersion(fs, rootdir, true);
}
- if (!fs.exists(rootRegionDir)) {
+ // Make sure the root region directory exists!
+ if (!FSUtils.rootRegionExists(fs, rootdir)) {
bootstrap();
}
} catch (IOException e) {
Modified: hadoop/hbase/trunk/src/java/org/apache/hadoop/hbase/util/FSUtils.java
URL: http://svn.apache.org/viewvc/hadoop/hbase/trunk/src/java/org/apache/hadoop/hbase/util/FSUtils.java?rev=767953&r1=767952&r2=767953&view=diff
==============================================================================
--- hadoop/hbase/trunk/src/java/org/apache/hadoop/hbase/util/FSUtils.java (original)
+++ hadoop/hbase/trunk/src/java/org/apache/hadoop/hbase/util/FSUtils.java Thu Apr 23 16:08:59 2009
@@ -33,7 +33,9 @@
import org.apache.hadoop.fs.Path;
import org.apache.hadoop.hbase.HBaseConfiguration;
import org.apache.hadoop.hbase.HConstants;
+import org.apache.hadoop.hbase.HRegionInfo;
import org.apache.hadoop.hbase.RemoteExceptionHandler;
+import org.apache.hadoop.hbase.regionserver.HRegion;
import org.apache.hadoop.hdfs.DistributedFileSystem;
/**
@@ -137,7 +139,7 @@
String version = null;
if (fs.exists(versionFile)) {
FSDataInputStream s =
- fs.open(new Path(rootdir, HConstants.VERSION_FILE_NAME));
+ fs.open(versionFile);
try {
version = DataInputStream.readUTF(s);
} finally {
@@ -156,19 +158,28 @@
*
* @throws IOException
*/
- public static void checkVersion(FileSystem fs, Path rootdir, boolean message)
- throws IOException {
+ public static void checkVersion(FileSystem fs, Path rootdir,
+ boolean message) throws IOException {
String version = getVersion(fs, rootdir);
- if (version == null ||
- version.compareTo(HConstants.FILE_SYSTEM_VERSION) != 0) {
- // Output on stdout so user sees it in terminal.
- String msg = "File system needs to be upgraded. Run " +
- "the '${HBASE_HOME}/bin/hbase migrate' script.";
- if (message) {
- System.out.println("WARNING! " + msg);
+
+ if (version == null) {
+ if (!rootRegionExists(fs, rootdir)) {
+ // rootDir is empty (no version file and no root region)
+ // just create new version file (HBASE-1195)
+ FSUtils.setVersion(fs, rootdir);
+ return;
}
- throw new FileSystemVersionException(msg);
+ } else if (version.compareTo(HConstants.FILE_SYSTEM_VERSION) == 0)
+ return;
+
+ // version is deprecated require migration
+ // Output on stdout so user sees it in terminal.
+ String msg = "File system needs to be upgraded. Run " +
+ "the '${HBASE_HOME}/bin/hbase migrate' script.";
+ if (message) {
+ System.out.println("WARNING! " + msg);
}
+ throw new FileSystemVersionException(msg);
}
/**
@@ -178,11 +189,13 @@
* @param rootdir
* @throws IOException
*/
- public static void setVersion(FileSystem fs, Path rootdir) throws IOException {
+ public static void setVersion(FileSystem fs, Path rootdir)
+ throws IOException {
FSDataOutputStream s =
fs.create(new Path(rootdir, HConstants.VERSION_FILE_NAME));
s.writeUTF(HConstants.FILE_SYSTEM_VERSION);
s.close();
+ LOG.debug("Created version file to: " + rootdir.toString());
}
/**
@@ -237,4 +250,19 @@
}
return rootdir;
}
+
+ /**
+ * Checks if root region exists
+ *
+ * @param fs file system
+ * @param rootdir root directory of HBase installation
+ * @return true if exists
+ * @throws IOException
+ */
+ public static boolean rootRegionExists(FileSystem fs, Path rootdir)
+ throws IOException {
+ Path rootRegionDir =
+ HRegion.getRegionDir(rootdir, HRegionInfo.ROOT_REGIONINFO);
+ return fs.exists(rootRegionDir);
+ }
}
\ No newline at end of file