http://git-wip-us.apache.org/repos/asf/accumulo/blob/6bc67602/server/monitor/src/main/java/org/apache/accumulo/monitor/servlets/trace/NullScanner.java ---------------------------------------------------------------------- diff --git a/server/monitor/src/main/java/org/apache/accumulo/monitor/servlets/trace/NullScanner.java b/server/monitor/src/main/java/org/apache/accumulo/monitor/servlets/trace/NullScanner.java index bf35557..750cdcd 100644 --- a/server/monitor/src/main/java/org/apache/accumulo/monitor/servlets/trace/NullScanner.java +++ b/server/monitor/src/main/java/org/apache/accumulo/monitor/servlets/trace/NullScanner.java @@ -28,79 +28,79 @@ import org.apache.accumulo.core.data.Value; import org.apache.hadoop.io.Text; public class NullScanner implements Scanner { - + @Override public void addScanIterator(IteratorSetting cfg) {} - + @Override public void updateScanIteratorOption(String iteratorName, String key, String value) {} - + @Override public void fetchColumnFamily(Text col) {} - + @Override public void fetchColumn(Text colFam, Text colQual) {} - + @Override public void clearColumns() {} - + @Override public void clearScanIterators() {} - + @Deprecated @Override public void setTimeOut(int timeOut) {} - + @Deprecated @Override public int getTimeOut() { return 0; } - + @Override public void setRange(Range range) {} - + @Override public Range getRange() { return null; } - + @Override public void setBatchSize(int size) { - + } - + @Override public int getBatchSize() { return 0; } - + @Override public void enableIsolation() { - + } - + @Override public void disableIsolation() { - + } - + @Override public Iterator<Entry<Key,Value>> iterator() { return new NullKeyValueIterator(); } - + @Override public void removeScanIterator(String iteratorName) {} - + @Override public void setTimeout(long timeOut, TimeUnit timeUnit) {} - + @Override public long getTimeout(TimeUnit timeUnit) { return 0; } - + @Override public void close() {} @@ -111,6 +111,6 @@ public class NullScanner implements Scanner { @Override public void setReadaheadThreshold(long batches) { - + } }
http://git-wip-us.apache.org/repos/asf/accumulo/blob/6bc67602/server/monitor/src/main/java/org/apache/accumulo/monitor/servlets/trace/ShowTrace.java ---------------------------------------------------------------------- diff --git a/server/monitor/src/main/java/org/apache/accumulo/monitor/servlets/trace/ShowTrace.java b/server/monitor/src/main/java/org/apache/accumulo/monitor/servlets/trace/ShowTrace.java index 067f184..214c12d 100644 --- a/server/monitor/src/main/java/org/apache/accumulo/monitor/servlets/trace/ShowTrace.java +++ b/server/monitor/src/main/java/org/apache/accumulo/monitor/servlets/trace/ShowTrace.java @@ -41,15 +41,15 @@ import org.apache.accumulo.tracer.thrift.RemoteSpan; import org.apache.hadoop.io.Text; public class ShowTrace extends Basic { - + private static final long serialVersionUID = 1L; private static final String checkboxIdSuffix = "_checkbox"; private static final String pageLoadFunctionName = "pageload"; - + String getTraceId(HttpServletRequest req) { return getStringParameter(req, "id", null); } - + @Override public String getTitle(HttpServletRequest req) { String id = getTraceId(req); @@ -57,7 +57,7 @@ public class ShowTrace extends Basic { return "No trace id specified"; return "Trace ID " + id; } - + @Override public void pageBody(HttpServletRequest req, HttpServletResponse resp, final StringBuilder sb) throws Exception { String id = getTraceId(req); @@ -91,7 +91,7 @@ public class ShowTrace extends Basic { sb.append(" elt.style.display='none';\n "); sb.append(" }\n"); sb.append("}\n"); - + sb.append("function ").append(pageLoadFunctionName).append("() {\n"); sb.append(" var checkboxes = document.getElementsByTagName('input');\n"); sb.append(" for (var i = 0; i < checkboxes.length; i++) {\n"); @@ -102,13 +102,13 @@ public class ShowTrace extends Basic { sb.append(" }\n"); sb.append(" }\n"); sb.append("}\n"); - + sb.append("</script>\n"); sb.append("<div>"); sb.append("<table><caption>"); sb.append(String.format("<span class='table-caption'>Trace %s started at<br>%s</span></caption>", id, dateString(start))); sb.append("<tr><th>Time</th><th>Start</th><th>Service@Location</th><th>Name</th><th>Addl Data</th></tr>"); - + final long finalStart = start; Set<Long> visited = tree.visit(new SpanTreeVisitor() { @Override @@ -135,7 +135,7 @@ public class ShowTrace extends Basic { sb.append(" <table class='indent,noborder'>\n"); if (hasData) { sb.append(" <tr><th>Key</th><th>Value</th></tr>\n"); - for (Entry<ByteBuffer, ByteBuffer> entry : node.data.entrySet()) { + for (Entry<ByteBuffer,ByteBuffer> entry : node.data.entrySet()) { String key = new String(entry.getKey().array(), entry.getKey().arrayOffset(), entry.getKey().limit(), UTF_8); String value = new String(entry.getValue().array(), entry.getValue().arrayOffset(), entry.getValue().limit(), UTF_8); sb.append(" <tr><td>" + BasicServlet.sanitize(key) + "</td>"); @@ -167,7 +167,7 @@ public class ShowTrace extends Basic { sb.append("</table>\n"); sb.append("</div>\n"); } - + @Override protected String getBodyAttributes() { return " onload=\"" + pageLoadFunctionName + "()\" "; http://git-wip-us.apache.org/repos/asf/accumulo/blob/6bc67602/server/monitor/src/main/java/org/apache/accumulo/monitor/servlets/trace/ShowTraceLinkType.java ---------------------------------------------------------------------- diff --git a/server/monitor/src/main/java/org/apache/accumulo/monitor/servlets/trace/ShowTraceLinkType.java b/server/monitor/src/main/java/org/apache/accumulo/monitor/servlets/trace/ShowTraceLinkType.java index d9de107..f7a0e1d 100644 --- a/server/monitor/src/main/java/org/apache/accumulo/monitor/servlets/trace/ShowTraceLinkType.java +++ b/server/monitor/src/main/java/org/apache/accumulo/monitor/servlets/trace/ShowTraceLinkType.java @@ -23,7 +23,7 @@ import org.apache.accumulo.tracer.TraceFormatter; import org.apache.accumulo.tracer.thrift.RemoteSpan; /** - * + * */ public class ShowTraceLinkType extends StringType<RemoteSpan> { @Override @@ -33,7 +33,7 @@ public class ShowTraceLinkType extends StringType<RemoteSpan> { RemoteSpan span = (RemoteSpan) obj; return String.format("<a href='/trace/show?id=%s'>%s</a>", Long.toHexString(span.traceId), TraceFormatter.formatDate(new Date(span.start))); } - + @Override public int compare(RemoteSpan o1, RemoteSpan o2) { if (o1 == null && o2 == null) http://git-wip-us.apache.org/repos/asf/accumulo/blob/6bc67602/server/monitor/src/main/java/org/apache/accumulo/monitor/servlets/trace/Summary.java ---------------------------------------------------------------------- diff --git a/server/monitor/src/main/java/org/apache/accumulo/monitor/servlets/trace/Summary.java b/server/monitor/src/main/java/org/apache/accumulo/monitor/servlets/trace/Summary.java index 8cc451f..75541be 100644 --- a/server/monitor/src/main/java/org/apache/accumulo/monitor/servlets/trace/Summary.java +++ b/server/monitor/src/main/java/org/apache/accumulo/monitor/servlets/trace/Summary.java @@ -37,26 +37,26 @@ import org.apache.accumulo.tracer.thrift.RemoteSpan; import org.apache.hadoop.io.Text; public class Summary extends Basic { - + private static final long serialVersionUID = 1L; public static final int DEFAULT_MINUTES = 10; - + int getMinutes(HttpServletRequest req) { return getIntParameter(req, "minutes", DEFAULT_MINUTES); } - + @Override public String getTitle(HttpServletRequest req) { return "Traces for the last " + getMinutes(req) + " minutes"; } - + static private class Stats { int count; long min = Long.MAX_VALUE; long max = Long.MIN_VALUE; long total = 0l; long histogram[] = new long[] {0, 0, 0, 0, 0, 0}; - + void addSpan(RemoteSpan span) { count++; long ms = span.stop - span.start; @@ -70,20 +70,20 @@ public class Summary extends Basic { } histogram[index]++; } - + long average() { return total / count; } } - + private static class ShowTypeLink extends StringType<String> { - + int minutes; - + public ShowTypeLink(int minutes) { this.minutes = minutes; } - + @Override public String format(Object obj) { if (obj == null) @@ -93,7 +93,7 @@ public class Summary extends Basic { return String.format("<a href='/trace/listType?type=%s&minutes=%d'>%s</a>", encodedType, minutes, type); } } - + static private class HistogramType extends StringType<Stats> { @Override public String format(Object obj) { @@ -110,7 +110,7 @@ public class Summary extends Basic { sb.append("</tr></table>"); return sb.toString(); } - + @Override public int compare(Stats o1, Stats o2) { for (int i = 0; i < o1.histogram.length; i++) { @@ -140,11 +140,11 @@ public class Summary extends Basic { return new Range(new Text("start:" + startHexTime), new Text("start:" + endHexTime)); } - + @Override public void pageBody(HttpServletRequest req, HttpServletResponse resp, StringBuilder sb) throws Exception { int minutes = getMinutes(req); - + Scanner scanner = getScanner(sb); if (scanner == null) { return; @@ -171,7 +171,7 @@ public class Summary extends Basic { "Histogram", new HistogramType(), "Counts of spans of different duration. Columns start at milliseconds, and each column is ten times longer: tens of milliseconds, seconds, tens of seconds, etc."); - + for (Entry<String,Stats> entry : summary.entrySet()) { Stats stat = entry.getValue(); trace.addRow(entry.getKey(), stat.count, stat.min, stat.max, stat.average(), stat); http://git-wip-us.apache.org/repos/asf/accumulo/blob/6bc67602/server/monitor/src/main/java/org/apache/accumulo/monitor/util/TableColumn.java ---------------------------------------------------------------------- diff --git a/server/monitor/src/main/java/org/apache/accumulo/monitor/util/TableColumn.java b/server/monitor/src/main/java/org/apache/accumulo/monitor/util/TableColumn.java index a7330ac..1e00927 100644 --- a/server/monitor/src/main/java/org/apache/accumulo/monitor/util/TableColumn.java +++ b/server/monitor/src/main/java/org/apache/accumulo/monitor/util/TableColumn.java @@ -23,25 +23,25 @@ public class TableColumn<T> { private String title; private CellType<T> type; private String legend; - + public TableColumn(String title, CellType<T> type, String legend) { this.title = title; this.type = type != null ? type : new StringType<T>(); this.legend = legend; } - + public void setTitle(String title) { this.title = title; } - + public String getTitle() { return title; } - + public String getLegend() { return legend; } - + public CellType<T> getCellType() { return type; } http://git-wip-us.apache.org/repos/asf/accumulo/blob/6bc67602/server/monitor/src/main/java/org/apache/accumulo/monitor/util/TableRow.java ---------------------------------------------------------------------- diff --git a/server/monitor/src/main/java/org/apache/accumulo/monitor/util/TableRow.java b/server/monitor/src/main/java/org/apache/accumulo/monitor/util/TableRow.java index 5de0863..c1ce1c5 100644 --- a/server/monitor/src/main/java/org/apache/accumulo/monitor/util/TableRow.java +++ b/server/monitor/src/main/java/org/apache/accumulo/monitor/util/TableRow.java @@ -22,43 +22,43 @@ import java.util.Comparator; public class TableRow { private int size; private ArrayList<Object> row; - + TableRow(int size) { this.size = size; this.row = new ArrayList<Object>(size); } - + public boolean add(Object obj) { if (row.size() == size) throw new IllegalStateException("Row is full."); return row.add(obj); } - + Object get(int index) { return row.get(index); } - + int size() { return row.size(); } - + Object set(int i, Object value) { return row.set(i, value); } - + public static <T> Comparator<TableRow> getComparator(int index, Comparator<T> comp) { return new TableRowComparator<T>(index, comp); } - + private static class TableRowComparator<T> implements Comparator<TableRow> { private int index; private Comparator<T> comp; - + public TableRowComparator(int index, Comparator<T> comp) { this.index = index; this.comp = comp; } - + @SuppressWarnings("unchecked") @Override public int compare(TableRow o1, TableRow o2) { http://git-wip-us.apache.org/repos/asf/accumulo/blob/6bc67602/server/monitor/src/main/java/org/apache/accumulo/monitor/util/celltypes/CellType.java ---------------------------------------------------------------------- diff --git a/server/monitor/src/main/java/org/apache/accumulo/monitor/util/celltypes/CellType.java b/server/monitor/src/main/java/org/apache/accumulo/monitor/util/celltypes/CellType.java index 23071a8..71aa317 100644 --- a/server/monitor/src/main/java/org/apache/accumulo/monitor/util/celltypes/CellType.java +++ b/server/monitor/src/main/java/org/apache/accumulo/monitor/util/celltypes/CellType.java @@ -20,15 +20,15 @@ import java.util.Comparator; public abstract class CellType<T> implements Comparator<T> { private boolean sortable = true; - + abstract public String alignment(); - + abstract public String format(Object obj); - + public final void setSortable(boolean sortable) { this.sortable = sortable; } - + public final boolean isSortable() { return sortable; } http://git-wip-us.apache.org/repos/asf/accumulo/blob/6bc67602/server/monitor/src/main/java/org/apache/accumulo/monitor/util/celltypes/CompactionsType.java ---------------------------------------------------------------------- diff --git a/server/monitor/src/main/java/org/apache/accumulo/monitor/util/celltypes/CompactionsType.java b/server/monitor/src/main/java/org/apache/accumulo/monitor/util/celltypes/CompactionsType.java index 704aa42..e649b84 100644 --- a/server/monitor/src/main/java/org/apache/accumulo/monitor/util/celltypes/CompactionsType.java +++ b/server/monitor/src/main/java/org/apache/accumulo/monitor/util/celltypes/CompactionsType.java @@ -20,13 +20,13 @@ import org.apache.accumulo.core.master.thrift.Compacting; import org.apache.accumulo.core.master.thrift.TableInfo; public class CompactionsType extends CellType<TableInfo> { - + private String fieldName; - + public CompactionsType(String which) { this.fieldName = which; } - + @Override public String format(Object obj) { if (obj == null) @@ -41,7 +41,7 @@ public class CompactionsType extends CellType<TableInfo> { c = new Compacting(); return String.format("%s (%,d)", NumberType.commas(c.running, c.queued == 0 ? 0 : 1, summary.onlineTablets), c.queued); } - + @Override public int compare(TableInfo o1, TableInfo o2) { if (o1 == null) @@ -63,10 +63,10 @@ public class CompactionsType extends CellType<TableInfo> { return 1; return c1.running + c1.queued - c2.running - c2.queued; } - + @Override public String alignment() { return "right"; } - + } http://git-wip-us.apache.org/repos/asf/accumulo/blob/6bc67602/server/monitor/src/main/java/org/apache/accumulo/monitor/util/celltypes/DateTimeType.java ---------------------------------------------------------------------- diff --git a/server/monitor/src/main/java/org/apache/accumulo/monitor/util/celltypes/DateTimeType.java b/server/monitor/src/main/java/org/apache/accumulo/monitor/util/celltypes/DateTimeType.java index 8ff3b60..5a8ca58 100644 --- a/server/monitor/src/main/java/org/apache/accumulo/monitor/util/celltypes/DateTimeType.java +++ b/server/monitor/src/main/java/org/apache/accumulo/monitor/util/celltypes/DateTimeType.java @@ -25,17 +25,17 @@ public class DateTimeType extends CellType<Long> { private SimpleDateFormat simple; private int dateFormat; private int timeFormat; - + public DateTimeType(int dateFormat, int timeFormat) { this.dateFormat = dateFormat; this.timeFormat = timeFormat; this.simple = null; } - + public DateTimeType(SimpleDateFormat fmt) { simple = fmt; } - + @Override public String format(Object obj) { if (obj == null) @@ -47,7 +47,7 @@ public class DateTimeType extends CellType<Long> { return simple.format(new Date(millis)).replace(" ", " "); return DateFormat.getDateTimeInstance(dateFormat, timeFormat, Locale.getDefault()).format(new Date(millis)).replace(" ", " "); } - + @Override public int compare(Long o1, Long o2) { if (o1 == null && o2 == null) @@ -57,10 +57,10 @@ public class DateTimeType extends CellType<Long> { else return o1.compareTo(o2); } - + @Override public String alignment() { return "right"; } - + } http://git-wip-us.apache.org/repos/asf/accumulo/blob/6bc67602/server/monitor/src/main/java/org/apache/accumulo/monitor/util/celltypes/DurationType.java ---------------------------------------------------------------------- diff --git a/server/monitor/src/main/java/org/apache/accumulo/monitor/util/celltypes/DurationType.java b/server/monitor/src/main/java/org/apache/accumulo/monitor/util/celltypes/DurationType.java index 7f3472e..65dd214 100644 --- a/server/monitor/src/main/java/org/apache/accumulo/monitor/util/celltypes/DurationType.java +++ b/server/monitor/src/main/java/org/apache/accumulo/monitor/util/celltypes/DurationType.java @@ -21,16 +21,16 @@ import org.apache.accumulo.core.util.Duration; public class DurationType extends NumberType<Long> { private Long errMin; private Long errMax; - + public DurationType() { this(null, null); } - + public DurationType(Long errMin, Long errMax) { this.errMin = errMin; this.errMax = errMax; } - + @Override public String format(Object obj) { if (obj == null) @@ -40,12 +40,12 @@ public class DurationType extends NumberType<Long> { return seconds(millis, errMin, errMax); return Duration.format(millis); } - + private static String seconds(long secs, long errMin, long errMax) { String numbers = Duration.format(secs); if (secs < errMin || secs > errMax) return "<span class='error'>" + numbers + "</span>"; return numbers; } - + } http://git-wip-us.apache.org/repos/asf/accumulo/blob/6bc67602/server/monitor/src/main/java/org/apache/accumulo/monitor/util/celltypes/NumberType.java ---------------------------------------------------------------------- diff --git a/server/monitor/src/main/java/org/apache/accumulo/monitor/util/celltypes/NumberType.java b/server/monitor/src/main/java/org/apache/accumulo/monitor/util/celltypes/NumberType.java index b285727..f00ad67 100644 --- a/server/monitor/src/main/java/org/apache/accumulo/monitor/util/celltypes/NumberType.java +++ b/server/monitor/src/main/java/org/apache/accumulo/monitor/util/celltypes/NumberType.java @@ -19,24 +19,24 @@ package org.apache.accumulo.monitor.util.celltypes; import static org.apache.accumulo.core.util.NumUtil.bigNumberForQuantity; public class NumberType<T extends Number> extends CellType<T> { - + protected final T warnMin, warnMax, errMin, errMax; - + public NumberType(T warnMin, T warnMax, T errMin, T errMax) { this.warnMin = warnMin; this.warnMax = warnMax; this.errMin = errMin; this.errMax = errMax; } - + public NumberType(T errMin, T errMax) { this(null, null, errMin, errMax); } - + public NumberType() { this(null, null); } - + @SuppressWarnings("unchecked") @Override public String format(Object obj) { @@ -62,7 +62,7 @@ public class NumberType<T extends Number> extends CellType<T> { } return s; } - + @Override public int compare(T o1, T o2) { if (o1 == null && o2 == null) @@ -74,27 +74,27 @@ public class NumberType<T extends Number> extends CellType<T> { else return Double.valueOf(o1.doubleValue()).compareTo(o2.doubleValue()); } - + public static String commas(long i) { return bigNumberForQuantity(i); } - + public static String commas(long i, long errMin, long errMax) { if (i < errMin || i > errMax) return String.format("<span class='error'>%s</span>", bigNumberForQuantity(i)); return bigNumberForQuantity(i); } - + public static String commas(double i) { return bigNumberForQuantity((long) i); } - + public static String commas(double d, double errMin, double errMax) { if (d < errMin || d > errMax) return String.format("<span class='error'>%s</span>", bigNumberForQuantity(d)); return bigNumberForQuantity(d); } - + public static String commas(long i, long warnMin, long warnMax, long errMin, long errMax) { if (i < errMin || i > errMax) return String.format("<span class='error'>%s</span>", bigNumberForQuantity(i)); @@ -102,7 +102,7 @@ public class NumberType<T extends Number> extends CellType<T> { return String.format("<span class='warning'>%s</span>", bigNumberForQuantity(i)); return bigNumberForQuantity(i); } - + public static String commas(double d, double warnMin, double warnMax, double errMin, double errMax) { if (d < errMin || d > errMax) return String.format("<span class='error'>%s</span>", bigNumberForQuantity(d)); @@ -110,7 +110,7 @@ public class NumberType<T extends Number> extends CellType<T> { return String.format("<span class='warning'>%s</span>", bigNumberForQuantity(d)); return bigNumberForQuantity(d); } - + @Override public String alignment() { return "right"; http://git-wip-us.apache.org/repos/asf/accumulo/blob/6bc67602/server/monitor/src/main/java/org/apache/accumulo/monitor/util/celltypes/PercentageType.java ---------------------------------------------------------------------- diff --git a/server/monitor/src/main/java/org/apache/accumulo/monitor/util/celltypes/PercentageType.java b/server/monitor/src/main/java/org/apache/accumulo/monitor/util/celltypes/PercentageType.java index 2efc65f..462e33d 100644 --- a/server/monitor/src/main/java/org/apache/accumulo/monitor/util/celltypes/PercentageType.java +++ b/server/monitor/src/main/java/org/apache/accumulo/monitor/util/celltypes/PercentageType.java @@ -17,24 +17,24 @@ package org.apache.accumulo.monitor.util.celltypes; public class PercentageType extends CellType<Double> { - + @Override public int compare(Double o1, Double o2) { return o1.compareTo(o2); } - + @Override public String alignment() { return "right"; } - + @Override public String format(Object obj) { if (obj == null) return "-"; - + return String.format("%.0f%s", 100 * (Double) obj, "%"); - + } - + } http://git-wip-us.apache.org/repos/asf/accumulo/blob/6bc67602/server/monitor/src/main/java/org/apache/accumulo/monitor/util/celltypes/PreciseNumberType.java ---------------------------------------------------------------------- diff --git a/server/monitor/src/main/java/org/apache/accumulo/monitor/util/celltypes/PreciseNumberType.java b/server/monitor/src/main/java/org/apache/accumulo/monitor/util/celltypes/PreciseNumberType.java index c038d89..775e8dd 100644 --- a/server/monitor/src/main/java/org/apache/accumulo/monitor/util/celltypes/PreciseNumberType.java +++ b/server/monitor/src/main/java/org/apache/accumulo/monitor/util/celltypes/PreciseNumberType.java @@ -16,7 +16,6 @@ */ package org.apache.accumulo.monitor.util.celltypes; - public class PreciseNumberType extends NumberType<Integer> { public PreciseNumberType(int warnMin, int warnMax, int errMin, int errMax) { @@ -27,7 +26,7 @@ public class PreciseNumberType extends NumberType<Integer> { public String format(Object obj) { if (obj == null) return "-"; - int i = ((Number)obj).intValue(); + int i = ((Number) obj).intValue(); String display = String.format("%,d", obj); if ((errMin != null && i < errMin) || (errMax != null && i > errMax)) { return String.format("<span class='error'>%s</span>", display); http://git-wip-us.apache.org/repos/asf/accumulo/blob/6bc67602/server/monitor/src/main/java/org/apache/accumulo/monitor/util/celltypes/ProgressChartType.java ---------------------------------------------------------------------- diff --git a/server/monitor/src/main/java/org/apache/accumulo/monitor/util/celltypes/ProgressChartType.java b/server/monitor/src/main/java/org/apache/accumulo/monitor/util/celltypes/ProgressChartType.java index 20db871..20836fd 100644 --- a/server/monitor/src/main/java/org/apache/accumulo/monitor/util/celltypes/ProgressChartType.java +++ b/server/monitor/src/main/java/org/apache/accumulo/monitor/util/celltypes/ProgressChartType.java @@ -17,17 +17,17 @@ package org.apache.accumulo.monitor.util.celltypes; public class ProgressChartType extends NumberType<Double> { - + private double max; - + public ProgressChartType() { this(1.0); } - + public ProgressChartType(Double total) { max = total == null ? 1.0 : total; } - + @Override public String format(Object obj) { if (obj == null) @@ -35,13 +35,13 @@ public class ProgressChartType extends NumberType<Double> { Double num = (Double) obj; return getChart(num, max); } - + public static String getChart(double num, double total) { StringBuilder result = new StringBuilder(); double percent = 0; if (total != 0) percent = (num / total) * 100; - + int width = 0; if (percent < 1) width = 0; @@ -49,7 +49,7 @@ public class ProgressChartType extends NumberType<Double> { width = 100; else width = (int) percent; - + result.append("<div class='progress-chart'>"); result.append("<div style='width: ").append(width).append("%;'></div>"); result.append("</div> "); http://git-wip-us.apache.org/repos/asf/accumulo/blob/6bc67602/server/monitor/src/main/java/org/apache/accumulo/monitor/util/celltypes/StringType.java ---------------------------------------------------------------------- diff --git a/server/monitor/src/main/java/org/apache/accumulo/monitor/util/celltypes/StringType.java b/server/monitor/src/main/java/org/apache/accumulo/monitor/util/celltypes/StringType.java index 8807423..79f8d5e 100644 --- a/server/monitor/src/main/java/org/apache/accumulo/monitor/util/celltypes/StringType.java +++ b/server/monitor/src/main/java/org/apache/accumulo/monitor/util/celltypes/StringType.java @@ -21,7 +21,7 @@ public class StringType<T> extends CellType<T> { public String format(Object obj) { return obj == null ? "-" : obj.toString(); } - + @Override public int compare(T o1, T o2) { if (o1 == null && o2 == null) @@ -32,7 +32,7 @@ public class StringType<T> extends CellType<T> { return 1; return o1.toString().compareTo(o2.toString()); } - + @Override public String alignment() { return "left"; http://git-wip-us.apache.org/repos/asf/accumulo/blob/6bc67602/server/monitor/src/main/java/org/apache/accumulo/monitor/util/celltypes/TServerLinkType.java ---------------------------------------------------------------------- diff --git a/server/monitor/src/main/java/org/apache/accumulo/monitor/util/celltypes/TServerLinkType.java b/server/monitor/src/main/java/org/apache/accumulo/monitor/util/celltypes/TServerLinkType.java index 26d623a..be3f527 100644 --- a/server/monitor/src/main/java/org/apache/accumulo/monitor/util/celltypes/TServerLinkType.java +++ b/server/monitor/src/main/java/org/apache/accumulo/monitor/util/celltypes/TServerLinkType.java @@ -19,7 +19,7 @@ package org.apache.accumulo.monitor.util.celltypes; import org.apache.accumulo.core.master.thrift.TabletServerStatus; public class TServerLinkType extends CellType<TabletServerStatus> { - + @Override public String format(Object obj) { if (obj == null) @@ -27,25 +27,25 @@ public class TServerLinkType extends CellType<TabletServerStatus> { TabletServerStatus status = (TabletServerStatus) obj; return String.format("<a href='/tservers?s=%s'>%s</a>", status.name, displayName(status)); } - + public static String displayName(TabletServerStatus status) { return displayName(status == null ? null : status.name); } - + public static String displayName(String address) { if (address == null) return "--Unknown--"; return address; } - + @Override public int compare(TabletServerStatus o1, TabletServerStatus o2) { return displayName(o1).compareTo(displayName(o2)); } - + @Override public String alignment() { return "left"; } - + } http://git-wip-us.apache.org/repos/asf/accumulo/blob/6bc67602/server/monitor/src/main/java/org/apache/accumulo/monitor/util/celltypes/TableLinkType.java ---------------------------------------------------------------------- diff --git a/server/monitor/src/main/java/org/apache/accumulo/monitor/util/celltypes/TableLinkType.java b/server/monitor/src/main/java/org/apache/accumulo/monitor/util/celltypes/TableLinkType.java index 76041d4..0d176f2 100644 --- a/server/monitor/src/main/java/org/apache/accumulo/monitor/util/celltypes/TableLinkType.java +++ b/server/monitor/src/main/java/org/apache/accumulo/monitor/util/celltypes/TableLinkType.java @@ -23,13 +23,13 @@ import org.apache.accumulo.monitor.servlets.BasicServlet; import org.apache.accumulo.server.client.HdfsZooInstance; public class TableLinkType extends CellType<String> { - + private Map<String,String> tidToNameMap; - + public TableLinkType() { tidToNameMap = Tables.getIdToNameMap(HdfsZooInstance.getInstance()); } - + @Override public String format(Object obj) { if (obj == null) @@ -39,21 +39,21 @@ public class TableLinkType extends CellType<String> { // e.g. the root table's id of "+r" would not be interpreted properly return String.format("<a href='/tables?t=%s'>%s</a>", BasicServlet.encode(tableId), displayName(tableId)); } - + private String displayName(String tableId) { if (tableId == null) return "-"; return Tables.getPrintableTableNameFromId(tidToNameMap, tableId); } - + @Override public int compare(String o1, String o2) { return displayName(o1).compareTo(displayName(o2)); } - + @Override public String alignment() { return "left"; } - + } http://git-wip-us.apache.org/repos/asf/accumulo/blob/6bc67602/server/monitor/src/main/java/org/apache/accumulo/monitor/util/celltypes/TableStateType.java ---------------------------------------------------------------------- diff --git a/server/monitor/src/main/java/org/apache/accumulo/monitor/util/celltypes/TableStateType.java b/server/monitor/src/main/java/org/apache/accumulo/monitor/util/celltypes/TableStateType.java index 22fb498..724d220 100644 --- a/server/monitor/src/main/java/org/apache/accumulo/monitor/util/celltypes/TableStateType.java +++ b/server/monitor/src/main/java/org/apache/accumulo/monitor/util/celltypes/TableStateType.java @@ -19,12 +19,12 @@ package org.apache.accumulo.monitor.util.celltypes; import org.apache.accumulo.core.master.state.tables.TableState; public class TableStateType extends CellType<TableState> { - + @Override public String alignment() { return "center"; } - + @Override public String format(Object obj) { TableState state = obj == null ? TableState.UNKNOWN : (TableState) obj; @@ -44,7 +44,7 @@ public class TableStateType extends CellType<TableState> { style = style != null ? " class='" + style + "'" : ""; return String.format("<span%s>%s</span>", style, state); } - + @Override public int compare(TableState o1, TableState o2) { if (o1 == null && o2 == null) @@ -53,5 +53,5 @@ public class TableStateType extends CellType<TableState> { return -1; return o1.compareTo(o2); } - + } http://git-wip-us.apache.org/repos/asf/accumulo/blob/6bc67602/server/monitor/src/test/java/org/apache/accumulo/monitor/ShowTraceLinkTypeTest.java ---------------------------------------------------------------------- diff --git a/server/monitor/src/test/java/org/apache/accumulo/monitor/ShowTraceLinkTypeTest.java b/server/monitor/src/test/java/org/apache/accumulo/monitor/ShowTraceLinkTypeTest.java index ef4107b..b4840a7 100644 --- a/server/monitor/src/test/java/org/apache/accumulo/monitor/ShowTraceLinkTypeTest.java +++ b/server/monitor/src/test/java/org/apache/accumulo/monitor/ShowTraceLinkTypeTest.java @@ -16,19 +16,19 @@ */ package org.apache.accumulo.monitor; +import java.nio.ByteBuffer; import java.util.ArrayList; import java.util.Collections; -import org.apache.accumulo.tracer.thrift.RemoteSpan; import org.apache.accumulo.tracer.thrift.Annotation; +import org.apache.accumulo.tracer.thrift.RemoteSpan; import org.junit.Assert; import org.junit.Test; -import java.nio.ByteBuffer; - public class ShowTraceLinkTypeTest { private static RemoteSpan rs(long start, long stop, String description) { - return new RemoteSpan("sender", "svc", 0l, 0l, 0l, start, stop, description, Collections.<ByteBuffer, ByteBuffer>emptyMap(), Collections.<Annotation>emptyList()); + return new RemoteSpan("sender", "svc", 0l, 0l, 0l, start, stop, description, Collections.<ByteBuffer,ByteBuffer> emptyMap(), + Collections.<Annotation> emptyList()); } @Test http://git-wip-us.apache.org/repos/asf/accumulo/blob/6bc67602/server/monitor/src/test/java/org/apache/accumulo/monitor/ZooKeeperStatusTest.java ---------------------------------------------------------------------- diff --git a/server/monitor/src/test/java/org/apache/accumulo/monitor/ZooKeeperStatusTest.java b/server/monitor/src/test/java/org/apache/accumulo/monitor/ZooKeeperStatusTest.java index a90396b..7f56931 100644 --- a/server/monitor/src/test/java/org/apache/accumulo/monitor/ZooKeeperStatusTest.java +++ b/server/monitor/src/test/java/org/apache/accumulo/monitor/ZooKeeperStatusTest.java @@ -26,31 +26,31 @@ import org.junit.Assert; import org.junit.Test; public class ZooKeeperStatusTest { - + @Test public void zkHostSortingTest() { List<String> expectedHosts = Arrays.asList("rack1node1", "rack2node1", "rack4node1", "rack4node4"); - + // Add the states in a not correctly sorted order TreeSet<ZooKeeperState> states = new TreeSet<ZooKeeperState>(); states.add(new ZooKeeperState("rack4node4", "leader", 10)); states.add(new ZooKeeperState("rack4node1", "follower", 10)); states.add(new ZooKeeperState("rack1node1", "follower", 10)); states.add(new ZooKeeperState("rack2node1", "follower", 10)); - + List<String> actualHosts = new ArrayList<String>(4); for (ZooKeeperState state : states) { actualHosts.add(state.keeper); } - + // Assert we have 4 of each Assert.assertEquals(expectedHosts.size(), actualHosts.size()); - + // Assert the ordering is correct for (int i = 0; i < expectedHosts.size(); i++) { Assert.assertEquals(expectedHosts.get(i), actualHosts.get(i)); } - + } - + } http://git-wip-us.apache.org/repos/asf/accumulo/blob/6bc67602/server/monitor/src/test/java/org/apache/accumulo/monitor/servlets/trace/SummaryTest.java ---------------------------------------------------------------------- diff --git a/server/monitor/src/test/java/org/apache/accumulo/monitor/servlets/trace/SummaryTest.java b/server/monitor/src/test/java/org/apache/accumulo/monitor/servlets/trace/SummaryTest.java index 23cdc0b..5c33d66 100644 --- a/server/monitor/src/test/java/org/apache/accumulo/monitor/servlets/trace/SummaryTest.java +++ b/server/monitor/src/test/java/org/apache/accumulo/monitor/servlets/trace/SummaryTest.java @@ -20,7 +20,7 @@ import org.junit.Before; import org.junit.Test; /** - * + * */ public class SummaryTest { http://git-wip-us.apache.org/repos/asf/accumulo/blob/6bc67602/server/monitor/src/test/java/org/apache/accumulo/monitor/util/celltypes/PreciseNumberTypeTest.java ---------------------------------------------------------------------- diff --git a/server/monitor/src/test/java/org/apache/accumulo/monitor/util/celltypes/PreciseNumberTypeTest.java b/server/monitor/src/test/java/org/apache/accumulo/monitor/util/celltypes/PreciseNumberTypeTest.java index 6e741ae..3bb11e6 100644 --- a/server/monitor/src/test/java/org/apache/accumulo/monitor/util/celltypes/PreciseNumberTypeTest.java +++ b/server/monitor/src/test/java/org/apache/accumulo/monitor/util/celltypes/PreciseNumberTypeTest.java @@ -16,8 +16,9 @@ */ package org.apache.accumulo.monitor.util.celltypes; +import static org.junit.Assert.assertEquals; + import org.junit.Test; -import static org.junit.Assert.*; public class PreciseNumberTypeTest { http://git-wip-us.apache.org/repos/asf/accumulo/blob/6bc67602/server/tracer/src/main/java/org/apache/accumulo/tracer/AsyncSpanReceiver.java ---------------------------------------------------------------------- diff --git a/server/tracer/src/main/java/org/apache/accumulo/tracer/AsyncSpanReceiver.java b/server/tracer/src/main/java/org/apache/accumulo/tracer/AsyncSpanReceiver.java index 7c54b55..55378ad 100644 --- a/server/tracer/src/main/java/org/apache/accumulo/tracer/AsyncSpanReceiver.java +++ b/server/tracer/src/main/java/org/apache/accumulo/tracer/AsyncSpanReceiver.java @@ -16,15 +16,6 @@ */ package org.apache.accumulo.tracer; -import org.apache.accumulo.core.trace.DistributedTrace; -import org.apache.accumulo.tracer.thrift.Annotation; -import org.apache.accumulo.tracer.thrift.RemoteSpan; -import org.apache.log4j.Logger; -import org.htrace.HTraceConfiguration; -import org.htrace.Span; -import org.htrace.SpanReceiver; -import org.htrace.TimelineAnnotation; - import java.net.InetAddress; import java.net.UnknownHostException; import java.nio.ByteBuffer; @@ -38,6 +29,15 @@ import java.util.Timer; import java.util.TimerTask; import java.util.concurrent.ConcurrentLinkedQueue; +import org.apache.accumulo.core.trace.DistributedTrace; +import org.apache.accumulo.tracer.thrift.Annotation; +import org.apache.accumulo.tracer.thrift.RemoteSpan; +import org.apache.log4j.Logger; +import org.htrace.HTraceConfiguration; +import org.htrace.Span; +import org.htrace.SpanReceiver; +import org.htrace.TimelineAnnotation; + /** * Deliver Span information periodically to a destination. * <ul> @@ -49,18 +49,18 @@ import java.util.concurrent.ConcurrentLinkedQueue; public abstract class AsyncSpanReceiver<SpanKey,Destination> implements SpanReceiver { private static final Logger log = Logger.getLogger(AsyncSpanReceiver.class); - + private final Map<SpanKey,Destination> clients = new HashMap<SpanKey,Destination>(); - + protected String host = null; protected String service = null; - + protected abstract Destination createDestination(SpanKey key) throws Exception; - + protected abstract void send(Destination resource, RemoteSpan span) throws Exception; - + protected abstract SpanKey getSpanKey(Map<ByteBuffer,ByteBuffer> data); - + Timer timer = new Timer("SpanSender", true); protected final AbstractQueue<RemoteSpan> sendQueue = new ConcurrentLinkedQueue<RemoteSpan>(); @@ -78,7 +78,7 @@ public abstract class AsyncSpanReceiver<SpanKey,Destination> implements SpanRece log.warn("Exception sending spans to destination", ex); } } - + }, millis, millis); } @@ -113,11 +113,11 @@ public abstract class AsyncSpanReceiver<SpanKey,Destination> implements SpanRece } } - public static Map<ByteBuffer, ByteBuffer> convertToByteBuffers(Map<byte[], byte[]> bytesMap) { + public static Map<ByteBuffer,ByteBuffer> convertToByteBuffers(Map<byte[],byte[]> bytesMap) { if (bytesMap == null) return null; - Map<ByteBuffer, ByteBuffer> result = new HashMap<ByteBuffer, ByteBuffer>(); - for (Entry<byte[], byte[]> bytes : bytesMap.entrySet()) { + Map<ByteBuffer,ByteBuffer> result = new HashMap<ByteBuffer,ByteBuffer>(); + for (Entry<byte[],byte[]> bytes : bytesMap.entrySet()) { result.put(ByteBuffer.wrap(bytes.getKey()), ByteBuffer.wrap(bytes.getValue())); } return result; @@ -135,12 +135,12 @@ public abstract class AsyncSpanReceiver<SpanKey,Destination> implements SpanRece @Override public void receiveSpan(Span s) { - Map<ByteBuffer, ByteBuffer> data = convertToByteBuffers(s.getKVAnnotations()); + Map<ByteBuffer,ByteBuffer> data = convertToByteBuffers(s.getKVAnnotations()); SpanKey dest = getSpanKey(data); if (dest != null) { List<Annotation> annotations = convertToAnnotations(s.getTimelineAnnotations()); - sendQueue.add(new RemoteSpan(host, service==null ? s.getProcessId() : service, s.getTraceId(), s.getSpanId(), s.getParentId(), - s.getStartTimeMillis(), s.getStopTimeMillis(), s.getDescription(), data, annotations)); + sendQueue.add(new RemoteSpan(host, service == null ? s.getProcessId() : service, s.getTraceId(), s.getSpanId(), s.getParentId(), s.getStartTimeMillis(), + s.getStopTimeMillis(), s.getDescription(), data, annotations)); } } @@ -170,5 +170,5 @@ public abstract class AsyncSpanReceiver<SpanKey,Destination> implements SpanRece } service = conf.get(DistributedTrace.TRACE_SERVICE_PROPERTY, service); } - + } http://git-wip-us.apache.org/repos/asf/accumulo/blob/6bc67602/server/tracer/src/main/java/org/apache/accumulo/tracer/SendSpansViaThrift.java ---------------------------------------------------------------------- diff --git a/server/tracer/src/main/java/org/apache/accumulo/tracer/SendSpansViaThrift.java b/server/tracer/src/main/java/org/apache/accumulo/tracer/SendSpansViaThrift.java index 2190570..c585cc1 100644 --- a/server/tracer/src/main/java/org/apache/accumulo/tracer/SendSpansViaThrift.java +++ b/server/tracer/src/main/java/org/apache/accumulo/tracer/SendSpansViaThrift.java @@ -18,6 +18,11 @@ package org.apache.accumulo.tracer; import static java.nio.charset.StandardCharsets.UTF_8; +import java.net.InetSocketAddress; +import java.net.Socket; +import java.nio.ByteBuffer; +import java.util.Map; + import org.apache.accumulo.tracer.thrift.RemoteSpan; import org.apache.accumulo.tracer.thrift.SpanReceiver.Client; import org.apache.thrift.protocol.TBinaryProtocol; @@ -25,18 +30,13 @@ import org.apache.thrift.protocol.TProtocol; import org.apache.thrift.transport.TSocket; import org.apache.thrift.transport.TTransport; -import java.net.InetSocketAddress; -import java.net.Socket; -import java.nio.ByteBuffer; -import java.util.Map; - /** * Send Span data to a destination using thrift. */ public class SendSpansViaThrift extends AsyncSpanReceiver<String,Client> { - + private static final org.apache.log4j.Logger log = org.apache.log4j.Logger.getLogger(SendSpansViaThrift.class); - + private static final String THRIFT = "thrift://"; public SendSpansViaThrift() { @@ -46,7 +46,7 @@ public class SendSpansViaThrift extends AsyncSpanReceiver<String,Client> { public SendSpansViaThrift(long millis) { super(millis); } - + @Override protected Client createDestination(String destination) throws Exception { if (destination == null) @@ -54,7 +54,7 @@ public class SendSpansViaThrift extends AsyncSpanReceiver<String,Client> { try { int portSeparatorIndex = destination.lastIndexOf(':'); String host = destination.substring(0, portSeparatorIndex); - int port = Integer.parseInt(destination.substring(portSeparatorIndex+1)); + int port = Integer.parseInt(destination.substring(portSeparatorIndex + 1)); log.debug("Connecting to " + host + ":" + port); InetSocketAddress addr = new InetSocketAddress(host, port); Socket sock = new Socket(); @@ -67,7 +67,7 @@ public class SendSpansViaThrift extends AsyncSpanReceiver<String,Client> { return null; } } - + @Override protected void send(Client client, RemoteSpan s) throws Exception { if (client != null) { @@ -93,5 +93,5 @@ public class SendSpansViaThrift extends AsyncSpanReceiver<String,Client> { } return null; } - + } http://git-wip-us.apache.org/repos/asf/accumulo/blob/6bc67602/server/tracer/src/main/java/org/apache/accumulo/tracer/SpanTree.java ---------------------------------------------------------------------- diff --git a/server/tracer/src/main/java/org/apache/accumulo/tracer/SpanTree.java b/server/tracer/src/main/java/org/apache/accumulo/tracer/SpanTree.java index 6337ee4..e8f8056 100644 --- a/server/tracer/src/main/java/org/apache/accumulo/tracer/SpanTree.java +++ b/server/tracer/src/main/java/org/apache/accumulo/tracer/SpanTree.java @@ -23,22 +23,22 @@ import java.util.List; import java.util.Map; import java.util.Set; -import org.htrace.Span; import org.apache.accumulo.tracer.thrift.RemoteSpan; +import org.htrace.Span; public class SpanTree { final Map<Long,List<Long>> parentChildren = new HashMap<Long,List<Long>>(); public final Map<Long,RemoteSpan> nodes = new HashMap<Long,RemoteSpan>(); - + public SpanTree() {} - + public void addNode(RemoteSpan span) { nodes.put(span.spanId, span); if (parentChildren.get(span.parentId) == null) parentChildren.put(span.parentId, new ArrayList<Long>()); parentChildren.get(span.parentId).add(span.spanId); } - + public Set<Long> visit(SpanTreeVisitor visitor) { Set<Long> visited = new HashSet<Long>(); List<Long> root = parentChildren.get(Long.valueOf(Span.ROOT_SPAN_ID)); @@ -50,7 +50,7 @@ public class SpanTree { recurse(0, null, rootSpan, visitor, visited); return visited; } - + private void recurse(int level, RemoteSpan parent, RemoteSpan node, SpanTreeVisitor visitor, Set<Long> visited) { // improbable case: duplicate spanId in a trace tree: prevent // infinite recursion http://git-wip-us.apache.org/repos/asf/accumulo/blob/6bc67602/server/tracer/src/main/java/org/apache/accumulo/tracer/TraceDump.java ---------------------------------------------------------------------- diff --git a/server/tracer/src/main/java/org/apache/accumulo/tracer/TraceDump.java b/server/tracer/src/main/java/org/apache/accumulo/tracer/TraceDump.java index 4468866..64fee7e 100644 --- a/server/tracer/src/main/java/org/apache/accumulo/tracer/TraceDump.java +++ b/server/tracer/src/main/java/org/apache/accumulo/tracer/TraceDump.java @@ -41,24 +41,26 @@ import org.htrace.Span; import com.beust.jcommander.Parameter; - public class TraceDump { static final long DEFAULT_TIME_IN_MILLIS = 10 * 60 * 1000l; static class Opts extends ClientOnDefaultTable { - @Parameter(names={"-l", "--list"}, description="List recent traces") + @Parameter(names = {"-l", "--list"}, description = "List recent traces") boolean list = false; - @Parameter(names={"-s", "--start"}, description="The start time of traces to display") + @Parameter(names = {"-s", "--start"}, description = "The start time of traces to display") String start; - @Parameter(names={"-e", "--end"}, description="The end time of traces to display") + @Parameter(names = {"-e", "--end"}, description = "The end time of traces to display") String end; - @Parameter(names={"-d", "--dump"}, description="Dump the traces") + @Parameter(names = {"-d", "--dump"}, description = "Dump the traces") boolean dump = false; - @Parameter(names={"-i", "--instance"}, description="URL to point to accumulo.") + @Parameter(names = {"-i", "--instance"}, description = "URL to point to accumulo.") String instance; - @Parameter(description=" <trace id> { <trace id> ... }") + @Parameter(description = " <trace id> { <trace id> ... }") List<String> traceIds = new ArrayList<String>(); - Opts() { super("trace");} + + Opts() { + super("trace"); + } } public static void main(String[] args) throws Exception { http://git-wip-us.apache.org/repos/asf/accumulo/blob/6bc67602/server/tracer/src/main/java/org/apache/accumulo/tracer/TraceFormatter.java ---------------------------------------------------------------------- diff --git a/server/tracer/src/main/java/org/apache/accumulo/tracer/TraceFormatter.java b/server/tracer/src/main/java/org/apache/accumulo/tracer/TraceFormatter.java index 4829eb2..0ec93b4 100644 --- a/server/tracer/src/main/java/org/apache/accumulo/tracer/TraceFormatter.java +++ b/server/tracer/src/main/java/org/apache/accumulo/tracer/TraceFormatter.java @@ -24,22 +24,21 @@ import java.util.Date; import java.util.Iterator; import java.util.Map.Entry; -import org.apache.accumulo.tracer.thrift.Annotation; -import org.apache.accumulo.tracer.thrift.RemoteSpan; import org.apache.accumulo.core.data.Key; import org.apache.accumulo.core.data.Value; import org.apache.accumulo.core.util.format.DefaultFormatter; import org.apache.accumulo.core.util.format.Formatter; +import org.apache.accumulo.tracer.thrift.Annotation; +import org.apache.accumulo.tracer.thrift.RemoteSpan; import org.apache.commons.lang.NotImplementedException; import org.apache.hadoop.io.Text; import org.apache.thrift.TException; import org.apache.thrift.protocol.TCompactProtocol; import org.apache.thrift.transport.TMemoryInputTransport; - /** * A formatter than can be used in the shell to display trace information. - * + * */ public class TraceFormatter implements Formatter { public static final String DATE_FORMAT = "yyyy/MM/dd HH:mm:ss.SSS"; @@ -50,16 +49,16 @@ public class TraceFormatter implements Formatter { return new SimpleDateFormat(DATE_FORMAT); } }; - + public static String formatDate(final Date date) { return formatter.get().format(date); } - + private final static Text SPAN_CF = new Text("span"); - + private Iterator<Entry<Key,Value>> scanner; private boolean printTimeStamps; - + public static RemoteSpan getRemoteSpan(Entry<Key,Value> entry) { TMemoryInputTransport transport = new TMemoryInputTransport(entry.getValue().get()); TCompactProtocol protocol = new TCompactProtocol(transport); @@ -71,12 +70,12 @@ public class TraceFormatter implements Formatter { } return span; } - + @Override public boolean hasNext() { return scanner.hasNext(); } - + @Override public String next() { Entry<Key,Value> next = scanner.next(); @@ -93,7 +92,7 @@ public class TraceFormatter implements Formatter { result.append(String.format(" %12s:%s%n", "start", dateFormatter.format(span.start))); result.append(String.format(" %12s:%s%n", "ms", span.stop - span.start)); if (span.data != null) { - for (Entry<ByteBuffer, ByteBuffer> entry : span.data.entrySet()) { + for (Entry<ByteBuffer,ByteBuffer> entry : span.data.entrySet()) { String key = new String(entry.getKey().array(), entry.getKey().arrayOffset(), entry.getKey().limit(), UTF_8); String value = new String(entry.getValue().array(), entry.getValue().arrayOffset(), entry.getValue().limit(), UTF_8); result.append(String.format(" %12s:%s%n", key, value)); @@ -104,7 +103,7 @@ public class TraceFormatter implements Formatter { result.append(String.format(" %12s:%s:%s%n", "annotation", annotation.getMsg(), dateFormatter.format(annotation.getTime()))); } } - + if (printTimeStamps) { result.append(String.format(" %-12s:%d%n", "timestamp", next.getKey().getTimestamp())); } @@ -112,12 +111,12 @@ public class TraceFormatter implements Formatter { } return DefaultFormatter.formatEntry(next, printTimeStamps); } - + @Override public void remove() { throw new NotImplementedException(); } - + @Override public void initialize(Iterable<Entry<Key,Value>> scanner, boolean printTimestamps) { this.scanner = scanner.iterator(); http://git-wip-us.apache.org/repos/asf/accumulo/blob/6bc67602/server/tracer/src/main/java/org/apache/accumulo/tracer/TraceServer.java ---------------------------------------------------------------------- diff --git a/server/tracer/src/main/java/org/apache/accumulo/tracer/TraceServer.java b/server/tracer/src/main/java/org/apache/accumulo/tracer/TraceServer.java index 7e33300..3063cdc 100644 --- a/server/tracer/src/main/java/org/apache/accumulo/tracer/TraceServer.java +++ b/server/tracer/src/main/java/org/apache/accumulo/tracer/TraceServer.java @@ -54,7 +54,6 @@ import org.apache.accumulo.server.security.SecurityUtil; import org.apache.accumulo.server.util.time.SimpleTimer; import org.apache.accumulo.server.zookeeper.ZooReaderWriter; import org.apache.accumulo.start.classloader.vfs.AccumuloVFSClassLoader; -import org.htrace.Span; import org.apache.accumulo.tracer.thrift.RemoteSpan; import org.apache.accumulo.tracer.thrift.SpanReceiver.Iface; import org.apache.accumulo.tracer.thrift.SpanReceiver.Processor; @@ -73,6 +72,7 @@ import org.apache.zookeeper.WatchedEvent; import org.apache.zookeeper.Watcher; import org.apache.zookeeper.Watcher.Event.EventType; import org.apache.zookeeper.Watcher.Event.KeeperState; +import org.htrace.Span; public class TraceServer implements Watcher { @@ -184,8 +184,8 @@ public class TraceServer implements Watcher { at = new PasswordToken(conf.get(p).getBytes(UTF_8)); } else { Properties props = new Properties(); - AuthenticationToken token = AccumuloVFSClassLoader.getClassLoader().loadClass(conf.get(Property.TRACE_TOKEN_TYPE)).asSubclass(AuthenticationToken.class) - .newInstance(); + AuthenticationToken token = AccumuloVFSClassLoader.getClassLoader().loadClass(conf.get(Property.TRACE_TOKEN_TYPE)) + .asSubclass(AuthenticationToken.class).newInstance(); int prefixLength = Property.TRACE_TOKEN_PROPERTY_PREFIX.getKey().length(); for (Entry<String,String> entry : loginMap.entrySet()) { http://git-wip-us.apache.org/repos/asf/accumulo/blob/6bc67602/server/tracer/src/test/java/org/apache/accumulo/tracer/TracerTest.java ---------------------------------------------------------------------- diff --git a/server/tracer/src/test/java/org/apache/accumulo/tracer/TracerTest.java b/server/tracer/src/test/java/org/apache/accumulo/tracer/TracerTest.java index c1264bb..76ed910 100644 --- a/server/tracer/src/test/java/org/apache/accumulo/tracer/TracerTest.java +++ b/server/tracer/src/test/java/org/apache/accumulo/tracer/TracerTest.java @@ -33,8 +33,8 @@ import java.util.concurrent.Callable; import org.apache.accumulo.core.trace.Span; import org.apache.accumulo.core.trace.Trace; -import org.apache.accumulo.core.trace.wrappers.TraceWrap; import org.apache.accumulo.core.trace.thrift.TInfo; +import org.apache.accumulo.core.trace.wrappers.TraceWrap; import org.apache.accumulo.tracer.thrift.TestService; import org.apache.accumulo.tracer.thrift.TestService.Iface; import org.apache.accumulo.tracer.thrift.TestService.Processor; @@ -52,7 +52,6 @@ import org.htrace.wrappers.TraceProxy; import org.junit.Before; import org.junit.Test; - public class TracerTest { static class SpanStruct { public SpanStruct(long traceId, long spanId, long parentId, long start, long stop, String description, Map<byte[],byte[]> data) { @@ -65,7 +64,7 @@ public class TracerTest { this.description = description; this.data = data; } - + public long traceId; public long spanId; public long parentId; @@ -73,17 +72,17 @@ public class TracerTest { public long stop; public String description; public Map<byte[],byte[]> data; - + public long millis() { return stop - start; } } - + static class TestReceiver implements SpanReceiver { public Map<Long,List<SpanStruct>> traces = new HashMap<Long,List<SpanStruct>>(); - + @Override - public void receiveSpan(org.htrace.Span s) { + public void receiveSpan(org.htrace.Span s) { long traceId = s.getTraceId(); SpanStruct span = new SpanStruct(traceId, s.getSpanId(), s.getParentId(), s.getStartTimeMillis(), s.getStopTimeMillis(), s.getDescription(), s.getKVAnnotations()); @@ -91,48 +90,46 @@ public class TracerTest { traces.put(traceId, new ArrayList<SpanStruct>()); traces.get(traceId).add(span); } - + @Override - public void configure(HTraceConfiguration conf) { - } + public void configure(HTraceConfiguration conf) {} @Override - public void close() throws IOException { - } + public void close() throws IOException {} } - + @SuppressWarnings("deprecation") @Test public void testTrace() throws Exception { TestReceiver tracer = new TestReceiver(); org.htrace.Trace.addReceiver(tracer); - + assertFalse(Trace.isTracing()); Trace.start("nop").stop(); assertTrue(tracer.traces.size() == 0); assertFalse(Trace.isTracing()); - + Trace.on("nop").stop(); assertTrue(tracer.traces.size() == 1); assertFalse(Trace.isTracing()); - + Span start = Trace.on("testing"); assertEquals(Trace.currentTrace().getSpan(), start.getScope().getSpan()); assertTrue(Trace.isTracing()); - + Span span = Trace.start("shortest trace ever"); span.stop(); long traceId = Trace.currentTraceId(); assertNotNull(tracer.traces.get(traceId)); assertTrue(tracer.traces.get(traceId).size() == 1); assertEquals("shortest trace ever", tracer.traces.get(traceId).get(0).description); - + Span pause = Trace.start("pause"); Thread.sleep(100); pause.stop(); assertTrue(tracer.traces.get(traceId).size() == 2); assertTrue(tracer.traces.get(traceId).get(1).millis() >= 100); - + Thread t = new Thread(Trace.wrap(new Runnable() { @Override public void run() { @@ -141,13 +138,13 @@ public class TracerTest { }), "My Task"); t.start(); t.join(); - + assertTrue(tracer.traces.get(traceId).size() == 3); assertEquals("My Task", tracer.traces.get(traceId).get(2).description); Trace.off(); assertFalse(Trace.isTracing()); } - + static class Service implements TestService.Iface { @Override public boolean checkTrace(TInfo t, String message) throws TException { @@ -159,12 +156,12 @@ public class TracerTest { } } } - + @Test public void testThrift() throws Exception { TestReceiver tracer = new TestReceiver(); org.htrace.Trace.addReceiver(tracer); - + ServerSocket socket = new ServerSocket(0); TServerSocket transport = new TServerSocket(socket); transport.listen(); @@ -181,17 +178,17 @@ public class TracerTest { TestService.Iface client = new TestService.Client(new TBinaryProtocol(clientTransport), new TBinaryProtocol(clientTransport)); client = TraceWrap.client(client); assertFalse(client.checkTrace(null, "test")); - + Span start = Trace.on("start"); assertTrue(client.checkTrace(null, "my test")); start.stop(); - + assertNotNull(tracer.traces.get(start.traceId())); String traces[] = {"my test", "checkTrace", "client:checkTrace", "start"}; assertTrue(tracer.traces.get(start.traceId()).size() == traces.length); for (int i = 0; i < traces.length; i++) assertEquals(traces[i], tracer.traces.get(start.traceId()).get(i).description); - + tserver.stop(); t.join(100); } http://git-wip-us.apache.org/repos/asf/accumulo/blob/6bc67602/server/tserver/src/main/java/org/apache/accumulo/server/GarbageCollectionLogger.java ---------------------------------------------------------------------- diff --git a/server/tserver/src/main/java/org/apache/accumulo/server/GarbageCollectionLogger.java b/server/tserver/src/main/java/org/apache/accumulo/server/GarbageCollectionLogger.java index 8bb163d..7d09fe3 100644 --- a/server/tserver/src/main/java/org/apache/accumulo/server/GarbageCollectionLogger.java +++ b/server/tserver/src/main/java/org/apache/accumulo/server/GarbageCollectionLogger.java @@ -28,14 +28,13 @@ import org.apache.log4j.Logger; public class GarbageCollectionLogger { private static final Logger log = Logger.getLogger(GarbageCollectionLogger.class); - + private final HashMap<String,Long> prevGcTime = new HashMap<String,Long>(); private long lastMemorySize = 0; private long gcTimeIncreasedCount = 0; private static long lastMemoryCheckTime = 0; - - public GarbageCollectionLogger() { - } + + public GarbageCollectionLogger() {} public synchronized void logGCInfo(AccumuloConfiguration conf) { final long now = System.currentTimeMillis(); @@ -99,7 +98,7 @@ public class GarbageCollectionLogger { final long diff = now - lastMemoryCheckTime; if (diff > keepAliveTimeout) { log.warn(String.format("GC pause checker not called in a timely fashion. Expected every %.1f seconds but was %.1f seconds since last check", - keepAliveTimeout / 1000., diff / 1000.)); + keepAliveTimeout / 1000., diff / 1000.)); } lastMemoryCheckTime = now; return; @@ -113,5 +112,4 @@ public class GarbageCollectionLogger { lastMemoryCheckTime = now; } - } http://git-wip-us.apache.org/repos/asf/accumulo/blob/6bc67602/server/tserver/src/main/java/org/apache/accumulo/tserver/BulkFailedCopyProcessor.java ---------------------------------------------------------------------- diff --git a/server/tserver/src/main/java/org/apache/accumulo/tserver/BulkFailedCopyProcessor.java b/server/tserver/src/main/java/org/apache/accumulo/tserver/BulkFailedCopyProcessor.java index 034becd..cfb5fb4 100644 --- a/server/tserver/src/main/java/org/apache/accumulo/tserver/BulkFailedCopyProcessor.java +++ b/server/tserver/src/main/java/org/apache/accumulo/tserver/BulkFailedCopyProcessor.java @@ -19,6 +19,7 @@ package org.apache.accumulo.tserver; import static java.nio.charset.StandardCharsets.UTF_8; import java.io.IOException; + import org.apache.accumulo.core.conf.SiteConfiguration; import org.apache.accumulo.core.util.CachedConfiguration; import org.apache.accumulo.server.fs.VolumeManager; @@ -54,7 +55,7 @@ public class BulkFailedCopyProcessor implements Processor { VolumeManager vm = VolumeManagerImpl.get(SiteConfiguration.getInstance()); FileSystem origFs = vm.getVolumeByPath(orig).getFileSystem(); FileSystem destFs = vm.getVolumeByPath(dest).getFileSystem(); - + FileUtil.copy(origFs, orig, destFs, tmp, false, true, CachedConfiguration.getInstance()); destFs.rename(tmp, dest); log.debug("copied " + orig + " to " + dest); http://git-wip-us.apache.org/repos/asf/accumulo/blob/6bc67602/server/tserver/src/main/java/org/apache/accumulo/tserver/CompactionQueue.java ---------------------------------------------------------------------- diff --git a/server/tserver/src/main/java/org/apache/accumulo/tserver/CompactionQueue.java b/server/tserver/src/main/java/org/apache/accumulo/tserver/CompactionQueue.java index a0574d9..0cb04a7 100644 --- a/server/tserver/src/main/java/org/apache/accumulo/tserver/CompactionQueue.java +++ b/server/tserver/src/main/java/org/apache/accumulo/tserver/CompactionQueue.java @@ -27,122 +27,122 @@ import java.util.concurrent.TimeUnit; @SuppressWarnings({"rawtypes", "unchecked"}) public class CompactionQueue extends AbstractQueue<Runnable> implements BlockingQueue<Runnable> { - + private List<Comparable> task = new LinkedList<Comparable>(); - + @Override public synchronized Runnable poll() { if (task.size() == 0) return null; - + Comparable min = Collections.min(task); task.remove(min); return (Runnable) min; } - + @Override public synchronized Runnable peek() { if (task.size() == 0) return null; - + Comparable min = Collections.min(task); return (Runnable) min; } - + @Override public synchronized boolean offer(Runnable e) { task.add((Comparable) e); notify(); return true; } - + @Override public synchronized void put(Runnable e) throws InterruptedException { task.add((Comparable) e); notify(); } - + @Override public synchronized boolean offer(Runnable e, long timeout, TimeUnit unit) throws InterruptedException { task.add((Comparable) e); notify(); return true; } - + @Override public synchronized Runnable take() throws InterruptedException { while (task.size() == 0) { wait(); } - + return poll(); } - + @Override public synchronized Runnable poll(long timeout, TimeUnit unit) throws InterruptedException { if (task.size() == 0) { wait(unit.toMillis(timeout)); } - + if (task.size() == 0) return null; - + return poll(); } - + @Override public synchronized int remainingCapacity() { return Integer.MAX_VALUE; } - + @Override public synchronized int drainTo(Collection<? super Runnable> c) { return drainTo(c, task.size()); } - + @Override public synchronized int drainTo(Collection<? super Runnable> c, int maxElements) { Collections.sort(task); - + int num = Math.min(task.size(), maxElements); - + Iterator<Comparable> iter = task.iterator(); for (int i = 0; i < num; i++) { c.add((Runnable) iter.next()); iter.remove(); } - + return num; } - + @Override public synchronized Iterator<Runnable> iterator() { Collections.sort(task); - + final Iterator<Comparable> iter = task.iterator(); - + return new Iterator<Runnable>() { - + @Override public boolean hasNext() { return iter.hasNext(); } - + @Override public Runnable next() { return (Runnable) iter.next(); } - + @Override public void remove() { iter.remove(); } }; } - + @Override public synchronized int size() { return task.size(); } - + } http://git-wip-us.apache.org/repos/asf/accumulo/blob/6bc67602/server/tserver/src/main/java/org/apache/accumulo/tserver/ConditionalMutationSet.java ---------------------------------------------------------------------- diff --git a/server/tserver/src/main/java/org/apache/accumulo/tserver/ConditionalMutationSet.java b/server/tserver/src/main/java/org/apache/accumulo/tserver/ConditionalMutationSet.java index bbd7007..79a1176 100644 --- a/server/tserver/src/main/java/org/apache/accumulo/tserver/ConditionalMutationSet.java +++ b/server/tserver/src/main/java/org/apache/accumulo/tserver/ConditionalMutationSet.java @@ -29,14 +29,14 @@ import org.apache.accumulo.tserver.data.ServerConditionalMutation; import org.apache.hadoop.io.WritableComparator; /** - * + * */ public class ConditionalMutationSet { interface DeferFilter { void defer(List<ServerConditionalMutation> scml, List<ServerConditionalMutation> okMutations, List<ServerConditionalMutation> deferred); } - + static class DuplicateFilter implements DeferFilter { public void defer(List<ServerConditionalMutation> scml, List<ServerConditionalMutation> okMutations, List<ServerConditionalMutation> deferred) { okMutations.add(scml.get(0)); @@ -49,14 +49,14 @@ public class ConditionalMutationSet { } } } - + static void defer(Map<KeyExtent,List<ServerConditionalMutation>> updates, Map<KeyExtent,List<ServerConditionalMutation>> deferredMutations, DeferFilter filter) { for (Entry<KeyExtent,List<ServerConditionalMutation>> entry : updates.entrySet()) { List<ServerConditionalMutation> scml = entry.getValue(); List<ServerConditionalMutation> okMutations = new ArrayList<ServerConditionalMutation>(scml.size()); List<ServerConditionalMutation> deferred = new ArrayList<ServerConditionalMutation>(); filter.defer(scml, okMutations, deferred); - + if (deferred.size() > 0) { scml.clear(); scml.addAll(okMutations); @@ -71,7 +71,7 @@ public class ConditionalMutationSet { } } } - + static void deferDuplicatesRows(Map<KeyExtent,List<ServerConditionalMutation>> updates, Map<KeyExtent,List<ServerConditionalMutation>> deferred) { defer(updates, deferred, new DuplicateFilter()); } http://git-wip-us.apache.org/repos/asf/accumulo/blob/6bc67602/server/tserver/src/main/java/org/apache/accumulo/tserver/FileManager.java ---------------------------------------------------------------------- diff --git a/server/tserver/src/main/java/org/apache/accumulo/tserver/FileManager.java b/server/tserver/src/main/java/org/apache/accumulo/tserver/FileManager.java index 98ccd07..0a7de95 100644 --- a/server/tserver/src/main/java/org/apache/accumulo/tserver/FileManager.java +++ b/server/tserver/src/main/java/org/apache/accumulo/tserver/FileManager.java @@ -56,22 +56,22 @@ import org.apache.hadoop.fs.Path; import org.apache.log4j.Logger; public class FileManager { - + private static final Logger log = Logger.getLogger(FileManager.class); - + int maxOpen; - + private static class OpenReader implements Comparable<OpenReader> { long releaseTime; FileSKVIterator reader; String fileName; - + public OpenReader(String fileName, FileSKVIterator reader) { this.fileName = fileName; this.reader = reader; this.releaseTime = System.currentTimeMillis(); } - + @Override public int compareTo(OpenReader o) { if (releaseTime < o.releaseTime) { @@ -82,7 +82,7 @@ public class FileManager { return 0; } } - + @Override public boolean equals(Object obj) { if (obj instanceof OpenReader) { @@ -90,40 +90,40 @@ public class FileManager { } return false; } - + @Override public int hashCode() { return fileName.hashCode(); } } - + private Map<String,List<OpenReader>> openFiles; private HashMap<FileSKVIterator,String> reservedReaders; - + private Semaphore filePermits; - + private VolumeManager fs; - + // the data cache and index cache are allocated in // TabletResourceManager and passed through the file opener to // CachableBlockFile which can handle the caches being // null if unallocated private BlockCache dataCache = null; private BlockCache indexCache = null; - + private long maxIdleTime; private final AccumuloServerContext context; private class IdleFileCloser implements Runnable { - + @Override public void run() { - + long curTime = System.currentTimeMillis(); - + ArrayList<FileSKVIterator> filesToClose = new ArrayList<FileSKVIterator>(); - + // determine which files to close in a sync block, and then close the // files outside of the sync block synchronized (FileManager.this) { @@ -131,31 +131,31 @@ public class FileManager { while (iter.hasNext()) { Entry<String,List<OpenReader>> entry = iter.next(); List<OpenReader> ofl = entry.getValue(); - + for (Iterator<OpenReader> oflIter = ofl.iterator(); oflIter.hasNext();) { OpenReader openReader = oflIter.next(); - + if (curTime - openReader.releaseTime > maxIdleTime) { - + filesToClose.add(openReader.reader); oflIter.remove(); } } - + if (ofl.size() == 0) { iter.remove(); } } } - + closeReaders(filesToClose); - + } - + } - + /** - * + * * @param dataCache * : underlying file can and should be able to handle a null cache * @param indexCache @@ -168,11 +168,11 @@ public class FileManager { this.context = context; this.dataCache = dataCache; this.indexCache = indexCache; - + this.filePermits = new Semaphore(maxOpen, true); this.maxOpen = maxOpen; this.fs = fs; - + this.openFiles = new HashMap<String,List<OpenReader>>(); this.reservedReaders = new HashMap<FileSKVIterator,String>(); @@ -180,57 +180,57 @@ public class FileManager { SimpleTimer.getInstance(context.getConfiguration()).schedule(new IdleFileCloser(), maxIdleTime, maxIdleTime / 2); } - + private static int countReaders(Map<String,List<OpenReader>> files) { int count = 0; - + for (List<OpenReader> list : files.values()) { count += list.size(); } - + return count; } - + private List<FileSKVIterator> takeLRUOpenFiles(int numToTake) { - + ArrayList<OpenReader> openReaders = new ArrayList<OpenReader>(); - + for (Entry<String,List<OpenReader>> entry : openFiles.entrySet()) { openReaders.addAll(entry.getValue()); } - + Collections.sort(openReaders); - + ArrayList<FileSKVIterator> ret = new ArrayList<FileSKVIterator>(); - + for (int i = 0; i < numToTake && i < openReaders.size(); i++) { OpenReader or = openReaders.get(i); - + List<OpenReader> ofl = openFiles.get(or.fileName); if (!ofl.remove(or)) { throw new RuntimeException("Failed to remove open reader that should have been there"); } - + if (ofl.size() == 0) { openFiles.remove(or.fileName); } - + ret.add(or.reader); } - + return ret; } - + private static <T> List<T> getFileList(String file, Map<String,List<T>> files) { List<T> ofl = files.get(file); if (ofl == null) { ofl = new ArrayList<T>(); files.put(file, ofl); } - + return ofl; } - + private void closeReaders(List<FileSKVIterator> filesToClose) { for (FileSKVIterator reader : filesToClose) { try { @@ -240,12 +240,12 @@ public class FileManager { } } } - + private List<String> takeOpenFiles(Collection<String> files, List<FileSKVIterator> reservedFiles, Map<FileSKVIterator,String> readersReserved) { List<String> filesToOpen = new LinkedList<String>(files); for (Iterator<String> iterator = filesToOpen.iterator(); iterator.hasNext();) { String file = iterator.next(); - + List<OpenReader> ofl = openFiles.get(file); if (ofl != null && ofl.size() > 0) { OpenReader openReader = ofl.remove(ofl.size() - 1); @@ -256,55 +256,55 @@ public class FileManager { } iterator.remove(); } - + } return filesToOpen; } - + private synchronized String getReservedReadeFilename(FileSKVIterator reader) { return reservedReaders.get(reader); } - + private List<FileSKVIterator> reserveReaders(KeyExtent tablet, Collection<String> files, boolean continueOnFailure) throws IOException { - + if (!tablet.isMeta() && files.size() >= maxOpen) { throw new IllegalArgumentException("requested files exceeds max open"); } - + if (files.size() == 0) { return Collections.emptyList(); } - + List<String> filesToOpen = null; List<FileSKVIterator> filesToClose = Collections.emptyList(); List<FileSKVIterator> reservedFiles = new ArrayList<FileSKVIterator>(); Map<FileSKVIterator,String> readersReserved = new HashMap<FileSKVIterator,String>(); - + if (!tablet.isMeta()) { filePermits.acquireUninterruptibly(files.size()); } - + // now that the we are past the semaphore, we have the authority // to open files.size() files - + // determine what work needs to be done in sync block // but do the work of opening and closing files outside // a synch block synchronized (this) { - + filesToOpen = takeOpenFiles(files, reservedFiles, readersReserved); - + int numOpen = countReaders(openFiles); - + if (filesToOpen.size() + numOpen + reservedReaders.size() > maxOpen) { filesToClose = takeLRUOpenFiles((filesToOpen.size() + numOpen + reservedReaders.size()) - maxOpen); } } - + // close files before opening files to ensure we stay under resource // limitations closeReaders(filesToClose); - + // open any files that need to be opened for (String file : filesToOpen) { try { @@ -330,36 +330,36 @@ public class FileManager { } else { // close whatever files were opened closeReaders(reservedFiles); - + if (!tablet.isMeta()) { filePermits.release(files.size()); } - + log.error("Failed to open file " + file + " " + e.getMessage()); throw new IOException("Failed to open " + file, e); } } } - + synchronized (this) { // update set of reserved readers reservedReaders.putAll(readersReserved); } - + return reservedFiles; } - + private void releaseReaders(KeyExtent tablet, List<FileSKVIterator> readers, boolean sawIOException) { // put files in openFiles - + synchronized (this) { - + // check that readers were actually reserved ... want to make sure a thread does // not try to release readers they never reserved if (!reservedReaders.keySet().containsAll(readers)) { throw new IllegalArgumentException("Asked to release readers that were never reserved "); } - + for (FileSKVIterator reader : readers) { try { reader.closeDeepCopies(); @@ -368,69 +368,69 @@ public class FileManager { sawIOException = true; } } - + for (FileSKVIterator reader : readers) { String fileName = reservedReaders.remove(reader); if (!sawIOException) getFileList(fileName, openFiles).add(new OpenReader(fileName, reader)); } } - + if (sawIOException) closeReaders(readers); - + // decrement the semaphore if (!tablet.isMeta()) { filePermits.release(readers.size()); } - + } - + static class FileDataSource implements DataSource { - + private SortedKeyValueIterator<Key,Value> iter; private ArrayList<FileDataSource> deepCopies; private boolean current = true; private IteratorEnvironment env; private String file; private AtomicBoolean iflag; - + FileDataSource(String file, SortedKeyValueIterator<Key,Value> iter) { this.file = file; this.iter = iter; this.deepCopies = new ArrayList<FileManager.FileDataSource>(); } - + public FileDataSource(IteratorEnvironment env, SortedKeyValueIterator<Key,Value> deepCopy, ArrayList<FileDataSource> deepCopies) { this.iter = deepCopy; this.env = env; this.deepCopies = deepCopies; deepCopies.add(this); } - + @Override public boolean isCurrent() { return current; } - + @Override public DataSource getNewDataSource() { current = true; return this; } - + @Override public DataSource getDeepCopyDataSource(IteratorEnvironment env) { return new FileDataSource(env, iter.deepCopy(env), deepCopies); } - + @Override public SortedKeyValueIterator<Key,Value> iterator() throws IOException { if (iflag != null) ((InterruptibleIterator) this.iter).setInterruptFlag(iflag); return iter; } - + void unsetIterator() { current = false; iter = null; @@ -439,7 +439,7 @@ public class FileManager { fds.iter = null; } } - + void setIterator(SortedKeyValueIterator<Key,Value> iter) { current = false; this.iter = iter; @@ -457,16 +457,16 @@ public class FileManager { public void setInterruptFlag(AtomicBoolean flag) { this.iflag = flag; } - + } - + public class ScanFileManager { - + private ArrayList<FileDataSource> dataSources; private ArrayList<FileSKVIterator> tabletReservedReaders; private KeyExtent tablet; private boolean continueOnFailure; - + ScanFileManager(KeyExtent tablet) { tabletReservedReaders = new ArrayList<FileSKVIterator>(); dataSources = new ArrayList<FileDataSource>(); @@ -478,35 +478,35 @@ public class FileManager { continueOnFailure = false; } } - + private List<FileSKVIterator> openFileRefs(Collection<FileRef> files) throws TooManyFilesException, IOException { List<String> strings = new ArrayList<String>(files.size()); for (FileRef ref : files) strings.add(ref.path().toString()); return openFiles(strings); } - + private List<FileSKVIterator> openFiles(Collection<String> files) throws TooManyFilesException, IOException { // one tablet can not open more than maxOpen files, otherwise it could get stuck // forever waiting on itself to release files - + if (tabletReservedReaders.size() + files.size() >= maxOpen) { throw new TooManyFilesException("Request to open files would exceed max open files reservedReaders.size()=" + tabletReservedReaders.size() + " files.size()=" + files.size() + " maxOpen=" + maxOpen + " tablet = " + tablet); } - + List<FileSKVIterator> newlyReservedReaders = reserveReaders(tablet, files, continueOnFailure); - + tabletReservedReaders.addAll(newlyReservedReaders); return newlyReservedReaders; } - + public synchronized List<InterruptibleIterator> openFiles(Map<FileRef,DataFileValue> files, boolean detachable) throws IOException { - + List<FileSKVIterator> newlyReservedReaders = openFileRefs(files.keySet()); - + ArrayList<InterruptibleIterator> iters = new ArrayList<InterruptibleIterator>(); - + for (FileSKVIterator reader : newlyReservedReaders) { String filename = getReservedReadeFilename(reader); InterruptibleIterator iter; @@ -522,30 +522,30 @@ public class FileManager { if (value.isTimeSet()) { iter = new TimeSettingIterator(iter, value.getTime()); } - + iters.add(iter); } - + return iters; } - + public synchronized void detach() { - + releaseReaders(tablet, tabletReservedReaders, false); tabletReservedReaders.clear(); - + for (FileDataSource fds : dataSources) fds.unsetIterator(); } - + public synchronized void reattach() throws IOException { if (tabletReservedReaders.size() != 0) throw new IllegalStateException(); - + Collection<String> files = new ArrayList<String>(); for (FileDataSource fds : dataSources) files.add(fds.file); - + List<FileSKVIterator> newlyReservedReaders = openFiles(files); Map<String,List<FileSKVIterator>> map = new HashMap<String,List<FileSKVIterator>>(); for (FileSKVIterator reader : newlyReservedReaders) { @@ -555,27 +555,27 @@ public class FileManager { list = new LinkedList<FileSKVIterator>(); map.put(fileName, list); } - + list.add(reader); } - + for (FileDataSource fds : dataSources) { FileSKVIterator reader = map.get(fds.file).remove(0); fds.setIterator(reader); } } - + public synchronized void releaseOpenFiles(boolean sawIOException) { releaseReaders(tablet, tabletReservedReaders, sawIOException); tabletReservedReaders.clear(); dataSources.clear(); } - + public synchronized int getNumOpenFiles() { return tabletReservedReaders.size(); } } - + public ScanFileManager newScanFileManager(KeyExtent tablet) { return new ScanFileManager(tablet); } http://git-wip-us.apache.org/repos/asf/accumulo/blob/6bc67602/server/tserver/src/main/java/org/apache/accumulo/tserver/HoldTimeoutException.java ---------------------------------------------------------------------- diff --git a/server/tserver/src/main/java/org/apache/accumulo/tserver/HoldTimeoutException.java b/server/tserver/src/main/java/org/apache/accumulo/tserver/HoldTimeoutException.java index 2175851..1bd2c2c 100644 --- a/server/tserver/src/main/java/org/apache/accumulo/tserver/HoldTimeoutException.java +++ b/server/tserver/src/main/java/org/apache/accumulo/tserver/HoldTimeoutException.java @@ -18,7 +18,7 @@ package org.apache.accumulo.tserver; public class HoldTimeoutException extends RuntimeException { private static final long serialVersionUID = 1L; - + public HoldTimeoutException(String why) { super(why); }