You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@accumulo.apache.org by el...@apache.org on 2014/03/11 19:25:11 UTC
[02/23] git commit: ACCUMULO-2061 Fix up ServerConstants and make
ChangeSecret reset the instanceId on all Volumes
ACCUMULO-2061 Fix up ServerConstants and make ChangeSecret reset the instanceId on all Volumes
Project: http://git-wip-us.apache.org/repos/asf/accumulo/repo
Commit: http://git-wip-us.apache.org/repos/asf/accumulo/commit/0c841568
Tree: http://git-wip-us.apache.org/repos/asf/accumulo/tree/0c841568
Diff: http://git-wip-us.apache.org/repos/asf/accumulo/diff/0c841568
Branch: refs/heads/ACCUMULO-2061
Commit: 0c841568ee715951d3ebc889c105d55328e8144b
Parents: 43a7ebd
Author: Josh Elser <el...@apache.org>
Authored: Fri Mar 7 16:35:43 2014 -0500
Committer: Josh Elser <el...@apache.org>
Committed: Fri Mar 7 16:37:33 2014 -0500
----------------------------------------------------------------------
.../org/apache/accumulo/core/volume/Volume.java | 7 +++++++
.../apache/accumulo/core/volume/VolumeImpl.java | 17 +++++------------
.../java/org/apache/accumulo/server/Accumulo.java | 11 +++++++----
.../apache/accumulo/server/ServerConstants.java | 9 +++++----
.../apache/accumulo/server/fs/VolumeManager.java | 6 ++++++
.../accumulo/server/fs/VolumeManagerImpl.java | 10 ++++++++++
.../apache/accumulo/server/util/ChangeSecret.java | 18 +++++++++++-------
7 files changed, 51 insertions(+), 27 deletions(-)
----------------------------------------------------------------------
http://git-wip-us.apache.org/repos/asf/accumulo/blob/0c841568/core/src/main/java/org/apache/accumulo/core/volume/Volume.java
----------------------------------------------------------------------
diff --git a/core/src/main/java/org/apache/accumulo/core/volume/Volume.java b/core/src/main/java/org/apache/accumulo/core/volume/Volume.java
index 9dd7b16..08f61d4 100644
--- a/core/src/main/java/org/apache/accumulo/core/volume/Volume.java
+++ b/core/src/main/java/org/apache/accumulo/core/volume/Volume.java
@@ -45,6 +45,13 @@ public interface Volume {
public Path prefixChild(Path p);
/**
+ * Convert the given child path into a Path that is relative to the base path for this Volume
+ * @param p
+ * @return
+ */
+ public Path prefixChild(String p);
+
+ /**
* Determine if the Path is valid on this Volume (contained by the basePath)
* @param p
* @return True if path is contained within the basePath, false otherwise
http://git-wip-us.apache.org/repos/asf/accumulo/blob/0c841568/core/src/main/java/org/apache/accumulo/core/volume/VolumeImpl.java
----------------------------------------------------------------------
diff --git a/core/src/main/java/org/apache/accumulo/core/volume/VolumeImpl.java b/core/src/main/java/org/apache/accumulo/core/volume/VolumeImpl.java
index 65740ce..0aaf482 100644
--- a/core/src/main/java/org/apache/accumulo/core/volume/VolumeImpl.java
+++ b/core/src/main/java/org/apache/accumulo/core/volume/VolumeImpl.java
@@ -48,33 +48,21 @@ public class VolumeImpl implements Volume {
this.basePath = basePath;
}
- /* (non-javadoc)
- * @see org.apache.accumulo.core.volume.Volume#getFileSystem()
- */
@Override
public FileSystem getFileSystem() {
return fs;
}
- /* (non-javadoc)
- * @see org.apache.accumulo.core.volume.Volume#getBasePath()
- */
@Override
public String getBasePath() {
return basePath;
}
- /* (non-javadoc)
- * @see org.apache.accumulo.core.volume.Volume#prefixChild(Path)
- */
@Override
public Path prefixChild(Path p) {
return new Path(basePath, p);
}
- /* (non-javadoc)
- * @see org.apache.accumulo.core.volume.Volume#isValidPath(Path)
- */
@Override
public boolean isValidPath(Path p) {
checkNotNull(p);
@@ -97,4 +85,9 @@ public class VolumeImpl implements Volume {
return getFileSystem() + " " + basePath;
}
+ @Override
+ public Path prefixChild(String p) {
+ return new Path(basePath, p);
+ }
+
}
http://git-wip-us.apache.org/repos/asf/accumulo/blob/0c841568/server/base/src/main/java/org/apache/accumulo/server/Accumulo.java
----------------------------------------------------------------------
diff --git a/server/base/src/main/java/org/apache/accumulo/server/Accumulo.java b/server/base/src/main/java/org/apache/accumulo/server/Accumulo.java
index 2fa9051..fe1729c 100644
--- a/server/base/src/main/java/org/apache/accumulo/server/Accumulo.java
+++ b/server/base/src/main/java/org/apache/accumulo/server/Accumulo.java
@@ -31,6 +31,7 @@ import org.apache.accumulo.core.trace.DistributedTrace;
import org.apache.accumulo.core.util.AddressUtil;
import org.apache.accumulo.core.util.UtilWaitThread;
import org.apache.accumulo.core.util.Version;
+import org.apache.accumulo.core.volume.Volume;
import org.apache.accumulo.server.client.HdfsZooInstance;
import org.apache.accumulo.server.conf.ServerConfiguration;
import org.apache.accumulo.server.fs.VolumeManager;
@@ -50,10 +51,11 @@ public class Accumulo {
private static final Logger log = Logger.getLogger(Accumulo.class);
public static synchronized void updateAccumuloVersion(VolumeManager fs) {
+ Volume defaultVolume = fs.getDefaultVolume();
try {
if (getAccumuloPersistentVersion(fs) == ServerConstants.PREV_DATA_VERSION) {
- fs.create(new Path(ServerConstants.getDataVersionLocation() + "/" + ServerConstants.DATA_VERSION));
- fs.delete(new Path(ServerConstants.getDataVersionLocation() + "/" + ServerConstants.PREV_DATA_VERSION));
+ fs.create(new Path(ServerConstants.getDataVersionLocation(defaultVolume), Integer.toString(ServerConstants.DATA_VERSION)));
+ fs.delete(new Path(ServerConstants.getDataVersionLocation(defaultVolume), Integer.toString(ServerConstants.PREV_DATA_VERSION)));
}
} catch (IOException e) {
throw new RuntimeException("Unable to set accumulo version: an error occurred.", e);
@@ -76,8 +78,9 @@ public class Accumulo {
}
public static synchronized int getAccumuloPersistentVersion(VolumeManager fs) {
- Path path = ServerConstants.getDataVersionLocation();
- return getAccumuloPersistentVersion(fs.getFileSystemByPath(path), path);
+ Volume defaultVolume = fs.getDefaultVolume();
+ Path path = ServerConstants.getDataVersionLocation(defaultVolume);
+ return getAccumuloPersistentVersion(defaultVolume.getFileSystem(), path);
}
public static void enableTracing(String address, String application) {
http://git-wip-us.apache.org/repos/asf/accumulo/blob/0c841568/server/base/src/main/java/org/apache/accumulo/server/ServerConstants.java
----------------------------------------------------------------------
diff --git a/server/base/src/main/java/org/apache/accumulo/server/ServerConstants.java b/server/base/src/main/java/org/apache/accumulo/server/ServerConstants.java
index 6ea3b91..6c27897 100644
--- a/server/base/src/main/java/org/apache/accumulo/server/ServerConstants.java
+++ b/server/base/src/main/java/org/apache/accumulo/server/ServerConstants.java
@@ -27,6 +27,7 @@ import org.apache.accumulo.core.conf.Property;
import org.apache.accumulo.core.metadata.MetadataTable;
import org.apache.accumulo.core.util.CachedConfiguration;
import org.apache.accumulo.core.util.Pair;
+import org.apache.accumulo.core.volume.Volume;
import org.apache.accumulo.core.volume.VolumeConfiguration;
import org.apache.accumulo.core.zookeeper.ZooUtil;
import org.apache.accumulo.server.conf.ServerConfiguration;
@@ -127,14 +128,14 @@ public class ServerConstants {
return VolumeConfiguration.prefix(getBaseUris(), "walogArchive");
}
- public static Path getInstanceIdLocation() {
+ public static Path getInstanceIdLocation(Volume v) {
// all base dirs should have the same instance id, so can choose any one
- return new Path(getBaseUris()[0], INSTANCE_ID_DIR);
+ return v.prefixChild(INSTANCE_ID_DIR);
}
- public static Path getDataVersionLocation() {
+ public static Path getDataVersionLocation(Volume v) {
// all base dirs should have the same version, so can choose any one
- return new Path(getBaseUris()[0], VERSION_DIR);
+ return v.prefixChild(VERSION_DIR);
}
public static String[] getMetadataTableDirs() {
http://git-wip-us.apache.org/repos/asf/accumulo/blob/0c841568/server/base/src/main/java/org/apache/accumulo/server/fs/VolumeManager.java
----------------------------------------------------------------------
diff --git a/server/base/src/main/java/org/apache/accumulo/server/fs/VolumeManager.java b/server/base/src/main/java/org/apache/accumulo/server/fs/VolumeManager.java
index ce37058..2f7cf42 100644
--- a/server/base/src/main/java/org/apache/accumulo/server/fs/VolumeManager.java
+++ b/server/base/src/main/java/org/apache/accumulo/server/fs/VolumeManager.java
@@ -17,6 +17,7 @@
package org.apache.accumulo.server.fs;
import java.io.IOException;
+import java.util.Collection;
import org.apache.accumulo.core.data.Key;
import org.apache.accumulo.core.volume.Volume;
@@ -155,4 +156,9 @@ public interface VolumeManager {
// decide on which of the given locations to create a new file
String choose(String[] options);
+
+ public Volume getDefaultVolume();
+
+ public Collection<Volume> getVolumes();
+
}
http://git-wip-us.apache.org/repos/asf/accumulo/blob/0c841568/server/base/src/main/java/org/apache/accumulo/server/fs/VolumeManagerImpl.java
----------------------------------------------------------------------
diff --git a/server/base/src/main/java/org/apache/accumulo/server/fs/VolumeManagerImpl.java b/server/base/src/main/java/org/apache/accumulo/server/fs/VolumeManagerImpl.java
index 9b62ce3..e19182d 100644
--- a/server/base/src/main/java/org/apache/accumulo/server/fs/VolumeManagerImpl.java
+++ b/server/base/src/main/java/org/apache/accumulo/server/fs/VolumeManagerImpl.java
@@ -546,4 +546,14 @@ public class VolumeManagerImpl implements VolumeManager {
return chooser.choose(options);
}
+ @Override
+ public Volume getDefaultVolume() {
+ return defaultVolume;
+ }
+
+ @Override
+ public Collection<Volume> getVolumes() {
+ return volumesByName.values();
+ }
+
}
http://git-wip-us.apache.org/repos/asf/accumulo/blob/0c841568/server/base/src/main/java/org/apache/accumulo/server/util/ChangeSecret.java
----------------------------------------------------------------------
diff --git a/server/base/src/main/java/org/apache/accumulo/server/util/ChangeSecret.java b/server/base/src/main/java/org/apache/accumulo/server/util/ChangeSecret.java
index ac13034..3f33a0e 100644
--- a/server/base/src/main/java/org/apache/accumulo/server/util/ChangeSecret.java
+++ b/server/base/src/main/java/org/apache/accumulo/server/util/ChangeSecret.java
@@ -24,7 +24,7 @@ import java.util.UUID;
import org.apache.accumulo.core.Constants;
import org.apache.accumulo.core.client.Instance;
-import org.apache.accumulo.core.util.CachedConfiguration;
+import org.apache.accumulo.core.volume.Volume;
import org.apache.accumulo.core.zookeeper.ZooUtil;
import org.apache.accumulo.fate.zookeeper.IZooReaderWriter;
import org.apache.accumulo.fate.zookeeper.ZooReader;
@@ -32,8 +32,9 @@ import org.apache.accumulo.fate.zookeeper.ZooUtil.NodeExistsPolicy;
import org.apache.accumulo.fate.zookeeper.ZooUtil.NodeMissingPolicy;
import org.apache.accumulo.server.ServerConstants;
import org.apache.accumulo.server.cli.ClientOpts;
+import org.apache.accumulo.server.fs.VolumeManager;
+import org.apache.accumulo.server.fs.VolumeManagerImpl;
import org.apache.accumulo.server.zookeeper.ZooReaderWriter;
-import org.apache.hadoop.fs.FileSystem;
import org.apache.hadoop.fs.Path;
import org.apache.zookeeper.ZooDefs.Ids;
import org.apache.zookeeper.data.ACL;
@@ -57,7 +58,7 @@ public class ChangeSecret {
argsList.add("--new");
argsList.addAll(Arrays.asList(args));
opts.parseArgs(ChangeSecret.class.getName(), argsList.toArray(new String[0]));
- FileSystem fs = FileSystem.get(CachedConfiguration.getInstance());
+ VolumeManager fs = VolumeManagerImpl.get();
Instance inst = opts.getInstance();
if (!verifyAccumuloIsDown(inst, opts.oldPass))
System.exit(-1);
@@ -142,10 +143,13 @@ public class ChangeSecret {
return newInstanceId;
}
- private static void updateHdfs(FileSystem fs, Instance inst, String newInstanceId) throws IOException {
- fs.delete(ServerConstants.getInstanceIdLocation(), true);
- fs.mkdirs(ServerConstants.getInstanceIdLocation());
- fs.create(new Path(ServerConstants.getInstanceIdLocation(), newInstanceId)).close();
+ private static void updateHdfs(VolumeManager fs, Instance inst, String newInstanceId) throws IOException {
+ // Need to recreate the instanceId on all of them to keep consistency
+ for (Volume v : fs.getVolumes()) {
+ v.getFileSystem().delete(ServerConstants.getInstanceIdLocation(v), true);
+ v.getFileSystem().mkdirs(ServerConstants.getInstanceIdLocation(v));
+ v.getFileSystem().create(new Path(ServerConstants.getInstanceIdLocation(v), newInstanceId)).close();
+ }
}
private static void deleteInstance(Instance origInstance, String oldPass) throws Exception {