Modified: accumulo/branches/ACCUMULO-259/server/src/main/java/org/apache/accumulo/server/tabletserver/TabletServer.java URL: http://svn.apache.org/viewvc/accumulo/branches/ACCUMULO-259/server/src/main/java/org/apache/accumulo/server/tabletserver/TabletServer.java?rev=1437726&r1=1437725&r2=1437726&view=diff ============================================================================== --- accumulo/branches/ACCUMULO-259/server/src/main/java/org/apache/accumulo/server/tabletserver/TabletServer.java (original) +++ accumulo/branches/ACCUMULO-259/server/src/main/java/org/apache/accumulo/server/tabletserver/TabletServer.java Wed Jan 23 20:51:59 2013 @@ -110,6 +110,7 @@ import org.apache.accumulo.core.security import org.apache.accumulo.core.security.thrift.ThriftInstanceTokenWrapper; import org.apache.accumulo.core.security.thrift.ThriftSecurityException; import org.apache.accumulo.core.security.tokens.InstanceTokenWrapper; +import org.apache.accumulo.core.tabletserver.thrift.ActiveCompaction; import org.apache.accumulo.core.tabletserver.thrift.ActiveScan; import org.apache.accumulo.core.tabletserver.thrift.ConstraintViolationException; import org.apache.accumulo.core.tabletserver.thrift.NoSuchScanIDException; @@ -159,10 +160,12 @@ import org.apache.accumulo.server.securi import org.apache.accumulo.server.security.SecurityConstants; import org.apache.accumulo.server.security.SecurityOperation; import org.apache.accumulo.server.security.SecurityUtil; +import org.apache.accumulo.server.tabletserver.Compactor.CompactionInfo; import org.apache.accumulo.server.tabletserver.Tablet.CommitSession; import org.apache.accumulo.server.tabletserver.Tablet.KVEntry; import org.apache.accumulo.server.tabletserver.Tablet.LookupResult; import org.apache.accumulo.server.tabletserver.Tablet.MajorCompactionReason; +import org.apache.accumulo.server.tabletserver.Tablet.MinorCompactionReason; import org.apache.accumulo.server.tabletserver.Tablet.ScanBatch; import org.apache.accumulo.server.tabletserver.Tablet.Scanner; import org.apache.accumulo.server.tabletserver.Tablet.SplitInfo; @@ -2103,6 +2106,24 @@ public class TabletServer extends Abstra } } + @Override + public List<ActiveCompaction> getActiveCompactions(TInfo tinfo, ThriftInstanceTokenWrapper credentials) throws ThriftSecurityException, TException { + try { + checkPermission(new InstanceTokenWrapper(credentials), null, true, "getActiveCompactions"); + } catch (ThriftSecurityException e) { + log.error(e, e); + throw new RuntimeException(e); + } + + List<CompactionInfo> compactions = Compactor.getRunningCompactions(); + List<ActiveCompaction> ret = new ArrayList<ActiveCompaction>(compactions.size()); + + for (CompactionInfo compactionInfo : compactions) { + ret.add(compactionInfo.toThrift()); + } + + return ret; + } } private class SplitRunner implements Runnable { @@ -2174,7 +2195,7 @@ public class TabletServer extends Abstra if (tablet.getLogCount() >= maxLogEntriesPerTablet) { log.debug("Initiating minor compaction for " + tablet.getExtent() + " because it has " + tablet.getLogCount() + " write ahead logs"); - tablet.initiateMinorCompaction(); + tablet.initiateMinorCompaction(MinorCompactionReason.SYSTEM); } synchronized (tablet) { @@ -2500,7 +2521,7 @@ public class TabletServer extends Abstra * it to the logs (the file will be in !METADATA, preventing replay of compacted data)... but do not want a majc to wipe the file out from !METADATA * and then have another process failure... this could cause duplicate data to replay */ - if (tablet.getNumEntriesInMemory() > 0 && !tablet.minorCompactNow()) { + if (tablet.getNumEntriesInMemory() > 0 && !tablet.minorCompactNow(MinorCompactionReason.SYSTEM)) { throw new RuntimeException("Minor compaction after recovery fails for " + extentToOpen); }
Modified: accumulo/branches/ACCUMULO-259/server/src/main/java/org/apache/accumulo/server/tabletserver/TabletServerResourceManager.java URL: http://svn.apache.org/viewvc/accumulo/branches/ACCUMULO-259/server/src/main/java/org/apache/accumulo/server/tabletserver/TabletServerResourceManager.java?rev=1437726&r1=1437725&r2=1437726&view=diff ============================================================================== --- accumulo/branches/ACCUMULO-259/server/src/main/java/org/apache/accumulo/server/tabletserver/TabletServerResourceManager.java (original) +++ accumulo/branches/ACCUMULO-259/server/src/main/java/org/apache/accumulo/server/tabletserver/TabletServerResourceManager.java Wed Jan 23 20:51:59 2013 @@ -51,6 +51,7 @@ import org.apache.accumulo.core.util.Uti import org.apache.accumulo.server.conf.ServerConfiguration; import org.apache.accumulo.server.tabletserver.FileManager.ScanFileManager; import org.apache.accumulo.server.tabletserver.Tablet.MajorCompactionReason; +import org.apache.accumulo.server.tabletserver.Tablet.MinorCompactionReason; import org.apache.accumulo.server.util.time.SimpleTimer; import org.apache.accumulo.start.classloader.vfs.AccumuloVFSClassLoader; import org.apache.hadoop.fs.FileSystem; @@ -349,7 +350,7 @@ public class TabletServerResourceManager continue; } - if (!tabletReport.getTablet().initiateMinorCompaction()) { + if (!tabletReport.getTablet().initiateMinorCompaction(MinorCompactionReason.SYSTEM)) { if (tabletReport.getTablet().isClosed()) { tabletReports.remove(tabletReport.getExtent()); log.debug("Ignoring memory manager recommendation: not minor compacting closed tablet " + keyExtent); @@ -545,7 +546,7 @@ public class TabletServerResourceManager // when too many files are open, we may want tablets to compact down // to one map file Map<String,Long> findMapFilesToCompact(SortedMap<String,DataFileValue> tabletFiles, MajorCompactionReason reason) { - if (reason == MajorCompactionReason.ALL) { + if (reason == MajorCompactionReason.USER) { Map<String,Long> files = new HashMap<String,Long>(); for (Entry<String,DataFileValue> entry : tabletFiles.entrySet()) { files.put(entry.getKey(), entry.getValue().getSize()); @@ -634,7 +635,7 @@ public class TabletServerResourceManager // int threshold; - if (reason == MajorCompactionReason.ALL) + if (reason == MajorCompactionReason.USER) return true; if (reason == MajorCompactionReason.IDLE) { Modified: accumulo/branches/ACCUMULO-259/server/src/main/java/org/apache/accumulo/server/test/continuous/ContinuousMoru.java URL: http://svn.apache.org/viewvc/accumulo/branches/ACCUMULO-259/server/src/main/java/org/apache/accumulo/server/test/continuous/ContinuousMoru.java?rev=1437726&r1=1437725&r2=1437726&view=diff ============================================================================== --- accumulo/branches/ACCUMULO-259/server/src/main/java/org/apache/accumulo/server/test/continuous/ContinuousMoru.java (original) +++ accumulo/branches/ACCUMULO-259/server/src/main/java/org/apache/accumulo/server/test/continuous/ContinuousMoru.java Wed Jan 23 20:51:59 2013 @@ -44,8 +44,8 @@ import com.beust.jcommander.Parameter; import com.beust.jcommander.validators.PositiveInteger; /** - * A map only job that reads a table created by continuous ingest and creates doubly linked list. This map reduce job tests the ability of a map only job to read and - * write to accumulo at the same time. This map reduce job mutates the table in such a way that it should not create any undefined nodes. + * A map only job that reads a table created by continuous ingest and creates doubly linked list. This map reduce job tests the ability of a map only job to + * read and write to accumulo at the same time. This map reduce job mutates the table in such a way that it should not create any undefined nodes. * */ public class ContinuousMoru extends Configured implements Tool { @@ -70,7 +70,8 @@ public class ContinuousMoru extends Conf private long count; private static final ColumnVisibility EMPTY_VIS = new ColumnVisibility(); - + + @Override public void setup(Context context) throws IOException, InterruptedException { int max_cf = context.getConfiguration().getInt(MAX_CF, -1); int max_cq = context.getConfiguration().getInt(MAX_CQ, -1); @@ -88,6 +89,7 @@ public class ContinuousMoru extends Conf count = 0; } + @Override public void map(Key key, Value data, Context context) throws IOException, InterruptedException { ContinuousWalk.validate(key, data); @@ -100,8 +102,7 @@ public class ContinuousMoru extends Conf if (offset > 0) { long rowLong = Long.parseLong(new String(val, offset, 16), 16); Mutation m = ContinuousIngest.genMutation(rowLong, random.nextInt(max_cf), random.nextInt(max_cq), EMPTY_VIS, iiId, count++, key.getRowData() - .toArray(), random, - true); + .toArray(), random, true); context.write(null, m); } @@ -112,13 +113,13 @@ public class ContinuousMoru extends Conf } static class Opts extends BaseOpts { - @Parameter(names="--maxColF", description="maximum column family value to use") + @Parameter(names = "--maxColF", description = "maximum column family value to use") short maxColF = Short.MAX_VALUE; - @Parameter(names="--maxColQ", description="maximum column qualifier value to use") + @Parameter(names = "--maxColQ", description = "maximum column qualifier value to use") short maxColQ = Short.MAX_VALUE; - - @Parameter(names="--maxMappers", description="the maximum number of mappers to use", required=true, validateWith=PositiveInteger.class) + + @Parameter(names = "--maxMappers", description = "the maximum number of mappers to use", required = true, validateWith = PositiveInteger.class) int maxMaps = 0; } @@ -137,8 +138,8 @@ public class ContinuousMoru extends Conf // set up ranges try { Set<Range> ranges = opts.getConnector().tableOperations().splitRangeByTablets(opts.getTableName(), new Range(), opts.maxMaps); - AccumuloInputFormat.setRanges(job.getConfiguration(), ranges); - AccumuloInputFormat.disableAutoAdjustRanges(job.getConfiguration()); + AccumuloInputFormat.setRanges(job, ranges); + AccumuloInputFormat.setAutoAdjustRanges(job, false); } catch (Exception e) { throw new IOException(e); } @@ -148,9 +149,7 @@ public class ContinuousMoru extends Conf job.setNumReduceTasks(0); job.setOutputFormatClass(AccumuloOutputFormat.class); - AccumuloOutputFormat.setMaxLatency(job.getConfiguration(), (int) (bwOpts.batchLatency / 1000.0)); - AccumuloOutputFormat.setMaxMutationBufferSize(job.getConfiguration(), bwOpts.batchMemory); - AccumuloOutputFormat.setMaxWriteThreads(job.getConfiguration(), bwOpts.batchThreads); + AccumuloOutputFormat.setBatchWriterOptions(job, bwOpts.getBatchWriterConfig()); Configuration conf = job.getConfiguration(); conf.setLong(MIN, opts.min); Modified: accumulo/branches/ACCUMULO-259/server/src/main/java/org/apache/accumulo/server/test/continuous/ContinuousVerify.java URL: http://svn.apache.org/viewvc/accumulo/branches/ACCUMULO-259/server/src/main/java/org/apache/accumulo/server/test/continuous/ContinuousVerify.java?rev=1437726&r1=1437725&r2=1437726&view=diff ============================================================================== --- accumulo/branches/ACCUMULO-259/server/src/main/java/org/apache/accumulo/server/test/continuous/ContinuousVerify.java (original) +++ accumulo/branches/ACCUMULO-259/server/src/main/java/org/apache/accumulo/server/test/continuous/ContinuousVerify.java Wed Jan 23 20:51:59 2013 @@ -62,6 +62,7 @@ public class ContinuousVerify extends Co private long corrupt = 0; + @Override public void map(Key key, Value data, Context context) throws IOException, InterruptedException { long r = Long.parseLong(key.getRow().toString(), 16); if (r < 0) @@ -101,6 +102,7 @@ public class ContinuousVerify extends Co public static class CReducer extends Reducer<LongWritable,VLongWritable,Text,Text> { private ArrayList<Long> refs = new ArrayList<Long>(); + @Override public void reduce(LongWritable key, Iterable<VLongWritable> values, Context context) throws IOException, InterruptedException { int defCount = 0; @@ -136,19 +138,21 @@ public class ContinuousVerify extends Co } static class Opts extends ClientOnDefaultTable { - @Parameter(names="--output", description="location in HDFS to store the results; must not exist", required=true) + @Parameter(names = "--output", description = "location in HDFS to store the results; must not exist", required = true) String outputDir = "/tmp/continuousVerify"; - @Parameter(names="--maxMappers", description="the maximum number of mappers to use", required=true, validateWith=PositiveInteger.class) + @Parameter(names = "--maxMappers", description = "the maximum number of mappers to use", required = true, validateWith = PositiveInteger.class) int maxMaps = 0; - @Parameter(names="--reducers", description="the number of reducers to use", required=true, validateWith=PositiveInteger.class) + @Parameter(names = "--reducers", description = "the number of reducers to use", required = true, validateWith = PositiveInteger.class) int reducers = 0; - @Parameter(names="--offline", description="perform the verification directly on the files while the table is offline") + @Parameter(names = "--offline", description = "perform the verification directly on the files while the table is offline") boolean scanOffline = false; - public Opts() { super("ci"); } + public Opts() { + super("ci"); + } } @Override @@ -168,17 +172,17 @@ public class ContinuousVerify extends Co conn.tableOperations().clone(opts.getTableName(), clone, true, new HashMap<String,String>(), new HashSet<String>()); conn.tableOperations().offline(clone); } - + job.setInputFormatClass(AccumuloInputFormat.class); - + opts.setAccumuloConfigs(job); - AccumuloInputFormat.setScanOffline(job.getConfiguration(), opts.scanOffline); - + AccumuloInputFormat.setOfflineTableScan(job, opts.scanOffline); + // set up ranges try { Set<Range> ranges = opts.getConnector().tableOperations().splitRangeByTablets(opts.getTableName(), new Range(), opts.maxMaps); - AccumuloInputFormat.setRanges(job.getConfiguration(), ranges); - AccumuloInputFormat.disableAutoAdjustRanges(job.getConfiguration()); + AccumuloInputFormat.setRanges(job, ranges); + AccumuloInputFormat.setAutoAdjustRanges(job, false); } catch (Exception e) { throw new IOException(e); } @@ -193,7 +197,7 @@ public class ContinuousVerify extends Co job.setOutputFormatClass(TextOutputFormat.class); job.getConfiguration().setBoolean("mapred.map.tasks.speculative.execution", opts.scanOffline); - + TextOutputFormat.setOutputPath(job, new Path(opts.outputDir)); job.waitForCompletion(true); Modified: accumulo/branches/ACCUMULO-259/server/src/main/java/org/apache/accumulo/server/test/continuous/GenSplits.java URL: http://svn.apache.org/viewvc/accumulo/branches/ACCUMULO-259/server/src/main/java/org/apache/accumulo/server/test/continuous/GenSplits.java?rev=1437726&r1=1437725&r2=1437726&view=diff ============================================================================== --- accumulo/branches/ACCUMULO-259/server/src/main/java/org/apache/accumulo/server/test/continuous/GenSplits.java (original) +++ accumulo/branches/ACCUMULO-259/server/src/main/java/org/apache/accumulo/server/test/continuous/GenSplits.java Wed Jan 23 20:51:59 2013 @@ -16,30 +16,65 @@ */ package org.apache.accumulo.server.test.continuous; +import java.util.List; + +import com.beust.jcommander.JCommander; +import com.beust.jcommander.Parameter; +import com.beust.jcommander.ParameterException; + /** * */ public class GenSplits { + + static class Opts { + @Parameter(names = "--min", description = "minimum row") + long minRow = 0; + + @Parameter(names = "--max", description = "maximum row") + long maxRow = Long.MAX_VALUE; + + @Parameter(description = "<num tablets>") + List<String> args = null; + } + public static void main(String[] args) { - if (args.length != 1) { - System.err.println("Usage: " + GenSplits.class.getName() + " <num tablets>"); + Opts opts = new Opts(); + JCommander jcommander = new JCommander(opts); + jcommander.setProgramName(GenSplits.class.getSimpleName()); + + try { + jcommander.parse(args); + } catch (ParameterException pe) { + System.err.println(pe.getMessage()); + jcommander.usage(); + System.exit(-1); + } + + if (opts.args == null || opts.args.size() != 1) { + jcommander.usage(); System.exit(-1); } - int numTablets = Integer.parseInt(args[0]); + int numTablets = Integer.parseInt(opts.args.get(0)); if (numTablets < 1) { System.err.println("ERROR: numTablets < 1"); System.exit(-1); } + if (opts.minRow >= opts.maxRow) { + System.err.println("ERROR: min >= max"); + System.exit(-1); + } + int numSplits = numTablets - 1; - long distance = (Long.MAX_VALUE / numTablets) + 1; + long distance = ((opts.maxRow - opts.minRow) / numTablets) + 1; long split = distance; for (int i = 0; i < numSplits; i++) { - String s = String.format("%016x", split); + String s = String.format("%016x", split + opts.minRow); while (s.charAt(s.length() - 1) == '0') { s = s.substring(0, s.length() - 1); Modified: accumulo/branches/ACCUMULO-259/server/src/main/java/org/apache/accumulo/server/test/functional/FunctionalTest.java URL: http://svn.apache.org/viewvc/accumulo/branches/ACCUMULO-259/server/src/main/java/org/apache/accumulo/server/test/functional/FunctionalTest.java?rev=1437726&r1=1437725&r2=1437726&view=diff ============================================================================== --- accumulo/branches/ACCUMULO-259/server/src/main/java/org/apache/accumulo/server/test/functional/FunctionalTest.java (original) +++ accumulo/branches/ACCUMULO-259/server/src/main/java/org/apache/accumulo/server/test/functional/FunctionalTest.java Wed Jan 23 20:51:59 2013 @@ -16,7 +16,6 @@ */ package org.apache.accumulo.server.test.functional; -import java.nio.ByteBuffer; import java.util.Collection; import java.util.HashMap; import java.util.List; @@ -40,6 +39,7 @@ import org.apache.accumulo.core.data.Key import org.apache.accumulo.core.data.Mutation; import org.apache.accumulo.core.data.Range; import org.apache.accumulo.core.data.Value; +import org.apache.accumulo.core.security.tokens.AccumuloToken; import org.apache.accumulo.core.security.tokens.InstanceTokenWrapper; import org.apache.accumulo.core.security.tokens.UserPassToken; import org.apache.accumulo.server.cli.ClientOpts; @@ -106,28 +106,19 @@ public abstract class FunctionalTest { } - private String username = ""; - private String password = ""; + private AccumuloToken<?,?> token = new UserPassToken("", ""); private String instanceName = ""; - protected void setUsername(String username) { - this.username = username; + protected void setToken(AccumuloToken<?,?> token) { + this.token = token; } - protected String getUsername() { - return username; - } - - protected void setPassword(String password) { - this.password = password; - } - - protected String getPassword() { - return password; + protected AccumuloToken<?,?> getToken() { + return token; } protected Connector getConnector() throws AccumuloException, AccumuloSecurityException { - return getInstance().getConnector(username, password.getBytes()); + return getInstance().getConnector(getToken()); } protected Instance getInstance() { @@ -143,7 +134,7 @@ public abstract class FunctionalTest { } protected InstanceTokenWrapper getCredentials() { - return new InstanceTokenWrapper(new UserPassToken(getUsername(), ByteBuffer.wrap(getPassword().getBytes())), getInstance().getInstanceID()); + return new InstanceTokenWrapper(getToken(), getInstance().getInstanceID()); } public abstract Map<String,String> getInitialConfig(); @@ -258,8 +249,7 @@ public abstract class FunctionalTest { FunctionalTest fTest = testClass.newInstance(); //fTest.setMaster(master); - fTest.setUsername(opts.user); - fTest.setPassword(new String(opts.getPassword())); + fTest.setToken(opts.getAccumuloToken()); fTest.setInstanceName(opts.instance); if (opts.opt.equals("getConfig")) { Modified: accumulo/branches/ACCUMULO-259/server/src/main/java/org/apache/accumulo/server/test/functional/VisibilityTest.java URL: http://svn.apache.org/viewvc/accumulo/branches/ACCUMULO-259/server/src/main/java/org/apache/accumulo/server/test/functional/VisibilityTest.java?rev=1437726&r1=1437725&r2=1437726&view=diff ============================================================================== --- accumulo/branches/ACCUMULO-259/server/src/main/java/org/apache/accumulo/server/test/functional/VisibilityTest.java (original) +++ accumulo/branches/ACCUMULO-259/server/src/main/java/org/apache/accumulo/server/test/functional/VisibilityTest.java Wed Jan 23 20:51:59 2013 @@ -205,7 +205,7 @@ public class VisibilityTest extends Func private void queryData(Set<String> allAuths, Set<String> userAuths, Map<Set<String>,Set<String>> expected) throws Exception { - getConnector().securityOperations().changeUserAuthorizations(getUsername(), new Authorizations(nbas(userAuths))); + getConnector().securityOperations().changeUserAuthorizations(getToken().getPrincipal(), new Authorizations(nbas(userAuths))); ArrayList<Set<String>> combos = new ArrayList<Set<String>>(); uniqueCombos(combos, nss(), allAuths); @@ -232,7 +232,7 @@ public class VisibilityTest extends Func Scanner scanner; // should return no records - getConnector().securityOperations().changeUserAuthorizations(getUsername(), new Authorizations("BASE", "DEFLABEL")); + getConnector().securityOperations().changeUserAuthorizations(getToken().getPrincipal(), new Authorizations("BASE", "DEFLABEL")); scanner = getConnector().createScanner("vt2", new Authorizations()); verifyDefault(scanner, 0); Modified: accumulo/branches/ACCUMULO-259/server/src/main/java/org/apache/accumulo/server/test/performance/thrift/NullTserver.java URL: http://svn.apache.org/viewvc/accumulo/branches/ACCUMULO-259/server/src/main/java/org/apache/accumulo/server/test/performance/thrift/NullTserver.java?rev=1437726&r1=1437725&r2=1437726&view=diff ============================================================================== --- accumulo/branches/ACCUMULO-259/server/src/main/java/org/apache/accumulo/server/test/performance/thrift/NullTserver.java (original) +++ accumulo/branches/ACCUMULO-259/server/src/main/java/org/apache/accumulo/server/test/performance/thrift/NullTserver.java Wed Jan 23 20:51:59 2013 @@ -49,6 +49,7 @@ import org.apache.accumulo.core.master.t import org.apache.accumulo.core.security.thrift.ThriftInstanceTokenWrapper; import org.apache.accumulo.core.security.thrift.SecurityErrorCode; import org.apache.accumulo.core.security.thrift.ThriftSecurityException; +import org.apache.accumulo.core.tabletserver.thrift.ActiveCompaction; import org.apache.accumulo.core.tabletserver.thrift.ActiveScan; import org.apache.accumulo.core.tabletserver.thrift.TabletClientService; import org.apache.accumulo.core.tabletserver.thrift.TabletClientService.Iface; @@ -202,6 +203,11 @@ public class NullTserver { @Override public void removeLogs(TInfo tinfo, ThriftInstanceTokenWrapper credentials, List<String> filenames) throws TException { } + + @Override + public List<ActiveCompaction> getActiveCompactions(TInfo tinfo, ThriftInstanceTokenWrapper credentials) throws ThriftSecurityException, TException { + return new ArrayList<ActiveCompaction>(); + } } static class Opts extends Help { Modified: accumulo/branches/ACCUMULO-259/server/src/main/java/org/apache/accumulo/server/test/randomwalk/multitable/CopyTool.java URL: http://svn.apache.org/viewvc/accumulo/branches/ACCUMULO-259/server/src/main/java/org/apache/accumulo/server/test/randomwalk/multitable/CopyTool.java?rev=1437726&r1=1437725&r2=1437726&view=diff ============================================================================== --- accumulo/branches/ACCUMULO-259/server/src/main/java/org/apache/accumulo/server/test/randomwalk/multitable/CopyTool.java (original) +++ accumulo/branches/ACCUMULO-259/server/src/main/java/org/apache/accumulo/server/test/randomwalk/multitable/CopyTool.java Wed Jan 23 20:51:59 2013 @@ -18,12 +18,13 @@ package org.apache.accumulo.server.test. import java.io.IOException; +import org.apache.accumulo.core.Constants; import org.apache.accumulo.core.client.mapreduce.AccumuloInputFormat; import org.apache.accumulo.core.client.mapreduce.AccumuloOutputFormat; 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.security.Authorizations; +import org.apache.accumulo.core.security.tokens.UserPassToken; import org.apache.hadoop.conf.Configured; import org.apache.hadoop.io.Text; import org.apache.hadoop.mapreduce.Job; @@ -35,6 +36,7 @@ public class CopyTool extends Configured protected final Logger log = Logger.getLogger(this.getClass()); public static class SeqMapClass extends Mapper<Key,Value,Text,Mutation> { + @Override public void map(Key key, Value val, Context output) throws IOException, InterruptedException { Mutation m = new Mutation(key.getRow()); m.put(key.getColumnFamily(), key.getColumnQualifier(), val); @@ -42,6 +44,7 @@ public class CopyTool extends Configured } } + @Override public int run(String[] args) throws Exception { Job job = new Job(getConf(), this.getClass().getSimpleName()); job.setJarByClass(this.getClass()); @@ -52,8 +55,10 @@ public class CopyTool extends Configured } job.setInputFormatClass(AccumuloInputFormat.class); - AccumuloInputFormat.setInputInfo(job.getConfiguration(), args[0], args[1].getBytes(), args[2], new Authorizations()); - AccumuloInputFormat.setZooKeeperInstance(job.getConfiguration(), args[3], args[4]); + AccumuloInputFormat.setConnectorInfo(job, new UserPassToken(args[0], args[1])); + AccumuloInputFormat.setInputTableName(job, args[2]); + AccumuloInputFormat.setScanAuthorizations(job, Constants.NO_AUTHS); + AccumuloInputFormat.setZooKeeperInstance(job, args[3], args[4]); job.setMapperClass(SeqMapClass.class); job.setMapOutputKeyClass(Text.class); @@ -62,8 +67,10 @@ public class CopyTool extends Configured job.setNumReduceTasks(0); job.setOutputFormatClass(AccumuloOutputFormat.class); - AccumuloOutputFormat.setOutputInfo(job.getConfiguration(), args[0], args[1].getBytes(), true, args[5]); - AccumuloOutputFormat.setZooKeeperInstance(job.getConfiguration(), args[3], args[4]); + AccumuloOutputFormat.setConnectorInfo(job, new UserPassToken(args[0], args[1])); + AccumuloOutputFormat.setCreateTables(job, true); + AccumuloOutputFormat.setDefaultTableName(job, args[5]); + AccumuloOutputFormat.setZooKeeperInstance(job, args[3], args[4]); job.waitForCompletion(true); return job.isSuccessful() ? 0 : 1; Modified: accumulo/branches/ACCUMULO-259/server/src/main/java/org/apache/accumulo/server/test/randomwalk/sequential/MapRedVerifyTool.java URL: http://svn.apache.org/viewvc/accumulo/branches/ACCUMULO-259/server/src/main/java/org/apache/accumulo/server/test/randomwalk/sequential/MapRedVerifyTool.java?rev=1437726&r1=1437725&r2=1437726&view=diff ============================================================================== --- accumulo/branches/ACCUMULO-259/server/src/main/java/org/apache/accumulo/server/test/randomwalk/sequential/MapRedVerifyTool.java (original) +++ accumulo/branches/ACCUMULO-259/server/src/main/java/org/apache/accumulo/server/test/randomwalk/sequential/MapRedVerifyTool.java Wed Jan 23 20:51:59 2013 @@ -24,7 +24,7 @@ import org.apache.accumulo.core.client.m 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.security.Authorizations; +import org.apache.accumulo.core.security.tokens.UserPassToken; import org.apache.hadoop.conf.Configured; import org.apache.hadoop.io.IntWritable; import org.apache.hadoop.io.NullWritable; @@ -39,6 +39,7 @@ public class MapRedVerifyTool extends Co protected final Logger log = Logger.getLogger(this.getClass()); public static class SeqMapClass extends Mapper<Key,Value,NullWritable,IntWritable> { + @Override public void map(Key row, Value data, Context output) throws IOException, InterruptedException { Integer num = Integer.valueOf(row.getRow().toString()); output.write(NullWritable.get(), new IntWritable(num.intValue())); @@ -74,6 +75,7 @@ public class MapRedVerifyTool extends Co } } + @Override public int run(String[] args) throws Exception { Job job = new Job(getConf(), this.getClass().getSimpleName()); job.setJarByClass(this.getClass()); @@ -84,8 +86,9 @@ public class MapRedVerifyTool extends Co } job.setInputFormatClass(AccumuloInputFormat.class); - AccumuloInputFormat.setInputInfo(job.getConfiguration(), args[0], args[1].getBytes(), args[2], new Authorizations()); - AccumuloInputFormat.setZooKeeperInstance(job.getConfiguration(), args[3], args[4]); + AccumuloInputFormat.setConnectorInfo(job, new UserPassToken(args[0], args[1])); + AccumuloInputFormat.setInputTableName(job, args[2]); + AccumuloInputFormat.setZooKeeperInstance(job, args[3], args[4]); job.setMapperClass(SeqMapClass.class); job.setMapOutputKeyClass(NullWritable.class); @@ -95,8 +98,10 @@ public class MapRedVerifyTool extends Co job.setNumReduceTasks(1); job.setOutputFormatClass(AccumuloOutputFormat.class); - AccumuloOutputFormat.setOutputInfo(job.getConfiguration(), args[0], args[1].getBytes(), true, args[5]); - AccumuloOutputFormat.setZooKeeperInstance(job.getConfiguration(), args[3], args[4]); + AccumuloOutputFormat.setConnectorInfo(job, new UserPassToken(args[0], args[1])); + AccumuloOutputFormat.setCreateTables(job, true); + AccumuloOutputFormat.setDefaultTableName(job, args[5]); + AccumuloOutputFormat.setZooKeeperInstance(job, args[3], args[4]); job.waitForCompletion(true); return job.isSuccessful() ? 0 : 1; Modified: accumulo/branches/ACCUMULO-259/server/src/main/java/org/apache/accumulo/server/util/Admin.java URL: http://svn.apache.org/viewvc/accumulo/branches/ACCUMULO-259/server/src/main/java/org/apache/accumulo/server/util/Admin.java?rev=1437726&r1=1437725&r2=1437726&view=diff ============================================================================== --- accumulo/branches/ACCUMULO-259/server/src/main/java/org/apache/accumulo/server/util/Admin.java (original) +++ accumulo/branches/ACCUMULO-259/server/src/main/java/org/apache/accumulo/server/util/Admin.java Wed Jan 23 20:51:59 2013 @@ -82,7 +82,7 @@ public class Admin { try { InstanceTokenWrapper creds; - if (opts.getPassword() == null) { + if (opts.getAccumuloToken() == null) { creds = SecurityConstants.getSystemCredentials(); } else { creds = opts.getWrappedToken(); Modified: accumulo/branches/ACCUMULO-259/server/src/main/java/org/apache/accumulo/server/util/VerifyTabletAssignments.java URL: http://svn.apache.org/viewvc/accumulo/branches/ACCUMULO-259/server/src/main/java/org/apache/accumulo/server/util/VerifyTabletAssignments.java?rev=1437726&r1=1437725&r2=1437726&view=diff ============================================================================== --- accumulo/branches/ACCUMULO-259/server/src/main/java/org/apache/accumulo/server/util/VerifyTabletAssignments.java (original) +++ accumulo/branches/ACCUMULO-259/server/src/main/java/org/apache/accumulo/server/util/VerifyTabletAssignments.java Wed Jan 23 20:51:59 2013 @@ -16,7 +16,6 @@ */ package org.apache.accumulo.server.util; -import java.nio.ByteBuffer; import java.util.ArrayList; import java.util.Collections; import java.util.HashSet; @@ -48,8 +47,8 @@ import org.apache.accumulo.core.data.thr import org.apache.accumulo.core.data.thrift.TKeyExtent; import org.apache.accumulo.core.data.thrift.TRange; import org.apache.accumulo.core.security.thrift.ThriftSecurityException; +import org.apache.accumulo.core.security.tokens.AccumuloToken; import org.apache.accumulo.core.security.tokens.InstanceTokenWrapper; -import org.apache.accumulo.core.security.tokens.UserPassToken; import org.apache.accumulo.core.tabletserver.thrift.NoSuchScanIDException; import org.apache.accumulo.core.tabletserver.thrift.TabletClientService; import org.apache.accumulo.core.util.ThriftUtil; @@ -93,7 +92,7 @@ public class VerifyTabletAssignments { Connector conn = opts.getConnector(); Instance inst = conn.getInstance(); - MetadataTable.getEntries(conn.getInstance(), new InstanceTokenWrapper(new UserPassToken(opts.user, ByteBuffer.wrap(opts.getPassword())), inst.getInstanceID()), tableName, false, locations, tablets); + MetadataTable.getEntries(conn.getInstance(), new InstanceTokenWrapper(opts.getWrappedToken().toThrift()), tableName, false, locations, tablets); final HashSet<KeyExtent> failures = new HashSet<KeyExtent>(); @@ -124,7 +123,7 @@ public class VerifyTabletAssignments { @Override public void run() { try { - checkTabletServer(conf.getConfiguration(), opts.user, ByteBuffer.wrap(opts.getPassword()), entry, failures); + checkTabletServer(conf.getConfiguration(), opts.getAccumuloToken(), entry, failures); } catch (Exception e) { System.err.println("Failure on ts " + entry.getKey() + " " + e.getMessage()); e.printStackTrace(); @@ -153,12 +152,12 @@ public class VerifyTabletAssignments { } } - private static void checkTabletServer(AccumuloConfiguration conf, final String user, final ByteBuffer pass, Entry<String,List<KeyExtent>> entry, + private static void checkTabletServer(AccumuloConfiguration conf, final AccumuloToken<?,?> token, Entry<String,List<KeyExtent>> entry, HashSet<KeyExtent> failures) throws ThriftSecurityException, TException, NoSuchScanIDException { TabletClientService.Iface client = ThriftUtil.getTServerClient(entry.getKey(), conf); - InstanceTokenWrapper st = new InstanceTokenWrapper(new UserPassToken(user, pass), HdfsZooInstance.getInstance().getInstanceID()); + InstanceTokenWrapper st = new InstanceTokenWrapper(token, HdfsZooInstance.getInstance().getInstanceID()); Map<TKeyExtent,List<TRange>> batch = new TreeMap<TKeyExtent,List<TRange>>(); for (KeyExtent keyExtent : entry.getValue()) { Propchange: accumulo/branches/ACCUMULO-259/src/ ------------------------------------------------------------------------------ Merged /accumulo/trunk/src:r1433135-1437607 Modified: accumulo/branches/ACCUMULO-259/start/src/main/java/org/apache/accumulo/start/Main.java URL: http://svn.apache.org/viewvc/accumulo/branches/ACCUMULO-259/start/src/main/java/org/apache/accumulo/start/Main.java?rev=1437726&r1=1437725&r2=1437726&view=diff ============================================================================== --- accumulo/branches/ACCUMULO-259/start/src/main/java/org/apache/accumulo/start/Main.java (original) +++ accumulo/branches/ACCUMULO-259/start/src/main/java/org/apache/accumulo/start/Main.java Wed Jan 23 20:51:59 2013 @@ -60,6 +60,8 @@ public class Main { runTMP = cl.loadClass("org.apache.accumulo.server.monitor.Monitor"); } else if (args[0].equals("tracer")) { runTMP = cl.loadClass("org.apache.accumulo.server.trace.TraceServer"); + } else if (args[0].equals("proxy")) { + runTMP = cl.loadClass("org.apache.accumulo.proxy.Proxy"); } else if (args[0].equals("classpath")) { vfsClassLoader.getMethod("printClassPath", new Class[] {}).invoke(vfsClassLoader, new Object[] {}); return; Modified: accumulo/branches/ACCUMULO-259/start/src/main/java/org/apache/accumulo/start/classloader/AccumuloClassLoader.java URL: http://svn.apache.org/viewvc/accumulo/branches/ACCUMULO-259/start/src/main/java/org/apache/accumulo/start/classloader/AccumuloClassLoader.java?rev=1437726&r1=1437725&r2=1437726&view=diff ============================================================================== --- accumulo/branches/ACCUMULO-259/start/src/main/java/org/apache/accumulo/start/classloader/AccumuloClassLoader.java (original) +++ accumulo/branches/ACCUMULO-259/start/src/main/java/org/apache/accumulo/start/classloader/AccumuloClassLoader.java Wed Jan 23 20:51:59 2013 @@ -44,19 +44,16 @@ import org.w3c.dom.NodeList; public class AccumuloClassLoader { public static final String CLASSPATH_PROPERTY_NAME = "general.classpaths"; - - public static final String ACCUMULO_CLASSPATH_VALUE = "$ACCUMULO_HOME/conf,\n" - + "$ACCUMULO_HOME/lib/[^.].*.jar,\n" - + "$ZOOKEEPER_HOME/zookeeper[^.].*.jar,\n" - + "$HADOOP_PREFIX/[^.].*.jar,\n" + "$HADOOP_CONF_DIR,\n" - + "$HADOOP_PREFIX/lib/[^.].*.jar,\n"; + + public static final String ACCUMULO_CLASSPATH_VALUE = "$ACCUMULO_HOME/conf,\n" + "$ACCUMULO_HOME/lib/[^.].*.jar,\n" + + "$ZOOKEEPER_HOME/zookeeper[^.].*.jar,\n" + "$HADOOP_PREFIX/[^.].*.jar,\n" + "$HADOOP_CONF_DIR,\n" + "$HADOOP_PREFIX/lib/[^.].*.jar,\n"; private static String SITE_CONF; private static URLClassLoader classloader; - + private static Logger log = Logger.getLogger(AccumuloClassLoader.class); - + static { String configFile = System.getProperty("org.apache.accumulo.config.file", "accumulo-site.xml"); if (System.getenv("ACCUMULO_HOME") != null) { @@ -65,12 +62,12 @@ public class AccumuloClassLoader { } else { SITE_CONF = null; } - - //Register the shutdown hook + + // Register the shutdown hook // TODO // Runtime.getRuntime().addShutdownHook(new Thread(new AccumuloVFSClassLoaderShutdownThread())); } - + /** * Parses and XML Document for a property node for a <name> with the value propertyName if it finds one the function return that property's value for its * <value> node. If not found the function will return null @@ -93,7 +90,7 @@ public class AccumuloClassLoader { } return null; } - + /** * Looks for the site configuration file for Accumulo and if it has a property for propertyName return it otherwise returns defaultValue Should throw an * exception if the default configuration can not be read; @@ -130,7 +127,6 @@ public class AccumuloClassLoader { * * @param classpath * @param env - * @return */ public static String replaceEnvVars(String classpath, Map<String,String> env) { Pattern envPat = Pattern.compile("\\$[A-Za-z][a-zA-Z0-9_]*"); @@ -147,7 +143,7 @@ public class AccumuloClassLoader { } return classpath; } - + /** * Populate the list of URLs with the items in the classpath string * @@ -179,6 +175,7 @@ public class AccumuloClassLoader { else { if (extDir.getParentFile() != null) { File[] extJars = extDir.getParentFile().listFiles(new FilenameFilter() { + @Override public boolean accept(File dir, String name) { return name.matches("^" + extDir.getName()); } @@ -198,7 +195,7 @@ public class AccumuloClassLoader { } } - + private static ArrayList<URL> findAccumuloURLs() throws IOException { String cp = getAccumuloString(AccumuloClassLoader.CLASSPATH_PROPERTY_NAME, AccumuloClassLoader.ACCUMULO_CLASSPATH_VALUE); if (cp == null) @@ -218,11 +215,12 @@ public class AccumuloClassLoader { ArrayList<URL> urls = findAccumuloURLs(); ClassLoader parentClassLoader = ClassLoader.getSystemClassLoader(); - + log.debug("Create 2nd tier ClassLoader using URLs: " + urls.toString()); URLClassLoader aClassLoader = new URLClassLoader(urls.toArray(new URL[urls.size()]), parentClassLoader) { + @Override protected synchronized Class<?> loadClass(String name, boolean resolve) throws ClassNotFoundException { - + if (name.startsWith("org.apache.accumulo.start.classloader.vfs")) { Class<?> c = findLoadedClass(name); if (c == null) { Modified: accumulo/branches/ACCUMULO-259/start/src/main/java/org/apache/accumulo/start/classloader/vfs/ContextManager.java URL: http://svn.apache.org/viewvc/accumulo/branches/ACCUMULO-259/start/src/main/java/org/apache/accumulo/start/classloader/vfs/ContextManager.java?rev=1437726&r1=1437725&r2=1437726&view=diff ============================================================================== --- accumulo/branches/ACCUMULO-259/start/src/main/java/org/apache/accumulo/start/classloader/vfs/ContextManager.java (original) +++ accumulo/branches/ACCUMULO-259/start/src/main/java/org/apache/accumulo/start/classloader/vfs/ContextManager.java Wed Jan 23 20:51:59 2013 @@ -53,9 +53,9 @@ public class ContextManager { loader = null; } } - + private Map<String,Context> contexts = new HashMap<String,Context>(); - + private volatile ContextsConfig config; private FileSystemManager vfs; private ReloadingClassLoader parent; @@ -74,6 +74,7 @@ public class ContextManager { this.preDelegation = preDelegation; } + @Override public boolean equals(Object o) { if (o instanceof ContextConfig) { ContextConfig oc = (ContextConfig) o; @@ -83,6 +84,11 @@ public class ContextManager { return false; } + + @Override + public int hashCode() { + return uris.hashCode() + (preDelegation ? Boolean.TRUE : Boolean.FALSE).hashCode(); + } } public interface ContextsConfig { @@ -101,7 +107,7 @@ public class ContextManager { } public ClassLoader getClassLoader(String contextName) throws FileSystemException { - + ContextConfig cconfig = config.getContextConfig(contextName); if (cconfig == null) @@ -127,7 +133,7 @@ public class ContextManager { if (contextToClose != null) contextToClose.close(); - + ClassLoader loader = context.getClassLoader(); if (loader == null) { // ooppss, context was closed by another thread, try again @@ -135,12 +141,12 @@ public class ContextManager { } return loader; - + } public <U> Class<? extends U> loadClass(String context, String classname, Class<U> extension) throws ClassNotFoundException { try { - return (Class<? extends U>) getClassLoader(context).loadClass(classname).asSubclass(extension); + return getClassLoader(context).loadClass(classname).asSubclass(extension); } catch (IOException e) { throw new ClassNotFoundException("IO Error loading class " + classname, e); } Modified: accumulo/branches/ACCUMULO-259/test/src/main/java/org/apache/accumulo/test/MiniAccumuloCluster.java URL: http://svn.apache.org/viewvc/accumulo/branches/ACCUMULO-259/test/src/main/java/org/apache/accumulo/test/MiniAccumuloCluster.java?rev=1437726&r1=1437725&r2=1437726&view=diff ============================================================================== --- accumulo/branches/ACCUMULO-259/test/src/main/java/org/apache/accumulo/test/MiniAccumuloCluster.java (original) +++ accumulo/branches/ACCUMULO-259/test/src/main/java/org/apache/accumulo/test/MiniAccumuloCluster.java Wed Jan 23 20:51:59 2013 @@ -50,14 +50,12 @@ 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; /** - * @param errorStream - * @param logDir * @throws IOException */ public LogWriter(InputStream stream, File logFile) throws IOException { @@ -81,7 +79,8 @@ public class MiniAccumuloCluster { if (out != null) out.flush(); } - + + @Override public void run() { String line; @@ -96,13 +95,13 @@ public class MiniAccumuloCluster { out = null; in.close(); } - + } catch (IOException e) { e.printStackTrace(); } } } - + private File libDir; private File confDir; private File zooKeeperDir; @@ -113,14 +112,14 @@ public class MiniAccumuloCluster { private Process zooKeeperProcess; private Process masterProcess; - + private int zooKeeperPort; private List<LogWriter> logWriters = new ArrayList<MiniAccumuloCluster.LogWriter>(); - - private MacConfig config; + + private MiniAccumuloConfig config; private Process[] tabletServerProcesses; - + private int getRandomFreePort() { Random r = new Random(); int count = 0; @@ -146,29 +145,28 @@ public class MiniAccumuloCluster { throw new RuntimeException("Unable to find port"); } - + 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", - className)); + argList.addAll(Arrays.asList(javaBin, "-cp", classpath, "-Xmx128m", "-XX:+UseConcMarkSweepGC", "-XX:CMSInitiatingOccupancyFraction=75", 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()); - + Process process = builder.start(); - + LogWriter lw; lw = new LogWriter(process.getErrorStream(), new File(logDir, clazz.getSimpleName() + "_" + process.hashCode() + ".err")); logWriters.add(lw); @@ -176,19 +174,19 @@ public class MiniAccumuloCluster { 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 @@ -196,14 +194,20 @@ public class MiniAccumuloCluster { * and Junit provide methods for creating temporary directories. * @param rootPassword * Initial root password for instance. - * @param siteConfig - * Any system properties that needs to be set before Accumulo processes are started. These are properties that would normally be placed in - * accumulo-site.xml * @throws IOException */ - - public MiniAccumuloCluster(MacConfig config) 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"); @@ -211,7 +215,7 @@ public class MiniAccumuloCluster { 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"); @@ -227,14 +231,14 @@ public class MiniAccumuloCluster { libDir.mkdirs(); zooKeeperPort = 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); @@ -252,7 +256,7 @@ public class MiniAccumuloCluster { appendProp(fileWriter, Property.TSERV_MAJC_DELAY, "3", siteConfig); appendProp(fileWriter, Property.GENERAL_CLASSPATHS, libDir.getAbsolutePath(), 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"); @@ -270,11 +274,11 @@ public class MiniAccumuloCluster { 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. * @@ -283,12 +287,13 @@ public class MiniAccumuloCluster { * @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(); @@ -299,12 +304,12 @@ public class MiniAccumuloCluster { } } }); - + zooKeeperProcess = exec(ZooKeeperServerMain.class, 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()); int ret = initProcess.waitFor(); if (ret != 0) { @@ -315,14 +320,14 @@ public class MiniAccumuloCluster { 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; } @@ -330,11 +335,11 @@ public class MiniAccumuloCluster { /** * @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. @@ -342,7 +347,7 @@ public class MiniAccumuloCluster { * @throws IOException * @throws InterruptedException */ - + public void stop() throws IOException, InterruptedException { if (zooKeeperProcess != null) zooKeeperProcess.destroy(); Modified: accumulo/branches/ACCUMULO-259/test/src/test/java/org/apache/accumulo/test/MiniAccumuloClusterTest.java URL: http://svn.apache.org/viewvc/accumulo/branches/ACCUMULO-259/test/src/test/java/org/apache/accumulo/test/MiniAccumuloClusterTest.java?rev=1437726&r1=1437725&r2=1437726&view=diff ============================================================================== --- accumulo/branches/ACCUMULO-259/test/src/test/java/org/apache/accumulo/test/MiniAccumuloClusterTest.java (original) +++ accumulo/branches/ACCUMULO-259/test/src/test/java/org/apache/accumulo/test/MiniAccumuloClusterTest.java Wed Jan 23 20:51:59 2013 @@ -60,7 +60,7 @@ public class MiniAccumuloClusterTest { Logger.getLogger("org.apache.zookeeper").setLevel(Level.WARN); - accumulo = new MiniAccumuloCluster(new MacConfig(folder.getRoot(), "superSecret").setNumTservers(2)); + accumulo = new MiniAccumuloCluster(folder.getRoot(), "superSecret"); accumulo.start(); Modified: accumulo/branches/ACCUMULO-259/test/system/auto/simple/examples.py URL: http://svn.apache.org/viewvc/accumulo/branches/ACCUMULO-259/test/system/auto/simple/examples.py?rev=1437726&r1=1437725&r2=1437726&view=diff ============================================================================== --- accumulo/branches/ACCUMULO-259/test/system/auto/simple/examples.py (original) +++ accumulo/branches/ACCUMULO-259/test/system/auto/simple/examples.py Wed Jan 23 20:51:59 2013 @@ -253,13 +253,6 @@ class Examples(TestUtilsMixin, unittest. '-p', ROOT_PASSWORD, '-t', 'itest2', '--iterations', 100000]) - self.comment("Inserting data using a map/reduce job") - self.runExample(['org.apache.accumulo.simple.examples.helloworld.InsertWithOutputFormat', - '-i', INSTANCE_NAME, - '-z', ZOOKEEPERS, - '-t', 'helloOutputFormat', - '-u', ROOT, - '-p', ROOT_PASSWORD ]) self.comment("Using some example constraints") self.ashell('\n'.join([ 'createtable testConstraints', Modified: accumulo/branches/ACCUMULO-259/trace/pom.xml URL: http://svn.apache.org/viewvc/accumulo/branches/ACCUMULO-259/trace/pom.xml?rev=1437726&r1=1437725&r2=1437726&view=diff ============================================================================== --- accumulo/branches/ACCUMULO-259/trace/pom.xml (original) +++ accumulo/branches/ACCUMULO-259/trace/pom.xml Wed Jan 23 20:51:59 2013 @@ -43,7 +43,7 @@ <artifactId>exec-maven-plugin</artifactId> <executions> <execution> - <id>generate-core-thrift</id> + <id>generate-thrift</id> <phase>generate-sources</phase> <goals> <goal>exec</goal>