You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@accumulo.apache.org by kt...@apache.org on 2013/12/20 05:10:03 UTC
[2/4] git commit: ACCUMULO-2050 made it possible to recover logs on
viewfs
ACCUMULO-2050 made it possible to recover logs on viewfs
Project: http://git-wip-us.apache.org/repos/asf/accumulo/repo
Commit: http://git-wip-us.apache.org/repos/asf/accumulo/commit/b671fdaa
Tree: http://git-wip-us.apache.org/repos/asf/accumulo/tree/b671fdaa
Diff: http://git-wip-us.apache.org/repos/asf/accumulo/diff/b671fdaa
Branch: refs/heads/1.6.0-SNAPSHOT
Commit: b671fdaa7d8afcff202abe471a203230ba17d176
Parents: cddf04f
Author: Keith Turner <kt...@apache.org>
Authored: Thu Dec 19 21:26:59 2013 -0500
Committer: Keith Turner <kt...@apache.org>
Committed: Thu Dec 19 23:00:02 2013 -0500
----------------------------------------------------------------------
.../apache/accumulo/server/fs/ViewFSUtils.java | 51 ++++++++++++++++++++
.../server/master/recovery/HadoopLogCloser.java | 14 +++++-
2 files changed, 64 insertions(+), 1 deletion(-)
----------------------------------------------------------------------
http://git-wip-us.apache.org/repos/asf/accumulo/blob/b671fdaa/server/base/src/main/java/org/apache/accumulo/server/fs/ViewFSUtils.java
----------------------------------------------------------------------
diff --git a/server/base/src/main/java/org/apache/accumulo/server/fs/ViewFSUtils.java b/server/base/src/main/java/org/apache/accumulo/server/fs/ViewFSUtils.java
new file mode 100644
index 0000000..ae7a8ae
--- /dev/null
+++ b/server/base/src/main/java/org/apache/accumulo/server/fs/ViewFSUtils.java
@@ -0,0 +1,51 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements. See the NOTICE file distributed with
+ * this work for additional information regarding copyright ownership.
+ * The ASF licenses this file to You under the Apache License, Version 2.0
+ * (the "License"); you may not use this file except in compliance with
+ * the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+package org.apache.accumulo.server.fs;
+
+import java.io.IOException;
+import java.lang.reflect.InvocationTargetException;
+import java.lang.reflect.Method;
+
+import org.apache.hadoop.fs.FileSystem;
+import org.apache.hadoop.fs.Path;
+
+/**
+ *
+ */
+public class ViewFSUtils {
+ public static boolean isViewFS(FileSystem fs) {
+ return fs.getClass().getName().equals("org.apache.hadoop.fs.viewfs.ViewFileSystem");
+ }
+
+ public static Path resolvePath(FileSystem fs, Path path) throws IOException {
+ // resolve path is new hadoop 2 so call it via reflection
+ try {
+ Method method = fs.getClass().getMethod("resolvePath", Path.class);
+ return (Path) method.invoke(fs, path);
+ } catch (IllegalArgumentException e) {
+ throw new IOException(e);
+ } catch (IllegalAccessException e) {
+ throw new IOException(e);
+ } catch (InvocationTargetException e) {
+ throw new IOException(e);
+ } catch (SecurityException e) {
+ throw new IOException(e);
+ } catch (NoSuchMethodException e) {
+ throw new IOException(e);
+ }
+ }
+}
http://git-wip-us.apache.org/repos/asf/accumulo/blob/b671fdaa/server/base/src/main/java/org/apache/accumulo/server/master/recovery/HadoopLogCloser.java
----------------------------------------------------------------------
diff --git a/server/base/src/main/java/org/apache/accumulo/server/master/recovery/HadoopLogCloser.java b/server/base/src/main/java/org/apache/accumulo/server/master/recovery/HadoopLogCloser.java
index b3c0934..0006bf9 100644
--- a/server/base/src/main/java/org/apache/accumulo/server/master/recovery/HadoopLogCloser.java
+++ b/server/base/src/main/java/org/apache/accumulo/server/master/recovery/HadoopLogCloser.java
@@ -21,6 +21,8 @@ import java.io.IOException;
import org.apache.accumulo.core.conf.AccumuloConfiguration;
import org.apache.accumulo.core.conf.Property;
+import org.apache.accumulo.core.util.CachedConfiguration;
+import org.apache.accumulo.server.fs.ViewFSUtils;
import org.apache.accumulo.server.fs.VolumeManager;
import org.apache.hadoop.fs.FileSystem;
import org.apache.hadoop.fs.LocalFileSystem;
@@ -35,6 +37,16 @@ public class HadoopLogCloser implements LogCloser {
@Override
public long close(AccumuloConfiguration conf, VolumeManager fs, Path source) throws IOException {
FileSystem ns = fs.getFileSystemByPath(source);
+
+ // if path points to a viewfs path, then resolve to underlying filesystem
+ if (ViewFSUtils.isViewFS(ns)) {
+ Path newSource = ViewFSUtils.resolvePath(ns, source);
+ if (!newSource.equals(source) && newSource.toUri().getScheme() != null) {
+ ns = newSource.getFileSystem(CachedConfiguration.getInstance());
+ source = newSource;
+ }
+ }
+
if (ns instanceof DistributedFileSystem) {
DistributedFileSystem dfs = (DistributedFileSystem) ns;
try {
@@ -53,7 +65,7 @@ public class HadoopLogCloser implements LogCloser {
} else if (ns instanceof LocalFileSystem) {
// ignore
} else {
- throw new IllegalStateException("Don't know how to recover a lease for " + fs.getClass().getName());
+ throw new IllegalStateException("Don't know how to recover a lease for " + ns.getClass().getName());
}
return 0;
}