http://git-wip-us.apache.org/repos/asf/accumulo/blob/6bc67602/server/master/src/main/java/org/apache/accumulo/master/tableOps/ExportTable.java ---------------------------------------------------------------------- diff --git a/server/master/src/main/java/org/apache/accumulo/master/tableOps/ExportTable.java b/server/master/src/main/java/org/apache/accumulo/master/tableOps/ExportTable.java index f309879..4661dea8 100644 --- a/server/master/src/main/java/org/apache/accumulo/master/tableOps/ExportTable.java +++ b/server/master/src/main/java/org/apache/accumulo/master/tableOps/ExportTable.java @@ -64,9 +64,9 @@ import org.apache.hadoop.fs.Path; import org.apache.hadoop.io.Text; class ExportInfo implements Serializable { - + private static final long serialVersionUID = 1L; - + public String tableName; public String tableID; public String exportDir; @@ -74,14 +74,14 @@ class ExportInfo implements Serializable { } class WriteExportFiles extends MasterRepo { - + private static final long serialVersionUID = 1L; private final ExportInfo tableInfo; - + WriteExportFiles(ExportInfo tableInfo) { this.tableInfo = tableInfo; } - + private void checkOffline(Connector conn) throws Exception { if (Tables.getTableState(conn.getInstance(), tableInfo.tableID) != TableState.OFFLINE) { Tables.clearCache(conn.getInstance()); @@ -91,43 +91,43 @@ class WriteExportFiles extends MasterRepo { } } } - + @Override public long isReady(long tid, Master master) throws Exception { - + long reserved = Utils.reserveNamespace(tableInfo.namespaceID, tid, false, true, TableOperation.EXPORT) + Utils.reserveTable(tableInfo.tableID, tid, false, true, TableOperation.EXPORT); if (reserved > 0) return reserved; - + Connector conn = master.getConnector(); - + checkOffline(conn); - + Scanner metaScanner = conn.createScanner(MetadataTable.NAME, Authorizations.EMPTY); metaScanner.setRange(new KeyExtent(new Text(tableInfo.tableID), null, null).toMetadataRange()); - + // scan for locations metaScanner.fetchColumnFamily(TabletsSection.CurrentLocationColumnFamily.NAME); metaScanner.fetchColumnFamily(TabletsSection.FutureLocationColumnFamily.NAME); - + if (metaScanner.iterator().hasNext()) { return 500; } - + // use the same range to check for walogs that we used to check for hosted (or future hosted) tablets // this is done as a separate scan after we check for locations, because walogs are okay only if there is no location metaScanner.clearColumns(); metaScanner.fetchColumnFamily(LogColumnFamily.NAME); - + if (metaScanner.iterator().hasNext()) { throw new ThriftTableOperationException(tableInfo.tableID, tableInfo.tableName, TableOperation.EXPORT, TableOperationExceptionType.OTHER, "Write ahead logs found for table"); } - + return 0; } - + @Override public Repo<Master> call(long tid, Master master) throws Exception { try { @@ -141,25 +141,25 @@ class WriteExportFiles extends MasterRepo { Utils.unreserveHdfsDirectory(new Path(tableInfo.exportDir).toString(), tid); return null; } - + @Override public void undo(long tid, Master env) throws Exception { Utils.unreserveNamespace(tableInfo.namespaceID, tid, false); Utils.unreserveTable(tableInfo.tableID, tid, false); } - + public static void exportTable(VolumeManager fs, AccumuloServerContext context, String tableName, String tableID, String exportDir) throws Exception { - + fs.mkdirs(new Path(exportDir)); Path exportMetaFilePath = fs.getVolumeByPath(new Path(exportDir)).getFileSystem().makeQualified(new Path(exportDir, Constants.EXPORT_FILE)); - + FSDataOutputStream fileOut = fs.create(exportMetaFilePath, false); ZipOutputStream zipOut = new ZipOutputStream(fileOut); BufferedOutputStream bufOut = new BufferedOutputStream(zipOut); DataOutputStream dataOut = new DataOutputStream(bufOut); - + try { - + zipOut.putNextEntry(new ZipEntry(Constants.EXPORT_INFO_FILE)); OutputStreamWriter osw = new OutputStreamWriter(dataOut, UTF_8); osw.append(ExportTable.EXPORT_VERSION_PROP + ":" + ExportTable.VERSION + "\n"); @@ -170,72 +170,72 @@ class WriteExportFiles extends MasterRepo { osw.append("srcTableID:" + tableID + "\n"); osw.append(ExportTable.DATA_VERSION_PROP + ":" + ServerConstants.DATA_VERSION + "\n"); osw.append("srcCodeVersion:" + Constants.VERSION + "\n"); - + osw.flush(); dataOut.flush(); - + exportConfig(context, tableID, zipOut, dataOut); dataOut.flush(); - + Map<String,String> uniqueFiles = exportMetadata(fs, context, tableID, zipOut, dataOut); - + dataOut.close(); dataOut = null; - + createDistcpFile(fs, exportDir, exportMetaFilePath, uniqueFiles); - + } finally { if (dataOut != null) dataOut.close(); } } - + private static void createDistcpFile(VolumeManager fs, String exportDir, Path exportMetaFilePath, Map<String,String> uniqueFiles) throws IOException { BufferedWriter distcpOut = new BufferedWriter(new OutputStreamWriter(fs.create(new Path(exportDir, "distcp.txt"), false), UTF_8)); - + try { for (String file : uniqueFiles.values()) { distcpOut.append(file); distcpOut.newLine(); } - + distcpOut.append(exportMetaFilePath.toString()); distcpOut.newLine(); - + distcpOut.close(); distcpOut = null; - + } finally { if (distcpOut != null) distcpOut.close(); } } - + private static Map<String,String> exportMetadata(VolumeManager fs, AccumuloServerContext context, String tableID, ZipOutputStream zipOut, DataOutputStream dataOut) throws IOException, TableNotFoundException, AccumuloException, AccumuloSecurityException { zipOut.putNextEntry(new ZipEntry(Constants.EXPORT_METADATA_FILE)); - + Map<String,String> uniqueFiles = new HashMap<String,String>(); - + Scanner metaScanner = context.getConnector().createScanner(MetadataTable.NAME, Authorizations.EMPTY); metaScanner.fetchColumnFamily(DataFileColumnFamily.NAME); TabletsSection.TabletColumnFamily.PREV_ROW_COLUMN.fetch(metaScanner); TabletsSection.ServerColumnFamily.TIME_COLUMN.fetch(metaScanner); metaScanner.setRange(new KeyExtent(new Text(tableID), null, null).toMetadataRange()); - + for (Entry<Key,Value> entry : metaScanner) { entry.getKey().write(dataOut); entry.getValue().write(dataOut); - + if (entry.getKey().getColumnFamily().equals(DataFileColumnFamily.NAME)) { String path = fs.getFullPath(entry.getKey()).toString(); String tokens[] = path.split("/"); if (tokens.length < 1) { throw new RuntimeException("Illegal path " + path); } - + String filename = tokens[tokens.length - 1]; - + String existingPath = uniqueFiles.get(filename); if (existingPath == null) { uniqueFiles.put(filename, path); @@ -243,30 +243,30 @@ class WriteExportFiles extends MasterRepo { // make sure file names are unique, should only apply for tables with file names generated by Accumulo 1.3 and earlier throw new IOException("Cannot export table with nonunique file names " + filename + ". Major compact table."); } - + } } return uniqueFiles; } - + private static void exportConfig(AccumuloServerContext context, String tableID, ZipOutputStream zipOut, DataOutputStream dataOut) throws AccumuloException, AccumuloSecurityException, TableNotFoundException, IOException { Connector conn = context.getConnector(); - + DefaultConfiguration defaultConfig = AccumuloConfiguration.getDefaultConfiguration(); Map<String,String> siteConfig = conn.instanceOperations().getSiteConfiguration(); Map<String,String> systemConfig = conn.instanceOperations().getSystemConfiguration(); - + TableConfiguration tableConfig = context.getServerConfigurationFactory().getTableConfiguration(tableID); - + OutputStreamWriter osw = new OutputStreamWriter(dataOut, UTF_8); - + // only put props that are different than defaults and higher level configurations zipOut.putNextEntry(new ZipEntry(Constants.EXPORT_TABLE_CONFIG_FILE)); for (Entry<String,String> prop : tableConfig) { if (prop.getKey().startsWith(Property.TABLE_PREFIX.getKey())) { Property key = Property.getPropertyByKey(prop.getKey()); - + if (key == null || !defaultConfig.get(key).equals(prop.getValue())) { if (!prop.getValue().equals(siteConfig.get(prop.getKey())) && !prop.getValue().equals(systemConfig.get(prop.getKey()))) { osw.append(prop.getKey() + "=" + prop.getValue() + "\n"); @@ -274,16 +274,16 @@ class WriteExportFiles extends MasterRepo { } } } - + osw.flush(); } } public class ExportTable extends MasterRepo { private static final long serialVersionUID = 1L; - + private final ExportInfo tableInfo; - + public ExportTable(String tableName, String tableId, String exportDir) { tableInfo = new ExportInfo(); tableInfo.tableName = tableName; @@ -291,25 +291,25 @@ public class ExportTable extends MasterRepo { tableInfo.tableID = tableId; tableInfo.namespaceID = Tables.getNamespaceId(HdfsZooInstance.getInstance(), tableId); } - + @Override public long isReady(long tid, Master environment) throws Exception { return Utils.reserveHdfsDirectory(new Path(tableInfo.exportDir).toString(), tid); } - + @Override public Repo<Master> call(long tid, Master env) throws Exception { return new WriteExportFiles(tableInfo); } - + @Override public void undo(long tid, Master env) throws Exception { Utils.unreserveHdfsDirectory(new Path(tableInfo.exportDir).toString(), tid); } - + public static final int VERSION = 1; - + public static final String DATA_VERSION_PROP = "srcDataVersion"; public static final String EXPORT_VERSION_PROP = "exportVersion"; - + }
http://git-wip-us.apache.org/repos/asf/accumulo/blob/6bc67602/server/master/src/main/java/org/apache/accumulo/master/tableOps/MasterRepo.java ---------------------------------------------------------------------- diff --git a/server/master/src/main/java/org/apache/accumulo/master/tableOps/MasterRepo.java b/server/master/src/main/java/org/apache/accumulo/master/tableOps/MasterRepo.java index dfd287c..8f65fac 100644 --- a/server/master/src/main/java/org/apache/accumulo/master/tableOps/MasterRepo.java +++ b/server/master/src/main/java/org/apache/accumulo/master/tableOps/MasterRepo.java @@ -21,29 +21,29 @@ import org.apache.accumulo.master.Master; import org.apache.log4j.Logger; public abstract class MasterRepo implements Repo<Master> { - + private static final long serialVersionUID = 1L; protected static final Logger log = Logger.getLogger(MasterRepo.class); - + @Override public long isReady(long tid, Master environment) throws Exception { return 0; } - + @Override public void undo(long tid, Master environment) throws Exception {} - + @Override public String getDescription() { return this.getClass().getSimpleName(); } - + @Override public String getReturn() { return null; } - + @Override abstract public Repo<Master> call(long tid, Master environment) throws Exception; - + } http://git-wip-us.apache.org/repos/asf/accumulo/blob/6bc67602/server/master/src/main/java/org/apache/accumulo/master/tableOps/TableRangeOp.java ---------------------------------------------------------------------- diff --git a/server/master/src/main/java/org/apache/accumulo/master/tableOps/TableRangeOp.java b/server/master/src/main/java/org/apache/accumulo/master/tableOps/TableRangeOp.java index ccb5d69..68c3e72 100644 --- a/server/master/src/main/java/org/apache/accumulo/master/tableOps/TableRangeOp.java +++ b/server/master/src/main/java/org/apache/accumulo/master/tableOps/TableRangeOp.java @@ -32,14 +32,14 @@ import org.apache.hadoop.io.Text; /** * Merge makes things hard. - * + * * Typically, a client will read the list of tablets, and begin an operation on that tablet at the location listed in the metadata table. When a tablet splits, * the information read from the metadata table doesn't match reality, so the operation fails, and must be retried. But the operation will take place either on * the parent, or at a later time on the children. It won't take place on just half of the tablet. - * + * * However, when a merge occurs, the operation may have succeeded on one section of the merged area, and not on the others, when the merge occurs. There is no * way to retry the request at a later time on an unmodified tablet. - * + * * The code below uses read-write lock to prevent some operations while a merge is taking place. Normal operations, like bulk imports, will grab the read lock * and prevent merges (writes) while they run. Merge operations will lock out some operations while they run. */ @@ -87,8 +87,7 @@ public class TableRangeOp extends MasterRepo { @Override public long isReady(long tid, Master environment) throws Exception { String namespaceId = Tables.getNamespaceId(environment.getInstance(), tableId); - return Utils.reserveNamespace(namespaceId, tid, false, true, TableOperation.MERGE) - + Utils.reserveTable(tableId, tid, true, true, TableOperation.MERGE); + return Utils.reserveNamespace(namespaceId, tid, false, true, TableOperation.MERGE) + Utils.reserveTable(tableId, tid, true, true, TableOperation.MERGE); } public TableRangeOp(MergeInfo.Operation op, String tableId, Text startRow, Text endRow) throws ThriftTableOperationException { http://git-wip-us.apache.org/repos/asf/accumulo/blob/6bc67602/server/master/src/main/java/org/apache/accumulo/master/tableOps/TraceRepo.java ---------------------------------------------------------------------- diff --git a/server/master/src/main/java/org/apache/accumulo/master/tableOps/TraceRepo.java b/server/master/src/main/java/org/apache/accumulo/master/tableOps/TraceRepo.java index 2571030..43f27bd 100644 --- a/server/master/src/main/java/org/apache/accumulo/master/tableOps/TraceRepo.java +++ b/server/master/src/main/java/org/apache/accumulo/master/tableOps/TraceRepo.java @@ -23,23 +23,23 @@ import org.apache.accumulo.core.trace.thrift.TInfo; import org.apache.accumulo.fate.Repo; /** - * + * */ public class TraceRepo<T> implements Repo<T> { - + private static final long serialVersionUID = 1L; - + long traceId; long parentId; Repo<T> repo; - + public TraceRepo(Repo<T> repo) { this.repo = repo; TInfo tinfo = Tracer.traceInfo(); traceId = tinfo.traceId; parentId = tinfo.parentId; } - + @Override public long isReady(long tid, T environment) throws Exception { Span span = Trace.trace(new TInfo(traceId, parentId), repo.getDescription()); @@ -49,7 +49,7 @@ public class TraceRepo<T> implements Repo<T> { span.stop(); } } - + @Override public Repo<T> call(long tid, T environment) throws Exception { Span span = Trace.trace(new TInfo(traceId, parentId), repo.getDescription()); @@ -62,7 +62,7 @@ public class TraceRepo<T> implements Repo<T> { span.stop(); } } - + @Override public void undo(long tid, T environment) throws Exception { Span span = Trace.trace(new TInfo(traceId, parentId), repo.getDescription()); @@ -72,15 +72,15 @@ public class TraceRepo<T> implements Repo<T> { span.stop(); } } - + @Override public String getDescription() { return repo.getDescription(); } - + @Override public String getReturn() { return repo.getReturn(); } - + } http://git-wip-us.apache.org/repos/asf/accumulo/blob/6bc67602/server/master/src/main/java/org/apache/accumulo/master/tableOps/Utils.java ---------------------------------------------------------------------- diff --git a/server/master/src/main/java/org/apache/accumulo/master/tableOps/Utils.java b/server/master/src/main/java/org/apache/accumulo/master/tableOps/Utils.java index 64947fb..0f6025a 100644 --- a/server/master/src/main/java/org/apache/accumulo/master/tableOps/Utils.java +++ b/server/master/src/main/java/org/apache/accumulo/master/tableOps/Utils.java @@ -118,8 +118,7 @@ public class Utils { public static long reserveHdfsDirectory(String directory, long tid) throws KeeperException, InterruptedException { Instance instance = HdfsZooInstance.getInstance(); - String resvPath = ZooUtil.getRoot(instance) + Constants.ZHDFS_RESERVATIONS + "/" - + Base64.encodeBase64String(directory.getBytes(UTF_8)); + String resvPath = ZooUtil.getRoot(instance) + Constants.ZHDFS_RESERVATIONS + "/" + Base64.encodeBase64String(directory.getBytes(UTF_8)); IZooReaderWriter zk = ZooReaderWriter.getInstance(); @@ -131,8 +130,7 @@ public class Utils { public static void unreserveHdfsDirectory(String directory, long tid) throws KeeperException, InterruptedException { Instance instance = HdfsZooInstance.getInstance(); - String resvPath = ZooUtil.getRoot(instance) + Constants.ZHDFS_RESERVATIONS + "/" - + Base64.encodeBase64String(directory.getBytes(UTF_8)); + String resvPath = ZooUtil.getRoot(instance) + Constants.ZHDFS_RESERVATIONS + "/" + Base64.encodeBase64String(directory.getBytes(UTF_8)); ZooReservation.release(ZooReaderWriter.getInstance(), resvPath, String.format("%016x", tid)); } http://git-wip-us.apache.org/repos/asf/accumulo/blob/6bc67602/server/master/src/main/java/org/apache/accumulo/master/tserverOps/ShutdownTServer.java ---------------------------------------------------------------------- diff --git a/server/master/src/main/java/org/apache/accumulo/master/tserverOps/ShutdownTServer.java b/server/master/src/main/java/org/apache/accumulo/master/tserverOps/ShutdownTServer.java index 53c7c6f..6cce8ee 100644 --- a/server/master/src/main/java/org/apache/accumulo/master/tserverOps/ShutdownTServer.java +++ b/server/master/src/main/java/org/apache/accumulo/master/tserverOps/ShutdownTServer.java @@ -24,8 +24,8 @@ import org.apache.accumulo.core.zookeeper.ZooUtil; import org.apache.accumulo.fate.Repo; import org.apache.accumulo.fate.zookeeper.IZooReaderWriter; import org.apache.accumulo.fate.zookeeper.ZooUtil.NodeExistsPolicy; -import org.apache.accumulo.master.Master; import org.apache.accumulo.master.EventCoordinator.Listener; +import org.apache.accumulo.master.Master; import org.apache.accumulo.master.tableOps.MasterRepo; import org.apache.accumulo.server.master.LiveTServerSet.TServerConnection; import org.apache.accumulo.server.master.state.TServerInstance; @@ -35,22 +35,22 @@ import org.apache.log4j.Logger; import org.apache.thrift.transport.TTransportException; public class ShutdownTServer extends MasterRepo { - + private static final long serialVersionUID = 1L; private static final Logger log = Logger.getLogger(ShutdownTServer.class); private TServerInstance server; private boolean force; - + public ShutdownTServer(TServerInstance server, boolean force) { this.server = server; this.force = force; } - + @Override public long isReady(long tid, Master environment) throws Exception { return 0; } - + @Override public Repo<Master> call(long tid, Master master) throws Exception { // suppress assignment of tablets to the server @@ -62,7 +62,7 @@ public class ShutdownTServer extends MasterRepo { zoo.putPersistentData(path, "forced down".getBytes(UTF_8), NodeExistsPolicy.OVERWRITE); return null; } - + // TODO move this to isReady() and drop while loop? - ACCUMULO-1259 Listener listener = master.getEventCoordinator().getListener(); master.shutdownTServer(server); @@ -85,10 +85,10 @@ public class ShutdownTServer extends MasterRepo { } listener.waitForEvents(1000); } - + return null; } - + @Override public void undo(long tid, Master m) throws Exception {} } http://git-wip-us.apache.org/repos/asf/accumulo/blob/6bc67602/server/master/src/test/java/org/apache/accumulo/master/DefaultMapTest.java ---------------------------------------------------------------------- diff --git a/server/master/src/test/java/org/apache/accumulo/master/DefaultMapTest.java b/server/master/src/test/java/org/apache/accumulo/master/DefaultMapTest.java index 3389aa3..c0e9a4a 100644 --- a/server/master/src/test/java/org/apache/accumulo/master/DefaultMapTest.java +++ b/server/master/src/test/java/org/apache/accumulo/master/DefaultMapTest.java @@ -16,13 +16,14 @@ */ package org.apache.accumulo.master; +import static org.junit.Assert.assertEquals; +import static org.junit.Assert.assertTrue; + import org.apache.accumulo.server.util.DefaultMap; import org.junit.Test; -import static org.junit.Assert.*; - public class DefaultMapTest { - + @Test public void testDefaultMap() { DefaultMap<String,String> map = new DefaultMap<String,String>(""); @@ -32,5 +33,5 @@ public class DefaultMapTest { assertEquals(empty, ""); assertTrue(empty == map.get("otherKey")); } - + } http://git-wip-us.apache.org/repos/asf/accumulo/blob/6bc67602/server/master/src/test/java/org/apache/accumulo/master/TestMergeState.java ---------------------------------------------------------------------- diff --git a/server/master/src/test/java/org/apache/accumulo/master/TestMergeState.java b/server/master/src/test/java/org/apache/accumulo/master/TestMergeState.java index 5c46ddc..d5951cc 100644 --- a/server/master/src/test/java/org/apache/accumulo/master/TestMergeState.java +++ b/server/master/src/test/java/org/apache/accumulo/master/TestMergeState.java @@ -54,7 +54,7 @@ import org.junit.Test; import com.google.common.net.HostAndPort; /** - * + * */ public class TestMergeState { http://git-wip-us.apache.org/repos/asf/accumulo/blob/6bc67602/server/master/src/test/java/org/apache/accumulo/master/replication/DistributedWorkQueueWorkAssignerHelperTest.java ---------------------------------------------------------------------- diff --git a/server/master/src/test/java/org/apache/accumulo/master/replication/DistributedWorkQueueWorkAssignerHelperTest.java b/server/master/src/test/java/org/apache/accumulo/master/replication/DistributedWorkQueueWorkAssignerHelperTest.java index feee6d5..789a634 100644 --- a/server/master/src/test/java/org/apache/accumulo/master/replication/DistributedWorkQueueWorkAssignerHelperTest.java +++ b/server/master/src/test/java/org/apache/accumulo/master/replication/DistributedWorkQueueWorkAssignerHelperTest.java @@ -27,7 +27,7 @@ import org.junit.Assert; import org.junit.Test; /** - * + * */ public class DistributedWorkQueueWorkAssignerHelperTest { http://git-wip-us.apache.org/repos/asf/accumulo/blob/6bc67602/server/master/src/test/java/org/apache/accumulo/master/replication/MasterReplicationCoordinatorTest.java ---------------------------------------------------------------------- diff --git a/server/master/src/test/java/org/apache/accumulo/master/replication/MasterReplicationCoordinatorTest.java b/server/master/src/test/java/org/apache/accumulo/master/replication/MasterReplicationCoordinatorTest.java index a2ea329..36e71f8 100644 --- a/server/master/src/test/java/org/apache/accumulo/master/replication/MasterReplicationCoordinatorTest.java +++ b/server/master/src/test/java/org/apache/accumulo/master/replication/MasterReplicationCoordinatorTest.java @@ -30,7 +30,7 @@ import org.junit.Test; import com.google.common.net.HostAndPort; /** - * + * */ public class MasterReplicationCoordinatorTest { http://git-wip-us.apache.org/repos/asf/accumulo/blob/6bc67602/server/master/src/test/java/org/apache/accumulo/master/replication/StatusMakerTest.java ---------------------------------------------------------------------- diff --git a/server/master/src/test/java/org/apache/accumulo/master/replication/StatusMakerTest.java b/server/master/src/test/java/org/apache/accumulo/master/replication/StatusMakerTest.java index 6a8fa4d..7ee3a89 100644 --- a/server/master/src/test/java/org/apache/accumulo/master/replication/StatusMakerTest.java +++ b/server/master/src/test/java/org/apache/accumulo/master/replication/StatusMakerTest.java @@ -54,7 +54,7 @@ import com.google.common.collect.Iterables; import com.google.common.collect.Sets; /** - * + * */ public class StatusMakerTest { http://git-wip-us.apache.org/repos/asf/accumulo/blob/6bc67602/server/master/src/test/java/org/apache/accumulo/master/state/MergeInfoTest.java ---------------------------------------------------------------------- diff --git a/server/master/src/test/java/org/apache/accumulo/master/state/MergeInfoTest.java b/server/master/src/test/java/org/apache/accumulo/master/state/MergeInfoTest.java index d7fc619..8ac3e42 100644 --- a/server/master/src/test/java/org/apache/accumulo/master/state/MergeInfoTest.java +++ b/server/master/src/test/java/org/apache/accumulo/master/state/MergeInfoTest.java @@ -26,7 +26,7 @@ import org.junit.Assert; import org.junit.Test; public class MergeInfoTest { - + MergeInfo readWrite(MergeInfo info) throws Exception { DataOutputBuffer buffer = new DataOutputBuffer(); info.write(buffer); @@ -39,11 +39,11 @@ public class MergeInfoTest { Assert.assertEquals(info.getOperation(), info2.getOperation()); return info2; } - + KeyExtent ke(String tableId, String endRow, String prevEndRow) { return new KeyExtent(new Text(tableId), endRow == null ? null : new Text(endRow), prevEndRow == null ? null : new Text(prevEndRow)); } - + @Test public void testWritable() throws Exception { MergeInfo info; @@ -54,7 +54,7 @@ public class MergeInfoTest { Assert.assertTrue(info.isDelete()); info.setState(MergeState.COMPLETE); } - + @Test public void testNeedsToBeChopped() throws Exception { MergeInfo info = new MergeInfo(ke("x", "b", "a"), MergeInfo.Operation.DELETE); @@ -72,5 +72,5 @@ public class MergeInfoTest { Assert.assertFalse(info.needsToBeChopped(ke("x", "c", "bb"))); Assert.assertTrue(info.needsToBeChopped(ke("x", "b", "a"))); } - + } http://git-wip-us.apache.org/repos/asf/accumulo/blob/6bc67602/server/master/src/test/java/org/apache/accumulo/master/state/RootTabletStateStoreTest.java ---------------------------------------------------------------------- diff --git a/server/master/src/test/java/org/apache/accumulo/master/state/RootTabletStateStoreTest.java b/server/master/src/test/java/org/apache/accumulo/master/state/RootTabletStateStoreTest.java index 3479d35..abceae4 100644 --- a/server/master/src/test/java/org/apache/accumulo/master/state/RootTabletStateStoreTest.java +++ b/server/master/src/test/java/org/apache/accumulo/master/state/RootTabletStateStoreTest.java @@ -34,8 +34,8 @@ import org.apache.accumulo.server.master.state.DistributedStore; import org.apache.accumulo.server.master.state.DistributedStoreException; import org.apache.accumulo.server.master.state.TServerInstance; import org.apache.accumulo.server.master.state.TabletLocationState; -import org.apache.accumulo.server.master.state.ZooTabletStateStore; import org.apache.accumulo.server.master.state.TabletLocationState.BadLocationStateException; +import org.apache.accumulo.server.master.state.ZooTabletStateStore; import org.apache.hadoop.io.Text; import org.junit.Assert; import org.junit.Test; @@ -43,16 +43,16 @@ import org.junit.Test; import com.google.common.net.HostAndPort; public class RootTabletStateStoreTest { - + static class Node { Node(String name) { this.name = name; } - + List<Node> children = new ArrayList<Node>(); String name; byte[] value = new byte[] {}; - + Node find(String name) { for (Node node : children) if (node.name.equals(name)) @@ -60,11 +60,11 @@ public class RootTabletStateStoreTest { return null; } }; - + static class FakeZooStore implements DistributedStore { - + Node root = new Node("/"); - + private Node recurse(Node root, String[] path, int depth) { if (depth == path.length) return root; @@ -73,12 +73,12 @@ public class RootTabletStateStoreTest { return null; return recurse(child, path, depth + 1); } - + private Node navigate(String path) { path = path.replaceAll("/$", ""); return recurse(root, path.split("/"), 1); } - + @Override public List<String> getChildren(String path) throws DistributedStoreException { Node node = navigate(path); @@ -89,17 +89,17 @@ public class RootTabletStateStoreTest { children.add(child.name); return children; } - + @Override public void put(String path, byte[] bs) throws DistributedStoreException { create(path).value = bs; } - + private Node create(String path) { String[] parts = path.split("/"); return recurseCreate(root, parts, 1); } - + private Node recurseCreate(Node root, String[] path, int index) { if (path.length == index) return root; @@ -110,7 +110,7 @@ public class RootTabletStateStoreTest { } return recurseCreate(node, path, index + 1); } - + @Override public void remove(String path) throws DistributedStoreException { String[] parts = path.split("/"); @@ -122,7 +122,7 @@ public class RootTabletStateStoreTest { if (child != null) parent.children.remove(child); } - + @Override public byte[] get(String path) throws DistributedStoreException { Node node = navigate(path); @@ -131,7 +131,7 @@ public class RootTabletStateStoreTest { return null; } } - + @Test public void testFakeZoo() throws DistributedStoreException { DistributedStore store = new FakeZooStore(); @@ -149,7 +149,7 @@ public class RootTabletStateStoreTest { children = store.getChildren("/a/b"); assertEquals(new HashSet<String>(children), new HashSet<String>(Arrays.asList("b"))); } - + @Test public void testRootTabletStateStore() throws DistributedStoreException { ZooTabletStateStore tstore = new ZooTabletStateStore(new FakeZooStore()); @@ -190,18 +190,18 @@ public class RootTabletStateStoreTest { count++; } assertEquals(count, 1); - + KeyExtent notRoot = new KeyExtent(new Text("0"), null, null); try { tstore.setLocations(Collections.singletonList(new Assignment(notRoot, server))); Assert.fail("should not get here"); } catch (IllegalArgumentException ex) {} - + try { tstore.setFutureLocations(Collections.singletonList(new Assignment(notRoot, server))); Assert.fail("should not get here"); } catch (IllegalArgumentException ex) {} - + TabletLocationState broken = null; try { broken = new TabletLocationState(notRoot, server, null, null, null, false); @@ -213,7 +213,7 @@ public class RootTabletStateStoreTest { Assert.fail("should not get here"); } catch (IllegalArgumentException ex) {} } - + // @Test // public void testMetaDataStore() { } // see functional test } http://git-wip-us.apache.org/repos/asf/accumulo/blob/6bc67602/server/monitor/src/main/java/org/apache/accumulo/monitor/Monitor.java ---------------------------------------------------------------------- diff --git a/server/monitor/src/main/java/org/apache/accumulo/monitor/Monitor.java b/server/monitor/src/main/java/org/apache/accumulo/monitor/Monitor.java index 218bcaf..1a2904c 100644 --- a/server/monitor/src/main/java/org/apache/accumulo/monitor/Monitor.java +++ b/server/monitor/src/main/java/org/apache/accumulo/monitor/Monitor.java @@ -523,6 +523,7 @@ public class Monitor { public final long scanCount; public final Long oldestScan; public final long fetched; + ScanStats(List<ActiveScan> active) { this.scanCount = active.size(); long oldest = -1; @@ -535,9 +536,10 @@ public class Monitor { } static final Map<HostAndPort,ScanStats> allScans = new HashMap<HostAndPort,ScanStats>(); - public static Map<HostAndPort, ScanStats> getScans() { + + public static Map<HostAndPort,ScanStats> getScans() { synchronized (allScans) { - return new TreeMap<HostAndPort, ScanStats>(allScans); + return new TreeMap<HostAndPort,ScanStats>(allScans); } } http://git-wip-us.apache.org/repos/asf/accumulo/blob/6bc67602/server/monitor/src/main/java/org/apache/accumulo/monitor/ZooKeeperStatus.java ---------------------------------------------------------------------- diff --git a/server/monitor/src/main/java/org/apache/accumulo/monitor/ZooKeeperStatus.java b/server/monitor/src/main/java/org/apache/accumulo/monitor/ZooKeeperStatus.java index 907d1f1..89e879e 100644 --- a/server/monitor/src/main/java/org/apache/accumulo/monitor/ZooKeeperStatus.java +++ b/server/monitor/src/main/java/org/apache/accumulo/monitor/ZooKeeperStatus.java @@ -33,22 +33,22 @@ import org.apache.thrift.transport.TTransportException; import com.google.common.net.HostAndPort; public class ZooKeeperStatus implements Runnable { - + private static final Logger log = Logger.getLogger(ZooKeeperStatus.class); - + private volatile boolean stop = false; - + public static class ZooKeeperState implements Comparable<ZooKeeperState> { public final String keeper; public final String mode; public final int clients; - + public ZooKeeperState(String keeper, String mode, int clients) { this.keeper = keeper; this.mode = mode; this.clients = clients; } - + @Override public int compareTo(ZooKeeperState other) { if (this == other) { @@ -68,29 +68,29 @@ public class ZooKeeperStatus implements Runnable { } } } - + private static SortedSet<ZooKeeperState> status = new TreeSet<ZooKeeperState>(); - + public static Collection<ZooKeeperState> getZooKeeperStatus() { return status; } - + public void stop() { this.stop = true; } - + @Override public void run() { - + while (!stop) { - + TreeSet<ZooKeeperState> update = new TreeSet<ZooKeeperState>(); - + String zookeepers[] = SiteConfiguration.getInstance().get(Property.INSTANCE_ZK_HOST).split(","); for (String keeper : zookeepers) { int clients = 0; String mode = "unknown"; - + String[] parts = keeper.split(":"); TTransport transport = null; try { @@ -99,7 +99,7 @@ public class ZooKeeperStatus implements Runnable { addr = HostAndPort.fromParts(parts[0], Integer.parseInt(parts[1])); else addr = HostAndPort.fromParts(parts[0], 2181); - + transport = TTimeoutTransport.create(addr, 10 * 1000l); transport.write("stat\n".getBytes(UTF_8), 0, 5); StringBuilder response = new StringBuilder(); @@ -137,5 +137,5 @@ public class ZooKeeperStatus implements Runnable { UtilWaitThread.sleep(5 * 1000); } } - + } http://git-wip-us.apache.org/repos/asf/accumulo/blob/6bc67602/server/monitor/src/main/java/org/apache/accumulo/monitor/servlets/GcStatusServlet.java ---------------------------------------------------------------------- diff --git a/server/monitor/src/main/java/org/apache/accumulo/monitor/servlets/GcStatusServlet.java b/server/monitor/src/main/java/org/apache/accumulo/monitor/servlets/GcStatusServlet.java index 0f0db9e..926eedc 100644 --- a/server/monitor/src/main/java/org/apache/accumulo/monitor/servlets/GcStatusServlet.java +++ b/server/monitor/src/main/java/org/apache/accumulo/monitor/servlets/GcStatusServlet.java @@ -29,18 +29,18 @@ import org.apache.accumulo.monitor.util.celltypes.DurationType; import org.apache.accumulo.monitor.util.celltypes.NumberType; public class GcStatusServlet extends BasicServlet { - + private static final long serialVersionUID = 1L; - + @Override protected String getTitle(HttpServletRequest req) { return "Garbage Collector Status"; } - + @Override protected void pageBody(HttpServletRequest req, HttpServletResponse resp, StringBuilder sb) { GCStatus status = Monitor.getGcStatus(); - + if (status != null) { Table gcActivity = new Table("gcActivity", "Collection Activity"); gcActivity.addSortableColumn("Activity"); @@ -50,7 +50,7 @@ public class GcStatusServlet extends BasicServlet { gcActivity.addSortableColumn("In Use", new NumberType<Long>(), null); gcActivity.addSortableColumn("Errors", new NumberType<Long>(0l, 1l), null); gcActivity.addSortableColumn("Duration", new DurationType(), null); - + if (status.last.finished > 0) gcActivity.addRow("File Collection, Last Cycle", status.last.finished, status.last.candidates, status.last.deleted, status.last.inUse, status.last.errors, status.last.finished - status.last.started); @@ -68,5 +68,5 @@ public class GcStatusServlet extends BasicServlet { banner(sb, "error", "Collector is Unavailable"); } } - + } http://git-wip-us.apache.org/repos/asf/accumulo/blob/6bc67602/server/monitor/src/main/java/org/apache/accumulo/monitor/servlets/JSONServlet.java ---------------------------------------------------------------------- diff --git a/server/monitor/src/main/java/org/apache/accumulo/monitor/servlets/JSONServlet.java b/server/monitor/src/main/java/org/apache/accumulo/monitor/servlets/JSONServlet.java index 09dbb6e..224e1a1 100644 --- a/server/monitor/src/main/java/org/apache/accumulo/monitor/servlets/JSONServlet.java +++ b/server/monitor/src/main/java/org/apache/accumulo/monitor/servlets/JSONServlet.java @@ -36,19 +36,19 @@ import com.google.gson.Gson; public class JSONServlet extends BasicServlet { private static final long serialVersionUID = 1L; - + private Gson gson = new Gson(); - + @Override protected String getTitle(HttpServletRequest req) { return "JSON Report"; } - + @Override protected void pageStart(HttpServletRequest req, HttpServletResponse resp, StringBuilder sb) { resp.setContentType("application/json"); } - + private static Map<String,Object> addServer(String ip, String hostname, double osload, double ingest, double query, double ingestMB, double queryMB, int scans, double scansessions, long holdtime) { Map<String,Object> map = new HashMap<String,Object>(); @@ -64,41 +64,41 @@ public class JSONServlet extends BasicServlet { map.put("holdtime", holdtime); return map; } - + @Override protected void pageBody(HttpServletRequest req, HttpServletResponse resp, StringBuilder sb) { if (Monitor.getMmi() == null || Monitor.getMmi().tableMap == null) { return; } - + Map<String,Object> results = new HashMap<String,Object>(); List<Map<String,Object>> servers = new ArrayList<Map<String,Object>>(); - + for (TabletServerStatus status : Monitor.getMmi().tServerInfo) { TableInfo summary = TableInfoUtil.summarizeTableStats(status); servers.add(addServer(status.name, TServerLinkType.displayName(status.name), status.osLoad, summary.ingestRate, summary.queryRate, summary.ingestByteRate / 1000000.0, summary.queryByteRate / 1000000.0, summary.scans.running + summary.scans.queued, Monitor.getLookupRate(), status.holdTime)); } - + for (Entry<String,Byte> entry : Monitor.getMmi().badTServers.entrySet()) { Map<String,Object> badServer = new HashMap<String,Object>(); badServer.put("ip", entry.getKey()); badServer.put("bad", true); servers.add(badServer); } - + for (DeadServer dead : Monitor.getMmi().deadTabletServers) { Map<String,Object> deadServer = new HashMap<String,Object>(); deadServer.put("ip", dead.server); deadServer.put("dead", true); servers.add(deadServer); } - + results.put("servers", servers); sb.append(gson.toJson(results)); } - + @Override protected void pageEnd(HttpServletRequest req, HttpServletResponse resp, StringBuilder sb) {} } http://git-wip-us.apache.org/repos/asf/accumulo/blob/6bc67602/server/monitor/src/main/java/org/apache/accumulo/monitor/servlets/LogServlet.java ---------------------------------------------------------------------- diff --git a/server/monitor/src/main/java/org/apache/accumulo/monitor/servlets/LogServlet.java b/server/monitor/src/main/java/org/apache/accumulo/monitor/servlets/LogServlet.java index 7c2172a..77f14de 100644 --- a/server/monitor/src/main/java/org/apache/accumulo/monitor/servlets/LogServlet.java +++ b/server/monitor/src/main/java/org/apache/accumulo/monitor/servlets/LogServlet.java @@ -33,14 +33,14 @@ import org.apache.log4j.Level; import org.apache.log4j.spi.LoggingEvent; public class LogServlet extends BasicServlet { - + private static final long serialVersionUID = 1L; - + @Override protected String getTitle(HttpServletRequest req) { return "Recent Logs"; } - + @Override protected void pageBody(HttpServletRequest req, HttpServletResponse resp, StringBuilder sb) { AccumuloConfiguration conf = Monitor.getContext().getConfiguration(); @@ -79,7 +79,7 @@ public class LogServlet extends BasicServlet { default: text.append(c); } - + } StringBuilder builder = new StringBuilder(text.toString()); if (ev.getThrowableStrRep() != null) @@ -95,13 +95,13 @@ public class LogServlet extends BasicServlet { if (!clear) sb.append("<div class='center'><a href='/op?action=clearLog&redir=").append(currentPage(req)).append("'>Clear All Events</a></div>\n"); } - + private static class LogLevelType extends StringType<Level> { @Override public String alignment() { return "center"; } - + @Override public String format(Object obj) { if (obj == null) http://git-wip-us.apache.org/repos/asf/accumulo/blob/6bc67602/server/monitor/src/main/java/org/apache/accumulo/monitor/servlets/MasterServlet.java ---------------------------------------------------------------------- diff --git a/server/monitor/src/main/java/org/apache/accumulo/monitor/servlets/MasterServlet.java b/server/monitor/src/main/java/org/apache/accumulo/monitor/servlets/MasterServlet.java index 2f7086f..64b8648 100644 --- a/server/monitor/src/main/java/org/apache/accumulo/monitor/servlets/MasterServlet.java +++ b/server/monitor/src/main/java/org/apache/accumulo/monitor/servlets/MasterServlet.java @@ -27,8 +27,6 @@ import java.util.Map; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; -import org.apache.accumulo.monitor.util.celltypes.PreciseNumberType; - import org.apache.accumulo.core.client.impl.Tables; import org.apache.accumulo.core.conf.Property; import org.apache.accumulo.core.master.thrift.DeadServer; @@ -42,6 +40,7 @@ import org.apache.accumulo.monitor.util.Table; import org.apache.accumulo.monitor.util.TableRow; import org.apache.accumulo.monitor.util.celltypes.DurationType; import org.apache.accumulo.monitor.util.celltypes.NumberType; +import org.apache.accumulo.monitor.util.celltypes.PreciseNumberType; import org.apache.accumulo.monitor.util.celltypes.ProgressChartType; import org.apache.accumulo.monitor.util.celltypes.StringType; import org.apache.accumulo.server.monitor.DedupedLogEvent; @@ -51,26 +50,26 @@ import org.apache.log4j.Level; import com.google.common.base.Joiner; public class MasterServlet extends BasicServlet { - + private static final long serialVersionUID = 1L; - + @Override protected String getTitle(HttpServletRequest req) { List<String> masters = Monitor.getContext().getInstance().getMasterLocations(); return "Master Server" + (masters.size() == 0 ? "" : ":" + AddressUtil.parseAddress(masters.get(0), false).getHostText()); } - + @Override protected void pageBody(HttpServletRequest req, HttpServletResponse response, StringBuilder sb) throws IOException { Map<String,String> tidToNameMap = Tables.getIdToNameMap(Monitor.getContext().getInstance()); - + doLogEventBanner(sb); TablesServlet.doProblemsBanner(sb); doMasterStatus(req, sb); doRecoveryList(req, sb); TablesServlet.doTableList(req, sb, tidToNameMap); } - + private void doLogEventBanner(StringBuilder sb) { if (LogService.getInstance().getEvents().size() > 0) { int error = 0, warning = 0, total = 0; @@ -90,9 +89,9 @@ public class MasterServlet extends BasicServlet { : "s", warning, warning == 1 ? "" : "s", total)); } } - + private void doMasterStatus(HttpServletRequest req, StringBuilder sb) throws IOException { - + if (Monitor.getMmi() != null) { String gcStatus = "Waiting"; if (Monitor.getGcStatus() != null) { @@ -121,7 +120,7 @@ public class MasterServlet extends BasicServlet { if (Monitor.getMmi().serversShuttingDown != null && Monitor.getMmi().serversShuttingDown.size() > 0 && Monitor.getMmi().state == MasterState.NORMAL) { sb.append("<span class='warning'>Servers being stopped: " + Joiner.on(", ").join(Monitor.getMmi().serversShuttingDown) + "</span>\n"); } - + int guessHighLoad = ManagementFactory.getOperatingSystemMXBean().getAvailableProcessors(); List<String> slaves = new ArrayList<String>(); for (TabletServerStatus up : Monitor.getMmi().tServerInfo) { @@ -131,7 +130,7 @@ public class MasterServlet extends BasicServlet { slaves.add(down.server); } List<String> masters = Monitor.getContext().getInstance().getMasterLocations(); - + Table masterStatus = new Table("masterStatus", "Master Status"); masterStatus.addSortableColumn("Master", new StringType<String>(), "The hostname of the master server"); masterStatus.addSortableColumn("# Online<br />Tablet Servers", new PreciseNumberType((int) (slaves.size() * 0.8 + 1.0), slaves.size(), @@ -165,11 +164,11 @@ public class MasterServlet extends BasicServlet { row.add(ManagementFactory.getOperatingSystemMXBean().getSystemLoadAverage()); masterStatus.addRow(row); masterStatus.generate(req, sb); - + } else banner(sb, "error", "Master Server Not Running"); } - + private void doRecoveryList(HttpServletRequest req, StringBuilder sb) { MasterMonitorInfo mmi = Monitor.getMmi(); if (mmi != null) { @@ -197,5 +196,5 @@ public class MasterServlet extends BasicServlet { recoveryTable.generate(req, sb); } } - + } http://git-wip-us.apache.org/repos/asf/accumulo/blob/6bc67602/server/monitor/src/main/java/org/apache/accumulo/monitor/servlets/ProblemServlet.java ---------------------------------------------------------------------- diff --git a/server/monitor/src/main/java/org/apache/accumulo/monitor/servlets/ProblemServlet.java b/server/monitor/src/main/java/org/apache/accumulo/monitor/servlets/ProblemServlet.java index 4f7da48..1b3e944 100644 --- a/server/monitor/src/main/java/org/apache/accumulo/monitor/servlets/ProblemServlet.java +++ b/server/monitor/src/main/java/org/apache/accumulo/monitor/servlets/ProblemServlet.java @@ -38,31 +38,31 @@ import org.apache.accumulo.server.problems.ProblemReports; import org.apache.accumulo.server.problems.ProblemType; public class ProblemServlet extends BasicServlet { - + private static final long serialVersionUID = 1L; - + @Override protected String getTitle(HttpServletRequest req) { return "Per-Table Problem Report"; } - + @Override protected void pageBody(final HttpServletRequest req, HttpServletResponse resp, StringBuilder sb) { Map<String,String> tidToNameMap = Tables.getIdToNameMap(Monitor.getContext().getInstance()); doProblemSummary(req, sb, tidToNameMap); doProblemDetails(req, sb, req.getParameter("table"), tidToNameMap); } - + private static void doProblemSummary(final HttpServletRequest req, StringBuilder sb, final Map<String,String> tidToNameMap) { if (Monitor.getProblemSummary().isEmpty() && Monitor.getProblemException() == null) return; - + Table problemSummary = new Table("problemSummary", "Problem Summary", "error"); problemSummary.addSortableColumn("Table", new TableProblemLinkType(tidToNameMap), null); for (ProblemType type : ProblemType.values()) problemSummary.addSortableColumn(type.name(), new NumberType<Integer>(), null); problemSummary.addUnsortableColumn("Operations", new ClearTableProblemsLinkType(req, tidToNameMap), null); - + if (Monitor.getProblemException() != null) { StringBuilder cell = new StringBuilder(); cell.append("<b>Failed to obtain problem reports</b> : " + Monitor.getProblemException().getMessage()); @@ -87,12 +87,12 @@ public class ProblemServlet extends BasicServlet { } problemSummary.generate(req, sb); } - + private static void doProblemDetails(final HttpServletRequest req, StringBuilder sb, String tableId, Map<String,String> tidToNameMap) { - + if (Monitor.getProblemException() != null) return; - + ArrayList<ProblemReport> problemReports = new ArrayList<ProblemReport>(); Iterator<ProblemReport> iter = tableId == null ? ProblemReports.getInstance(Monitor.getContext()).iterator() : ProblemReports.getInstance( Monitor.getContext()).iterator(tableId); @@ -109,7 +109,7 @@ public class ProblemServlet extends BasicServlet { problemTable.addSortableColumn("Exception"); problemTable.addUnsortableColumn("Operations", new ClearProblemLinkType(req), null); for (ProblemReport pr : problemReports) { - + TableRow row = problemTable.prepareRow(); row.add(pr.getTableName()); row.add(pr.getProblemType().name()); @@ -122,14 +122,14 @@ public class ProblemServlet extends BasicServlet { } problemTable.generate(req, sb); } - + private static class TableProblemLinkType extends StringType<String> { private Map<String,String> tidToNameMap; - + public TableProblemLinkType(Map<String,String> tidToNameMap) { this.tidToNameMap = tidToNameMap; } - + @Override public String format(Object obj) { if (obj == null) @@ -138,21 +138,21 @@ public class ProblemServlet extends BasicServlet { return String.format("<a href='/problems?table=%s'>%s</a>", encode(table), encode((Tables.getPrintableTableNameFromId(tidToNameMap, table)))); } } - + private static class ClearTableProblemsLinkType extends StringType<String> { private HttpServletRequest req; private Map<String,String> tidToNameMap; - + public ClearTableProblemsLinkType(HttpServletRequest req, Map<String,String> tidToNameMap) { this.req = req; this.tidToNameMap = tidToNameMap; } - + @Override public String alignment() { return "right"; } - + @Override public String format(Object obj) { if (obj == null) @@ -162,19 +162,19 @@ public class ProblemServlet extends BasicServlet { Tables.getPrintableTableNameFromId(tidToNameMap, table)); } } - + private static class ClearProblemLinkType extends CellType<ProblemReport> { private HttpServletRequest req; - + public ClearProblemLinkType(HttpServletRequest req) { this.req = req; } - + @Override public String alignment() { return "right"; } - + @Override public String format(Object obj) { if (obj == null) @@ -183,11 +183,11 @@ public class ProblemServlet extends BasicServlet { return String.format("<a href='/op?table=%s&action=clearProblem&redir=%s&resource=%s&ptype=%s'>clear this problem</a>", encode(p.getTableName()), currentPage(req), encode(p.getResource()), encode(p.getProblemType().name())); } - + @Override public int compare(ProblemReport o1, ProblemReport o2) { return 0; } } - + } http://git-wip-us.apache.org/repos/asf/accumulo/blob/6bc67602/server/monitor/src/main/java/org/apache/accumulo/monitor/servlets/ShellServlet.java ---------------------------------------------------------------------- diff --git a/server/monitor/src/main/java/org/apache/accumulo/monitor/servlets/ShellServlet.java b/server/monitor/src/main/java/org/apache/accumulo/monitor/servlets/ShellServlet.java index 6b2b31f..55145f9 100644 --- a/server/monitor/src/main/java/org/apache/accumulo/monitor/servlets/ShellServlet.java +++ b/server/monitor/src/main/java/org/apache/accumulo/monitor/servlets/ShellServlet.java @@ -49,7 +49,7 @@ public class ShellServlet extends BasicServlet { protected String getTitle(HttpServletRequest req) { return "Shell"; } - + @Override protected void pageBody(HttpServletRequest req, HttpServletResponse response, StringBuilder sb) throws IOException { HttpSession session = req.getSession(true); @@ -216,27 +216,27 @@ public class ShellServlet extends BasicServlet { return "<div id='login'><form method=POST action='" + requestURI + "'>" + "<table><tr><td>Mock: </td><td><input type='checkbox' name='mock' value='mock'></td></tr>" + "<tr><td>Username: </td><td><input type='text' name='user'></td></tr>" - + "<tr><td>Password: </td><td><input type='password' name='pass'></td><td>" - + "<input type='hidden' name='" + CSRF_KEY + "' value='" + csrfToken + "'/><input type='submit' value='Enter'></td></tr></table></form></div>"; + + "<tr><td>Password: </td><td><input type='password' name='pass'></td><td>" + "<input type='hidden' name='" + CSRF_KEY + "' value='" + csrfToken + + "'/><input type='submit' value='Enter'></td></tr></table></form></div>"; } - + private static class StringBuilderOutputStream extends OutputStream { StringBuilder sb = new StringBuilder(); - + @Override public void write(int b) throws IOException { sb.append((char) (0xff & b)); } - + public String get() { return sb.toString(); } - + public void clear() { sb.setLength(0); } } - + private static class ShellExecutionThread extends InputStream implements Runnable { private Shell shell; StringBuilderOutputStream output; @@ -244,7 +244,7 @@ public class ShellServlet extends BasicServlet { private int cmdIndex; private boolean done; private boolean readWait; - + private ShellExecutionThread(String username, String password, String mock) throws IOException { this.done = false; this.cmd = null; @@ -261,7 +261,7 @@ public class ShellServlet extends BasicServlet { throw new IOException("shell config error"); } } - + @Override public synchronized int read() throws IOException { if (cmd == null) { @@ -287,7 +287,7 @@ public class ShellServlet extends BasicServlet { } return c; } - + @Override public synchronized void run() { Thread.currentThread().setName("shell thread"); @@ -308,7 +308,7 @@ public class ShellServlet extends BasicServlet { done = true; this.notifyAll(); } - + public synchronized void addInputString(String s) { if (done) throw new IllegalStateException("adding string to exited shell"); @@ -319,7 +319,7 @@ public class ShellServlet extends BasicServlet { } this.notifyAll(); } - + public synchronized void waitUntilReady() { while (cmd != null) { try { @@ -327,29 +327,29 @@ public class ShellServlet extends BasicServlet { } catch (InterruptedException e) {} } } - + public synchronized String getOutput() { String s = output.get(); output.clear(); return s; } - + public String getPrompt() { return shell.getDefaultPrompt(); } - + public void printInfo() throws IOException { shell.printInfo(); } - + public boolean isMasking() { return shell.isMasking(); } - + public synchronized boolean isWaitingForInput() { return readWait; } - + public boolean isDone() { return done; } http://git-wip-us.apache.org/repos/asf/accumulo/blob/6bc67602/server/monitor/src/main/java/org/apache/accumulo/monitor/servlets/TServersServlet.java ---------------------------------------------------------------------- diff --git a/server/monitor/src/main/java/org/apache/accumulo/monitor/servlets/TServersServlet.java b/server/monitor/src/main/java/org/apache/accumulo/monitor/servlets/TServersServlet.java index e7ab43d..47a2ca0 100644 --- a/server/monitor/src/main/java/org/apache/accumulo/monitor/servlets/TServersServlet.java +++ b/server/monitor/src/main/java/org/apache/accumulo/monitor/servlets/TServersServlet.java @@ -57,30 +57,30 @@ import org.apache.accumulo.server.util.TableInfoUtil; import com.google.common.net.HostAndPort; public class TServersServlet extends BasicServlet { - + private static final long serialVersionUID = 1L; private static final TabletServerStatus NO_STATUS = new TabletServerStatus(); - + static class SecondType extends NumberType<Double> { - + @Override public String format(Object obj) { if (obj == null) return "—"; return Duration.format((long) (1000.0 * (Double) obj)); } - + } - + @Override protected String getTitle(HttpServletRequest req) { return "Tablet Server Status"; } - + @Override protected void pageBody(HttpServletRequest req, HttpServletResponse response, StringBuilder sb) throws Exception { String tserverAddress = req.getParameter("s"); - + // Check to make sure tserver is a known address boolean tserverExists = false; if (tserverAddress != null && tserverAddress.isEmpty() == false) { @@ -91,23 +91,23 @@ public class TServersServlet extends BasicServlet { } } } - + if (tserverAddress == null || tserverAddress.isEmpty() || tserverExists == false) { doBadTserverList(req, sb); - + doDeadTserverList(req, sb); - + ArrayList<TabletServerStatus> tservers = new ArrayList<TabletServerStatus>(); if (Monitor.getMmi() != null) tservers.addAll(Monitor.getMmi().tServerInfo); - + Table tServerList = new Table("tservers", "Tablet Servers"); tServerList.setSubCaption("Click on the <span style='color: #0000ff;'>server address</span> to view detailed performance statistics for that server."); - + doTserverList(req, sb, tservers, null, tServerList); return; } - + double totalElapsedForAll = 0; double splitStdDev = 0; double minorStdDev = 0; @@ -119,7 +119,7 @@ public class TServersServlet extends BasicServlet { double currentMinorStdDev = 0; double currentMajorStdDev = 0; TabletStats total = new TabletStats(null, new ActionStats(), new ActionStats(), new ActionStats(), 0, 0, 0, 0); - + HostAndPort address = HostAndPort.fromString(tserverAddress); TabletStats historical = new TabletStats(null, new ActionStats(), new ActionStats(), new ActionStats(), 0, 0, 0, 0); List<TabletStats> tsStats = new ArrayList<TabletStats>(); @@ -139,7 +139,7 @@ public class TServersServlet extends BasicServlet { log.error(e, e); return; } - + Table perTabletResults = new Table("perTabletResults", "Detailed Current Operations"); perTabletResults.setSubCaption("Per-tablet Details"); perTabletResults.addSortableColumn("Table", new TableLinkType(), null); @@ -153,7 +153,7 @@ public class TServersServlet extends BasicServlet { perTabletResults.addSortableColumn("Major Avg", new SecondType(), null); perTabletResults.addSortableColumn("Major Std Dev", new SecondType(), null); perTabletResults.addSortableColumn("Major Avg e/s", new NumberType<Double>(), null); - + for (TabletStats info : tsStats) { if (info.extent == null) { historical = info; @@ -162,7 +162,7 @@ public class TServersServlet extends BasicServlet { total.numEntries += info.numEntries; ActionStatsUpdator.update(total.minors, info.minors); ActionStatsUpdator.update(total.majors, info.majors); - + KeyExtent extent = new KeyExtent(info.extent); String tableId = extent.getTableId().toString(); MessageDigest digester = MessageDigest.getInstance("MD5"); @@ -171,7 +171,7 @@ public class TServersServlet extends BasicServlet { } String obscuredExtent = Base64.encodeBase64String(digester.digest()); String displayExtent = String.format("<code>[%s]</code>", obscuredExtent); - + TableRow row = perTabletResults.prepareRow(); row.add(tableId); row.add(displayExtent); @@ -186,7 +186,7 @@ public class TServersServlet extends BasicServlet { row.add(info.majors.elapsed != 0 ? info.majors.count / info.majors.elapsed : null); perTabletResults.addRow(row); } - + // Calculate current averages oldServer adding in historical data if (total.minors.num != 0) currentMinorAvg = (long) (total.minors.elapsed / total.minors.num); @@ -196,25 +196,25 @@ public class TServersServlet extends BasicServlet { currentMajorAvg = total.majors.elapsed / total.majors.num; if (total.majors.elapsed != 0 && total.majors.num != 0 && total.majors.elapsed > total.majors.num) currentMajorStdDev = stddev(total.majors.elapsed, total.majors.num, total.majors.sumDev); - + // After these += operations, these variables are now total for current // tablets and historical tablets ActionStatsUpdator.update(total.minors, historical.minors); ActionStatsUpdator.update(total.majors, historical.majors); totalElapsedForAll += total.majors.elapsed + historical.splits.elapsed + total.minors.elapsed; - + minorStdDev = stddev(total.minors.elapsed, total.minors.num, total.minors.sumDev); minorQueueStdDev = stddev(total.minors.queueTime, total.minors.num, total.minors.queueSumDev); majorStdDev = stddev(total.majors.elapsed, total.majors.num, total.majors.sumDev); majorQueueStdDev = stddev(total.majors.queueTime, total.majors.num, total.majors.queueSumDev); splitStdDev = stddev(historical.splits.num, historical.splits.elapsed, historical.splits.sumDev); - + doDetailTable(req, sb, address, tsStats.size(), total, historical); doAllTimeTable(req, sb, total, historical, majorQueueStdDev, minorQueueStdDev, totalElapsedForAll, splitStdDev, majorStdDev, minorStdDev); doCurrentTabletOps(req, sb, currentMinorAvg, currentMinorStdDev, currentMajorAvg, currentMajorStdDev); perTabletResults.generate(req, sb); } - + private void doCurrentTabletOps(HttpServletRequest req, StringBuilder sb, double currentMinorAvg, double currentMinorStdDev, double currentMajorAvg, double currentMajorStdDev) { Table currentTabletOps = new Table("currentTabletOps", "Current Tablet Operation Results"); @@ -225,10 +225,10 @@ public class TServersServlet extends BasicServlet { currentTabletOps.addRow(currentMinorAvg, currentMinorStdDev, currentMajorAvg, currentMajorStdDev); currentTabletOps.generate(req, sb); } - + private void doAllTimeTable(HttpServletRequest req, StringBuilder sb, TabletStats total, TabletStats historical, double majorQueueStdDev, double minorQueueStdDev, double totalElapsedForAll, double splitStdDev, double majorStdDev, double minorStdDev) { - + Table opHistoryDetails = new Table("opHistoryDetails", "All-Time Tablet Operation Results"); opHistoryDetails.addSortableColumn("Operation"); opHistoryDetails.addSortableColumn("Success", new NumberType<Integer>(), null); @@ -238,7 +238,7 @@ public class TServersServlet extends BasicServlet { opHistoryDetails.addSortableColumn("Average<br />Time", new SecondType(), null); opHistoryDetails.addSortableColumn("Std. Dev.<br />Time", new SecondType(), null); opHistoryDetails.addSortableColumn("Percentage Time Spent", new ProgressChartType(totalElapsedForAll), null); - + opHistoryDetails.addRow("Split", historical.splits.num, historical.splits.fail, null, null, historical.splits.num != 0 ? (historical.splits.elapsed / historical.splits.num) : null, splitStdDev, historical.splits.elapsed); opHistoryDetails.addRow("Major Compaction", total.majors.num, total.majors.fail, total.majors.num != 0 ? (total.majors.queueTime / total.majors.num) @@ -247,7 +247,7 @@ public class TServersServlet extends BasicServlet { : null, minorQueueStdDev, total.minors.num != 0 ? (total.minors.elapsed / total.minors.num) : null, minorStdDev, total.minors.elapsed); opHistoryDetails.generate(req, sb); } - + private void doDetailTable(HttpServletRequest req, StringBuilder sb, HostAndPort address, int numTablets, TabletStats total, TabletStats historical) { Table detailTable = new Table("tServerDetail", "Details"); detailTable.setSubCaption(address.getHostText() + ":" + address.getPort()); @@ -259,7 +259,7 @@ public class TServersServlet extends BasicServlet { detailTable.addRow(numTablets, total.numEntries, total.minors.status, total.majors.status, historical.splits.status); detailTable.generate(req, sb); } - + /* * omg there's so much undocumented stuff going on here. First, sumDev is a partial standard deviation computation. It is the (clue 1) sum of the squares of * (clue 2) seconds of elapsed time. @@ -271,7 +271,7 @@ public class TServersServlet extends BasicServlet { } return 0; } - + private void doBadTserverList(HttpServletRequest req, StringBuilder sb) { if (Monitor.getMmi() != null && !Monitor.getMmi().badTServers.isEmpty()) { Table badTServerList = new Table("badtservers", "Non-Functioning Tablet Servers", "error"); @@ -283,7 +283,7 @@ public class TServersServlet extends BasicServlet { badTServerList.generate(req, sb); } } - + private void doDeadTserverList(HttpServletRequest req, StringBuilder sb) { MasterMonitorInfo mmi = Monitor.getMmi(); if (mmi != null) { @@ -293,7 +293,7 @@ public class TServersServlet extends BasicServlet { doDeadServerTable(req, sb, deadTServerList, obit); } } - + public static void doDeadServerTable(HttpServletRequest req, StringBuilder sb, Table deadTServerList, List<DeadServer> obit) { if (obit != null && !obit.isEmpty()) { deadTServerList.addSortableColumn("Server"); @@ -306,11 +306,11 @@ public class TServersServlet extends BasicServlet { deadTServerList.generate(req, sb); } } - + static void doTserverList(HttpServletRequest req, StringBuilder sb, List<TabletServerStatus> tservers, String tableId, Table tServerList) { int guessHighLoad = ManagementFactory.getOperatingSystemMXBean().getAvailableProcessors(); long now = System.currentTimeMillis(); - + double avgLastContact = 0.; for (TabletServerStatus status : tservers) { avgLastContact += (now - status.lastContact); @@ -336,7 +336,7 @@ public class TServersServlet extends BasicServlet { tServerList.addSortableColumn("Data Cache<br />Hit Rate", new PercentageType(), "The recent data cache hit rate."); tServerList.addSortableColumn("OS Load", new NumberType<Double>(0., guessHighLoad * 1., 0., guessHighLoad * 3.), "The Unix one minute load average. The average number of processes in the run queue over a one minute interval."); - + log.debug("tableId: " + tableId); for (TabletServerStatus status : tservers) { if (status == null) @@ -366,5 +366,5 @@ public class TServersServlet extends BasicServlet { } tServerList.generate(req, sb); } - + } http://git-wip-us.apache.org/repos/asf/accumulo/blob/6bc67602/server/monitor/src/main/java/org/apache/accumulo/monitor/servlets/TablesServlet.java ---------------------------------------------------------------------- diff --git a/server/monitor/src/main/java/org/apache/accumulo/monitor/servlets/TablesServlet.java b/server/monitor/src/main/java/org/apache/accumulo/monitor/servlets/TablesServlet.java index e5914f9..3700874 100644 --- a/server/monitor/src/main/java/org/apache/accumulo/monitor/servlets/TablesServlet.java +++ b/server/monitor/src/main/java/org/apache/accumulo/monitor/servlets/TablesServlet.java @@ -50,35 +50,35 @@ import org.apache.accumulo.server.util.TableInfoUtil; import org.apache.hadoop.io.Text; public class TablesServlet extends BasicServlet { - + private static final long serialVersionUID = 1L; - + @Override protected String getTitle(HttpServletRequest req) { return "Table Status"; } - + @Override protected void pageBody(HttpServletRequest req, HttpServletResponse response, StringBuilder sb) throws Exception { Map<String,String> tidToNameMap = Tables.getIdToNameMap(Monitor.getContext().getInstance()); String tableId = req.getParameter("t"); - + doProblemsBanner(sb); - + if (tableId == null || tableId.isEmpty() || tidToNameMap.containsKey(tableId) == false) { doTableList(req, sb, tidToNameMap); return; } - + doTableDetails(req, sb, tidToNameMap, tableId); } - + static void doProblemsBanner(StringBuilder sb) { int numProblems = Monitor.getProblemSummary().entrySet().size(); if (numProblems > 0) banner(sb, "error", String.format("<a href='/problems'>Table Problems: %d Total</a>", numProblems)); } - + static void doTableList(HttpServletRequest req, StringBuilder sb, Map<String,String> tidToNameMap) { Table tableList = new Table("tableList", "Table List"); tableList.addSortableColumn("Table Name", new TableLinkType(), null); @@ -107,14 +107,14 @@ public class TablesServlet extends BasicServlet { + "Major Compactions are performed as a consequence of new files created from Minor Compactions and Bulk Load operations. " + "They reduce the number of files used during queries."); SortedMap<String,TableInfo> tableStats = new TreeMap<String,TableInfo>(); - + if (Monitor.getMmi() != null && Monitor.getMmi().tableMap != null) for (Entry<String,TableInfo> te : Monitor.getMmi().tableMap.entrySet()) tableStats.put(Tables.getPrintableTableNameFromId(tidToNameMap, te.getKey()), te.getValue()); - + Map<String,Double> compactingByTable = TableInfoUtil.summarizeTableStats(Monitor.getMmi()); TableManager tableManager = TableManager.getInstance(); - + for (Entry<String,String> tableName_tableId : Tables.getNameToIdMap(Monitor.getContext().getInstance()).entrySet()) { String tableName = tableName_tableId.getKey(); String tableId = tableName_tableId.getValue(); @@ -138,10 +138,10 @@ public class TablesServlet extends BasicServlet { row.add(tableInfo); tableList.addRow(row); } - + tableList.generate(req, sb); } - + private void doTableDetails(HttpServletRequest req, StringBuilder sb, Map<String,String> tidToNameMap, String tableId) { String displayName = Tables.getPrintableTableNameFromId(tidToNameMap, tableId); Instance instance = Monitor.getContext().getInstance(); @@ -152,7 +152,7 @@ public class TablesServlet extends BasicServlet { String systemTableName = MetadataTable.ID.equals(tableId) ? RootTable.NAME : MetadataTable.NAME; MetaDataTableScanner scanner = new MetaDataTableScanner(Monitor.getContext(), new Range(KeyExtent.getMetadataEntry(new Text(tableId), new Text()), KeyExtent.getMetadataEntry(new Text(tableId), null)), systemTableName); - + while (scanner.hasNext()) { TabletLocationState state = scanner.next(); if (state.current != null) { @@ -165,9 +165,9 @@ public class TablesServlet extends BasicServlet { } scanner.close(); } - + log.debug("Locs: " + locs); - + List<TabletServerStatus> tservers = new ArrayList<TabletServerStatus>(); if (Monitor.getMmi() != null) { for (TabletServerStatus tss : Monitor.getMmi().tServerInfo) { @@ -180,7 +180,7 @@ public class TablesServlet extends BasicServlet { } } } - + Table tableDetails = new Table("participatingTServers", "Participating Tablet Servers"); tableDetails.setSubCaption(displayName); TServersServlet.doTserverList(req, sb, tservers, tableId, tableDetails); http://git-wip-us.apache.org/repos/asf/accumulo/blob/6bc67602/server/monitor/src/main/java/org/apache/accumulo/monitor/servlets/VisServlet.java ---------------------------------------------------------------------- diff --git a/server/monitor/src/main/java/org/apache/accumulo/monitor/servlets/VisServlet.java b/server/monitor/src/main/java/org/apache/accumulo/monitor/servlets/VisServlet.java index af1688e..eedf598 100644 --- a/server/monitor/src/main/java/org/apache/accumulo/monitor/servlets/VisServlet.java +++ b/server/monitor/src/main/java/org/apache/accumulo/monitor/servlets/VisServlet.java @@ -29,9 +29,9 @@ import org.apache.accumulo.monitor.Monitor; public class VisServlet extends BasicServlet { private static final int concurrentScans = Monitor.getContext().getConfiguration().getCount(Property.TSERV_READ_AHEAD_MAXCONCURRENT); - + private static final long serialVersionUID = 1L; - + public enum StatType { osload(ManagementFactory.getOperatingSystemMXBean().getAvailableProcessors(), true, 100, "OS Load"), ingest(1000, true, 1, "Ingest Entries"), @@ -43,13 +43,13 @@ public class VisServlet extends BasicServlet { holdtime(60000, false, 1, "Hold Time"), allavg(1, false, 100, "Overall Avg", true), allmax(1, false, 100, "Overall Max", true); - + private int max; private boolean adjustMax; private float significance; private String description; private boolean derived; - + /** * @param max * initial estimate of largest possible value for this stat @@ -63,7 +63,7 @@ public class VisServlet extends BasicServlet { private StatType(int max, boolean adjustMax, float significance, String description) { this(max, adjustMax, significance, description, false); } - + private StatType(int max, boolean adjustMax, float significance, String description, boolean derived) { this.max = max; this.adjustMax = adjustMax; @@ -71,27 +71,27 @@ public class VisServlet extends BasicServlet { this.description = description; this.derived = derived; } - + public int getMax() { return max; } - + public boolean getAdjustMax() { return adjustMax; } - + public float getSignificance() { return significance; } - + public String getDescription() { return description; } - + public boolean isDerived() { return derived; } - + public static int numDerived() { int count = 0; for (StatType st : StatType.values()) @@ -100,7 +100,7 @@ public class VisServlet extends BasicServlet { return count; } } - + public static class VisualizationConfig { boolean useCircles = true; StatType motion = StatType.allmax; @@ -108,38 +108,38 @@ public class VisServlet extends BasicServlet { int spacing = 40; String url; } - + @Override protected String getTitle(HttpServletRequest req) { return "Server Activity"; } - + @Override protected void pageBody(HttpServletRequest req, HttpServletResponse response, StringBuilder sb) throws IOException { StringBuffer urlsb = req.getRequestURL(); urlsb.setLength(urlsb.lastIndexOf("/") + 1); VisualizationConfig cfg = new VisualizationConfig(); cfg.url = urlsb.toString(); - + String s = req.getParameter("shape"); if (s != null && (s.equals("square") || s.equals("squares"))) { cfg.useCircles = false; } - + s = req.getParameter("motion"); if (s != null) { try { cfg.motion = StatType.valueOf(s); } catch (Exception e) {} } - + s = req.getParameter("color"); if (s != null) { try { cfg.color = StatType.valueOf(s); } catch (Exception e) {} } - + String size = req.getParameter("size"); if (size != null) { if (size.equals("10")) @@ -149,20 +149,20 @@ public class VisServlet extends BasicServlet { else if (size.equals("80")) cfg.spacing = 80; } - + ArrayList<TabletServerStatus> tservers = new ArrayList<TabletServerStatus>(); if (Monitor.getMmi() != null) tservers.addAll(Monitor.getMmi().tServerInfo); - + if (tservers.size() == 0) return; - + int width = (int) Math.ceil(Math.sqrt(tservers.size())) * cfg.spacing; - int height = (int) Math.ceil(tservers.size() / (double)width) * cfg.spacing; + int height = (int) Math.ceil(tservers.size() / (double) width) * cfg.spacing; doSettings(sb, cfg, width < 640 ? 640 : width, height < 640 ? 640 : height); doScript(sb, cfg, tservers); } - + private void doSettings(StringBuilder sb, VisualizationConfig cfg, int width, int height) { sb.append("<div class='left'>\n"); sb.append("<div id='parameters' class='nowrap'>\n"); @@ -193,13 +193,13 @@ public class VisServlet extends BasicServlet { sb.append("</div>\n"); sb.append("</div>\n\n"); } - + private void addOptions(StringBuilder sb, StatType selectedStatType) { for (StatType st : StatType.values()) { sb.append("<option").append(st.equals(selectedStatType) ? " selected='true'>" : ">").append(st.getDescription()).append("</option>"); } } - + private void doScript(StringBuilder sb, VisualizationConfig cfg, ArrayList<TabletServerStatus> tservers) { // initialization of some javascript variables sb.append("<script type='text/javascript'>\n"); @@ -230,7 +230,7 @@ public class VisServlet extends BasicServlet { sb.append("}; // values will be converted by floor(this*value)/this\n"); sb.append("var numNormalStats = ").append(StatType.values().length - StatType.numDerived()).append(";\n"); sb.append("</script>\n"); - + sb.append("<script src='web/vis.js' type='text/javascript'></script>"); } } http://git-wip-us.apache.org/repos/asf/accumulo/blob/6bc67602/server/monitor/src/main/java/org/apache/accumulo/monitor/servlets/XMLServlet.java ---------------------------------------------------------------------- diff --git a/server/monitor/src/main/java/org/apache/accumulo/monitor/servlets/XMLServlet.java b/server/monitor/src/main/java/org/apache/accumulo/monitor/servlets/XMLServlet.java index 3b115f9..1662069 100644 --- a/server/monitor/src/main/java/org/apache/accumulo/monitor/servlets/XMLServlet.java +++ b/server/monitor/src/main/java/org/apache/accumulo/monitor/servlets/XMLServlet.java @@ -38,40 +38,40 @@ import org.apache.accumulo.server.util.TableInfoUtil; public class XMLServlet extends BasicServlet { private static final long serialVersionUID = 1L; - + @Override protected String getTitle(HttpServletRequest req) { return "XML Report"; } - + @Override protected void pageStart(HttpServletRequest req, HttpServletResponse resp, StringBuilder sb) { resp.setContentType("text/xml;charset=" + UTF_8.name()); sb.append("<?xml version=\"1.0\" encoding=\"" + UTF_8.name() + "\"?>\n"); sb.append("<stats>\n"); } - + @Override protected void pageBody(HttpServletRequest req, HttpServletResponse resp, StringBuilder sb) { double totalIngest = 0.; double totalQuery = 0.; double disk = 0.0; long totalEntries = 0L; - + sb.append("\n<servers>\n"); if (Monitor.getMmi() == null || Monitor.getMmi().tableMap == null) { sb.append("</servers>\n"); return; } SortedMap<String,TableInfo> tableStats = new TreeMap<String,TableInfo>(Monitor.getMmi().tableMap); - + for (TabletServerStatus status : Monitor.getMmi().tServerInfo) { - + sb.append("\n<server id='").append(status.name).append("'>\n"); sb.append("<hostname>").append(TServerLinkType.displayName(status.name)).append("</hostname>"); sb.append("<lastContact>").append(System.currentTimeMillis() - status.lastContact).append("</lastContact>\n"); sb.append("<osload>").append(status.osLoad).append("</osload>\n"); - + TableInfo summary = TableInfoUtil.summarizeTableStats(status); sb.append("<compactions>\n"); sb.append("<major>").append("<running>").append(summary.majors.running).append("</running>").append("<queued>").append(summary.majors.queued) @@ -79,9 +79,9 @@ public class XMLServlet extends BasicServlet { sb.append("<minor>").append("<running>").append(summary.minors.running).append("</running>").append("<queued>").append(summary.minors.queued) .append("</queued>").append("</minor>\n"); sb.append("</compactions>\n"); - + sb.append("<tablets>").append(summary.tablets).append("</tablets>\n"); - + sb.append("<ingest>").append(summary.ingestRate).append("</ingest>\n"); sb.append("<query>").append(summary.queryRate).append("</query>\n"); sb.append("<ingestMB>").append(summary.ingestByteRate / 1000000.0).append("</ingestMB>\n"); @@ -95,41 +95,41 @@ public class XMLServlet extends BasicServlet { sb.append("</server>\n"); } sb.append("\n</servers>\n"); - + sb.append("\n<masterGoalState>" + Monitor.getMmi().goalState + "</masterGoalState>\n"); sb.append("\n<masterState>" + Monitor.getMmi().state + "</masterState>\n"); - + sb.append("\n<badTabletServers>\n"); for (Entry<String,Byte> entry : Monitor.getMmi().badTServers.entrySet()) { sb.append(String.format("<badTabletServer id='%s' status='%s'/>\n", entry.getKey(), TabletServerState.getStateById(entry.getValue()))); } sb.append("\n</badTabletServers>\n"); - + sb.append("\n<tabletServersShuttingDown>\n"); for (String server : Monitor.getMmi().serversShuttingDown) { sb.append(String.format("<server id='%s'/>\n", server)); } sb.append("\n</tabletServersShuttingDown>\n"); - + sb.append(String.format("\n<unassignedTablets>%d</unassignedTablets>\n", Monitor.getMmi().unassignedTablets)); - + sb.append("\n<deadTabletServers>\n"); for (DeadServer dead : Monitor.getMmi().deadTabletServers) { sb.append(String.format("<deadTabletServer id='%s' lastChange='%d' status='%s'/>\n", dead.server, dead.lastStatus, dead.status)); } sb.append("\n</deadTabletServers>\n"); - + sb.append("\n<deadLoggers>\n"); for (DeadServer dead : Monitor.getMmi().deadTabletServers) { sb.append(String.format("<deadLogger id='%s' lastChange='%d' status='%s'/>\n", dead.server, dead.lastStatus, dead.status)); } sb.append("\n</deadLoggers>\n"); - + sb.append("\n<tables>\n"); Instance instance = Monitor.getContext().getInstance(); for (Entry<String,TableInfo> entry : tableStats.entrySet()) { TableInfo tableInfo = entry.getValue(); - + sb.append("\n<table>\n"); String tableId = entry.getKey(); String tableName = "unknown"; @@ -163,7 +163,7 @@ public class XMLServlet extends BasicServlet { sb.append("</table>\n"); } sb.append("\n</tables>\n"); - + sb.append("\n<totals>\n"); sb.append("<ingestrate>").append(totalIngest).append("</ingestrate>\n"); sb.append("<queryrate>").append(totalQuery).append("</queryrate>\n"); @@ -171,7 +171,7 @@ public class XMLServlet extends BasicServlet { sb.append("<numentries>").append(totalEntries).append("</numentries>\n"); sb.append("</totals>\n"); } - + @Override protected void pageEnd(HttpServletRequest req, HttpServletResponse resp, StringBuilder sb) { sb.append("\n</stats>\n"); http://git-wip-us.apache.org/repos/asf/accumulo/blob/6bc67602/server/monitor/src/main/java/org/apache/accumulo/monitor/servlets/trace/ListType.java ---------------------------------------------------------------------- diff --git a/server/monitor/src/main/java/org/apache/accumulo/monitor/servlets/trace/ListType.java b/server/monitor/src/main/java/org/apache/accumulo/monitor/servlets/trace/ListType.java index 5ab3b2a..84322b5 100644 --- a/server/monitor/src/main/java/org/apache/accumulo/monitor/servlets/trace/ListType.java +++ b/server/monitor/src/main/java/org/apache/accumulo/monitor/servlets/trace/ListType.java @@ -33,17 +33,17 @@ import org.apache.accumulo.tracer.thrift.RemoteSpan; import org.apache.hadoop.io.Text; public class ListType extends Basic { - + private static final long serialVersionUID = 1L; - + String getType(HttpServletRequest req) { return getStringParameter(req, "type", "<Unknown>"); } - + int getMinutes(HttpServletRequest req) { return getIntParameter(req, "minutes", Summary.DEFAULT_MINUTES); } - + @Override public void pageBody(HttpServletRequest req, HttpServletResponse resp, StringBuilder sb) throws Exception { String type = getType(req); @@ -68,7 +68,7 @@ public class ListType extends Basic { } trace.generate(req, sb); } - + @Override public String getTitle(HttpServletRequest req) { return "Traces for " + getType(req) + " for the last " + getMinutes(req) + " minutes"; http://git-wip-us.apache.org/repos/asf/accumulo/blob/6bc67602/server/monitor/src/main/java/org/apache/accumulo/monitor/servlets/trace/NullKeyValueIterator.java ---------------------------------------------------------------------- diff --git a/server/monitor/src/main/java/org/apache/accumulo/monitor/servlets/trace/NullKeyValueIterator.java b/server/monitor/src/main/java/org/apache/accumulo/monitor/servlets/trace/NullKeyValueIterator.java index 26cfb07..1ec7bfc 100644 --- a/server/monitor/src/main/java/org/apache/accumulo/monitor/servlets/trace/NullKeyValueIterator.java +++ b/server/monitor/src/main/java/org/apache/accumulo/monitor/servlets/trace/NullKeyValueIterator.java @@ -23,17 +23,17 @@ import org.apache.accumulo.core.data.Key; import org.apache.accumulo.core.data.Value; public class NullKeyValueIterator implements Iterator<Entry<Key,Value>> { - + @Override public boolean hasNext() { return false; } - + @Override public Entry<Key,Value> next() { return null; } - + @Override public void remove() {} }