You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@accumulo.apache.org by ct...@apache.org on 2013/11/01 01:55:48 UTC
[09/54] [partial] ACCUMULO-658,
ACCUMULO-656 Split server into separate modules
http://git-wip-us.apache.org/repos/asf/accumulo/blob/598821cd/server/src/main/java/org/apache/accumulo/server/monitor/util/Table.java
----------------------------------------------------------------------
diff --git a/server/src/main/java/org/apache/accumulo/server/monitor/util/Table.java b/server/src/main/java/org/apache/accumulo/server/monitor/util/Table.java
deleted file mode 100644
index 8862c06..0000000
--- a/server/src/main/java/org/apache/accumulo/server/monitor/util/Table.java
+++ /dev/null
@@ -1,233 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one or more
- * contributor license agreements. See the NOTICE file distributed with
- * this work for additional information regarding copyright ownership.
- * The ASF licenses this file to You under the Apache License, Version 2.0
- * (the "License"); you may not use this file except in compliance with
- * the License. You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-package org.apache.accumulo.server.monitor.util;
-
-import java.util.ArrayList;
-import java.util.Collections;
-
-import javax.servlet.http.Cookie;
-import javax.servlet.http.HttpServletRequest;
-
-import org.apache.accumulo.server.monitor.servlets.BasicServlet;
-import org.apache.accumulo.server.monitor.util.celltypes.CellType;
-import org.apache.accumulo.server.monitor.util.celltypes.StringType;
-
-public class Table {
- private String table;
- private String caption;
- private String captionclass;
- private String subcaption;
- private ArrayList<TableColumn<?>> columns;
- private ArrayList<TableRow> rows;
- private boolean hasBegunAddingRows = false;
-
- public Table(String tableName, String caption) {
- this(tableName, caption, null);
- }
-
- public Table(String tableName, String caption, String captionClass) {
- this.table = tableName;
- this.caption = caption;
- this.captionclass = captionClass;
- this.subcaption = null;
- this.columns = new ArrayList<TableColumn<?>>();
- this.rows = new ArrayList<TableRow>();
- }
-
- public synchronized void setSubCaption(String subcaption) {
- this.subcaption = subcaption;
- }
-
- public synchronized <T> void addColumn(TableColumn<T> column) {
- if (hasBegunAddingRows)
- throw new IllegalStateException("Cannot add more columns newServer rows have been added");
- columns.add(column);
- }
-
- private synchronized <T> void addColumn(String title, CellType<T> type, String legend, boolean sortable) {
- if (type == null)
- type = new StringType<T>();
- type.setSortable(sortable);
- addColumn(new TableColumn<T>(title, type, legend));
- }
-
- public synchronized <T> void addUnsortableColumn(String title, CellType<T> type, String legend) {
- addColumn(title, type, legend, false);
- }
-
- public synchronized <T> void addSortableColumn(String title, CellType<T> type, String legend) {
- addColumn(title, type, legend, true);
- }
-
- public synchronized void addUnsortableColumn(String title) {
- addUnsortableColumn(title, null, null);
- }
-
- public synchronized void addSortableColumn(String title) {
- addSortableColumn(title, null, null);
- }
-
- public synchronized TableRow prepareRow() {
- hasBegunAddingRows = true;
- return new TableRow(columns.size());
- }
-
- public synchronized void addRow(TableRow row) {
- hasBegunAddingRows = true;
- if (columns.size() != row.size())
- throw new IllegalStateException("Row must be the same size as the columns");
- rows.add(row);
- }
-
- public synchronized void addRow(Object... cells) {
- TableRow row = prepareRow();
- if (cells.length != columns.size())
- throw new IllegalArgumentException("Argument length not equal to the number of columns");
- for (Object cell : cells)
- row.add(cell);
- addRow(row);
- }
-
- public synchronized void generate(HttpServletRequest req, StringBuilder sb) {
- String page = req.getRequestURI();
- if (columns.isEmpty())
- throw new IllegalStateException("No columns in table");
- for (TableRow row : rows)
- if (row.size() != columns.size())
- throw new RuntimeException("Each row must have the same number of columns");
-
- boolean sortAscending = true;
- Cookie c = BasicServlet.getCookie(req, "tableSort." + page + "." + table + "." + "sortAsc");
- if (c != null && "false".equals(c.getValue()))
- sortAscending = false;
-
- int sortCol = -1; // set to first sortable column by default
- int numLegends = 0;
- for (int i = 0; i < columns.size(); ++i) {
- TableColumn<?> col = columns.get(i);
- if (sortCol < 0 && col.getCellType().isSortable())
- sortCol = i;
- if (col.getLegend() != null && !col.getLegend().isEmpty())
- ++numLegends;
- }
-
- // only get cookie if there is a possibility that it is sortable
- if (sortCol >= 0) {
- c = BasicServlet.getCookie(req, "tableSort." + page + "." + table + "." + "sortCol");
- if (c != null && c.getValue() != null) {
- try {
- int col = Integer.parseInt(c.getValue());
- // only bother if specified column is sortable
- if (!(col < 0 || sortCol >= columns.size()) && columns.get(col).getCellType().isSortable())
- sortCol = col;
- } catch (NumberFormatException e) {
- // ignore improperly formatted user cookie
- }
- }
- }
-
- boolean showLegend = false;
- if (numLegends > 0) {
- c = BasicServlet.getCookie(req, "tableLegend." + page + "." + table + "." + "show");
- showLegend = c != null && Boolean.parseBoolean(c.getValue());
- }
-
- sb.append("<div>\n");
- sb.append("<a name='").append(table).append("'> </a>\n");
- sb.append("<table id='").append(table).append("' class='sortable'>\n");
- sb.append("<caption");
- if (captionclass != null && !captionclass.isEmpty())
- sb.append(" class='").append(captionclass).append("'");
- sb.append(">\n");
- if (caption != null && !caption.isEmpty())
- sb.append("<span class='table-caption'>").append(caption).append("</span><br />\n");
- if (subcaption != null && !subcaption.isEmpty())
- sb.append("<span class='table-subcaption'>").append(subcaption).append("</span><br />\n");
-
- String redir = BasicServlet.currentPage(req);
- if (numLegends > 0) {
- String legendUrl = String.format("/op?action=toggleLegend&redir=%s&page=%s&table=%s&show=%s", redir, page, table, !showLegend);
- sb.append("<a href='").append(legendUrl).append("'>").append(showLegend ? "Hide" : "Show").append(" Legend</a>\n");
- if (showLegend)
- sb.append("<div class='left ").append(showLegend ? "show" : "hide").append("'><dl>\n");
- }
- for (int i = 0; i < columns.size(); ++i) {
- TableColumn<?> col = columns.get(i);
- String title = col.getTitle();
- if (rows.size() > 1 && col.getCellType().isSortable()) {
- String url = String.format("/op?action=sortTable&redir=%s&page=%s&table=%s&%s=%s", redir, page, table, sortCol == i ? "asc" : "col",
- sortCol == i ? !sortAscending : i);
- String img = "";
- if (sortCol == i)
- img = String.format(" <img width='10px' height='10px' src='/web/%s.gif' alt='%s' />", sortAscending ? "up" : "down", !sortAscending ? "^" : "v");
- col.setTitle(String.format("<a href='%s'>%s%s</a>", url, title, img));
- }
- String legend = col.getLegend();
- if (showLegend && legend != null && !legend.isEmpty())
- sb.append("<dt class='smalltext'><b>").append(title.replace("<br />", " ")).append("</b><dd>").append(legend).append("</dd></dt>\n");
- }
- if (showLegend && numLegends > 0)
- sb.append("</dl></div>\n");
- sb.append("</caption>\n");
- sb.append("<tr>");
- boolean first = true;
- for (TableColumn<?> col : columns) {
- String cellValue = col.getTitle() == null ? "" : String.valueOf(col.getTitle()).trim();
- sb.append("<th").append(first ? " class='firstcell'" : "").append(">").append(cellValue.isEmpty() ? "-" : cellValue).append("</th>");
- first = false;
- }
- sb.append("</tr>\n");
- // don't sort if no columns are sortable or if there aren't enough rows
- if (rows.size() > 1 && sortCol > -1) {
- Collections.sort(rows, TableRow.getComparator(sortCol, columns.get(sortCol).getCellType()));
- if (!sortAscending)
- Collections.reverse(rows);
- }
- boolean highlight = true;
- for (TableRow row : rows) {
- for (int i = 0; i < row.size(); ++i) {
- try {
- row.set(i, columns.get(i).getCellType().format(row.get(i)));
- } catch (Exception ex) {
- throw new RuntimeException("Unable to process column " + i, ex);
- }
- }
- row(sb, highlight, columns, row);
- highlight = !highlight;
- }
- if (rows.isEmpty())
- sb.append("<tr><td class='center' colspan='").append(columns.size()).append("'><i>Empty</i></td></tr>\n");
- sb.append("</table>\n</div>\n\n");
- }
-
- private static void row(StringBuilder sb, boolean highlight, ArrayList<TableColumn<?>> columns, TableRow row) {
- sb.append(highlight ? "<tr class='highlight'>" : "<tr>");
- boolean first = true;
- for (int i = 0; i < row.size(); ++i) {
- String cellValue = String.valueOf(row.get(i)).trim();
- if (cellValue.isEmpty() || cellValue.equals(String.valueOf((Object) null)))
- cellValue = "-";
- sb.append("<td class='").append(first ? "firstcell" : "");
- if (columns.get(i).getCellType().alignment() != null)
- sb.append(first ? " " : "").append(columns.get(i).getCellType().alignment());
- sb.append("'>").append(cellValue).append("</td>");
- first = false;
- }
- sb.append("</tr>\n");
- }
-
-}
http://git-wip-us.apache.org/repos/asf/accumulo/blob/598821cd/server/src/main/java/org/apache/accumulo/server/monitor/util/TableColumn.java
----------------------------------------------------------------------
diff --git a/server/src/main/java/org/apache/accumulo/server/monitor/util/TableColumn.java b/server/src/main/java/org/apache/accumulo/server/monitor/util/TableColumn.java
deleted file mode 100644
index 830c28a..0000000
--- a/server/src/main/java/org/apache/accumulo/server/monitor/util/TableColumn.java
+++ /dev/null
@@ -1,48 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one or more
- * contributor license agreements. See the NOTICE file distributed with
- * this work for additional information regarding copyright ownership.
- * The ASF licenses this file to You under the Apache License, Version 2.0
- * (the "License"); you may not use this file except in compliance with
- * the License. You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-package org.apache.accumulo.server.monitor.util;
-
-import org.apache.accumulo.server.monitor.util.celltypes.CellType;
-import org.apache.accumulo.server.monitor.util.celltypes.StringType;
-
-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/598821cd/server/src/main/java/org/apache/accumulo/server/monitor/util/TableRow.java
----------------------------------------------------------------------
diff --git a/server/src/main/java/org/apache/accumulo/server/monitor/util/TableRow.java b/server/src/main/java/org/apache/accumulo/server/monitor/util/TableRow.java
deleted file mode 100644
index 6d0f12d..0000000
--- a/server/src/main/java/org/apache/accumulo/server/monitor/util/TableRow.java
+++ /dev/null
@@ -1,68 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one or more
- * contributor license agreements. See the NOTICE file distributed with
- * this work for additional information regarding copyright ownership.
- * The ASF licenses this file to You under the Apache License, Version 2.0
- * (the "License"); you may not use this file except in compliance with
- * the License. You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-package org.apache.accumulo.server.monitor.util;
-
-import java.util.ArrayList;
-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) {
- return comp.compare((T) o1.get(index), (T) o2.get(index));
- }
- }
-}
http://git-wip-us.apache.org/repos/asf/accumulo/blob/598821cd/server/src/main/java/org/apache/accumulo/server/monitor/util/celltypes/CellType.java
----------------------------------------------------------------------
diff --git a/server/src/main/java/org/apache/accumulo/server/monitor/util/celltypes/CellType.java b/server/src/main/java/org/apache/accumulo/server/monitor/util/celltypes/CellType.java
deleted file mode 100644
index 4217d37..0000000
--- a/server/src/main/java/org/apache/accumulo/server/monitor/util/celltypes/CellType.java
+++ /dev/null
@@ -1,35 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one or more
- * contributor license agreements. See the NOTICE file distributed with
- * this work for additional information regarding copyright ownership.
- * The ASF licenses this file to You under the Apache License, Version 2.0
- * (the "License"); you may not use this file except in compliance with
- * the License. You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-package org.apache.accumulo.server.monitor.util.celltypes;
-
-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/598821cd/server/src/main/java/org/apache/accumulo/server/monitor/util/celltypes/CompactionsType.java
----------------------------------------------------------------------
diff --git a/server/src/main/java/org/apache/accumulo/server/monitor/util/celltypes/CompactionsType.java b/server/src/main/java/org/apache/accumulo/server/monitor/util/celltypes/CompactionsType.java
deleted file mode 100644
index 49eb6a5..0000000
--- a/server/src/main/java/org/apache/accumulo/server/monitor/util/celltypes/CompactionsType.java
+++ /dev/null
@@ -1,72 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one or more
- * contributor license agreements. See the NOTICE file distributed with
- * this work for additional information regarding copyright ownership.
- * The ASF licenses this file to You under the Apache License, Version 2.0
- * (the "License"); you may not use this file except in compliance with
- * the License. You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-package org.apache.accumulo.server.monitor.util.celltypes;
-
-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)
- return "-";
- TableInfo summary = (TableInfo) obj;
- Compacting c = summary.majors;
- if (fieldName.equals("minor"))
- c = summary.minors;
- else if (fieldName.equals("scans"))
- c = summary.scans;
- if (c == null)
- 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)
- return -1;
- if (o2 == null)
- return 1;
- Compacting c1 = o1.majors;
- Compacting c2 = o2.majors;
- if (fieldName.equals("minor")) {
- c1 = o1.minors;
- c2 = o2.minors;
- } else if (fieldName.equals("scans")) {
- c1 = o1.scans;
- c2 = o2.scans;
- }
- if (c1 == null)
- return -1;
- if (c2 == null)
- 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/598821cd/server/src/main/java/org/apache/accumulo/server/monitor/util/celltypes/DateTimeType.java
----------------------------------------------------------------------
diff --git a/server/src/main/java/org/apache/accumulo/server/monitor/util/celltypes/DateTimeType.java b/server/src/main/java/org/apache/accumulo/server/monitor/util/celltypes/DateTimeType.java
deleted file mode 100644
index 29d517c..0000000
--- a/server/src/main/java/org/apache/accumulo/server/monitor/util/celltypes/DateTimeType.java
+++ /dev/null
@@ -1,66 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one or more
- * contributor license agreements. See the NOTICE file distributed with
- * this work for additional information regarding copyright ownership.
- * The ASF licenses this file to You under the Apache License, Version 2.0
- * (the "License"); you may not use this file except in compliance with
- * the License. You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-package org.apache.accumulo.server.monitor.util.celltypes;
-
-import java.text.DateFormat;
-import java.text.SimpleDateFormat;
-import java.util.Date;
-import java.util.Locale;
-
-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)
- return "-";
- Long millis = (Long) obj;
- if (millis == 0)
- return "-";
- if (simple != null)
- 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)
- return 0;
- else if (o1 == null)
- return -1;
- else
- return o1.compareTo(o2);
- }
-
- @Override
- public String alignment() {
- return "right";
- }
-
-}
http://git-wip-us.apache.org/repos/asf/accumulo/blob/598821cd/server/src/main/java/org/apache/accumulo/server/monitor/util/celltypes/DurationType.java
----------------------------------------------------------------------
diff --git a/server/src/main/java/org/apache/accumulo/server/monitor/util/celltypes/DurationType.java b/server/src/main/java/org/apache/accumulo/server/monitor/util/celltypes/DurationType.java
deleted file mode 100644
index ec29413..0000000
--- a/server/src/main/java/org/apache/accumulo/server/monitor/util/celltypes/DurationType.java
+++ /dev/null
@@ -1,51 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one or more
- * contributor license agreements. See the NOTICE file distributed with
- * this work for additional information regarding copyright ownership.
- * The ASF licenses this file to You under the Apache License, Version 2.0
- * (the "License"); you may not use this file except in compliance with
- * the License. You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-package org.apache.accumulo.server.monitor.util.celltypes;
-
-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)
- return "-";
- Long millis = (Long) obj;
- if (errMin != null && errMax != null)
- 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/598821cd/server/src/main/java/org/apache/accumulo/server/monitor/util/celltypes/NumberType.java
----------------------------------------------------------------------
diff --git a/server/src/main/java/org/apache/accumulo/server/monitor/util/celltypes/NumberType.java b/server/src/main/java/org/apache/accumulo/server/monitor/util/celltypes/NumberType.java
deleted file mode 100644
index 72e3ef4..0000000
--- a/server/src/main/java/org/apache/accumulo/server/monitor/util/celltypes/NumberType.java
+++ /dev/null
@@ -1,118 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one or more
- * contributor license agreements. See the NOTICE file distributed with
- * this work for additional information regarding copyright ownership.
- * The ASF licenses this file to You under the Apache License, Version 2.0
- * (the "License"); you may not use this file except in compliance with
- * the License. You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-package org.apache.accumulo.server.monitor.util.celltypes;
-
-import static org.apache.accumulo.core.util.NumUtil.bigNumberForQuantity;
-
-public class NumberType<T extends Number> extends CellType<T> {
-
- private 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) {
- T number = (T) obj;
- String s = "-";
- if (number instanceof Double || number instanceof Float) {
- if (warnMin != null && warnMax != null && errMin != null && errMax != null)
- s = commas(number.doubleValue(), warnMin.doubleValue(), warnMax.doubleValue(), errMin.doubleValue(), errMax.doubleValue());
- else if (errMin != null && errMax != null)
- s = commas(number.doubleValue(), errMin.doubleValue(), errMax.doubleValue());
- else
- s = commas(number.doubleValue());
- } else if (number instanceof Long || number instanceof Integer || number instanceof Short || number instanceof Byte) {
- if (warnMin != null && warnMax != null && errMin != null && errMax != null)
- s = commas(number.longValue(), warnMin.longValue(), warnMax.longValue(), errMin.longValue(), errMax.longValue());
- else if (errMin != null && errMax != null)
- s = commas(number.longValue(), errMin.longValue(), errMax.longValue());
- else
- s = commas(number.longValue());
- } else {
- if (number != null)
- s = String.valueOf(number);
- }
- return s;
- }
-
- @Override
- public int compare(T o1, T o2) {
- if (o1 == null && o2 == null)
- return 0;
- else if (o1 == null)
- return -1;
- else if (o2 == null)
- return 1;
- 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));
- if (i < warnMin || i > warnMax)
- 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));
- if (d < warnMin || d > warnMax)
- 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/598821cd/server/src/main/java/org/apache/accumulo/server/monitor/util/celltypes/PercentageType.java
----------------------------------------------------------------------
diff --git a/server/src/main/java/org/apache/accumulo/server/monitor/util/celltypes/PercentageType.java b/server/src/main/java/org/apache/accumulo/server/monitor/util/celltypes/PercentageType.java
deleted file mode 100644
index fb4f60c..0000000
--- a/server/src/main/java/org/apache/accumulo/server/monitor/util/celltypes/PercentageType.java
+++ /dev/null
@@ -1,40 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one or more
- * contributor license agreements. See the NOTICE file distributed with
- * this work for additional information regarding copyright ownership.
- * The ASF licenses this file to You under the Apache License, Version 2.0
- * (the "License"); you may not use this file except in compliance with
- * the License. You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-package org.apache.accumulo.server.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/598821cd/server/src/main/java/org/apache/accumulo/server/monitor/util/celltypes/ProgressChartType.java
----------------------------------------------------------------------
diff --git a/server/src/main/java/org/apache/accumulo/server/monitor/util/celltypes/ProgressChartType.java b/server/src/main/java/org/apache/accumulo/server/monitor/util/celltypes/ProgressChartType.java
deleted file mode 100644
index 424bf2d..0000000
--- a/server/src/main/java/org/apache/accumulo/server/monitor/util/celltypes/ProgressChartType.java
+++ /dev/null
@@ -1,59 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one or more
- * contributor license agreements. See the NOTICE file distributed with
- * this work for additional information regarding copyright ownership.
- * The ASF licenses this file to You under the Apache License, Version 2.0
- * (the "License"); you may not use this file except in compliance with
- * the License. You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-package org.apache.accumulo.server.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)
- return "-";
- 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;
- else if (percent > 100)
- width = 100;
- else
- width = (int) percent;
-
- result.append("<div class='progress-chart'>");
- result.append("<div style='width: ").append(width).append("%;'></div>");
- result.append("</div> ");
- result.append((percent < 1 && percent > 0) ? "<1" : (int) percent).append("%");
- return result.toString();
- }
-}
http://git-wip-us.apache.org/repos/asf/accumulo/blob/598821cd/server/src/main/java/org/apache/accumulo/server/monitor/util/celltypes/StringType.java
----------------------------------------------------------------------
diff --git a/server/src/main/java/org/apache/accumulo/server/monitor/util/celltypes/StringType.java b/server/src/main/java/org/apache/accumulo/server/monitor/util/celltypes/StringType.java
deleted file mode 100644
index d48f3ea..0000000
--- a/server/src/main/java/org/apache/accumulo/server/monitor/util/celltypes/StringType.java
+++ /dev/null
@@ -1,40 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one or more
- * contributor license agreements. See the NOTICE file distributed with
- * this work for additional information regarding copyright ownership.
- * The ASF licenses this file to You under the Apache License, Version 2.0
- * (the "License"); you may not use this file except in compliance with
- * the License. You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-package org.apache.accumulo.server.monitor.util.celltypes;
-
-public class StringType<T> extends CellType<T> {
- @Override
- public String format(Object obj) {
- return obj == null ? "-" : obj.toString();
- }
-
- @Override
- public int compare(T o1, T o2) {
- if (o1 == null && o2 == null)
- return 0;
- else if (o1 == null)
- return -1;
- else if (o2 == null)
- return 1;
- return o1.toString().compareTo(o2.toString());
- }
-
- @Override
- public String alignment() {
- return "left";
- }
-}
http://git-wip-us.apache.org/repos/asf/accumulo/blob/598821cd/server/src/main/java/org/apache/accumulo/server/monitor/util/celltypes/TServerLinkType.java
----------------------------------------------------------------------
diff --git a/server/src/main/java/org/apache/accumulo/server/monitor/util/celltypes/TServerLinkType.java b/server/src/main/java/org/apache/accumulo/server/monitor/util/celltypes/TServerLinkType.java
deleted file mode 100644
index 8081f30..0000000
--- a/server/src/main/java/org/apache/accumulo/server/monitor/util/celltypes/TServerLinkType.java
+++ /dev/null
@@ -1,51 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one or more
- * contributor license agreements. See the NOTICE file distributed with
- * this work for additional information regarding copyright ownership.
- * The ASF licenses this file to You under the Apache License, Version 2.0
- * (the "License"); you may not use this file except in compliance with
- * the License. You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-package org.apache.accumulo.server.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)
- return "-";
- 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/598821cd/server/src/main/java/org/apache/accumulo/server/monitor/util/celltypes/TableLinkType.java
----------------------------------------------------------------------
diff --git a/server/src/main/java/org/apache/accumulo/server/monitor/util/celltypes/TableLinkType.java b/server/src/main/java/org/apache/accumulo/server/monitor/util/celltypes/TableLinkType.java
deleted file mode 100644
index 4ca6dac..0000000
--- a/server/src/main/java/org/apache/accumulo/server/monitor/util/celltypes/TableLinkType.java
+++ /dev/null
@@ -1,56 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one or more
- * contributor license agreements. See the NOTICE file distributed with
- * this work for additional information regarding copyright ownership.
- * The ASF licenses this file to You under the Apache License, Version 2.0
- * (the "License"); you may not use this file except in compliance with
- * the License. You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-package org.apache.accumulo.server.monitor.util.celltypes;
-
-import java.util.Map;
-
-import org.apache.accumulo.core.client.impl.Tables;
-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)
- return "-";
- String tableId = (String) obj;
- return String.format("<a href='/tables?t=%s'>%s</a>", 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/598821cd/server/src/main/java/org/apache/accumulo/server/monitor/util/celltypes/TableStateType.java
----------------------------------------------------------------------
diff --git a/server/src/main/java/org/apache/accumulo/server/monitor/util/celltypes/TableStateType.java b/server/src/main/java/org/apache/accumulo/server/monitor/util/celltypes/TableStateType.java
deleted file mode 100644
index 74e156f..0000000
--- a/server/src/main/java/org/apache/accumulo/server/monitor/util/celltypes/TableStateType.java
+++ /dev/null
@@ -1,57 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one or more
- * contributor license agreements. See the NOTICE file distributed with
- * this work for additional information regarding copyright ownership.
- * The ASF licenses this file to You under the Apache License, Version 2.0
- * (the "License"); you may not use this file except in compliance with
- * the License. You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-package org.apache.accumulo.server.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;
- String style = null;
- switch (state) {
- case ONLINE:
- case OFFLINE:
- break;
- case NEW:
- case DELETING:
- style = "warning";
- break;
- case UNKNOWN:
- default:
- style = "error";
- }
- 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)
- return 0;
- else if (o1 == null)
- return -1;
- return o1.compareTo(o2);
- }
-
-}
http://git-wip-us.apache.org/repos/asf/accumulo/blob/598821cd/server/src/main/java/org/apache/accumulo/server/problems/ProblemReport.java
----------------------------------------------------------------------
diff --git a/server/src/main/java/org/apache/accumulo/server/problems/ProblemReport.java b/server/src/main/java/org/apache/accumulo/server/problems/ProblemReport.java
deleted file mode 100644
index fec4e55..0000000
--- a/server/src/main/java/org/apache/accumulo/server/problems/ProblemReport.java
+++ /dev/null
@@ -1,221 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one or more
- * contributor license agreements. See the NOTICE file distributed with
- * this work for additional information regarding copyright ownership.
- * The ASF licenses this file to You under the Apache License, Version 2.0
- * (the "License"); you may not use this file except in compliance with
- * the License. You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-package org.apache.accumulo.server.problems;
-
-import java.io.ByteArrayInputStream;
-import java.io.ByteArrayOutputStream;
-import java.io.DataInputStream;
-import java.io.DataOutputStream;
-import java.io.IOException;
-import java.net.InetAddress;
-import java.net.UnknownHostException;
-import java.util.Map.Entry;
-
-import org.apache.accumulo.core.Constants;
-import org.apache.accumulo.core.data.Key;
-import org.apache.accumulo.core.data.Mutation;
-import org.apache.accumulo.core.data.Value;
-import org.apache.accumulo.core.util.Encoding;
-import org.apache.accumulo.core.zookeeper.ZooUtil;
-import org.apache.accumulo.fate.zookeeper.ZooUtil.NodeExistsPolicy;
-import org.apache.accumulo.fate.zookeeper.ZooUtil.NodeMissingPolicy;
-import org.apache.accumulo.server.client.HdfsZooInstance;
-import org.apache.accumulo.server.security.SystemCredentials;
-import org.apache.accumulo.server.util.MetadataTableUtil;
-import org.apache.accumulo.server.zookeeper.ZooReaderWriter;
-import org.apache.hadoop.io.Text;
-
-public class ProblemReport {
- private String tableName;
- private ProblemType problemType;
- private String resource;
- private String exception;
- private String server;
- private long creationTime;
-
- public ProblemReport(String table, ProblemType problemType, String resource, String server, Throwable e) {
- this.tableName = table;
-
- this.problemType = problemType;
- this.resource = resource;
-
- if (e != null) {
- this.exception = e.getMessage();
- }
-
- if (server == null) {
- try {
- server = InetAddress.getLocalHost().getHostAddress();
- } catch (UnknownHostException e1) {
-
- }
- }
-
- this.server = server;
- this.creationTime = System.currentTimeMillis();
- }
-
- public ProblemReport(String table, ProblemType problemType, String resource, Throwable e) {
- this(table, problemType, resource, null, e);
- }
-
- private ProblemReport(String table, ProblemType problemType, String resource, byte enc[]) throws IOException {
- this.tableName = table;
- this.problemType = problemType;
- this.resource = resource;
-
- decode(enc);
- }
-
- private byte[] encode() throws IOException {
- ByteArrayOutputStream baos = new ByteArrayOutputStream();
- DataOutputStream dos = new DataOutputStream(baos);
-
- dos.writeLong(creationTime);
-
- dos.writeBoolean(server != null);
- if (server != null) {
- dos.writeUTF(server);
- }
-
- dos.writeBoolean(exception != null);
- if (exception != null) {
- dos.writeUTF(exception);
- }
-
- dos.close();
- baos.close();
-
- return baos.toByteArray();
- }
-
- private void decode(byte enc[]) throws IOException {
- ByteArrayInputStream bais = new ByteArrayInputStream(enc);
- DataInputStream dis = new DataInputStream(bais);
-
- creationTime = dis.readLong();
-
- if (dis.readBoolean()) {
- server = dis.readUTF();
- } else {
- server = null;
- }
-
- if (dis.readBoolean()) {
- exception = dis.readUTF();
- } else {
- exception = null;
- }
- }
-
- void removeFromMetadataTable() throws Exception {
- Mutation m = new Mutation(new Text("~err_" + tableName));
- m.putDelete(new Text(problemType.name()), new Text(resource));
- MetadataTableUtil.getMetadataTable(SystemCredentials.get()).update(m);
- }
-
- void saveToMetadataTable() throws Exception {
- Mutation m = new Mutation(new Text("~err_" + tableName));
- m.put(new Text(problemType.name()), new Text(resource), new Value(encode()));
- MetadataTableUtil.getMetadataTable(SystemCredentials.get()).update(m);
- }
-
- void removeFromZooKeeper() throws Exception {
- String zpath = getZPath();
- ZooReaderWriter.getInstance().recursiveDelete(zpath, NodeMissingPolicy.SKIP);
- }
-
- void saveToZooKeeper() throws Exception {
- ZooReaderWriter.getInstance().putPersistentData(getZPath(), encode(), NodeExistsPolicy.OVERWRITE);
- }
-
- private String getZPath() throws IOException {
- ByteArrayOutputStream baos = new ByteArrayOutputStream();
- DataOutputStream dos = new DataOutputStream(baos);
- dos.writeUTF(getTableName());
- dos.writeUTF(getProblemType().name());
- dos.writeUTF(getResource());
- dos.close();
- baos.close();
-
- String zpath = ZooUtil.getRoot(HdfsZooInstance.getInstance()) + Constants.ZPROBLEMS + "/" + Encoding.encodeAsBase64FileName(new Text(baos.toByteArray()));
- return zpath;
- }
-
- static ProblemReport decodeZooKeeperEntry(String node) throws Exception {
- byte bytes[] = Encoding.decodeBase64FileName(node);
-
- ByteArrayInputStream bais = new ByteArrayInputStream(bytes);
- DataInputStream dis = new DataInputStream(bais);
-
- String tableName = dis.readUTF();
- String problemType = dis.readUTF();
- String resource = dis.readUTF();
-
- String zpath = ZooUtil.getRoot(HdfsZooInstance.getInstance()) + Constants.ZPROBLEMS + "/" + node;
- byte[] enc = ZooReaderWriter.getInstance().getData(zpath, null);
-
- return new ProblemReport(tableName, ProblemType.valueOf(problemType), resource, enc);
-
- }
-
- public static ProblemReport decodeMetadataEntry(Entry<Key,Value> entry) throws IOException {
- String tableName = entry.getKey().getRow().toString().substring("~err_".length());
- String problemType = entry.getKey().getColumnFamily().toString();
- String resource = entry.getKey().getColumnQualifier().toString();
-
- return new ProblemReport(tableName, ProblemType.valueOf(problemType), resource, entry.getValue().get());
- }
-
- public String getTableName() {
- return tableName;
- }
-
- public ProblemType getProblemType() {
- return problemType;
- }
-
- public String getResource() {
- return resource;
- }
-
- public String getException() {
- return exception;
- }
-
- public String getServer() {
- return server;
- }
-
- public long getTime() {
- return creationTime;
- }
-
- @Override
- public int hashCode() {
- return tableName.hashCode() + problemType.hashCode() + resource.hashCode();
- }
-
- @Override
- public boolean equals(Object o) {
- if (o instanceof ProblemReport) {
- ProblemReport opr = (ProblemReport) o;
- return tableName.equals(opr.tableName) && problemType.equals(opr.problemType) && resource.equals(opr.resource);
- }
- return false;
- }
-}
http://git-wip-us.apache.org/repos/asf/accumulo/blob/598821cd/server/src/main/java/org/apache/accumulo/server/problems/ProblemReportingIterator.java
----------------------------------------------------------------------
diff --git a/server/src/main/java/org/apache/accumulo/server/problems/ProblemReportingIterator.java b/server/src/main/java/org/apache/accumulo/server/problems/ProblemReportingIterator.java
deleted file mode 100644
index 69d73e1..0000000
--- a/server/src/main/java/org/apache/accumulo/server/problems/ProblemReportingIterator.java
+++ /dev/null
@@ -1,116 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one or more
- * contributor license agreements. See the NOTICE file distributed with
- * this work for additional information regarding copyright ownership.
- * The ASF licenses this file to You under the Apache License, Version 2.0
- * (the "License"); you may not use this file except in compliance with
- * the License. You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-package org.apache.accumulo.server.problems;
-
-import java.io.IOException;
-import java.util.Collection;
-import java.util.Map;
-import java.util.concurrent.atomic.AtomicBoolean;
-
-import org.apache.accumulo.core.data.ByteSequence;
-import org.apache.accumulo.core.data.Key;
-import org.apache.accumulo.core.data.Range;
-import org.apache.accumulo.core.data.Value;
-import org.apache.accumulo.core.iterators.IteratorEnvironment;
-import org.apache.accumulo.core.iterators.SortedKeyValueIterator;
-import org.apache.accumulo.core.iterators.system.InterruptibleIterator;
-
-public class ProblemReportingIterator implements InterruptibleIterator {
- private SortedKeyValueIterator<Key,Value> source;
- private boolean sawError = false;
- private boolean continueOnError;
- private String resource;
- private String table;
-
- public ProblemReportingIterator(String table, String resource, boolean continueOnError, SortedKeyValueIterator<Key,Value> source) {
- this.table = table;
- this.resource = resource;
- this.continueOnError = continueOnError;
- this.source = source;
- }
-
- @Override
- public SortedKeyValueIterator<Key,Value> deepCopy(IteratorEnvironment env) {
- return new ProblemReportingIterator(table, resource, continueOnError, source.deepCopy(env));
- }
-
- @Override
- public Key getTopKey() {
- return source.getTopKey();
- }
-
- @Override
- public Value getTopValue() {
- return source.getTopValue();
- }
-
- @Override
- public boolean hasTop() {
- if (sawError) {
- return false;
- }
- return source.hasTop();
- }
-
- @Override
- public void init(SortedKeyValueIterator<Key,Value> source, Map<String,String> options, IteratorEnvironment env) throws IOException {
- throw new UnsupportedOperationException();
- }
-
- @Override
- public void next() throws IOException {
- try {
- source.next();
- } catch (IOException ioe) {
- sawError = true;
- ProblemReports.getInstance().report(new ProblemReport(table, ProblemType.FILE_READ, resource, ioe));
- if (!continueOnError) {
- throw ioe;
- }
- }
- }
-
- @Override
- public void seek(Range range, Collection<ByteSequence> columnFamilies, boolean inclusive) throws IOException {
- if (continueOnError && sawError) {
- return;
- }
-
- try {
- source.seek(range, columnFamilies, inclusive);
- } catch (IOException ioe) {
- sawError = true;
- ProblemReports.getInstance().report(new ProblemReport(table, ProblemType.FILE_READ, resource, ioe));
- if (!continueOnError) {
- throw ioe;
- }
- }
- }
-
- public boolean sawError() {
- return sawError;
- }
-
- public String getResource() {
- return resource;
- }
-
- @Override
- public void setInterruptFlag(AtomicBoolean flag) {
- ((InterruptibleIterator) source).setInterruptFlag(flag);
- }
-}
http://git-wip-us.apache.org/repos/asf/accumulo/blob/598821cd/server/src/main/java/org/apache/accumulo/server/problems/ProblemReports.java
----------------------------------------------------------------------
diff --git a/server/src/main/java/org/apache/accumulo/server/problems/ProblemReports.java b/server/src/main/java/org/apache/accumulo/server/problems/ProblemReports.java
deleted file mode 100644
index a68a3cd..0000000
--- a/server/src/main/java/org/apache/accumulo/server/problems/ProblemReports.java
+++ /dev/null
@@ -1,320 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one or more
- * contributor license agreements. See the NOTICE file distributed with
- * this work for additional information regarding copyright ownership.
- * The ASF licenses this file to You under the Apache License, Version 2.0
- * (the "License"); you may not use this file except in compliance with
- * the License. You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-package org.apache.accumulo.server.problems;
-
-import java.util.Collections;
-import java.util.EnumMap;
-import java.util.Iterator;
-import java.util.List;
-import java.util.Map;
-import java.util.Map.Entry;
-import java.util.NoSuchElementException;
-import java.util.TreeMap;
-import java.util.concurrent.ExecutorService;
-import java.util.concurrent.LinkedBlockingQueue;
-import java.util.concurrent.RejectedExecutionException;
-import java.util.concurrent.ThreadPoolExecutor;
-import java.util.concurrent.TimeUnit;
-
-import org.apache.accumulo.core.Constants;
-import org.apache.accumulo.core.client.Connector;
-import org.apache.accumulo.core.client.IteratorSetting;
-import org.apache.accumulo.core.client.Scanner;
-import org.apache.accumulo.core.data.Key;
-import org.apache.accumulo.core.data.Mutation;
-import org.apache.accumulo.core.data.Range;
-import org.apache.accumulo.core.data.Value;
-import org.apache.accumulo.core.iterators.SortedKeyIterator;
-import org.apache.accumulo.core.metadata.MetadataTable;
-import org.apache.accumulo.core.metadata.RootTable;
-import org.apache.accumulo.core.security.Authorizations;
-import org.apache.accumulo.core.util.LoggingRunnable;
-import org.apache.accumulo.core.util.NamingThreadFactory;
-import org.apache.accumulo.core.zookeeper.ZooUtil;
-import org.apache.accumulo.fate.zookeeper.IZooReaderWriter;
-import org.apache.accumulo.server.client.HdfsZooInstance;
-import org.apache.accumulo.server.security.SystemCredentials;
-import org.apache.accumulo.server.util.MetadataTableUtil;
-import org.apache.accumulo.server.zookeeper.ZooReaderWriter;
-import org.apache.commons.collections.map.LRUMap;
-import org.apache.hadoop.io.Text;
-import org.apache.log4j.Logger;
-
-public class ProblemReports implements Iterable<ProblemReport> {
-
- private static final Logger log = Logger.getLogger(ProblemReports.class);
-
- private final LRUMap problemReports = new LRUMap(1000);
-
- /*
- * use a thread pool so that reporting a problem never blocks
- *
- * make the thread pool use a bounded queue to avoid the case where problem reports are not being processed because the whole system is in a really bad state
- * (like HDFS is down) and everything is reporting lots of problems, but problem reports can not be processed
- */
- private ExecutorService reportExecutor = new ThreadPoolExecutor(0, 1, 60, TimeUnit.SECONDS, new LinkedBlockingQueue<Runnable>(500), new NamingThreadFactory(
- "acu-problem-reporter"));
-
- public void report(final ProblemReport pr) {
-
- synchronized (problemReports) {
- if (problemReports.containsKey(pr)) {
- return;
- }
-
- problemReports.put(pr, System.currentTimeMillis());
- }
-
- Runnable r = new Runnable() {
-
- @Override
- public void run() {
-
- log.debug("Filing problem report " + pr.getTableName() + " " + pr.getProblemType() + " " + pr.getResource());
-
- try {
- if (pr.getTableName().equals(MetadataTable.ID) || pr.getTableName().equals(RootTable.ID)) {
- // file report in zookeeper
- pr.saveToZooKeeper();
- } else {
- // file report in metadata table
- pr.saveToMetadataTable();
- }
- } catch (Exception e) {
- log.error("Failed to file problem report " + pr.getTableName() + " " + pr.getProblemType() + " " + pr.getResource(), e);
- }
- }
-
- };
-
- try {
- reportExecutor.execute(new LoggingRunnable(log, r));
- } catch (RejectedExecutionException ree) {
- log.error("Failed to report problem " + pr.getTableName() + " " + pr.getProblemType() + " " + pr.getResource() + " " + ree.getMessage());
- }
-
- }
-
- public void printProblems() throws Exception {
- for (ProblemReport pr : this) {
- System.out.println(pr.getTableName() + " " + pr.getProblemType() + " " + pr.getResource() + " " + pr.getException());
- }
- }
-
- public void deleteProblemReport(String table, ProblemType pType, String resource) {
- final ProblemReport pr = new ProblemReport(table, pType, resource, null);
-
- Runnable r = new Runnable() {
-
- @Override
- public void run() {
- try {
- if (pr.getTableName().equals(MetadataTable.ID)) {
- // file report in zookeeper
- pr.removeFromZooKeeper();
- } else {
- // file report in metadata table
- pr.removeFromMetadataTable();
- }
- } catch (Exception e) {
- log.error("Failed to delete problem report " + pr.getTableName() + " " + pr.getProblemType() + " " + pr.getResource(), e);
- }
- }
- };
-
- try {
- reportExecutor.execute(new LoggingRunnable(log, r));
- } catch (RejectedExecutionException ree) {
- log.error("Failed to delete problem report " + pr.getTableName() + " " + pr.getProblemType() + " " + pr.getResource() + " " + ree.getMessage());
- }
- }
-
- private static ProblemReports instance;
-
- public void deleteProblemReports(String table) throws Exception {
-
- if (MetadataTable.ID.equals(table)) {
- Iterator<ProblemReport> pri = iterator(table);
- while (pri.hasNext()) {
- pri.next().removeFromZooKeeper();
- }
- return;
- }
-
- Connector connector = HdfsZooInstance.getInstance().getConnector(SystemCredentials.get().getPrincipal(), SystemCredentials.get().getToken());
- Scanner scanner = connector.createScanner(MetadataTable.NAME, Authorizations.EMPTY);
- scanner.addScanIterator(new IteratorSetting(1, "keys-only", SortedKeyIterator.class));
-
- if (table == null) {
- scanner.setRange(new Range(new Text("~err_"), false, new Text("~err`"), false));
- } else {
- scanner.setRange(new Range(new Text("~err_" + table)));
- }
-
- Mutation delMut = new Mutation(new Text("~err_" + table));
-
- boolean hasProblems = false;
- for (Entry<Key,Value> entry : scanner) {
- hasProblems = true;
- delMut.putDelete(entry.getKey().getColumnFamily(), entry.getKey().getColumnQualifier());
- }
-
- if (hasProblems)
- MetadataTableUtil.getMetadataTable(SystemCredentials.get()).update(delMut);
- }
-
- public Iterator<ProblemReport> iterator(final String table) {
- try {
-
- return new Iterator<ProblemReport>() {
-
- IZooReaderWriter zoo = ZooReaderWriter.getInstance();
- private int iter1Count = 0;
- private Iterator<String> iter1;
-
- private Iterator<String> getIter1() {
- if (iter1 == null) {
- try {
- List<String> children;
- if (table == null || table.equals(MetadataTable.ID)) {
- children = zoo.getChildren(ZooUtil.getRoot(HdfsZooInstance.getInstance()) + Constants.ZPROBLEMS);
- } else {
- children = Collections.emptyList();
- }
- iter1 = children.iterator();
- } catch (Exception e) {
- throw new RuntimeException(e);
- }
- }
-
- return iter1;
- }
-
- private Iterator<Entry<Key,Value>> iter2;
-
- private Iterator<Entry<Key,Value>> getIter2() {
- if (iter2 == null) {
- try {
- if ((table == null || !table.equals(MetadataTable.ID)) && iter1Count == 0) {
- Connector connector = HdfsZooInstance.getInstance().getConnector(SystemCredentials.get().getPrincipal(), SystemCredentials.get().getToken());
- Scanner scanner = connector.createScanner(MetadataTable.NAME, Authorizations.EMPTY);
-
- scanner.setTimeout(3, TimeUnit.SECONDS);
-
- if (table == null) {
- scanner.setRange(new Range(new Text("~err_"), false, new Text("~err`"), false));
- } else {
- scanner.setRange(new Range(new Text("~err_" + table)));
- }
-
- iter2 = scanner.iterator();
-
- } else {
- Map<Key,Value> m = Collections.emptyMap();
- iter2 = m.entrySet().iterator();
- }
- } catch (Exception e) {
- throw new RuntimeException(e);
- }
- }
-
- return iter2;
- }
-
- @Override
- public boolean hasNext() {
- if (getIter1().hasNext()) {
- return true;
- }
-
- if (getIter2().hasNext()) {
- return true;
- }
-
- return false;
- }
-
- @Override
- public ProblemReport next() {
- try {
- if (getIter1().hasNext()) {
- iter1Count++;
- return ProblemReport.decodeZooKeeperEntry(getIter1().next());
- }
-
- if (getIter2().hasNext()) {
- return ProblemReport.decodeMetadataEntry(getIter2().next());
- }
- } catch (Exception e) {
- throw new RuntimeException(e);
- }
-
- throw new NoSuchElementException();
- }
-
- @Override
- public void remove() {
- throw new UnsupportedOperationException();
- }
-
- };
-
- } catch (Exception e) {
- throw new RuntimeException(e);
- }
- }
-
- @Override
- public Iterator<ProblemReport> iterator() {
- return iterator(null);
- }
-
- public static synchronized ProblemReports getInstance() {
- if (instance == null) {
- instance = new ProblemReports();
- }
-
- return instance;
- }
-
- public static void main(String args[]) throws Exception {
- getInstance().printProblems();
- }
-
- public Map<String,Map<ProblemType,Integer>> summarize() {
-
- TreeMap<String,Map<ProblemType,Integer>> summary = new TreeMap<String,Map<ProblemType,Integer>>();
-
- for (ProblemReport pr : this) {
- Map<ProblemType,Integer> tableProblems = summary.get(pr.getTableName());
- if (tableProblems == null) {
- tableProblems = new EnumMap<ProblemType,Integer>(ProblemType.class);
- summary.put(pr.getTableName(), tableProblems);
- }
-
- Integer count = tableProblems.get(pr.getProblemType());
- if (count == null) {
- count = 0;
- }
-
- tableProblems.put(pr.getProblemType(), count + 1);
- }
-
- return summary;
- }
-
-}
http://git-wip-us.apache.org/repos/asf/accumulo/blob/598821cd/server/src/main/java/org/apache/accumulo/server/problems/ProblemType.java
----------------------------------------------------------------------
diff --git a/server/src/main/java/org/apache/accumulo/server/problems/ProblemType.java b/server/src/main/java/org/apache/accumulo/server/problems/ProblemType.java
deleted file mode 100644
index 27af759..0000000
--- a/server/src/main/java/org/apache/accumulo/server/problems/ProblemType.java
+++ /dev/null
@@ -1,21 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one or more
- * contributor license agreements. See the NOTICE file distributed with
- * this work for additional information regarding copyright ownership.
- * The ASF licenses this file to You under the Apache License, Version 2.0
- * (the "License"); you may not use this file except in compliance with
- * the License. You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-package org.apache.accumulo.server.problems;
-
-public enum ProblemType {
- FILE_READ, FILE_WRITE, TABLET_LOAD
-}
http://git-wip-us.apache.org/repos/asf/accumulo/blob/598821cd/server/src/main/java/org/apache/accumulo/server/security/AuditedSecurityOperation.java
----------------------------------------------------------------------
diff --git a/server/src/main/java/org/apache/accumulo/server/security/AuditedSecurityOperation.java b/server/src/main/java/org/apache/accumulo/server/security/AuditedSecurityOperation.java
deleted file mode 100644
index ee337a5..0000000
--- a/server/src/main/java/org/apache/accumulo/server/security/AuditedSecurityOperation.java
+++ /dev/null
@@ -1,436 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one or more
- * contributor license agreements. See the NOTICE file distributed with
- * this work for additional information regarding copyright ownership.
- * The ASF licenses this file to You under the Apache License, Version 2.0
- * (the "License"); you may not use this file except in compliance with
- * the License. You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-package org.apache.accumulo.server.security;
-
-import java.nio.ByteBuffer;
-import java.util.ArrayList;
-import java.util.Collection;
-import java.util.HashMap;
-import java.util.List;
-import java.util.Map;
-import java.util.Map.Entry;
-
-import org.apache.accumulo.core.client.TableNotFoundException;
-import org.apache.accumulo.core.client.impl.Tables;
-import org.apache.accumulo.core.client.impl.Translator;
-import org.apache.accumulo.core.client.impl.thrift.ThriftSecurityException;
-import org.apache.accumulo.core.data.Column;
-import org.apache.accumulo.core.data.KeyExtent;
-import org.apache.accumulo.core.data.Range;
-import org.apache.accumulo.core.data.thrift.IterInfo;
-import org.apache.accumulo.core.data.thrift.TColumn;
-import org.apache.accumulo.core.data.thrift.TKeyExtent;
-import org.apache.accumulo.core.data.thrift.TRange;
-import org.apache.accumulo.core.master.thrift.TableOperation;
-import org.apache.accumulo.core.metadata.MetadataTable;
-import org.apache.accumulo.core.security.Authorizations;
-import org.apache.accumulo.core.security.Credentials;
-import org.apache.accumulo.core.security.SystemPermission;
-import org.apache.accumulo.core.security.TablePermission;
-import org.apache.accumulo.core.security.thrift.TCredentials;
-import org.apache.accumulo.core.util.ByteBufferUtil;
-import org.apache.accumulo.server.client.HdfsZooInstance;
-import org.apache.accumulo.server.security.handler.Authenticator;
-import org.apache.accumulo.server.security.handler.Authorizor;
-import org.apache.accumulo.server.security.handler.PermissionHandler;
-import org.apache.hadoop.io.Text;
-import org.apache.log4j.Logger;
-
-/**
- *
- */
-public class AuditedSecurityOperation extends SecurityOperation {
-
- public static final String AUDITLOG = "Audit";
- public static final Logger audit = Logger.getLogger(AUDITLOG);
-
- public AuditedSecurityOperation(Authorizor author, Authenticator authent, PermissionHandler pm, String instanceId) {
- super(author, authent, pm, instanceId);
- }
-
- public static synchronized SecurityOperation getInstance() {
- String instanceId = HdfsZooInstance.getInstance().getInstanceID();
- return getInstance(instanceId, false);
- }
-
- public static synchronized SecurityOperation getInstance(String instanceId, boolean initialize) {
- if (instance == null) {
- instance = new AuditedSecurityOperation(getAuthorizor(instanceId, initialize), getAuthenticator(instanceId, initialize), getPermHandler(instanceId,
- initialize), instanceId);
- }
- return instance;
- }
-
- private static String getTableName(String tableId) {
- try {
- return Tables.getTableName(HdfsZooInstance.getInstance(), tableId);
- } catch (TableNotFoundException e) {
- return "Unknown Table with ID " + tableId;
- }
- }
-
- public static StringBuilder getAuthString(List<ByteBuffer> authorizations) {
- StringBuilder auths = new StringBuilder();
- for (ByteBuffer bb : authorizations) {
- auths.append(ByteBufferUtil.toString(bb)).append(",");
- }
- return auths;
- }
-
- private static boolean shouldAudit(TCredentials credentials, String tableId) {
- return !tableId.equals(MetadataTable.ID) && shouldAudit(credentials);
- }
-
- // Is INFO the right level to check? Do we even need that check?
- private static boolean shouldAudit(TCredentials credentials) {
- return !SystemCredentials.get().getToken().getClass().getName().equals(credentials.getTokenClassName());
- }
-
- /*
- * Three auditing methods try to capture the 4 states we might have here. audit is in response to a thrown exception, the operation failed (perhaps due to
- * insufficient privs, or some other reason) audit(credentials, template, args) is a successful operation audit(credentials, permitted, template, args) is a
- * privileges check that is either permitted or denied. We don't know if the operation went on to be successful or not at this point, we would have to go
- * digging through loads of other code to find it.
- */
- private void audit(TCredentials credentials, ThriftSecurityException ex, String template, Object... args) {
- audit.warn("operation: failed; user: " + credentials.getPrincipal() + "; " + String.format(template, args) + "; exception: " + ex.toString());
- }
-
- private void audit(TCredentials credentials, String template, Object... args) {
- if (shouldAudit(credentials)) {
- audit.info("operation: success; user: " + credentials.getPrincipal() + ": " + String.format(template, args));
- }
- }
-
- private void audit(TCredentials credentials, boolean permitted, String template, Object... args) {
- if (shouldAudit(credentials)) {
- String prefix = permitted ? "permitted" : "denied";
- audit.info("operation: " + prefix + "; user: " + credentials.getPrincipal() + "; " + String.format(template, args));
- }
- }
-
- public static final String CAN_SCAN_AUDIT_TEMPLATE = "action: scan; targetTable: %s; authorizations: %s; range: %s; columns: %s; iterators: %s; iteratorOptions: %s;";
- private static final int MAX_ELEMENTS_TO_LOG = 10;
-
- private static List<String> truncate(Collection<? extends Object> list) {
- List<String> result = new ArrayList<String>();
- int i = 0;
- for (Object obj : list) {
- if (i > MAX_ELEMENTS_TO_LOG) {
- result.add(" and " + (list.size() - MAX_ELEMENTS_TO_LOG) + " more ");
- break;
- }
- result.add(obj.toString());
- }
- return result;
- }
-
- @Override
- public boolean canScan(TCredentials credentials, String tableId, TRange range, List<TColumn> columns, List<IterInfo> ssiList,
- Map<String,Map<String,String>> ssio, List<ByteBuffer> authorizations) throws ThriftSecurityException {
- if (shouldAudit(credentials, tableId)) {
- Range convertedRange = new Range(range);
- List<String> convertedColumns = truncate(Translator.translate(columns, new Translator.TColumnTranslator()));
- String tableName = getTableName(tableId);
-
- try {
- boolean canScan = super.canScan(credentials, tableId);
- audit(credentials, canScan, CAN_SCAN_AUDIT_TEMPLATE, tableName, getAuthString(authorizations), convertedRange, convertedColumns, ssiList, ssio);
-
- return canScan;
- } catch (ThriftSecurityException ex) {
- audit(credentials, ex, CAN_SCAN_AUDIT_TEMPLATE, getAuthString(authorizations), tableId, convertedRange, convertedColumns, ssiList, ssio);
- throw ex;
- }
- } else {
- return super.canScan(credentials, tableId);
- }
- }
-
- public static final String CAN_SCAN_BATCH_AUDIT_TEMPLATE = "action: scan; targetTable: %s; authorizations: %s; range: %s; columns: %s; iterators: %s; iteratorOptions: %s;";
-
- @Override
- public boolean canScan(TCredentials credentials, String tableId, Map<TKeyExtent,List<TRange>> tbatch, List<TColumn> tcolumns, List<IterInfo> ssiList,
- Map<String,Map<String,String>> ssio, List<ByteBuffer> authorizations) throws ThriftSecurityException {
- if (shouldAudit(credentials, tableId)) {
- @SuppressWarnings({"unchecked", "rawtypes"})
- Map<KeyExtent,List<Range>> convertedBatch = Translator.translate(tbatch, new Translator.TKeyExtentTranslator(), new Translator.ListTranslator(
- new Translator.TRangeTranslator()));
- Map<KeyExtent, List<String>> truncated = new HashMap<KeyExtent, List<String>>();
- for (Entry<KeyExtent,List<Range>> entry : convertedBatch.entrySet()) {
- truncated.put(entry.getKey(), truncate(entry.getValue()));
- }
- List<Column> convertedColumns = Translator.translate(tcolumns, new Translator.TColumnTranslator());
- String tableName = getTableName(tableId);
-
- try {
- boolean canScan = super.canScan(credentials, tableId);
- audit(credentials, canScan, CAN_SCAN_BATCH_AUDIT_TEMPLATE, tableName, getAuthString(authorizations), convertedBatch, convertedColumns, ssiList, ssio);
-
- return canScan;
- } catch (ThriftSecurityException ex) {
- audit(credentials, ex, CAN_SCAN_BATCH_AUDIT_TEMPLATE, getAuthString(authorizations), tableId, convertedBatch, convertedColumns, ssiList, ssio);
- throw ex;
- }
- } else {
- return super.canScan(credentials, tableId);
- }
- }
-
- public static final String CHANGE_AUTHORIZATIONS_AUDIT_TEMPLATE = "action: changeAuthorizations; targetUser: %s; authorizations: %s";
-
- @Override
- public void changeAuthorizations(TCredentials credentials, String user, Authorizations authorizations) throws ThriftSecurityException {
- try {
- super.changeAuthorizations(credentials, user, authorizations);
- audit(credentials, CHANGE_AUTHORIZATIONS_AUDIT_TEMPLATE, user, authorizations);
- } catch (ThriftSecurityException ex) {
- audit(credentials, ex, CHANGE_AUTHORIZATIONS_AUDIT_TEMPLATE, user, authorizations);
- throw ex;
- }
- }
-
- public static final String CHANGE_PASSWORD_AUDIT_TEMPLATE = "action: changePassword; targetUser: %s;";
-
- @Override
- public void changePassword(TCredentials credentials, Credentials newInfo) throws ThriftSecurityException {
- try {
- super.changePassword(credentials, newInfo);
- audit(credentials, CHANGE_PASSWORD_AUDIT_TEMPLATE, newInfo.getPrincipal());
- } catch (ThriftSecurityException ex) {
- audit(credentials, ex, CHANGE_PASSWORD_AUDIT_TEMPLATE, newInfo.getPrincipal());
- throw ex;
- }
- }
-
- public static final String CREATE_USER_AUDIT_TEMPLATE = "action: createUser; targetUser: %s; Authorizations: %s;";
-
- @Override
- public void createUser(TCredentials credentials, Credentials newUser, Authorizations authorizations) throws ThriftSecurityException {
- try {
- super.createUser(credentials, newUser, authorizations);
- audit(credentials, CREATE_USER_AUDIT_TEMPLATE, newUser.getPrincipal(), authorizations);
- } catch (ThriftSecurityException ex) {
- audit(credentials, ex, CREATE_USER_AUDIT_TEMPLATE, newUser.getPrincipal(), authorizations);
- throw ex;
- }
- }
-
- public static final String CAN_CREATE_TABLE_AUDIT_TEMPLATE = "action: createTable; targetTable: %s;";
-
- @Override
- public boolean canCreateTable(TCredentials c, String tableName) throws ThriftSecurityException {
- try {
- boolean result = super.canCreateTable(c);
- audit(c, result, CAN_CREATE_TABLE_AUDIT_TEMPLATE, tableName);
- return result;
- } catch (ThriftSecurityException ex) {
- audit(c, ex, CAN_CREATE_TABLE_AUDIT_TEMPLATE, tableName);
- throw ex;
- }
- }
-
- public static final String CAN_DELETE_TABLE_AUDIT_TEMPLATE = "action: deleteTable; targetTable: %s;";
-
- @Override
- public boolean canDeleteTable(TCredentials c, String tableId) throws ThriftSecurityException {
- String tableName = getTableName(tableId);
- try {
- boolean result = super.canDeleteTable(c, tableId);
- audit(c, result, CAN_DELETE_TABLE_AUDIT_TEMPLATE, tableName, tableId);
- return result;
- } catch (ThriftSecurityException ex) {
- audit(c, ex, CAN_DELETE_TABLE_AUDIT_TEMPLATE, tableName, tableId);
- throw ex;
- }
- }
-
- public static final String CAN_RENAME_TABLE_AUDIT_TEMPLATE = "action: renameTable; targetTable: %s; newTableName: %s;";
-
- @Override
- public boolean canRenameTable(TCredentials c, String tableId, String oldTableName, String newTableName) throws ThriftSecurityException {
- try {
- boolean result = super.canRenameTable(c, tableId, oldTableName, newTableName);
- audit(c, result, CAN_RENAME_TABLE_AUDIT_TEMPLATE, oldTableName, newTableName);
- return result;
- } catch (ThriftSecurityException ex) {
- audit(c, ex, CAN_RENAME_TABLE_AUDIT_TEMPLATE, oldTableName, newTableName);
- throw ex;
- }
- }
-
- public static final String CAN_CLONE_TABLE_AUDIT_TEMPLATE = "action: cloneTable; targetTable: %s; newTableName: %s";
-
- @Override
- public boolean canCloneTable(TCredentials c, String tableId, String tableName) throws ThriftSecurityException {
- String oldTableName = getTableName(tableId);
- try {
- boolean result = super.canCloneTable(c, tableId, tableName);
- audit(c, result, CAN_CLONE_TABLE_AUDIT_TEMPLATE, oldTableName, tableName);
- return result;
- } catch (ThriftSecurityException ex) {
- audit(c, ex, CAN_CLONE_TABLE_AUDIT_TEMPLATE, oldTableName, tableName);
- throw ex;
- }
- }
-
- public static final String CAN_DELETE_RANGE_AUDIT_TEMPLATE = "action: deleteData; targetTable: %s; startRange: %s; endRange: %s;";
-
- @Override
- public boolean canDeleteRange(TCredentials c, String tableId, String tableName, Text startRow, Text endRow) throws ThriftSecurityException {
- try {
- boolean result = super.canDeleteRange(c, tableId, tableName, startRow, endRow);
- audit(c, result, CAN_DELETE_RANGE_AUDIT_TEMPLATE, tableName, startRow.toString(), endRow.toString());
- return result;
- } catch (ThriftSecurityException ex) {
- audit(c, ex, CAN_DELETE_RANGE_AUDIT_TEMPLATE, tableName, startRow.toString(), endRow.toString());
- throw ex;
- }
- }
-
- public static final String CAN_BULK_IMPORT_AUDIT_TEMPLATE = "action: bulkImport; targetTable: %s; dataDir: %s; failDir: %s;";
-
- @Override
- public boolean canBulkImport(TCredentials c, String tableId, String tableName, String dir, String failDir) throws ThriftSecurityException {
- try {
- boolean result = super.canBulkImport(c, tableId);
- audit(c, result, CAN_BULK_IMPORT_AUDIT_TEMPLATE, tableName, dir, failDir);
- return result;
- } catch (ThriftSecurityException ex) {
- audit(c, ex, CAN_BULK_IMPORT_AUDIT_TEMPLATE, tableName, dir, failDir);
- throw ex;
- }
- }
-
- public static final String CAN_IMPORT_AUDIT_TEMPLATE = "action: import; targetTable: %s; dataDir: %s;";
-
- @Override
- public boolean canImport(TCredentials credentials, String tableName, String importDir) throws ThriftSecurityException {
-
- try {
- boolean result = super.canImport(credentials, tableName, importDir);
- audit(credentials, result, CAN_IMPORT_AUDIT_TEMPLATE, tableName, importDir);
- return result;
- } catch (ThriftSecurityException ex) {
- audit(credentials, ex, CAN_IMPORT_AUDIT_TEMPLATE, tableName, importDir);
- throw ex;
- }
- }
-
- public static final String CAN_EXPORT_AUDIT_TEMPLATE = "action: export; targetTable: %s; dataDir: %s;";
-
- @Override
- public boolean canExport(TCredentials credentials, String tableId, String tableName, String exportDir) throws ThriftSecurityException {
-
- try {
- boolean result = super.canExport(credentials, tableId, tableName, exportDir);
- audit(credentials, result, CAN_EXPORT_AUDIT_TEMPLATE, tableName, exportDir);
- return result;
- } catch (ThriftSecurityException ex) {
- audit(credentials, ex, CAN_EXPORT_AUDIT_TEMPLATE, tableName, exportDir);
- throw ex;
- }
- }
-
- public static final String DROP_USER_AUDIT_TEMPLATE = "action: dropUser; targetUser: %s;";
-
- @Override
- public void dropUser(TCredentials credentials, String user) throws ThriftSecurityException {
- try {
- super.dropUser(credentials, user);
- audit(credentials, DROP_USER_AUDIT_TEMPLATE, user);
- } catch (ThriftSecurityException ex) {
- audit(credentials, ex, DROP_USER_AUDIT_TEMPLATE, user);
- throw ex;
- }
- }
-
- public static final String GRANT_SYSTEM_PERMISSION_AUDIT_TEMPLATE = "action: grantSystemPermission; permission: %s; targetUser: %s;";
-
- @Override
- public void grantSystemPermission(TCredentials credentials, String user, SystemPermission permission) throws ThriftSecurityException {
- try {
- super.grantSystemPermission(credentials, user, permission);
- audit(credentials, GRANT_SYSTEM_PERMISSION_AUDIT_TEMPLATE, permission, user);
- } catch (ThriftSecurityException ex) {
- audit(credentials, ex, GRANT_SYSTEM_PERMISSION_AUDIT_TEMPLATE, permission, user);
- throw ex;
- }
- }
-
- public static final String GRANT_TABLE_PERMISSION_AUDIT_TEMPLATE = "action: grantTablePermission; permission: %s; targetTable: %s; targetUser: %s;";
-
- @Override
- public void grantTablePermission(TCredentials credentials, String user, String tableId, TablePermission permission) throws ThriftSecurityException {
- String tableName = getTableName(tableId);
- try {
- super.grantTablePermission(credentials, user, tableId, permission);
- audit(credentials, GRANT_TABLE_PERMISSION_AUDIT_TEMPLATE, permission, tableName, user);
- } catch (ThriftSecurityException ex) {
- audit(credentials, ex, GRANT_TABLE_PERMISSION_AUDIT_TEMPLATE, permission, tableName, user);
- throw ex;
- }
- }
-
- public static final String REVOKE_SYSTEM_PERMISSION_AUDIT_TEMPLATE = "action: revokeSystemPermission; permission: %s; targetUser: %s;";
-
- @Override
- public void revokeSystemPermission(TCredentials credentials, String user, SystemPermission permission) throws ThriftSecurityException {
-
- try {
- super.revokeSystemPermission(credentials, user, permission);
- audit(credentials, REVOKE_SYSTEM_PERMISSION_AUDIT_TEMPLATE, permission, user);
- } catch (ThriftSecurityException ex) {
- audit(credentials, ex, REVOKE_SYSTEM_PERMISSION_AUDIT_TEMPLATE, permission, user);
- throw ex;
- }
- }
-
- public static final String REVOKE_TABLE_PERMISSION_AUDIT_TEMPLATE = "action: revokeTablePermission; permission: %s; targetTable: %s; targetUser: %s;";
-
- @Override
- public void revokeTablePermission(TCredentials credentials, String user, String tableId, TablePermission permission) throws ThriftSecurityException {
- String tableName = getTableName(tableId);
- try {
- super.revokeTablePermission(credentials, user, tableId, permission);
- audit(credentials, REVOKE_TABLE_PERMISSION_AUDIT_TEMPLATE, permission, tableName, user);
- } catch (ThriftSecurityException ex) {
- audit(credentials, ex, REVOKE_TABLE_PERMISSION_AUDIT_TEMPLATE, permission, tableName, user);
- throw ex;
- }
- }
-
- public static final String CAN_ONLINE_OFFLINE_TABLE_AUDIT_TEMPLATE = "action: %s; targetTable: %s;";
-
- @Override
- public boolean canOnlineOfflineTable(TCredentials credentials, String tableId, TableOperation op) throws ThriftSecurityException {
- String tableName = getTableName(tableId);
- String operation = null;
- if (op == TableOperation.ONLINE)
- operation = "onlineTable";
- if (op == TableOperation.OFFLINE)
- operation = "offlineTable";
- try {
- boolean result = super.canOnlineOfflineTable(credentials, tableId, op);
- audit(credentials, result, CAN_ONLINE_OFFLINE_TABLE_AUDIT_TEMPLATE, operation, tableName, tableId);
- return result;
- } catch (ThriftSecurityException ex) {
- audit(credentials, ex, CAN_ONLINE_OFFLINE_TABLE_AUDIT_TEMPLATE, operation, tableName, tableId);
- throw ex;
- }
- }
-}