Return-Path: X-Original-To: apmail-incubator-accumulo-commits-archive@minotaur.apache.org Delivered-To: apmail-incubator-accumulo-commits-archive@minotaur.apache.org Received: from mail.apache.org (hermes.apache.org [140.211.11.3]) by minotaur.apache.org (Postfix) with SMTP id 6A4D19828 for ; Wed, 29 Feb 2012 21:06:22 +0000 (UTC) Received: (qmail 51357 invoked by uid 500); 29 Feb 2012 21:06:22 -0000 Delivered-To: apmail-incubator-accumulo-commits-archive@incubator.apache.org Received: (qmail 51334 invoked by uid 500); 29 Feb 2012 21:06:22 -0000 Mailing-List: contact accumulo-commits-help@incubator.apache.org; run by ezmlm Precedence: bulk List-Help: List-Unsubscribe: List-Post: List-Id: Reply-To: accumulo-dev@incubator.apache.org Delivered-To: mailing list accumulo-commits@incubator.apache.org Received: (qmail 51326 invoked by uid 99); 29 Feb 2012 21:06:22 -0000 Received: from athena.apache.org (HELO athena.apache.org) (140.211.11.136) by apache.org (qpsmtpd/0.29) with ESMTP; Wed, 29 Feb 2012 21:06:22 +0000 X-ASF-Spam-Status: No, hits=-2000.0 required=5.0 tests=ALL_TRUSTED X-Spam-Check-By: apache.org Received: from [140.211.11.4] (HELO eris.apache.org) (140.211.11.4) by apache.org (qpsmtpd/0.29) with ESMTP; Wed, 29 Feb 2012 21:06:19 +0000 Received: from eris.apache.org (localhost [127.0.0.1]) by eris.apache.org (Postfix) with ESMTP id A5E2423888D2; Wed, 29 Feb 2012 21:05:59 +0000 (UTC) Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit Subject: svn commit: r1295272 - in /incubator/accumulo/trunk: ./ src/core/ src/packages/deb/accumulo-native/ src/packages/deb/accumulo/ src/server/ src/server/src/main/java/org/apache/accumulo/server/master/ src/server/src/main/java/org/apache/accumulo/server/m... Date: Wed, 29 Feb 2012 21:05:59 -0000 To: accumulo-commits@incubator.apache.org From: kturner@apache.org X-Mailer: svnmailer-1.0.8-patched Message-Id: <20120229210559.A5E2423888D2@eris.apache.org> X-Virus-Checked: Checked by ClamAV on apache.org Author: kturner Date: Wed Feb 29 21:05:58 2012 New Revision: 1295272 URL: http://svn.apache.org/viewvc?rev=1295272&view=rev Log: ACCUMULO-436 ACCUMULO-19 ACCUMULO-431 merge from 1.4 Modified: incubator/accumulo/trunk/ (props changed) incubator/accumulo/trunk/src/core/ (props changed) incubator/accumulo/trunk/src/packages/deb/accumulo-native/control incubator/accumulo/trunk/src/packages/deb/accumulo/control incubator/accumulo/trunk/src/server/ (props changed) incubator/accumulo/trunk/src/server/src/main/java/org/apache/accumulo/server/master/Master.java incubator/accumulo/trunk/src/server/src/main/java/org/apache/accumulo/server/master/state/MergeStats.java incubator/accumulo/trunk/src/server/src/main/java/org/apache/accumulo/server/monitor/servlets/BasicServlet.java incubator/accumulo/trunk/src/server/src/main/java/org/apache/accumulo/server/monitor/servlets/VisServlet.java incubator/accumulo/trunk/src/server/src/main/resources/web/vis.xml incubator/accumulo/trunk/src/server/src/test/java/org/apache/accumulo/server/master/TestMergeState.java Propchange: incubator/accumulo/trunk/ ------------------------------------------------------------------------------ --- svn:mergeinfo (original) +++ svn:mergeinfo Wed Feb 29 21:05:58 2012 @@ -1,3 +1,3 @@ /incubator/accumulo/branches/1.3:1190280,1190413,1190420,1190427,1190500,1195622,1195625,1195629,1195635,1196044,1196054,1196057,1196071-1196072,1196106,1197066,1198935,1199383,1203683,1204625,1205547,1205880,1206169,1208031,1209124,1209526,1209532,1209539,1209541,1209587,1209657,1210518,1210571,1210596,1210598,1213424,1214320,1225006,1227215,1227231,1227611,1228195,1230180,1230736,1231043,1236873,1245632 /incubator/accumulo/branches/1.3.5rc:1209938 -/incubator/accumulo/branches/1.4:1201902-1294846 +/incubator/accumulo/branches/1.4:1201902-1295271 Propchange: incubator/accumulo/trunk/src/core/ ------------------------------------------------------------------------------ --- svn:mergeinfo (original) +++ svn:mergeinfo Wed Feb 29 21:05:58 2012 @@ -1,3 +1,3 @@ -/incubator/accumulo/branches/1.3/src/core:1190280,1190413,1190420,1190427,1190500,1195622,1195625,1195629,1195635,1196044,1196054,1196057,1196071-1196072,1196106,1197066,1198935,1199383,1203683,1204625,1205547,1205880,1206169,1208031,1209124,1209526,1209532,1209539,1209541,1209587,1209657,1210518,1210571,1210596,1210598,1213424,1214320,1225006,1227215 /incubator/accumulo/branches/1.3.5rc/src/core:1209938 -/incubator/accumulo/branches/1.4/src/core:1201902-1294805 +/incubator/accumulo/branches/1.3/src/core:1190280,1190413,1190420,1190427,1190500,1195622,1195625,1195629,1195635,1196044,1196054,1196057,1196071-1196072,1196106,1197066,1198935,1199383,1203683,1204625,1205547,1205880,1206169,1208031,1209124,1209526,1209532,1209539,1209541,1209587,1209657,1210518,1210571,1210596,1210598,1213424,1214320,1225006,1227215 +/incubator/accumulo/branches/1.4/src/core:1201902-1295271 Modified: incubator/accumulo/trunk/src/packages/deb/accumulo-native/control URL: http://svn.apache.org/viewvc/incubator/accumulo/trunk/src/packages/deb/accumulo-native/control?rev=1295272&r1=1295271&r2=1295272&view=diff ============================================================================== --- incubator/accumulo/trunk/src/packages/deb/accumulo-native/control (original) +++ incubator/accumulo/trunk/src/packages/deb/accumulo-native/control Wed Feb 29 21:05:58 2012 @@ -21,6 +21,6 @@ Package: accumulo-native Version: [[version]] Section: misc Architecture: all -Depends: default-jdk, accumulo (=[[version]]), g++, g++-multilib +Depends: java6-sdk, accumulo (=[[version]]), g++, g++-multilib Description: Native libraries for Accumulo- locks and InMemoryMap This optional package contains native libraries that improve the performance of Accumulo tservers. Modified: incubator/accumulo/trunk/src/packages/deb/accumulo/control URL: http://svn.apache.org/viewvc/incubator/accumulo/trunk/src/packages/deb/accumulo/control?rev=1295272&r1=1295271&r2=1295272&view=diff ============================================================================== --- incubator/accumulo/trunk/src/packages/deb/accumulo/control (original) +++ incubator/accumulo/trunk/src/packages/deb/accumulo/control Wed Feb 29 21:05:58 2012 @@ -21,7 +21,7 @@ Package: accumulo Version: [[version]] Section: misc Architecture: all -Depends: default-jre-headless, hadoop, hadoop-zookeeper, coreutils +Depends: java6-runtime, hadoop, hadoop-zookeeper, coreutils, ssh-server Recommends: accumulo-native Description: Accumulo is a large distributed structured store based on Google's BigTable design. Distribution: development Propchange: incubator/accumulo/trunk/src/server/ ------------------------------------------------------------------------------ --- svn:mergeinfo (original) +++ svn:mergeinfo Wed Feb 29 21:05:58 2012 @@ -1,3 +1,3 @@ -/incubator/accumulo/branches/1.3/src/server:1190280,1190413,1190420,1190427,1190500,1195622,1195625,1195629,1195635,1196044,1196054,1196057,1196071-1196072,1196106,1197066,1198935,1199383,1203683,1204625,1205547,1205880,1206169,1208031,1209124,1209526,1209532,1209539,1209541,1209587,1209657,1210518,1210571,1210596,1210598,1213424,1214320,1225006,1227215,1227231,1227611 /incubator/accumulo/branches/1.3.5rc/src/server:1209938 -/incubator/accumulo/branches/1.4/src/server:1201902-1294805 +/incubator/accumulo/branches/1.3/src/server:1190280,1190413,1190420,1190427,1190500,1195622,1195625,1195629,1195635,1196044,1196054,1196057,1196071-1196072,1196106,1197066,1198935,1199383,1203683,1204625,1205547,1205880,1206169,1208031,1209124,1209526,1209532,1209539,1209541,1209587,1209657,1210518,1210571,1210596,1210598,1213424,1214320,1225006,1227215,1227231,1227611 +/incubator/accumulo/branches/1.4/src/server:1201902-1295271 Modified: incubator/accumulo/trunk/src/server/src/main/java/org/apache/accumulo/server/master/Master.java URL: http://svn.apache.org/viewvc/incubator/accumulo/trunk/src/server/src/main/java/org/apache/accumulo/server/master/Master.java?rev=1295272&r1=1295271&r2=1295272&view=diff ============================================================================== --- incubator/accumulo/trunk/src/server/src/main/java/org/apache/accumulo/server/master/Master.java (original) +++ incubator/accumulo/trunk/src/server/src/main/java/org/apache/accumulo/server/master/Master.java Wed Feb 29 21:05:58 2012 @@ -41,11 +41,11 @@ import java.util.concurrent.atomic.Atomi import org.apache.accumulo.core.Constants; import org.apache.accumulo.core.client.AccumuloException; import org.apache.accumulo.core.client.AccumuloSecurityException; -import org.apache.accumulo.core.client.BatchDeleter; import org.apache.accumulo.core.client.BatchWriter; import org.apache.accumulo.core.client.Connector; import org.apache.accumulo.core.client.Instance; import org.apache.accumulo.core.client.IsolatedScanner; +import org.apache.accumulo.core.client.MutationsRejectedException; import org.apache.accumulo.core.client.RowIterator; import org.apache.accumulo.core.client.Scanner; import org.apache.accumulo.core.client.TableNotFoundException; @@ -1506,26 +1506,30 @@ public class Master implements LiveTServ private void updateMergeState(Map mergeStatsCache) { for (MergeStats stats : mergeStatsCache.values()) { try { - MergeState update = stats.nextMergeState(); - if (update == MergeState.MERGING) { - if (stats.verifyMergeConsistency(getConnector(), Master.this)) { - try { - if (stats.getMergeInfo().isDelete()) { - deleteTablets(stats.getMergeInfo()); - } else { - mergeMetadataRecords(stats.getMergeInfo()); - } - setMergeState(stats.getMergeInfo(), update = MergeState.COMPLETE); - } catch (Exception ex) { - log.error("Unable merge metadata table records", ex); - } - } - } + MergeState update = stats.nextMergeState(getConnector(), Master.this); + + // when next state is MERGING, its important to persist this before + // starting the merge... the verification check that is done before + // moving into the merging state could fail if merge starts but does + // not finish if (update == MergeState.COMPLETE) update = MergeState.NONE; if (update != stats.getMergeInfo().getState()) { setMergeState(stats.getMergeInfo(), update); } + + if (update == MergeState.MERGING) { + try { + if (stats.getMergeInfo().isDelete()) { + deleteTablets(stats.getMergeInfo()); + } else { + mergeMetadataRecords(stats.getMergeInfo()); + } + setMergeState(stats.getMergeInfo(), update = MergeState.COMPLETE); + } catch (Exception ex) { + log.error("Unable merge metadata table records", ex); + } + } } catch (Exception ex) { log.error("Unable to update merge state for merge " + stats.getMergeInfo().getRange(), ex); } @@ -1579,18 +1583,21 @@ public class Master implements LiveTServ } } MetadataTable.addDeleteEntries(range, datafiles, SecurityConstants.getSystemCredentials()); - log.debug("Removing metadata table entries in range " + deleteRange); - BatchDeleter bd = conn.createBatchDeleter(Constants.METADATA_TABLE_NAME, Constants.NO_AUTHS, 4, 100000l, 1000l, 4); - bd.setRanges(Collections.singleton(deleteRange)); - bd.delete(); - bd.close(); + BatchWriter bw = conn.createBatchWriter(Constants.METADATA_TABLE_NAME, 1000000l, 100l, 1); + try { + deleteTablets(deleteRange, bw, conn); + } finally { + bw.close(); + } + if (followingTablet != null) { log.debug("Updating prevRow of " + followingTablet + " to " + range.getPrevEndRow()); - BatchWriter bw = conn.createBatchWriter(Constants.METADATA_TABLE_NAME, 1000l, 100l, 1); + bw = conn.createBatchWriter(Constants.METADATA_TABLE_NAME, 1000l, 100l, 1); try { Mutation m = new Mutation(followingTablet.getMetadataEntry()); ColumnFQ.put(m, Constants.METADATA_PREV_ROW_COLUMN, KeyExtent.encodePrevEndRow(range.getPrevEndRow())); + ColumnFQ.putDelete(m, Constants.METADATA_CHOPPED_COLUMN); bw.addMutation(m); bw.flush(); } finally { @@ -1618,7 +1625,7 @@ public class Master implements LiveTServ if (start == null) { start = new Text(); } - Range scanRange = new Range(KeyExtent.getMetadataEntry(range.getTableId(), start), false, stopRow, true); + Range scanRange = new Range(KeyExtent.getMetadataEntry(range.getTableId(), start), false, stopRow, false); BatchWriter bw = null; try { long fileCount = 0; @@ -1629,14 +1636,13 @@ public class Master implements LiveTServ scanner.setRange(scanRange); ColumnFQ.fetch(scanner, Constants.METADATA_PREV_ROW_COLUMN); ColumnFQ.fetch(scanner, Constants.METADATA_TIME_COLUMN); + ColumnFQ.fetch(scanner, Constants.METADATA_DIRECTORY_COLUMN); scanner.fetchColumnFamily(Constants.METADATA_DATAFILE_COLUMN_FAMILY); Mutation m = new Mutation(stopRow); String maxLogicalTime = null; for (Entry entry : scanner) { Key key = entry.getKey(); Value value = entry.getValue(); - if (key.getRow().equals(stopRow)) - break; if (key.getColumnFamily().equals(Constants.METADATA_DATAFILE_COLUMN_FAMILY)) { m.put(key.getColumnFamily(), key.getColumnQualifier(), value); fileCount++; @@ -1645,6 +1651,8 @@ public class Master implements LiveTServ firstPrevRowValue = new Value(value); } else if (Constants.METADATA_TIME_COLUMN.hasColumns(key)) { maxLogicalTime = TabletTime.maxMetadataTime(maxLogicalTime, value.toString()); + } else if (Constants.METADATA_DIRECTORY_COLUMN.hasColumns(key)) { + bw.addMutation(MetadataTable.createDeleteMutation(range.getTableId().toString(), entry.getValue().toString())); } } @@ -1663,8 +1671,10 @@ public class Master implements LiveTServ if (!m.getUpdates().isEmpty()) { bw.addMutation(m); - bw.flush(); } + + bw.flush(); + log.debug("Moved " + fileCount + " files to " + stop); if (firstPrevRowValue == null) { @@ -1677,38 +1687,13 @@ public class Master implements LiveTServ log.debug("Setting the prevRow for last tablet: " + stop); bw.addMutation(updatePrevRow); bw.flush(); - - // Delete everything in the other tablets - scanner = conn.createScanner(Constants.METADATA_TABLE_NAME, Constants.NO_AUTHS); - log.debug("Scanning range " + scanRange); - scanner.setRange(scanRange); - for (Entry entry : scanner) { - Key key = entry.getKey(); - if (key.getRow().equals(stopRow)) - break; - if (Constants.METADATA_DIRECTORY_COLUMN.hasColumns(key)) { - bw.addMutation(MetadataTable.createDeleteMutation(range.getTableId().toString(), entry.getValue().toString())); - } - - // TODO could group by row - m = new Mutation(key.getRow()); - m.putDelete(key.getColumnFamily(), key.getColumnQualifier()); - log.debug("deleting entry " + key); - bw.addMutation(m); - } - bw.flush(); + + deleteTablets(scanRange, bw, conn); // Clean-up the last chopped marker - scanner = conn.createScanner(Constants.METADATA_TABLE_NAME, Constants.NO_AUTHS); - scanner.fetchColumnFamily(Constants.METADATA_CHOPPED_COLUMN_FAMILY); - scanner.setRange(new Range(stopRow, stopRow)); - for (Entry entry : scanner) { - Key key = entry.getKey(); - m = new Mutation(key.getRow()); - m.putDelete(key.getColumnFamily(), key.getColumnQualifier()); - log.debug("deleting entry " + key); - bw.addMutation(m); - } + m = new Mutation(stopRow); + ColumnFQ.putDelete(m, Constants.METADATA_CHOPPED_COLUMN); + bw.addMutation(m); bw.flush(); } catch (Exception ex) { @@ -1721,6 +1706,36 @@ public class Master implements LiveTServ } } } + + private void deleteTablets(Range scanRange, BatchWriter bw, Connector conn) throws TableNotFoundException, MutationsRejectedException { + Scanner scanner; + Mutation m; + // Delete everything in the other tablets + // group all deletes into tablet into one mutation, this makes tablets + // either dissapear entirely or not all.. this is important for the case + // where the process terminates in the loop below... + scanner = conn.createScanner(Constants.METADATA_TABLE_NAME, Constants.NO_AUTHS); + log.debug("Deleting range " + scanRange); + scanner.setRange(scanRange); + RowIterator rowIter = new RowIterator(scanner); + while (rowIter.hasNext()) { + Iterator> row = rowIter.next(); + m = null; + while (row.hasNext()) { + Entry entry = row.next(); + Key key = entry.getKey(); + + if (m == null) + m = new Mutation(key.getRow()); + + m.putDelete(key.getColumnFamily(), key.getColumnQualifier()); + log.debug("deleting entry " + key); + } + bw.addMutation(m); + } + + bw.flush(); + } private KeyExtent getHighTablet(KeyExtent range) throws AccumuloException { try { @@ -1734,7 +1749,11 @@ public class Master implements LiveTServ throw new AccumuloException("No last tablet for a merge " + range); } Entry entry = iterator.next(); - return new KeyExtent(entry.getKey().getRow(), KeyExtent.decodePrevEndRow(entry.getValue())); + KeyExtent highTablet = new KeyExtent(entry.getKey().getRow(), KeyExtent.decodePrevEndRow(entry.getValue())); + if (highTablet.getTableId() != range.getTableId()) { + throw new AccumuloException("No last tablet for merge " + range + " " + highTablet); + } + return highTablet; } catch (Exception ex) { throw new AccumuloException("Unexpected failure finding the last tablet for a merge " + range, ex); } Modified: incubator/accumulo/trunk/src/server/src/main/java/org/apache/accumulo/server/master/state/MergeStats.java URL: http://svn.apache.org/viewvc/incubator/accumulo/trunk/src/server/src/main/java/org/apache/accumulo/server/master/state/MergeStats.java?rev=1295272&r1=1295271&r2=1295272&view=diff ============================================================================== --- incubator/accumulo/trunk/src/server/src/main/java/org/apache/accumulo/server/master/state/MergeStats.java (original) +++ incubator/accumulo/trunk/src/server/src/main/java/org/apache/accumulo/server/master/state/MergeStats.java Wed Feb 29 21:05:58 2012 @@ -93,7 +93,7 @@ public class MergeStats { this.unassigned++; } - public MergeState nextMergeState() throws Exception { + public MergeState nextMergeState(Connector connector, CurrentState master) throws Exception { MergeState state = info.getState(); if (state == MergeState.NONE) return state; @@ -141,7 +141,10 @@ public class MergeStats { } else { log.info(chopped + " tablets are chopped, " + unassigned + " are offline " + info.getRange()); if (unassigned == total && chopped == needsToBeChopped) { - state = MergeState.MERGING; + if (verifyMergeConsistency(connector, master)) + state = MergeState.MERGING; + else + log.info("Merge consistency check failed " + info.getRange()); } else { log.info("Waiting for " + unassigned + " unassigned tablets to be " + total + " " + info.getRange()); } @@ -163,7 +166,7 @@ public class MergeStats { return state; } - public boolean verifyMergeConsistency(Connector connector, CurrentState master) throws TableNotFoundException, IOException { + private boolean verifyMergeConsistency(Connector connector, CurrentState master) throws TableNotFoundException, IOException { MergeStats verify = new MergeStats(info); Scanner scanner = connector.createScanner(Constants.METADATA_TABLE_NAME, Constants.NO_AUTHS); MetaDataTableScanner.configureScanner(scanner, master); Modified: incubator/accumulo/trunk/src/server/src/main/java/org/apache/accumulo/server/monitor/servlets/BasicServlet.java URL: http://svn.apache.org/viewvc/incubator/accumulo/trunk/src/server/src/main/java/org/apache/accumulo/server/monitor/servlets/BasicServlet.java?rev=1295272&r1=1295271&r2=1295272&view=diff ============================================================================== --- incubator/accumulo/trunk/src/server/src/main/java/org/apache/accumulo/server/monitor/servlets/BasicServlet.java (original) +++ incubator/accumulo/trunk/src/server/src/main/java/org/apache/accumulo/server/monitor/servlets/BasicServlet.java Wed Feb 29 21:05:58 2012 @@ -161,6 +161,7 @@ abstract public class BasicServlet exten sb.append("Master Server
\n"); sb.append("Tablet Servers
\n"); sb.append("Logger Servers
\n"); + sb.append("Server Activity
\n"); sb.append("Garbage Collector
\n"); sb.append("Tables
\n"); sb.append("Recent Traces
\n"); @@ -172,7 +173,6 @@ abstract public class BasicServlet exten if (numProblems > 0) sb.append("Table Problems (" + numProblems + ")
\n"); sb.append("
\n"); - sb.append("Visualization
\n"); sb.append("XML
\n"); sb.append("
["); Modified: incubator/accumulo/trunk/src/server/src/main/java/org/apache/accumulo/server/monitor/servlets/VisServlet.java URL: http://svn.apache.org/viewvc/incubator/accumulo/trunk/src/server/src/main/java/org/apache/accumulo/server/monitor/servlets/VisServlet.java?rev=1295272&r1=1295271&r2=1295272&view=diff ============================================================================== --- incubator/accumulo/trunk/src/server/src/main/java/org/apache/accumulo/server/monitor/servlets/VisServlet.java (original) +++ incubator/accumulo/trunk/src/server/src/main/java/org/apache/accumulo/server/monitor/servlets/VisServlet.java Wed Feb 29 21:05:58 2012 @@ -30,13 +30,18 @@ import org.apache.accumulo.server.monito public class VisServlet extends BasicServlet { private static final long serialVersionUID = 1L; boolean useCircles; - boolean useIngest; + StatType motion; + StatType color; int spacing; String url; + public enum StatType { + osload, ingest, query + } + @Override protected String getTitle(HttpServletRequest req) { - return "Tablet Server Status Visualization"; + return "Server Activity"; } @Override @@ -46,15 +51,25 @@ public class VisServlet extends BasicSer url = urlsb.toString(); useCircles = true; - String shape = req.getParameter("shape"); - if (shape != null && (shape.equals("square") || shape.equals("squares"))) { + String s = req.getParameter("shape"); + if (s != null && (s.equals("square") || s.equals("squares"))) { useCircles = false; } - useIngest = true; - String motion = req.getParameter("motion"); - if (motion != null && (motion.equals("query"))) { - useIngest = false; + s = req.getParameter("motion"); + motion = StatType.ingest; + if (s != null) { + try { + motion = StatType.valueOf(s); + } catch (Exception e) {} + } + + s = req.getParameter("color"); + color = StatType.osload; + if (s != null) { + try { + color = StatType.valueOf(s); + } catch (Exception e) {} } spacing = 20; @@ -64,6 +79,8 @@ public class VisServlet extends BasicSer spacing = 10; else if (size.equals("40")) spacing = 40; + else if (size.equals("80")) + spacing = 80; } ArrayList tservers = new ArrayList(); @@ -88,12 +105,16 @@ public class VisServlet extends BasicSer // size select box sb.append("  Size: \n"); + .append(spacing == 40 ? " selected='true'" : "").append(">4080\n"); // motion select box - sb.append("  Motion: \n"); + sb.append("  Motion: \n"); // color select box - sb.append("  Color: \n"); + sb.append("  Color: \n"); sb.append("  (hover for info, click for details)"); sb.append("
\n\n"); // floating info box @@ -110,6 +131,12 @@ public class VisServlet extends BasicSer sb.append("\n"); } + private void addOptions(StringBuilder sb, StatType selectedStatType) { + for (StatType st : StatType.values()) { + sb.append("" : ">").append(st).append(""); + } + } + private void doScript(StringBuilder sb, ArrayList tservers) { InputStream data = VisServlet.class.getClassLoader().getResourceAsStream("web/vis.xml"); if (data != null) { Modified: incubator/accumulo/trunk/src/server/src/main/resources/web/vis.xml URL: http://svn.apache.org/viewvc/incubator/accumulo/trunk/src/server/src/main/resources/web/vis.xml?rev=1295272&r1=1295271&r2=1295272&view=diff ============================================================================== --- incubator/accumulo/trunk/src/server/src/main/resources/web/vis.xml (original) +++ incubator/accumulo/trunk/src/server/src/main/resources/web/vis.xml Wed Feb 29 21:05:58 2012 @@ -16,12 +16,18 @@ -->