Author: cjnolet
Date: Tue May 21 02:12:28 2013
New Revision: 1484644
URL: http://svn.apache.org/r1484644
Log:
ACCUMULO-1438 Moving MiniAccumuloCluster into mini module
Added:
accumulo/branches/1.5/mini/ (with props)
accumulo/branches/1.5/mini/pom.xml (with props)
accumulo/branches/1.5/mini/src/
accumulo/branches/1.5/mini/src/main/
accumulo/branches/1.5/mini/src/main/java/
accumulo/branches/1.5/mini/src/main/java/org/
accumulo/branches/1.5/mini/src/main/java/org/apache/
accumulo/branches/1.5/mini/src/main/java/org/apache/accumulo/
accumulo/branches/1.5/mini/src/main/java/org/apache/accumulo/mini/
accumulo/branches/1.5/mini/src/main/java/org/apache/accumulo/mini/MiniAccumuloCluster.java
accumulo/branches/1.5/mini/src/main/java/org/apache/accumulo/mini/MiniAccumuloConfig.java
accumulo/branches/1.5/mini/src/test/
accumulo/branches/1.5/mini/src/test/java/
accumulo/branches/1.5/mini/src/test/java/org/
accumulo/branches/1.5/mini/src/test/java/org/apache/
accumulo/branches/1.5/mini/src/test/java/org/apache/accumulo/
accumulo/branches/1.5/mini/src/test/java/org/apache/accumulo/mini/
accumulo/branches/1.5/mini/src/test/java/org/apache/accumulo/mini/MiniAccumuloClusterTest.java
accumulo/branches/1.5/mini/src/test/resources/
accumulo/branches/1.5/mini/src/test/resources/FooFilter.jar (with props)
accumulo/branches/1.5/mini/src/test/resources/log4j.properties
Removed:
accumulo/branches/1.5/server/src/main/java/org/apache/accumulo/server/mini/
accumulo/branches/1.5/server/src/test/java/org/apache/accumulo/server/mini/
accumulo/branches/1.5/server/src/test/resources/FooFilter.jar
Modified:
accumulo/branches/1.5/README
accumulo/branches/1.5/pom.xml
accumulo/branches/1.5/proxy/pom.xml
accumulo/branches/1.5/proxy/src/main/java/org/apache/accumulo/proxy/Proxy.java
accumulo/branches/1.5/proxy/src/test/java/org/apache/accumulo/proxy/SimpleTest.java
accumulo/branches/1.5/server/src/test/resources/log4j.properties
accumulo/branches/1.5/test/pom.xml
accumulo/branches/1.5/test/src/test/java/org/apache/accumulo/fate/zookeeper/ZooLockTest.java
accumulo/branches/1.5/test/src/test/java/org/apache/accumulo/test/MetaSplitTest.java
accumulo/branches/1.5/test/src/test/java/org/apache/accumulo/test/ShellServerTest.java
accumulo/branches/1.5/test/src/test/java/org/apache/accumulo/test/TestAccumuloSplitRecovery.java
Modified: accumulo/branches/1.5/README
URL:
http://svn.apache.org/viewvc/accumulo/branches/1.5/README?rev=1484644&r1=1484643&r2=1484644&view=diff
==============================================================================
--- accumulo/branches/1.5/README (original)
+++ accumulo/branches/1.5/README Tue May 21 02:12:28 2013
@@ -295,7 +295,7 @@ The public accumulo API is composed of :
* everything under org.apache.accumulo.core.client, excluding impl packages
* Key, Mutation, Value, and Range in org.apache.accumulo.core.data.
- * org.apache.accumulo.server.mini
+ * org.apache.accumulo.mini
To get started using accumulo review the example and the javadoc for the
packages and classes mentioned above.
Propchange: accumulo/branches/1.5/mini/
------------------------------------------------------------------------------
--- svn:ignore (added)
+++ svn:ignore Tue May 21 02:12:28 2013
@@ -0,0 +1,7 @@
+target
+
+.project
+
+.settings
+
+.classpath
Added: accumulo/branches/1.5/mini/pom.xml
URL:
http://svn.apache.org/viewvc/accumulo/branches/1.5/mini/pom.xml?rev=1484644&view=auto
==============================================================================
Binary file - no diff available.
Propchange: accumulo/branches/1.5/mini/pom.xml
------------------------------------------------------------------------------
svn:mime-type = application/xml
Added:
accumulo/branches/1.5/mini/src/main/java/org/apache/accumulo/mini/MiniAccumuloCluster.java
URL:
http://svn.apache.org/viewvc/accumulo/branches/1.5/mini/src/main/java/org/apache/accumulo/mini/MiniAccumuloCluster.java?rev=1484644&view=auto
==============================================================================
---
accumulo/branches/1.5/mini/src/main/java/org/apache/accumulo/mini/MiniAccumuloCluster.java
(added)
+++
accumulo/branches/1.5/mini/src/main/java/org/apache/accumulo/mini/MiniAccumuloCluster.java
Tue May 21 02:12:28 2013
@@ -0,0 +1 @@
+/*
* 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.mini;
import java.io.BufferedReader;
import java.io.BufferedWriter;
import java.io.File;
import java.io.FileWriter;
import java.io.IOException;
import java.io.InputStream;
import java.io.InputStreamReader;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
import java.util.Map.Entry;
import java.util.Properties;
import org.apache.accumulo.core.conf.Property;
import org.apache.accumulo.core.util.UtilWaitThread;
import org.apache.accumulo.server.master.Master;
import org.apache.accumulo.server.tabletserver.TabletServer;
import org.apache.accumulo.server.util.Initialize;
import org.apache.accumulo.server.util.PortUtils;
import org.apache.accumulo.server.util.time.SimpleTimer;
import org.apache.accumulo.start.Main;
import org.apache.zookeeper.server.ZooKeeperServerMain;
/**
* A utility class that will create Zookeeper and Accumulo processes that write
all of their data to a single local directory. This class makes it easy to test
* code against a real Accumulo instance. Its much more accurate for testing
than MockAccumulo, but much slower than MockAccumulo.
*
* @since 1.5.0
*/
public class MiniAccumuloCluster {
private static final String INSTANCE_SECRET = "DONTTELL";
private static final String INSTANCE_NAME = "miniInstance";
private static class LogWriter extends Thread {
private BufferedReader in;
private BufferedWriter out;
/**
* @throws IOException
*/
public LogWriter(InputStream stream, File logFile) throws IOException {
this.setDaemon(true);
this.in = new BufferedReader(new InputStreamReader(stream));
out = new BufferedWriter(new FileWriter(logFile));
SimpleTimer.getInstance().schedule(new Runnable() {
@Override
public void run() {
try {
flush();
} catch (IOException e) {
e.printStackTrace();
}
}
}, 1000, 1000);
}
public synchronized void flush() throws IOException {
if (out != null)
out.flush();
}
@Override
public void run() {
String line;
try {
while ((line = in.readLine()) != null) {
out.append(line);
out.append("\n");
}
synchronized (this) {
out.close();
out = null;
in.close();
}
} catch (IOException e) {
}
}
}
private File libDir;
private File confDir;
private File zooKeeperDir;
private File accumuloDir;
private File zooCfgFile;
private File logDir;
private File walogDir;
private Process zooKeeperProcess;
private Process masterProcess;
private int zooKeeperPort;
private List<LogWriter> logWriters = new
ArrayList<MiniAccumuloCluster.LogWriter>();
private MiniAccumuloConfig config;
private Process[] tabletServerProcesses;
private Process exec(Class<? extends Object> clazz, String... args) throws
IOException {
String javaHome = System.getProperty("java.home");
String javaBin = javaHome + File.separator + "bin" + File.separator +
"java";
String classpath = System.getProperty("java.class.path");
classpath = confDir.getAbsolutePath() + File.pathSeparator + classpath;
String className = clazz.getCanonicalName();
ArrayList<String> argList = new ArrayList<String>();
argList.addAll(Arrays.asList(javaBin, "-cp", classpath, "-Xmx128m",
"-XX:+UseConcMarkSweepGC", "-XX:CMSInitiatingOccupancyFraction=75",
Main.class.getName(), className));
argList.addAll(Arrays.asList(args));
ProcessBuilder builder = new ProcessBuilder(argList);
builder.environment().put("ACCUMULO_HOME",
config.getDir().getAbsolutePath());
builder.environment().put("ACCUMULO_LOG_DIR", logDir.getAbsolutePath());
// if we're running under accumulo.start, we forward these env vars
String env = System.getenv("HADOOP_PREFIX");
if (env != null)
builder.environment().put("HADOOP_PREFIX", env);
env = System.getenv("ZOOKEEPER_HOME");
if (env != null)
builder.environment().put("ZOOKEEPER_HOME", env);
Process process = builder.start();
LogWriter lw;
lw = new LogWriter(process.getErrorStream(), new File(logDir,
clazz.getSimpleName() + "_" + process.hashCode() + ".err"));
logWriters.add(lw);
lw.start();
lw = new LogWriter(process.getInputStream(), new File(logDir,
clazz.getSimpleName() + "_" + process.hashCode() + ".out"));
logWriters.add(lw);
lw.start();
return process;
}
private void appendProp(FileWriter fileWriter, Property key, String value,
Map<String,String> siteConfig) throws IOException {
appendProp(fileWriter, key.getKey(), value, siteConfig);
}
private void appendProp(FileWriter fileWriter, String key, String value,
Map<String,String> siteConfig) throws IOException {
if (!siteConfig.containsKey(key))
fileWriter.append("<property><name>" + key + "</name><value>" + value +
"</value></property>\n");
}
/**
*
* @param dir
* An empty or nonexistant temp directoy that Accumulo and Zookeeper
can store data in. Creating the directory is left to the user. Java 7, Guava,
* and Junit provide methods for creating temporary directories.
* @param rootPassword
* Initial root password for instance.
* @throws IOException
*/
public MiniAccumuloCluster(File dir, String rootPassword) throws IOException {
this(new MiniAccumuloConfig(dir, rootPassword));
}
/**
* @param config
* initial configuration
* @throws IOException
*/
public MiniAccumuloCluster(MiniAccumuloConfig config) throws IOException {
if (config.getDir().exists() && !config.getDir().isDirectory())
throw new IllegalArgumentException("Must pass in directory, " +
config.getDir() + " is a file");
if (config.getDir().exists() && config.getDir().list().length != 0)
throw new IllegalArgumentException("Directory " + config.getDir() + " is
not empty");
this.config = config;
libDir = new File(config.getDir(), "lib");
confDir = new File(config.getDir(), "conf");
accumuloDir = new File(config.getDir(), "accumulo");
zooKeeperDir = new File(config.getDir(), "zookeeper");
logDir = new File(config.getDir(), "logs");
walogDir = new File(config.getDir(), "walogs");
confDir.mkdirs();
accumuloDir.mkdirs();
zooKeeperDir.mkdirs();
logDir.mkdirs();
walogDir.mkdirs();
libDir.mkdirs();
zooKeeperPort = PortUtils.getRandomFreePort();
File siteFile = new File(confDir, "accumulo-site.xml");
FileWriter fileWriter = new FileWriter(siteFile);
fileWriter.append("<configuration>\n");
HashMap<String,String> siteConfig = new
HashMap<String,String>(config.getSiteConfig());
appendProp(fileWriter, Property.INSTANCE_DFS_URI, "file:///", siteConfig);
appendProp(fileWriter, Property.INSTANCE_DFS_DIR,
accumuloDir.getAbsolutePath(), siteConfig);
appendProp(fileWriter, Property.INSTANCE_ZK_HOST, "localhost:" +
zooKeeperPort, siteConfig);
appendProp(fileWriter, Property.INSTANCE_SECRET, INSTANCE_SECRET,
siteConfig);
appendProp(fileWriter, Property.MASTER_CLIENTPORT, "" +
PortUtils.getRandomFreePort(), siteConfig);
appendProp(fileWriter, Property.TSERV_CLIENTPORT, "" +
PortUtils.getRandomFreePort(), siteConfig);
appendProp(fileWriter, Property.TSERV_PORTSEARCH, "true", siteConfig);
appendProp(fileWriter, Property.LOGGER_DIR, walogDir.getAbsolutePath(),
siteConfig);
appendProp(fileWriter, Property.TSERV_DATACACHE_SIZE, "10M", siteConfig);
appendProp(fileWriter, Property.TSERV_INDEXCACHE_SIZE, "10M", siteConfig);
appendProp(fileWriter, Property.TSERV_MAXMEM, "50M", siteConfig);
appendProp(fileWriter, Property.TSERV_WALOG_MAX_SIZE, "100M", siteConfig);
appendProp(fileWriter, Property.TSERV_NATIVEMAP_ENABLED, "false",
siteConfig);
appendProp(fileWriter, Property.TRACE_TOKEN_PROPERTY_PREFIX + ".password",
config.getRootPassword(), siteConfig);
appendProp(fileWriter, Property.TRACE_PORT, "" +
PortUtils.getRandomFreePort(), siteConfig);
// since there is a small amount of memory, check more frequently for
majc... setting may not be needed in 1.5
appendProp(fileWriter, Property.TSERV_MAJC_DELAY, "3", siteConfig);
String cp = System.getenv("ACCUMULO_HOME")+"/lib/.*.jar,"+
"$ZOOKEEPER_HOME/zookeeper[^.].*.jar,"+
"$HADOOP_HOME/[^.].*.jar,"+
"$HADOOP_HOME/lib/[^.].*.jar,"+
"$HADOOP_PREFIX/share/hadoop/common/.*.jar," +
"$HADOOP_PREFIX/share/hadoop/common/lib/.*.jar," +
"$HADOOP_PREFIX/share/hadoop/hdfs/.*.jar," +
"$HADOOP_PREFIX/share/hadoop/mapreduce/.*.jar"
;
appendProp(fileWriter, Property.GENERAL_CLASSPATHS, cp, siteConfig);
appendProp(fileWriter, Property.GENERAL_DYNAMIC_CLASSPATHS,
libDir.getAbsolutePath(), siteConfig);
for (Entry<String,String> entry : siteConfig.entrySet())
fileWriter.append("<property><name>" + entry.getKey() + "</name><value>"
+ entry.getValue() + "</value></property>\n");
fileWriter.append("</configuration>\n");
fileWriter.close();
zooCfgFile = new File(confDir, "zoo.cfg");
fileWriter = new FileWriter(zooCfgFile);
// zookeeper uses Properties to read its config, so use that to write in
order to properly escape things like Windows paths
Properties zooCfg = new Properties();
zooCfg.setProperty("tickTime", "1000");
zooCfg.setProperty("initLimit", "10");
zooCfg.setProperty("syncLimit", "5");
zooCfg.setProperty("clientPort", zooKeeperPort + "");
zooCfg.setProperty("maxClientCnxns", "100");
zooCfg.setProperty("dataDir", zooKeeperDir.getAbsolutePath());
zooCfg.store(fileWriter, null);
fileWriter.close();
}
/**
* Starts Accumulo and Zookeeper processes. Can only be called once.
*
* @throws IOException
* @throws InterruptedException
* @throws IllegalStateException
* if already started
*/
public void start() throws IOException, InterruptedException {
if (zooKeeperProcess != null)
throw new IllegalStateException("Already started");
Runtime.getRuntime().addShutdownHook(new Thread() {
@Override
public void run() {
try {
MiniAccumuloCluster.this.stop();
} catch (IOException e) {
e.printStackTrace();
} catch (InterruptedException e) {
e.printStackTrace();
}
}
});
zooKeeperProcess = exec(Main.class, ZooKeeperServerMain.class.getName(),
zooCfgFile.getAbsolutePath());
// sleep a little bit to let zookeeper come up before calling init, seems
to work better
UtilWaitThread.sleep(250);
Process initProcess = exec(Initialize.class, "--instance-name",
INSTANCE_NAME, "--password", config.getRootPassword(), "--username", "root");
int ret = initProcess.waitFor();
if (ret != 0) {
throw new RuntimeException("Initialize process returned " + ret);
}
tabletServerProcesses = new Process[config.getNumTservers()];
for (int i = 0; i < config.getNumTservers(); i++) {
tabletServerProcesses[i] = exec(TabletServer.class);
}
masterProcess = exec(Master.class);
}
/**
* @return Accumulo instance name
*/
public String getInstanceName() {
return INSTANCE_NAME;
}
/**
* @return zookeeper connection string
*/
public String getZooKeepers() {
return "localhost:" + zooKeeperPort;
}
/**
* Stops Accumulo and Zookeeper processes. If stop is not called, there is a
shutdown hook that is setup to kill the processes. Howerver its probably best to
* call stop in a finally block as soon as possible.
*
* @throws IOException
* @throws InterruptedException
*/
public void stop() throws IOException, InterruptedException {
if (zooKeeperProcess != null)
zooKeeperProcess.destroy();
if (masterProcess != null)
masterProcess.destroy();
if (tabletServerProcesses != null) {
for (Process tserver : tabletServerProcesses) {
tserver.destroy();
}
}
for (LogWriter lw : logWriters)
lw.flush();
}
}
\ No newline at end of file
Added:
accumulo/branches/1.5/mini/src/main/java/org/apache/accumulo/mini/MiniAccumuloConfig.java
URL:
http://svn.apache.org/viewvc/accumulo/branches/1.5/mini/src/main/java/org/apache/accumulo/mini/MiniAccumuloConfig.java?rev=1484644&view=auto
==============================================================================
---
accumulo/branches/1.5/mini/src/main/java/org/apache/accumulo/mini/MiniAccumuloConfig.java
(added)
+++
accumulo/branches/1.5/mini/src/main/java/org/apache/accumulo/mini/MiniAccumuloConfig.java
Tue May 21 02:12:28 2013
@@ -0,0 +1 @@
+/*
* 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.mini;
import java.io.File;
import java.util.Collections;
import java.util.Map;
/**
* Holds configuration for {@link MiniAccumuloCluster}. Required configurations
must be passed to constructor and all other configurations are optional.
*
* @since 1.5.0
*/
public class MiniAccumuloConfig {
private File dir = null;
private String rootPassword = null;
private Map<String,String> siteConfig = Collections.emptyMap();
private int numTservers = 2;
/**
* @param dir
* An empty or nonexistant temp directoy that Accumulo and Zookeeper
can store data in. Creating the directory is left to the user. Java 7, Guava,
* and Junit provide methods for creating temporary directories.
* @param rootPassword
* The initial password for the Accumulo root user
*/
public MiniAccumuloConfig(File dir, String rootPassword) {
this.dir = dir;
this.rootPassword = rootPassword;
}
public File getDir() {
return dir;
}
public String getRootPassword() {
return rootPassword;
}
public int getNumTservers() {
return numTservers;
}
/**
* Calling this method is optional. If not set, it defaults to two.
*
* @param numTservers
* the number of tablet servers that mini accumulo cluster should
start
*/
public MiniAccumuloConfig setNumTservers(int numTservers) {
if (numTservers < 1)
throw new IllegalArgumentException("Must have at least one tablet
server");
this.numTservers = numTservers;
return this;
}
public Map<String,String> getSiteConfig() {
return siteConfig;
}
/**
* Calling this method is optional. If not set, it defautls to an empty map.
*
* @param siteConfig
* key/values that you normally put in accumulo-site.xml can be put
here
*/
public MiniAccumuloConfig setSiteConfig(Map<String,String> siteConfig) {
this.siteConfig = siteConfig;
return this;
}
}
\ No newline at end of file
Added:
accumulo/branches/1.5/mini/src/test/java/org/apache/accumulo/mini/MiniAccumuloClusterTest.java
URL:
http://svn.apache.org/viewvc/accumulo/branches/1.5/mini/src/test/java/org/apache/accumulo/mini/MiniAccumuloClusterTest.java?rev=1484644&view=auto
==============================================================================
---
accumulo/branches/1.5/mini/src/test/java/org/apache/accumulo/mini/MiniAccumuloClusterTest.java
(added)
+++
accumulo/branches/1.5/mini/src/test/java/org/apache/accumulo/mini/MiniAccumuloClusterTest.java
Tue May 21 02:12:28 2013
@@ -0,0 +1 @@
+/*
* 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.mini;
import java.io.File;
import java.util.Collections;
import java.util.Map.Entry;
import java.util.UUID;
import org.apache.accumulo.core.client.BatchWriter;
import org.apache.accumulo.core.client.BatchWriterConfig;
import org.apache.accumulo.core.client.Connector;
import org.apache.accumulo.core.client.IteratorSetting;
import org.apache.accumulo.core.client.Scanner;
import org.apache.accumulo.core.client.ZooKeeperInstance;
import org.apache.accumulo.core.client.security.tokens.PasswordToken;
import org.apache.accumulo.core.conf.Property;
import org.apache.accumulo.core.data.Key;
import org.apache.accumulo.core.data.Mutation;
import org.apache.accumulo.core.data.Value;
import org.apache.accumulo.core.iterators.LongCombiner;
import org.apache.accumulo.core.iterators.user.SummingCombiner;
import org.apache.accumulo.core.security.Authorizations;
import org.apache.accumulo.core.security.ColumnVisibility;
import org.apache.accumulo.core.security.TablePermission;
import org.apache.commons.io.FileUtils;
import org.apache.log4j.Level;
import org.apache.log4j.Logger;
import org.junit.AfterClass;
import org.junit.Assert;
import org.junit.BeforeClass;
import org.junit.Test;
import org.junit.rules.TemporaryFolder;
public class MiniAccumuloClusterTest {
public static TemporaryFolder folder = new TemporaryFolder();
private static MiniAccumuloCluster accumulo;
@BeforeClass
public static void setupMiniCluster() throws Exception {
folder.create();
Logger.getLogger("org.apache.zookeeper").setLevel(Level.ERROR);
accumulo = new MiniAccumuloCluster(folder.getRoot(), "superSecret");
accumulo.start();
}
@Test(timeout = 30000)
public void test() throws Exception {
Connector conn = new ZooKeeperInstance(accumulo.getInstanceName(),
accumulo.getZooKeepers()).getConnector("root", new
PasswordToken("superSecret"));
conn.tableOperations().create("table1");
conn.securityOperations().createLocalUser("user1", new
PasswordToken("pass1"));
conn.securityOperations().changeUserAuthorizations("user1", new
Authorizations("A", "B"));
conn.securityOperations().grantTablePermission("user1", "table1",
TablePermission.WRITE);
conn.securityOperations().grantTablePermission("user1", "table1",
TablePermission.READ);
IteratorSetting is = new IteratorSetting(10, SummingCombiner.class);
SummingCombiner.setEncodingType(is, LongCombiner.Type.STRING);
SummingCombiner.setColumns(is, Collections.singletonList(new
IteratorSetting.Column("META", "COUNT")));
conn.tableOperations().attachIterator("table1", is);
Connector uconn = new ZooKeeperInstance(accumulo.getInstanceName(),
accumulo.getZooKeepers()).getConnector("user1", new PasswordToken("pass1"));
BatchWriter bw = uconn.createBatchWriter("table1", new BatchWriterConfig());
UUID uuid = UUID.randomUUID();
Mutation m = new Mutation(uuid.toString());
m.put("META", "SIZE", new ColumnVisibility("A|B"), "8");
m.put("META", "CRC", new ColumnVisibility("A|B"), "456");
m.put("META", "COUNT", new ColumnVisibility("A|B"), "1");
m.put("DATA", "IMG", new ColumnVisibility("A&B"), "ABCDEFGH");
bw.addMutation(m);
bw.flush();
m = new Mutation(uuid.toString());
m.put("META", "COUNT", new ColumnVisibility("A|B"), "1");
m.put("META", "CRC", new ColumnVisibility("A|B"), "123");
bw.addMutation(m);
bw.close();
int count = 0;
Scanner scanner = uconn.createScanner("table1", new Authorizations("A"));
for (Entry<Key,Value> entry : scanner) {
if (entry.getKey().getColumnQualifierData().toString().equals("COUNT")) {
Assert.assertEquals("2", entry.getValue().toString());
} else if
(entry.getKey().getColumnQualifierData().toString().equals("SIZE")) {
Assert.assertEquals("8", entry.getValue().toString());
} else if
(entry.getKey().getColumnQualifierData().toString().equals("CRC")) {
Assert.assertEquals("123", entry.getValue().toString());
} else {
Assert.assertTrue(false);
}
count++;
}
Assert.assertEquals(3, count);
count = 0;
scanner = uconn.createScanner("table1", new Authorizations("A", "B"));
for (Entry<Key,Value> entry : scanner) {
if (entry.getKey().getColumnQualifierData().toString().equals("IMG")) {
Assert.assertEquals("ABCDEFGH", entry.getValue().toString());
}
count++;
}
Assert.assertEquals(4, count);
conn.tableOperations().delete("table1");
}
@Test(timeout = 60000)
public void testPerTableClasspath() throws Exception {
Connector conn = new ZooKeeperInstance(accumulo.getInstanceName(),
accumulo.getZooKeepers()).getConnector("root", new
PasswordToken("superSecret"));
conn.tableOperations().create("table2");
File jarFile = File.createTempFile("iterator", ".jar");
FileUtils.copyURLToFile(this.getClass().getResource("/FooFilter.jar"),
jarFile);
jarFile.deleteOnExit();
conn.instanceOperations().setProperty(Property.VFS_CONTEXT_CLASSPATH_PROPERTY.getKey()
+ "cx1", jarFile.toURI().toString());
conn.tableOperations().setProperty("table2",
Property.TABLE_CLASSPATH.getKey(), "cx1");
conn.tableOperations().attachIterator("table2", new IteratorSetting(100,
"foocensor", "org.apache.accumulo.test.FooFilter"));
BatchWriter bw = conn.createBatchWriter("table2", new BatchWriterConfig());
Mutation m1 = new Mutation("foo");
m1.put("cf1", "cq1", "v2");
m1.put("cf1", "cq2", "v3");
bw.addMutation(m1);
Mutation m2 = new Mutation("bar");
m2.put("cf1", "cq1", "v6");
m2.put("cf1", "cq2", "v7");
bw.addMutation(m2);
bw.close();
Scanner scanner = conn.createScanner("table2", new Authorizations());
int count = 0;
for (Entry<Key,Value> entry : scanner) {
Assert.assertFalse(entry.getKey().getRowData().toString().toLowerCase().contains("foo"));
count++;
}
Assert.assertEquals(2, count);
conn.instanceOperations().removeProperty(Property.VFS_CONTEXT_CLASSPATH_PROPERTY.getKey()
+ "cx1");
conn.tableOperations().delete("table2");
}
@AfterClass
public static void tearDownMiniCluster() throws Exception {
accumulo.stop();
// folder.delete();
}
}
\ No newline at end of file
Added: accumulo/branches/1.5/mini/src/test/resources/FooFilter.jar
URL:
http://svn.apache.org/viewvc/accumulo/branches/1.5/mini/src/test/resources/FooFilter.jar?rev=1484644&view=auto
==============================================================================
Binary file - no diff available.
Propchange: accumulo/branches/1.5/mini/src/test/resources/FooFilter.jar
------------------------------------------------------------------------------
svn:mime-type = application/octet-stream
Added: accumulo/branches/1.5/mini/src/test/resources/log4j.properties
URL:
http://svn.apache.org/viewvc/accumulo/branches/1.5/mini/src/test/resources/log4j.properties?rev=1484644&view=auto
==============================================================================
--- accumulo/branches/1.5/mini/src/test/resources/log4j.properties (added)
+++ accumulo/branches/1.5/mini/src/test/resources/log4j.properties Tue May 21
02:12:28 2013
@@ -0,0 +1 @@
+# 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.
log4j.rootLogger=INFO, CA
log4j.appender.CA=org.apache.log4j.ConsoleAppender
log4j.appender.CA.layout=org.apache.log4j.PatternLayout
log4j.appender.CA.layout.ConversionPattern=%d{ISO8601} [%-8c{2}] %-5p: %m%n
log4j.logger.org.apache.accumulo.core.client.impl.ServerClient=ERROR
\ No newline at end of file
Modified: accumulo/branches/1.5/pom.xml
URL:
http://svn.apache.org/viewvc/accumulo/branches/1.5/pom.xml?rev=1484644&r1=1484643&r2=1484644&view=diff
==============================================================================
--- accumulo/branches/1.5/pom.xml (original)
+++ accumulo/branches/1.5/pom.xml Tue May 21 02:12:28 2013
@@ -81,6 +81,7 @@
<module>assemble</module>
<module>proxy</module>
<module>test</module>
+ <module>mini</module>
</modules>
<scm>
<connection>scm:svn:http://svn.apache.org/repos/asf/accumulo/branches/1.5</connection>
@@ -219,6 +220,11 @@
</dependency>
<dependency>
<groupId>org.apache.accumulo</groupId>
+ <artifactId>accumulo-mini</artifactId>
+ <version>${project.version}</version>
+ </dependency>
+ <dependency>
+ <groupId>org.apache.accumulo</groupId>
<artifactId>accumulo-proxy</artifactId>
<version>${project.version}</version>
</dependency>
Modified: accumulo/branches/1.5/proxy/pom.xml
URL:
http://svn.apache.org/viewvc/accumulo/branches/1.5/proxy/pom.xml?rev=1484644&r1=1484643&r2=1484644&view=diff
==============================================================================
--- accumulo/branches/1.5/proxy/pom.xml (original)
+++ accumulo/branches/1.5/proxy/pom.xml Tue May 21 02:12:28 2013
@@ -39,7 +39,7 @@
</dependency>
<dependency>
<groupId>org.apache.accumulo</groupId>
- <artifactId>accumulo-server</artifactId>
+ <artifactId>accumulo-mini</artifactId>
</dependency>
<dependency>
<groupId>org.apache.thrift</groupId>
Modified:
accumulo/branches/1.5/proxy/src/main/java/org/apache/accumulo/proxy/Proxy.java
URL:
http://svn.apache.org/viewvc/accumulo/branches/1.5/proxy/src/main/java/org/apache/accumulo/proxy/Proxy.java?rev=1484644&r1=1484643&r2=1484644&view=diff
==============================================================================
---
accumulo/branches/1.5/proxy/src/main/java/org/apache/accumulo/proxy/Proxy.java
(original)
+++
accumulo/branches/1.5/proxy/src/main/java/org/apache/accumulo/proxy/Proxy.java
Tue May 21 02:12:28 2013
@@ -25,7 +25,7 @@ import java.util.Properties;
import org.apache.accumulo.core.cli.Help;
import org.apache.accumulo.proxy.thrift.AccumuloProxy;
-import org.apache.accumulo.server.mini.MiniAccumuloCluster;
+import org.apache.accumulo.mini.MiniAccumuloCluster;
import org.apache.log4j.Logger;
import org.apache.thrift.TProcessor;
import org.apache.thrift.protocol.TCompactProtocol;
Modified:
accumulo/branches/1.5/proxy/src/test/java/org/apache/accumulo/proxy/SimpleTest.java
URL:
http://svn.apache.org/viewvc/accumulo/branches/1.5/proxy/src/test/java/org/apache/accumulo/proxy/SimpleTest.java?rev=1484644&r1=1484643&r2=1484644&view=diff
==============================================================================
---
accumulo/branches/1.5/proxy/src/test/java/org/apache/accumulo/proxy/SimpleTest.java
(original)
+++
accumulo/branches/1.5/proxy/src/test/java/org/apache/accumulo/proxy/SimpleTest.java
Tue May 21 02:12:28 2013
@@ -80,7 +80,7 @@ import org.apache.accumulo.proxy.thrift.
import org.apache.accumulo.proxy.thrift.UnknownScanner;
import org.apache.accumulo.proxy.thrift.UnknownWriter;
import org.apache.accumulo.proxy.thrift.WriterOptions;
-import org.apache.accumulo.server.mini.MiniAccumuloCluster;
+import org.apache.accumulo.mini.MiniAccumuloCluster;
import org.apache.accumulo.server.util.PortUtils;
import org.apache.accumulo.test.functional.SlowIterator;
import org.apache.commons.io.FileUtils;
Modified: accumulo/branches/1.5/server/src/test/resources/log4j.properties
URL:
http://svn.apache.org/viewvc/accumulo/branches/1.5/server/src/test/resources/log4j.properties?rev=1484644&r1=1484643&r2=1484644&view=diff
==============================================================================
--- accumulo/branches/1.5/server/src/test/resources/log4j.properties (original)
+++ accumulo/branches/1.5/server/src/test/resources/log4j.properties Tue May 21
02:12:28 2013
@@ -19,4 +19,3 @@ log4j.appender.CA.layout=org.apache.log4
log4j.appender.CA.layout.ConversionPattern=%d{ISO8601} [%-8c{2}] %-5p: %m%n
log4j.logger.org.apache.accumulo.server.util.TabletIterator=ERROR
-log4j.logger.org.apache.accumulo.core.client.impl.ServerClient=ERROR
Modified: accumulo/branches/1.5/test/pom.xml
URL:
http://svn.apache.org/viewvc/accumulo/branches/1.5/test/pom.xml?rev=1484644&r1=1484643&r2=1484644&view=diff
==============================================================================
--- accumulo/branches/1.5/test/pom.xml (original)
+++ accumulo/branches/1.5/test/pom.xml Tue May 21 02:12:28 2013
@@ -43,6 +43,10 @@
</dependency>
<dependency>
<groupId>org.apache.accumulo</groupId>
+ <artifactId>accumulo-mini</artifactId>
+ </dependency>
+ <dependency>
+ <groupId>org.apache.accumulo</groupId>
<artifactId>accumulo-server</artifactId>
</dependency>
<dependency>
Modified:
accumulo/branches/1.5/test/src/test/java/org/apache/accumulo/fate/zookeeper/ZooLockTest.java
URL:
http://svn.apache.org/viewvc/accumulo/branches/1.5/test/src/test/java/org/apache/accumulo/fate/zookeeper/ZooLockTest.java?rev=1484644&r1=1484643&r2=1484644&view=diff
==============================================================================
---
accumulo/branches/1.5/test/src/test/java/org/apache/accumulo/fate/zookeeper/ZooLockTest.java
(original)
+++
accumulo/branches/1.5/test/src/test/java/org/apache/accumulo/fate/zookeeper/ZooLockTest.java
Tue May 21 02:12:28 2013
@@ -22,7 +22,7 @@ import java.util.List;
import org.apache.accumulo.fate.zookeeper.ZooLock.AsyncLockWatcher;
import org.apache.accumulo.fate.zookeeper.ZooLock.LockLossReason;
-import org.apache.accumulo.server.mini.MiniAccumuloCluster;
+import org.apache.accumulo.mini.MiniAccumuloCluster;
import org.apache.log4j.Level;
import org.apache.log4j.Logger;
import org.apache.zookeeper.CreateMode;
Modified:
accumulo/branches/1.5/test/src/test/java/org/apache/accumulo/test/MetaSplitTest.java
URL:
http://svn.apache.org/viewvc/accumulo/branches/1.5/test/src/test/java/org/apache/accumulo/test/MetaSplitTest.java?rev=1484644&r1=1484643&r2=1484644&view=diff
==============================================================================
---
accumulo/branches/1.5/test/src/test/java/org/apache/accumulo/test/MetaSplitTest.java
(original)
+++
accumulo/branches/1.5/test/src/test/java/org/apache/accumulo/test/MetaSplitTest.java
Tue May 21 02:12:28 2013
@@ -27,8 +27,8 @@ import org.apache.accumulo.core.client.I
import org.apache.accumulo.core.client.ZooKeeperInstance;
import org.apache.accumulo.core.client.admin.TableOperations;
import org.apache.accumulo.core.client.security.tokens.PasswordToken;
-import org.apache.accumulo.server.mini.MiniAccumuloCluster;
-import org.apache.accumulo.server.mini.MiniAccumuloConfig;
+import org.apache.accumulo.mini.MiniAccumuloCluster;
+import org.apache.accumulo.mini.MiniAccumuloConfig;
import org.apache.hadoop.io.Text;
import org.junit.AfterClass;
import org.junit.BeforeClass;
Modified:
accumulo/branches/1.5/test/src/test/java/org/apache/accumulo/test/ShellServerTest.java
URL:
http://svn.apache.org/viewvc/accumulo/branches/1.5/test/src/test/java/org/apache/accumulo/test/ShellServerTest.java?rev=1484644&r1=1484643&r2=1484644&view=diff
==============================================================================
---
accumulo/branches/1.5/test/src/test/java/org/apache/accumulo/test/ShellServerTest.java
(original)
+++
accumulo/branches/1.5/test/src/test/java/org/apache/accumulo/test/ShellServerTest.java
Tue May 21 02:12:28 2013
@@ -47,8 +47,8 @@ import org.apache.accumulo.core.file.Fil
import org.apache.accumulo.core.file.FileSKVWriter;
import org.apache.accumulo.core.util.UtilWaitThread;
import org.apache.accumulo.core.util.shell.Shell;
-import org.apache.accumulo.server.mini.MiniAccumuloCluster;
-import org.apache.accumulo.server.mini.MiniAccumuloConfig;
+import org.apache.accumulo.mini.MiniAccumuloCluster;
+import org.apache.accumulo.mini.MiniAccumuloConfig;
import org.apache.accumulo.server.trace.TraceServer;
import org.apache.commons.io.FileUtils;
import org.apache.hadoop.conf.Configuration;
Modified:
accumulo/branches/1.5/test/src/test/java/org/apache/accumulo/test/TestAccumuloSplitRecovery.java
URL:
http://svn.apache.org/viewvc/accumulo/branches/1.5/test/src/test/java/org/apache/accumulo/test/TestAccumuloSplitRecovery.java?rev=1484644&r1=1484643&r2=1484644&view=diff
==============================================================================
---
accumulo/branches/1.5/test/src/test/java/org/apache/accumulo/test/TestAccumuloSplitRecovery.java
(original)
+++
accumulo/branches/1.5/test/src/test/java/org/apache/accumulo/test/TestAccumuloSplitRecovery.java
Tue May 21 02:12:28 2013
@@ -35,7 +35,7 @@ import org.apache.accumulo.core.data.Ran
import org.apache.accumulo.core.data.Value;
import org.apache.accumulo.core.security.TablePermission;
import org.apache.accumulo.core.util.UtilWaitThread;
-import org.apache.accumulo.server.mini.MiniAccumuloCluster;
+import org.apache.accumulo.mini.MiniAccumuloCluster;
import org.apache.hadoop.io.Text;
import org.junit.After;
import org.junit.Before;