You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@hbase.apache.org by ec...@apache.org on 2014/10/10 18:52:57 UTC
[16/38] HBASE-12197 Move rest to it's on module
http://git-wip-us.apache.org/repos/asf/hbase/blob/876617bd/hbase-server/src/main/java/org/apache/hadoop/hbase/rest/model/ScannerModel.java
----------------------------------------------------------------------
diff --git a/hbase-server/src/main/java/org/apache/hadoop/hbase/rest/model/ScannerModel.java b/hbase-server/src/main/java/org/apache/hadoop/hbase/rest/model/ScannerModel.java
deleted file mode 100644
index 2ffdd4f..0000000
--- a/hbase-server/src/main/java/org/apache/hadoop/hbase/rest/model/ScannerModel.java
+++ /dev/null
@@ -1,852 +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.hadoop.hbase.rest.model;
-
-import java.io.IOException;
-import java.io.Serializable;
-import java.io.StringReader;
-import java.io.StringWriter;
-import java.util.ArrayList;
-import java.util.List;
-import java.util.Map;
-import java.util.NavigableSet;
-
-import javax.xml.bind.annotation.XmlAttribute;
-import javax.xml.bind.annotation.XmlElement;
-import javax.xml.bind.annotation.XmlRootElement;
-
-import org.apache.hadoop.hbase.classification.InterfaceAudience;
-import org.apache.hadoop.hbase.HConstants;
-import org.apache.hadoop.hbase.client.Scan;
-import org.apache.hadoop.hbase.filter.BinaryComparator;
-import org.apache.hadoop.hbase.filter.BinaryPrefixComparator;
-import org.apache.hadoop.hbase.filter.BitComparator;
-import org.apache.hadoop.hbase.filter.ByteArrayComparable;
-import org.apache.hadoop.hbase.filter.ColumnCountGetFilter;
-import org.apache.hadoop.hbase.filter.ColumnPaginationFilter;
-import org.apache.hadoop.hbase.filter.ColumnPrefixFilter;
-import org.apache.hadoop.hbase.filter.ColumnRangeFilter;
-import org.apache.hadoop.hbase.filter.CompareFilter;
-import org.apache.hadoop.hbase.filter.CompareFilter.CompareOp;
-import org.apache.hadoop.hbase.filter.DependentColumnFilter;
-import org.apache.hadoop.hbase.filter.FamilyFilter;
-import org.apache.hadoop.hbase.filter.Filter;
-import org.apache.hadoop.hbase.filter.FilterList;
-import org.apache.hadoop.hbase.filter.FirstKeyOnlyFilter;
-import org.apache.hadoop.hbase.filter.InclusiveStopFilter;
-import org.apache.hadoop.hbase.filter.KeyOnlyFilter;
-import org.apache.hadoop.hbase.filter.MultipleColumnPrefixFilter;
-import org.apache.hadoop.hbase.filter.NullComparator;
-import org.apache.hadoop.hbase.filter.PageFilter;
-import org.apache.hadoop.hbase.filter.PrefixFilter;
-import org.apache.hadoop.hbase.filter.QualifierFilter;
-import org.apache.hadoop.hbase.filter.RandomRowFilter;
-import org.apache.hadoop.hbase.filter.RegexStringComparator;
-import org.apache.hadoop.hbase.filter.RowFilter;
-import org.apache.hadoop.hbase.filter.SingleColumnValueExcludeFilter;
-import org.apache.hadoop.hbase.filter.SingleColumnValueFilter;
-import org.apache.hadoop.hbase.filter.SkipFilter;
-import org.apache.hadoop.hbase.filter.SubstringComparator;
-import org.apache.hadoop.hbase.filter.TimestampsFilter;
-import org.apache.hadoop.hbase.filter.ValueFilter;
-import org.apache.hadoop.hbase.filter.WhileMatchFilter;
-import org.apache.hadoop.hbase.rest.ProtobufMessageHandler;
-import org.apache.hadoop.hbase.rest.protobuf.generated.ScannerMessage.Scanner;
-import org.apache.hadoop.hbase.security.visibility.Authorizations;
-import org.apache.hadoop.hbase.util.Base64;
-import org.apache.hadoop.hbase.util.ByteStringer;
-import org.apache.hadoop.hbase.util.Bytes;
-
-import com.google.protobuf.ByteString;
-import com.sun.jersey.api.json.JSONConfiguration;
-import com.sun.jersey.api.json.JSONJAXBContext;
-import com.sun.jersey.api.json.JSONMarshaller;
-import com.sun.jersey.api.json.JSONUnmarshaller;
-
-/**
- * A representation of Scanner parameters.
- *
- * <pre>
- * <complexType name="Scanner">
- * <sequence>
- * <element name="column" type="base64Binary" minOccurs="0" maxOccurs="unbounded"/>
- * <element name="filter" type="string" minOccurs="0" maxOccurs="1"></element>
- * </sequence>
- * <attribute name="startRow" type="base64Binary"></attribute>
- * <attribute name="endRow" type="base64Binary"></attribute>
- * <attribute name="batch" type="int"></attribute>
- * <attribute name="caching" type="int"></attribute>
- * <attribute name="startTime" type="int"></attribute>
- * <attribute name="endTime" type="int"></attribute>
- * <attribute name="maxVersions" type="int"></attribute>
- * </complexType>
- * </pre>
- */
-@XmlRootElement(name="Scanner")
-@InterfaceAudience.Private
-public class ScannerModel implements ProtobufMessageHandler, Serializable {
-
- private static final long serialVersionUID = 1L;
-
- private byte[] startRow = HConstants.EMPTY_START_ROW;
- private byte[] endRow = HConstants.EMPTY_END_ROW;;
- private List<byte[]> columns = new ArrayList<byte[]>();
- private int batch = Integer.MAX_VALUE;
- private long startTime = 0;
- private long endTime = Long.MAX_VALUE;
- private String filter = null;
- private int maxVersions = Integer.MAX_VALUE;
- private int caching = -1;
- private List<String> labels = new ArrayList<String>();
- private boolean cacheBlocks = true;
-
- @XmlRootElement
- static class FilterModel {
-
- @XmlRootElement
- static class ByteArrayComparableModel {
- @XmlAttribute public String type;
- @XmlAttribute public String value;
- @XmlAttribute public String op;
-
- static enum ComparatorType {
- BinaryComparator,
- BinaryPrefixComparator,
- BitComparator,
- NullComparator,
- RegexStringComparator,
- SubstringComparator
- }
-
- public ByteArrayComparableModel() { }
-
- public ByteArrayComparableModel(
- ByteArrayComparable comparator) {
- String typeName = comparator.getClass().getSimpleName();
- ComparatorType type = ComparatorType.valueOf(typeName);
- this.type = typeName;
- switch (type) {
- case BinaryComparator:
- case BinaryPrefixComparator:
- this.value = Base64.encodeBytes(comparator.getValue());
- break;
- case BitComparator:
- this.value = Base64.encodeBytes(comparator.getValue());
- this.op = ((BitComparator)comparator).getOperator().toString();
- break;
- case NullComparator:
- break;
- case RegexStringComparator:
- case SubstringComparator:
- this.value = Bytes.toString(comparator.getValue());
- break;
- default:
- throw new RuntimeException("unhandled filter type: " + type);
- }
- }
-
- public ByteArrayComparable build() {
- ByteArrayComparable comparator;
- switch (ComparatorType.valueOf(type)) {
- case BinaryComparator:
- comparator = new BinaryComparator(Base64.decode(value));
- break;
- case BinaryPrefixComparator:
- comparator = new BinaryPrefixComparator(Base64.decode(value));
- break;
- case BitComparator:
- comparator = new BitComparator(Base64.decode(value),
- BitComparator.BitwiseOp.valueOf(op));
- break;
- case NullComparator:
- comparator = new NullComparator();
- break;
- case RegexStringComparator:
- comparator = new RegexStringComparator(value);
- break;
- case SubstringComparator:
- comparator = new SubstringComparator(value);
- break;
- default:
- throw new RuntimeException("unhandled comparator type: " + type);
- }
- return comparator;
- }
-
- }
-
- // A grab bag of fields, would have been a union if this were C.
- // These are null by default and will only be serialized if set (non null).
- @XmlAttribute public String type;
- @XmlAttribute public String op;
- @XmlElement ByteArrayComparableModel comparator;
- @XmlAttribute public String value;
- @XmlElement public List<FilterModel> filters;
- @XmlAttribute public Integer limit;
- @XmlAttribute public Integer offset;
- @XmlAttribute public String family;
- @XmlAttribute public String qualifier;
- @XmlAttribute public Boolean ifMissing;
- @XmlAttribute public Boolean latestVersion;
- @XmlAttribute public String minColumn;
- @XmlAttribute public Boolean minColumnInclusive;
- @XmlAttribute public String maxColumn;
- @XmlAttribute public Boolean maxColumnInclusive;
- @XmlAttribute public Boolean dropDependentColumn;
- @XmlAttribute public Float chance;
- @XmlElement public List<String> prefixes;
- @XmlElement public List<Long> timestamps;
-
- static enum FilterType {
- ColumnCountGetFilter,
- ColumnPaginationFilter,
- ColumnPrefixFilter,
- ColumnRangeFilter,
- DependentColumnFilter,
- FamilyFilter,
- FilterList,
- FirstKeyOnlyFilter,
- InclusiveStopFilter,
- KeyOnlyFilter,
- MultipleColumnPrefixFilter,
- PageFilter,
- PrefixFilter,
- QualifierFilter,
- RandomRowFilter,
- RowFilter,
- SingleColumnValueExcludeFilter,
- SingleColumnValueFilter,
- SkipFilter,
- TimestampsFilter,
- ValueFilter,
- WhileMatchFilter
- }
-
- public FilterModel() { }
-
- public FilterModel(Filter filter) {
- String typeName = filter.getClass().getSimpleName();
- FilterType type = FilterType.valueOf(typeName);
- this.type = typeName;
- switch (type) {
- case ColumnCountGetFilter:
- this.limit = ((ColumnCountGetFilter)filter).getLimit();
- break;
- case ColumnPaginationFilter:
- this.limit = ((ColumnPaginationFilter)filter).getLimit();
- this.offset = ((ColumnPaginationFilter)filter).getOffset();
- break;
- case ColumnPrefixFilter:
- this.value = Base64.encodeBytes(((ColumnPrefixFilter)filter).getPrefix());
- break;
- case ColumnRangeFilter:
- this.minColumn = Base64.encodeBytes(((ColumnRangeFilter)filter).getMinColumn());
- this.minColumnInclusive = ((ColumnRangeFilter)filter).getMinColumnInclusive();
- this.maxColumn = Base64.encodeBytes(((ColumnRangeFilter)filter).getMaxColumn());
- this.maxColumnInclusive = ((ColumnRangeFilter)filter).getMaxColumnInclusive();
- break;
- case DependentColumnFilter: {
- DependentColumnFilter dcf = (DependentColumnFilter)filter;
- this.family = Base64.encodeBytes(dcf.getFamily());
- byte[] qualifier = dcf.getQualifier();
- if (qualifier != null) {
- this.qualifier = Base64.encodeBytes(qualifier);
- }
- this.op = dcf.getOperator().toString();
- this.comparator = new ByteArrayComparableModel(dcf.getComparator());
- this.dropDependentColumn = dcf.dropDependentColumn();
- } break;
- case FilterList:
- this.op = ((FilterList)filter).getOperator().toString();
- this.filters = new ArrayList<FilterModel>();
- for (Filter child: ((FilterList)filter).getFilters()) {
- this.filters.add(new FilterModel(child));
- }
- break;
- case FirstKeyOnlyFilter:
- case KeyOnlyFilter:
- break;
- case InclusiveStopFilter:
- this.value =
- Base64.encodeBytes(((InclusiveStopFilter)filter).getStopRowKey());
- break;
- case MultipleColumnPrefixFilter:
- this.prefixes = new ArrayList<String>();
- for (byte[] prefix: ((MultipleColumnPrefixFilter)filter).getPrefix()) {
- this.prefixes.add(Base64.encodeBytes(prefix));
- }
- break;
- case PageFilter:
- this.value = Long.toString(((PageFilter)filter).getPageSize());
- break;
- case PrefixFilter:
- this.value = Base64.encodeBytes(((PrefixFilter)filter).getPrefix());
- break;
- case FamilyFilter:
- case QualifierFilter:
- case RowFilter:
- case ValueFilter:
- this.op = ((CompareFilter)filter).getOperator().toString();
- this.comparator =
- new ByteArrayComparableModel(
- ((CompareFilter)filter).getComparator());
- break;
- case RandomRowFilter:
- this.chance = ((RandomRowFilter)filter).getChance();
- break;
- case SingleColumnValueExcludeFilter:
- case SingleColumnValueFilter: {
- SingleColumnValueFilter scvf = (SingleColumnValueFilter) filter;
- this.family = Base64.encodeBytes(scvf.getFamily());
- byte[] qualifier = scvf.getQualifier();
- if (qualifier != null) {
- this.qualifier = Base64.encodeBytes(qualifier);
- }
- this.op = scvf.getOperator().toString();
- this.comparator =
- new ByteArrayComparableModel(scvf.getComparator());
- if (scvf.getFilterIfMissing()) {
- this.ifMissing = true;
- }
- if (scvf.getLatestVersionOnly()) {
- this.latestVersion = true;
- }
- } break;
- case SkipFilter:
- this.filters = new ArrayList<FilterModel>();
- this.filters.add(new FilterModel(((SkipFilter)filter).getFilter()));
- break;
- case TimestampsFilter:
- this.timestamps = ((TimestampsFilter)filter).getTimestamps();
- break;
- case WhileMatchFilter:
- this.filters = new ArrayList<FilterModel>();
- this.filters.add(
- new FilterModel(((WhileMatchFilter)filter).getFilter()));
- break;
- default:
- throw new RuntimeException("unhandled filter type " + type);
- }
- }
-
- public Filter build() {
- Filter filter;
- switch (FilterType.valueOf(type)) {
- case ColumnCountGetFilter:
- filter = new ColumnCountGetFilter(limit);
- break;
- case ColumnPaginationFilter:
- filter = new ColumnPaginationFilter(limit, offset);
- break;
- case ColumnPrefixFilter:
- filter = new ColumnPrefixFilter(Base64.decode(value));
- break;
- case ColumnRangeFilter:
- filter = new ColumnRangeFilter(Base64.decode(minColumn),
- minColumnInclusive, Base64.decode(maxColumn),
- maxColumnInclusive);
- break;
- case DependentColumnFilter:
- filter = new DependentColumnFilter(Base64.decode(family),
- qualifier != null ? Base64.decode(qualifier) : null,
- dropDependentColumn, CompareOp.valueOf(op), comparator.build());
- break;
- case FamilyFilter:
- filter = new FamilyFilter(CompareOp.valueOf(op), comparator.build());
- break;
- case FilterList: {
- List<Filter> list = new ArrayList<Filter>();
- for (FilterModel model: filters) {
- list.add(model.build());
- }
- filter = new FilterList(FilterList.Operator.valueOf(op), list);
- } break;
- case FirstKeyOnlyFilter:
- filter = new FirstKeyOnlyFilter();
- break;
- case InclusiveStopFilter:
- filter = new InclusiveStopFilter(Base64.decode(value));
- break;
- case KeyOnlyFilter:
- filter = new KeyOnlyFilter();
- break;
- case MultipleColumnPrefixFilter: {
- byte[][] values = new byte[prefixes.size()][];
- for (int i = 0; i < prefixes.size(); i++) {
- values[i] = Base64.decode(prefixes.get(i));
- }
- filter = new MultipleColumnPrefixFilter(values);
- } break;
- case PageFilter:
- filter = new PageFilter(Long.valueOf(value));
- break;
- case PrefixFilter:
- filter = new PrefixFilter(Base64.decode(value));
- break;
- case QualifierFilter:
- filter = new QualifierFilter(CompareOp.valueOf(op), comparator.build());
- break;
- case RandomRowFilter:
- filter = new RandomRowFilter(chance);
- break;
- case RowFilter:
- filter = new RowFilter(CompareOp.valueOf(op), comparator.build());
- break;
- case SingleColumnValueFilter:
- filter = new SingleColumnValueFilter(Base64.decode(family),
- qualifier != null ? Base64.decode(qualifier) : null,
- CompareOp.valueOf(op), comparator.build());
- if (ifMissing != null) {
- ((SingleColumnValueFilter)filter).setFilterIfMissing(ifMissing);
- }
- if (latestVersion != null) {
- ((SingleColumnValueFilter)filter).setLatestVersionOnly(latestVersion);
- }
- break;
- case SingleColumnValueExcludeFilter:
- filter = new SingleColumnValueExcludeFilter(Base64.decode(family),
- qualifier != null ? Base64.decode(qualifier) : null,
- CompareOp.valueOf(op), comparator.build());
- if (ifMissing != null) {
- ((SingleColumnValueExcludeFilter)filter).setFilterIfMissing(ifMissing);
- }
- if (latestVersion != null) {
- ((SingleColumnValueExcludeFilter)filter).setLatestVersionOnly(latestVersion);
- }
- break;
- case SkipFilter:
- filter = new SkipFilter(filters.get(0).build());
- break;
- case TimestampsFilter:
- filter = new TimestampsFilter(timestamps);
- break;
- case ValueFilter:
- filter = new ValueFilter(CompareOp.valueOf(op), comparator.build());
- break;
- case WhileMatchFilter:
- filter = new WhileMatchFilter(filters.get(0).build());
- break;
- default:
- throw new RuntimeException("unhandled filter type: " + type);
- }
- return filter;
- }
-
- }
-
- /**
- * @param s the JSON representation of the filter
- * @return the filter
- * @throws Exception
- */
- public static Filter buildFilter(String s) throws Exception {
- JSONJAXBContext context =
- new JSONJAXBContext(JSONConfiguration.natural().build(),
- FilterModel.class);
- JSONUnmarshaller unmarshaller = context.createJSONUnmarshaller();
- FilterModel model = unmarshaller.unmarshalFromJSON(new StringReader(s),
- FilterModel.class);
- return model.build();
- }
-
- /**
- * @param filter the filter
- * @return the JSON representation of the filter
- * @throws Exception
- */
- public static String stringifyFilter(final Filter filter) throws Exception {
- JSONJAXBContext context =
- new JSONJAXBContext(JSONConfiguration.natural().build(),
- FilterModel.class);
- JSONMarshaller marshaller = context.createJSONMarshaller();
- StringWriter writer = new StringWriter();
- marshaller.marshallToJSON(new FilterModel(filter), writer);
- return writer.toString();
- }
-
- private static final byte[] COLUMN_DIVIDER = Bytes.toBytes(":");
-
- /**
- * @param scan the scan specification
- * @throws Exception
- */
- public static ScannerModel fromScan(Scan scan) throws Exception {
- ScannerModel model = new ScannerModel();
- model.setStartRow(scan.getStartRow());
- model.setEndRow(scan.getStopRow());
- Map<byte [], NavigableSet<byte []>> families = scan.getFamilyMap();
- if (families != null) {
- for (Map.Entry<byte [], NavigableSet<byte []>> entry : families.entrySet()) {
- if (entry.getValue() != null) {
- for (byte[] qualifier: entry.getValue()) {
- model.addColumn(Bytes.add(entry.getKey(), COLUMN_DIVIDER, qualifier));
- }
- } else {
- model.addColumn(entry.getKey());
- }
- }
- }
- model.setStartTime(scan.getTimeRange().getMin());
- model.setEndTime(scan.getTimeRange().getMax());
- int caching = scan.getCaching();
- if (caching > 0) {
- model.setCaching(caching);
- }
- int batch = scan.getBatch();
- if (batch > 0) {
- model.setBatch(batch);
- }
- int maxVersions = scan.getMaxVersions();
- if (maxVersions > 0) {
- model.setMaxVersions(maxVersions);
- }
- Filter filter = scan.getFilter();
- if (filter != null) {
- model.setFilter(stringifyFilter(filter));
- }
- // Add the visbility labels if found in the attributes
- Authorizations authorizations = scan.getAuthorizations();
- if (authorizations != null) {
- List<String> labels = authorizations.getLabels();
- for (String label : labels) {
- model.addLabel(label);
- }
- }
- return model;
- }
-
- /**
- * Default constructor
- */
- public ScannerModel() {}
-
- /**
- * Constructor
- * @param startRow the start key of the row-range
- * @param endRow the end key of the row-range
- * @param columns the columns to scan
- * @param batch the number of values to return in batch
- * @param caching the number of rows that the scanner will fetch at once
- * @param endTime the upper bound on timestamps of values of interest
- * @param maxVersions the maximum number of versions to return
- * @param filter a filter specification
- * (values with timestamps later than this are excluded)
- */
- public ScannerModel(byte[] startRow, byte[] endRow, List<byte[]> columns,
- int batch, int caching, long endTime, int maxVersions, String filter) {
- super();
- this.startRow = startRow;
- this.endRow = endRow;
- this.columns = columns;
- this.batch = batch;
- this.caching = caching;
- this.endTime = endTime;
- this.maxVersions = maxVersions;
- this.filter = filter;
- }
-
- /**
- * Constructor
- * @param startRow the start key of the row-range
- * @param endRow the end key of the row-range
- * @param columns the columns to scan
- * @param batch the number of values to return in batch
- * @param caching the number of rows that the scanner will fetch at once
- * @param startTime the lower bound on timestamps of values of interest
- * (values with timestamps earlier than this are excluded)
- * @param endTime the upper bound on timestamps of values of interest
- * (values with timestamps later than this are excluded)
- * @param filter a filter specification
- */
- public ScannerModel(byte[] startRow, byte[] endRow, List<byte[]> columns,
- int batch, int caching, long startTime, long endTime, String filter) {
- super();
- this.startRow = startRow;
- this.endRow = endRow;
- this.columns = columns;
- this.batch = batch;
- this.caching = caching;
- this.startTime = startTime;
- this.endTime = endTime;
- this.filter = filter;
- }
-
- /**
- * Add a column to the column set
- * @param column the column name, as <column>(:<qualifier>)?
- */
- public void addColumn(byte[] column) {
- columns.add(column);
- }
-
- /**
- * Add a visibility label to the scan
- */
- public void addLabel(String label) {
- labels.add(label);
- }
- /**
- * @return true if a start row was specified
- */
- public boolean hasStartRow() {
- return !Bytes.equals(startRow, HConstants.EMPTY_START_ROW);
- }
-
- /**
- * @return start row
- */
- @XmlAttribute
- public byte[] getStartRow() {
- return startRow;
- }
-
- /**
- * @return true if an end row was specified
- */
- public boolean hasEndRow() {
- return !Bytes.equals(endRow, HConstants.EMPTY_END_ROW);
- }
-
- /**
- * @return end row
- */
- @XmlAttribute
- public byte[] getEndRow() {
- return endRow;
- }
-
- /**
- * @return list of columns of interest in column:qualifier format, or empty for all
- */
- @XmlElement(name="column")
- public List<byte[]> getColumns() {
- return columns;
- }
-
- @XmlElement(name="labels")
- public List<String> getLabels() {
- return labels;
- }
-
- /**
- * @return the number of cells to return in batch
- */
- @XmlAttribute
- public int getBatch() {
- return batch;
- }
-
- /**
- * @return the number of rows that the scanner to fetch at once
- */
- @XmlAttribute
- public int getCaching() {
- return caching;
- }
-
- /**
- * @return true if HFile blocks should be cached on the servers for this scan, false otherwise
- */
- @XmlAttribute
- public boolean getCacheBlocks() {
- return cacheBlocks;
- }
-
- /**
- * @return the lower bound on timestamps of items of interest
- */
- @XmlAttribute
- public long getStartTime() {
- return startTime;
- }
-
- /**
- * @return the upper bound on timestamps of items of interest
- */
- @XmlAttribute
- public long getEndTime() {
- return endTime;
- }
-
- /**
- * @return maximum number of versions to return
- */
- @XmlAttribute
- public int getMaxVersions() {
- return maxVersions;
- }
-
- /**
- * @return the filter specification
- */
- @XmlElement
- public String getFilter() {
- return filter;
- }
-
- /**
- * @param startRow start row
- */
- public void setStartRow(byte[] startRow) {
- this.startRow = startRow;
- }
-
- /**
- * @param endRow end row
- */
- public void setEndRow(byte[] endRow) {
- this.endRow = endRow;
- }
-
- /**
- * @param columns list of columns of interest in column:qualifier format, or empty for all
- */
- public void setColumns(List<byte[]> columns) {
- this.columns = columns;
- }
-
- /**
- * @param batch the number of cells to return in batch
- */
- public void setBatch(int batch) {
- this.batch = batch;
- }
-
- /**
- * @param caching the number of rows to fetch at once
- */
- public void setCaching(int caching) {
- this.caching = caching;
- }
-
- /**
- * @param value true if HFile blocks should be cached on the servers for this scan, false otherwise
- */
- public void setCacheBlocks(boolean value) {
- this.cacheBlocks = value;
- }
-
- /**
- * @param maxVersions maximum number of versions to return
- */
- public void setMaxVersions(int maxVersions) {
- this.maxVersions = maxVersions;
- }
-
- /**
- * @param startTime the lower bound on timestamps of values of interest
- */
- public void setStartTime(long startTime) {
- this.startTime = startTime;
- }
-
- /**
- * @param endTime the upper bound on timestamps of values of interest
- */
- public void setEndTime(long endTime) {
- this.endTime = endTime;
- }
-
- /**
- * @param filter the filter specification
- */
- public void setFilter(String filter) {
- this.filter = filter;
- }
-
- @Override
- public byte[] createProtobufOutput() {
- Scanner.Builder builder = Scanner.newBuilder();
- if (!Bytes.equals(startRow, HConstants.EMPTY_START_ROW)) {
- builder.setStartRow(ByteStringer.wrap(startRow));
- }
- if (!Bytes.equals(endRow, HConstants.EMPTY_START_ROW)) {
- builder.setEndRow(ByteStringer.wrap(endRow));
- }
- for (byte[] column: columns) {
- builder.addColumns(ByteStringer.wrap(column));
- }
- if (startTime != 0) {
- builder.setStartTime(startTime);
- }
- if (endTime != 0) {
- builder.setEndTime(endTime);
- }
- builder.setBatch(getBatch());
- if (caching > 0) {
- builder.setCaching(caching);
- }
- builder.setMaxVersions(maxVersions);
- if (filter != null) {
- builder.setFilter(filter);
- }
- if (labels != null && labels.size() > 0) {
- for (String label : labels)
- builder.addLabels(label);
- }
- builder.setCacheBlocks(cacheBlocks);
- return builder.build().toByteArray();
- }
-
- @Override
- public ProtobufMessageHandler getObjectFromMessage(byte[] message)
- throws IOException {
- Scanner.Builder builder = Scanner.newBuilder();
- builder.mergeFrom(message);
- if (builder.hasStartRow()) {
- startRow = builder.getStartRow().toByteArray();
- }
- if (builder.hasEndRow()) {
- endRow = builder.getEndRow().toByteArray();
- }
- for (ByteString column: builder.getColumnsList()) {
- addColumn(column.toByteArray());
- }
- if (builder.hasBatch()) {
- batch = builder.getBatch();
- }
- if (builder.hasCaching()) {
- caching = builder.getCaching();
- }
- if (builder.hasStartTime()) {
- startTime = builder.getStartTime();
- }
- if (builder.hasEndTime()) {
- endTime = builder.getEndTime();
- }
- if (builder.hasMaxVersions()) {
- maxVersions = builder.getMaxVersions();
- }
- if (builder.hasFilter()) {
- filter = builder.getFilter();
- }
- if (builder.getLabelsList() != null) {
- List<String> labels = builder.getLabelsList();
- for(String label : labels) {
- addLabel(label);
- }
- }
- if (builder.hasCacheBlocks()) {
- this.cacheBlocks = builder.getCacheBlocks();
- }
- return this;
- }
-
-}
http://git-wip-us.apache.org/repos/asf/hbase/blob/876617bd/hbase-server/src/main/java/org/apache/hadoop/hbase/rest/model/StorageClusterStatusModel.java
----------------------------------------------------------------------
diff --git a/hbase-server/src/main/java/org/apache/hadoop/hbase/rest/model/StorageClusterStatusModel.java b/hbase-server/src/main/java/org/apache/hadoop/hbase/rest/model/StorageClusterStatusModel.java
deleted file mode 100644
index 3b044e7..0000000
--- a/hbase-server/src/main/java/org/apache/hadoop/hbase/rest/model/StorageClusterStatusModel.java
+++ /dev/null
@@ -1,790 +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.hadoop.hbase.rest.model;
-
-import java.io.IOException;
-import java.io.Serializable;
-import java.util.ArrayList;
-import java.util.List;
-
-import javax.xml.bind.annotation.XmlAttribute;
-import javax.xml.bind.annotation.XmlElement;
-import javax.xml.bind.annotation.XmlElementWrapper;
-import javax.xml.bind.annotation.XmlRootElement;
-
-import org.apache.hadoop.hbase.util.ByteStringer;
-import org.apache.hadoop.hbase.classification.InterfaceAudience;
-import org.apache.hadoop.hbase.rest.ProtobufMessageHandler;
-import org.apache.hadoop.hbase.rest.protobuf.generated.StorageClusterStatusMessage.StorageClusterStatus;
-import org.apache.hadoop.hbase.util.Bytes;
-
-/**
- * Representation of the status of a storage cluster:
- * <p>
- * <ul>
- * <li>regions: the total number of regions served by the cluster</li>
- * <li>requests: the total number of requests per second handled by the
- * cluster in the last reporting interval</li>
- * <li>averageLoad: the average load of the region servers in the cluster</li>
- * <li>liveNodes: detailed status of the live region servers</li>
- * <li>deadNodes: the names of region servers declared dead</li>
- * </ul>
- *
- * <pre>
- * <complexType name="StorageClusterStatus">
- * <sequence>
- * <element name="liveNode" type="tns:Node"
- * maxOccurs="unbounded" minOccurs="0">
- * </element>
- * <element name="deadNode" type="string" maxOccurs="unbounded"
- * minOccurs="0">
- * </element>
- * </sequence>
- * <attribute name="regions" type="int"></attribute>
- * <attribute name="requests" type="int"></attribute>
- * <attribute name="averageLoad" type="float"></attribute>
- * </complexType>
- *
- * <complexType name="Node">
- * <sequence>
- * <element name="region" type="tns:Region"
- * maxOccurs="unbounded" minOccurs="0"></element>
- * </sequence>
- * <attribute name="name" type="string"></attribute>
- * <attribute name="startCode" type="int"></attribute>
- * <attribute name="requests" type="int"></attribute>
- * <attribute name="heapSizeMB" type="int"></attribute>
- * <attribute name="maxHeapSizeMB" type="int"></attribute>
- * </complexType>
- *
- * <complexType name="Region">
- * <attribute name="name" type="base64Binary"></attribute>
- * <attribute name="stores" type="int"></attribute>
- * <attribute name="storefiles" type="int"></attribute>
- * <attribute name="storefileSizeMB" type="int"></attribute>
- * <attribute name="memstoreSizeMB" type="int"></attribute>
- * <attribute name="storefileIndexSizeMB" type="int"></attribute>
- * <attribute name="readRequestsCount" type="int"></attribute>
- * <attribute name="writeRequestsCount" type="int"></attribute>
- * <attribute name="rootIndexSizeKB" type="int"></attribute>
- * <attribute name="totalStaticIndexSizeKB" type="int"></attribute>
- * <attribute name="totalStaticBloomSizeKB" type="int"></attribute>
- * <attribute name="totalCompactingKVs" type="int"></attribute>
- * <attribute name="currentCompactedKVs" type="int"></attribute>
- * </complexType>
- * </pre>
- */
-@XmlRootElement(name="ClusterStatus")
-@InterfaceAudience.Private
-public class StorageClusterStatusModel
- implements Serializable, ProtobufMessageHandler {
- private static final long serialVersionUID = 1L;
-
- /**
- * Represents a region server.
- */
- public static class Node implements Serializable {
- private static final long serialVersionUID = 1L;
-
- /**
- * Represents a region hosted on a region server.
- */
- public static class Region {
- private byte[] name;
- private int stores;
- private int storefiles;
- private int storefileSizeMB;
- private int memstoreSizeMB;
- private int storefileIndexSizeMB;
- private long readRequestsCount;
- private long writeRequestsCount;
- private int rootIndexSizeKB;
- private int totalStaticIndexSizeKB;
- private int totalStaticBloomSizeKB;
- private long totalCompactingKVs;
- private long currentCompactedKVs;
-
- /**
- * Default constructor
- */
- public Region() {
- }
-
- /**
- * Constructor
- * @param name the region name
- */
- public Region(byte[] name) {
- this.name = name;
- }
-
- /**
- * Constructor
- * @param name the region name
- * @param stores the number of stores
- * @param storefiles the number of store files
- * @param storefileSizeMB total size of store files, in MB
- * @param memstoreSizeMB total size of memstore, in MB
- * @param storefileIndexSizeMB total size of store file indexes, in MB
- */
- public Region(byte[] name, int stores, int storefiles,
- int storefileSizeMB, int memstoreSizeMB, int storefileIndexSizeMB,
- long readRequestsCount, long writeRequestsCount, int rootIndexSizeKB,
- int totalStaticIndexSizeKB, int totalStaticBloomSizeKB,
- long totalCompactingKVs, long currentCompactedKVs) {
- this.name = name;
- this.stores = stores;
- this.storefiles = storefiles;
- this.storefileSizeMB = storefileSizeMB;
- this.memstoreSizeMB = memstoreSizeMB;
- this.storefileIndexSizeMB = storefileIndexSizeMB;
- this.readRequestsCount = readRequestsCount;
- this.writeRequestsCount = writeRequestsCount;
- this.rootIndexSizeKB = rootIndexSizeKB;
- this.totalStaticIndexSizeKB = totalStaticIndexSizeKB;
- this.totalStaticBloomSizeKB = totalStaticBloomSizeKB;
- this.totalCompactingKVs = totalCompactingKVs;
- this.currentCompactedKVs = currentCompactedKVs;
- }
-
- /**
- * @return the region name
- */
- @XmlAttribute
- public byte[] getName() {
- return name;
- }
-
- /**
- * @return the number of stores
- */
- @XmlAttribute
- public int getStores() {
- return stores;
- }
-
- /**
- * @return the number of store files
- */
- @XmlAttribute
- public int getStorefiles() {
- return storefiles;
- }
-
- /**
- * @return the total size of store files, in MB
- */
- @XmlAttribute
- public int getStorefileSizeMB() {
- return storefileSizeMB;
- }
-
- /**
- * @return memstore size, in MB
- */
- @XmlAttribute
- public int getMemstoreSizeMB() {
- return memstoreSizeMB;
- }
-
- /**
- * @return the total size of store file indexes, in MB
- */
- @XmlAttribute
- public int getStorefileIndexSizeMB() {
- return storefileIndexSizeMB;
- }
-
- /**
- * @return the current total read requests made to region
- */
- @XmlAttribute
- public long getReadRequestsCount() {
- return readRequestsCount;
- }
-
- /**
- * @return the current total write requests made to region
- */
- @XmlAttribute
- public long getWriteRequestsCount() {
- return writeRequestsCount;
- }
-
- /**
- * @return The current total size of root-level indexes for the region, in KB.
- */
- @XmlAttribute
- public int getRootIndexSizeKB() {
- return rootIndexSizeKB;
- }
-
- /**
- * @return The total size of static index, in KB
- */
- @XmlAttribute
- public int getTotalStaticIndexSizeKB() {
- return totalStaticIndexSizeKB;
- }
-
- /**
- * @return The total size of static bloom, in KB
- */
- @XmlAttribute
- public int getTotalStaticBloomSizeKB() {
- return totalStaticBloomSizeKB;
- }
-
- /**
- * @return The total number of compacting key-values
- */
- @XmlAttribute
- public long getTotalCompactingKVs() {
- return totalCompactingKVs;
- }
-
- /**
- * @return The number of current compacted key-values
- */
- @XmlAttribute
- public long getCurrentCompactedKVs() {
- return currentCompactedKVs;
- }
-
- /**
- * @param readRequestsCount The current total read requests made to region
- */
- public void setReadRequestsCount(long readRequestsCount) {
- this.readRequestsCount = readRequestsCount;
- }
-
- /**
- * @param rootIndexSizeKB The current total size of root-level indexes
- * for the region, in KB
- */
- public void setRootIndexSizeKB(int rootIndexSizeKB) {
- this.rootIndexSizeKB = rootIndexSizeKB;
- }
-
- /**
- * @param writeRequestsCount The current total write requests made to region
- */
- public void setWriteRequestsCount(long writeRequestsCount) {
- this.writeRequestsCount = writeRequestsCount;
- }
-
- /**
- * @param currentCompactedKVs The completed count of key values
- * in currently running compaction
- */
- public void setCurrentCompactedKVs(long currentCompactedKVs) {
- this.currentCompactedKVs = currentCompactedKVs;
- }
-
- /**
- * @param totalCompactingKVs The total compacting key values
- * in currently running compaction
- */
- public void setTotalCompactingKVs(long totalCompactingKVs) {
- this.totalCompactingKVs = totalCompactingKVs;
- }
-
- /**
- * @param totalStaticBloomSizeKB The total size of all Bloom filter blocks,
- * not just loaded into the block cache, in KB.
- */
- public void setTotalStaticBloomSizeKB(int totalStaticBloomSizeKB) {
- this.totalStaticBloomSizeKB = totalStaticBloomSizeKB;
- }
-
- /**
- * @param totalStaticIndexSizeKB The total size of all index blocks,
- * not just the root level, in KB.
- */
- public void setTotalStaticIndexSizeKB(int totalStaticIndexSizeKB) {
- this.totalStaticIndexSizeKB = totalStaticIndexSizeKB;
- }
-
- /**
- * @param name the region name
- */
- public void setName(byte[] name) {
- this.name = name;
- }
-
- /**
- * @param stores the number of stores
- */
- public void setStores(int stores) {
- this.stores = stores;
- }
-
- /**
- * @param storefiles the number of store files
- */
- public void setStorefiles(int storefiles) {
- this.storefiles = storefiles;
- }
-
- /**
- * @param storefileSizeMB total size of store files, in MB
- */
- public void setStorefileSizeMB(int storefileSizeMB) {
- this.storefileSizeMB = storefileSizeMB;
- }
-
- /**
- * @param memstoreSizeMB memstore size, in MB
- */
- public void setMemstoreSizeMB(int memstoreSizeMB) {
- this.memstoreSizeMB = memstoreSizeMB;
- }
-
- /**
- * @param storefileIndexSizeMB total size of store file indexes, in MB
- */
- public void setStorefileIndexSizeMB(int storefileIndexSizeMB) {
- this.storefileIndexSizeMB = storefileIndexSizeMB;
- }
- }
-
- private String name;
- private long startCode;
- private int requests;
- private int heapSizeMB;
- private int maxHeapSizeMB;
- private List<Region> regions = new ArrayList<Region>();
-
- /**
- * Add a region name to the list
- * @param name the region name
- */
- public void addRegion(byte[] name, int stores, int storefiles,
- int storefileSizeMB, int memstoreSizeMB, int storefileIndexSizeMB,
- long readRequestsCount, long writeRequestsCount, int rootIndexSizeKB,
- int totalStaticIndexSizeKB, int totalStaticBloomSizeKB,
- long totalCompactingKVs, long currentCompactedKVs) {
- regions.add(new Region(name, stores, storefiles, storefileSizeMB,
- memstoreSizeMB, storefileIndexSizeMB, readRequestsCount,
- writeRequestsCount, rootIndexSizeKB, totalStaticIndexSizeKB,
- totalStaticBloomSizeKB, totalCompactingKVs, currentCompactedKVs));
- }
-
- /**
- * @param index the index
- * @return the region name
- */
- public Region getRegion(int index) {
- return regions.get(index);
- }
-
- /**
- * Default constructor
- */
- public Node() {}
-
- /**
- * Constructor
- * @param name the region server name
- * @param startCode the region server's start code
- */
- public Node(String name, long startCode) {
- this.name = name;
- this.startCode = startCode;
- }
-
- /**
- * @return the region server's name
- */
- @XmlAttribute
- public String getName() {
- return name;
- }
-
- /**
- * @return the region server's start code
- */
- @XmlAttribute
- public long getStartCode() {
- return startCode;
- }
-
- /**
- * @return the current heap size, in MB
- */
- @XmlAttribute
- public int getHeapSizeMB() {
- return heapSizeMB;
- }
-
- /**
- * @return the maximum heap size, in MB
- */
- @XmlAttribute
- public int getMaxHeapSizeMB() {
- return maxHeapSizeMB;
- }
-
- /**
- * @return the list of regions served by the region server
- */
- @XmlElement(name="Region")
- public List<Region> getRegions() {
- return regions;
- }
-
- /**
- * @return the number of requests per second processed by the region server
- */
- @XmlAttribute
- public int getRequests() {
- return requests;
- }
-
- /**
- * @param name the region server's hostname
- */
- public void setName(String name) {
- this.name = name;
- }
-
- /**
- * @param startCode the region server's start code
- */
- public void setStartCode(long startCode) {
- this.startCode = startCode;
- }
-
- /**
- * @param heapSizeMB the current heap size, in MB
- */
- public void setHeapSizeMB(int heapSizeMB) {
- this.heapSizeMB = heapSizeMB;
- }
-
- /**
- * @param maxHeapSizeMB the maximum heap size, in MB
- */
- public void setMaxHeapSizeMB(int maxHeapSizeMB) {
- this.maxHeapSizeMB = maxHeapSizeMB;
- }
-
- /**
- * @param regions a list of regions served by the region server
- */
- public void setRegions(List<Region> regions) {
- this.regions = regions;
- }
-
- /**
- * @param requests the number of requests per second processed by the
- * region server
- */
- public void setRequests(int requests) {
- this.requests = requests;
- }
- }
-
- private List<Node> liveNodes = new ArrayList<Node>();
- private List<String> deadNodes = new ArrayList<String>();
- private int regions;
- private int requests;
- private double averageLoad;
-
- /**
- * Add a live node to the cluster representation.
- * @param name the region server name
- * @param startCode the region server's start code
- * @param heapSizeMB the current heap size, in MB
- * @param maxHeapSizeMB the maximum heap size, in MB
- */
- public Node addLiveNode(String name, long startCode, int heapSizeMB, int maxHeapSizeMB) {
- Node node = new Node(name, startCode);
- node.setHeapSizeMB(heapSizeMB);
- node.setMaxHeapSizeMB(maxHeapSizeMB);
- liveNodes.add(node);
- return node;
- }
-
- /**
- * @param index the index
- * @return the region server model
- */
- public Node getLiveNode(int index) {
- return liveNodes.get(index);
- }
-
- /**
- * Add a dead node to the cluster representation.
- * @param node the dead region server's name
- */
- public void addDeadNode(String node) {
- deadNodes.add(node);
- }
-
- /**
- * @param index the index
- * @return the dead region server's name
- */
- public String getDeadNode(int index) {
- return deadNodes.get(index);
- }
-
- /**
- * Default constructor
- */
- public StorageClusterStatusModel() {
- }
-
- /**
- * @return the list of live nodes
- */
- @XmlElement(name = "Node")
- @XmlElementWrapper(name = "LiveNodes")
- public List<Node> getLiveNodes() {
- return liveNodes;
- }
-
- /**
- * @return the list of dead nodes
- */
- @XmlElement(name = "Node")
- @XmlElementWrapper(name = "DeadNodes")
- public List<String> getDeadNodes() {
- return deadNodes;
- }
-
- /**
- * @return the total number of regions served by the cluster
- */
- @XmlAttribute
- public int getRegions() {
- return regions;
- }
-
- /**
- * @return the total number of requests per second handled by the cluster in
- * the last reporting interval
- */
- @XmlAttribute
- public int getRequests() {
- return requests;
- }
-
- /**
- * @return the average load of the region servers in the cluster
- */
- @XmlAttribute
- public double getAverageLoad() {
- return averageLoad;
- }
-
- /**
- * @param nodes the list of live node models
- */
- public void setLiveNodes(List<Node> nodes) {
- this.liveNodes = nodes;
- }
-
- /**
- * @param nodes the list of dead node names
- */
- public void setDeadNodes(List<String> nodes) {
- this.deadNodes = nodes;
- }
-
- /**
- * @param regions the total number of regions served by the cluster
- */
- public void setRegions(int regions) {
- this.regions = regions;
- }
-
- /**
- * @param requests the total number of requests per second handled by the
- * cluster
- */
- public void setRequests(int requests) {
- this.requests = requests;
- }
-
- /**
- * @param averageLoad the average load of region servers in the cluster
- */
- public void setAverageLoad(double averageLoad) {
- this.averageLoad = averageLoad;
- }
-
- /*
- * (non-Javadoc)
- * @see java.lang.Object#toString()
- */
- @Override
- public String toString() {
- StringBuilder sb = new StringBuilder();
- sb.append(String.format("%d live servers, %d dead servers, " +
- "%.4f average load%n%n", liveNodes.size(), deadNodes.size(),
- averageLoad));
- if (!liveNodes.isEmpty()) {
- sb.append(liveNodes.size());
- sb.append(" live servers\n");
- for (Node node: liveNodes) {
- sb.append(" ");
- sb.append(node.name);
- sb.append(' ');
- sb.append(node.startCode);
- sb.append("\n requests=");
- sb.append(node.requests);
- sb.append(", regions=");
- sb.append(node.regions.size());
- sb.append("\n heapSizeMB=");
- sb.append(node.heapSizeMB);
- sb.append("\n maxHeapSizeMB=");
- sb.append(node.maxHeapSizeMB);
- sb.append("\n\n");
- for (Node.Region region: node.regions) {
- sb.append(" ");
- sb.append(Bytes.toString(region.name));
- sb.append("\n stores=");
- sb.append(region.stores);
- sb.append("\n storefiless=");
- sb.append(region.storefiles);
- sb.append("\n storefileSizeMB=");
- sb.append(region.storefileSizeMB);
- sb.append("\n memstoreSizeMB=");
- sb.append(region.memstoreSizeMB);
- sb.append("\n storefileIndexSizeMB=");
- sb.append(region.storefileIndexSizeMB);
- sb.append("\n readRequestsCount=");
- sb.append(region.readRequestsCount);
- sb.append("\n writeRequestsCount=");
- sb.append(region.writeRequestsCount);
- sb.append("\n rootIndexSizeKB=");
- sb.append(region.rootIndexSizeKB);
- sb.append("\n totalStaticIndexSizeKB=");
- sb.append(region.totalStaticIndexSizeKB);
- sb.append("\n totalStaticBloomSizeKB=");
- sb.append(region.totalStaticBloomSizeKB);
- sb.append("\n totalCompactingKVs=");
- sb.append(region.totalCompactingKVs);
- sb.append("\n currentCompactedKVs=");
- sb.append(region.currentCompactedKVs);
- sb.append('\n');
- }
- sb.append('\n');
- }
- }
- if (!deadNodes.isEmpty()) {
- sb.append('\n');
- sb.append(deadNodes.size());
- sb.append(" dead servers\n");
- for (String node: deadNodes) {
- sb.append(" ");
- sb.append(node);
- sb.append('\n');
- }
- }
- return sb.toString();
- }
-
- @Override
- public byte[] createProtobufOutput() {
- StorageClusterStatus.Builder builder = StorageClusterStatus.newBuilder();
- builder.setRegions(regions);
- builder.setRequests(requests);
- builder.setAverageLoad(averageLoad);
- for (Node node: liveNodes) {
- StorageClusterStatus.Node.Builder nodeBuilder =
- StorageClusterStatus.Node.newBuilder();
- nodeBuilder.setName(node.name);
- nodeBuilder.setStartCode(node.startCode);
- nodeBuilder.setRequests(node.requests);
- nodeBuilder.setHeapSizeMB(node.heapSizeMB);
- nodeBuilder.setMaxHeapSizeMB(node.maxHeapSizeMB);
- for (Node.Region region: node.regions) {
- StorageClusterStatus.Region.Builder regionBuilder =
- StorageClusterStatus.Region.newBuilder();
- regionBuilder.setName(ByteStringer.wrap(region.name));
- regionBuilder.setStores(region.stores);
- regionBuilder.setStorefiles(region.storefiles);
- regionBuilder.setStorefileSizeMB(region.storefileSizeMB);
- regionBuilder.setMemstoreSizeMB(region.memstoreSizeMB);
- regionBuilder.setStorefileIndexSizeMB(region.storefileIndexSizeMB);
- regionBuilder.setReadRequestsCount(region.readRequestsCount);
- regionBuilder.setWriteRequestsCount(region.writeRequestsCount);
- regionBuilder.setRootIndexSizeKB(region.rootIndexSizeKB);
- regionBuilder.setTotalStaticIndexSizeKB(region.totalStaticIndexSizeKB);
- regionBuilder.setTotalStaticBloomSizeKB(region.totalStaticBloomSizeKB);
- regionBuilder.setTotalCompactingKVs(region.totalCompactingKVs);
- regionBuilder.setCurrentCompactedKVs(region.currentCompactedKVs);
- nodeBuilder.addRegions(regionBuilder);
- }
- builder.addLiveNodes(nodeBuilder);
- }
- for (String node: deadNodes) {
- builder.addDeadNodes(node);
- }
- return builder.build().toByteArray();
- }
-
- @Override
- public ProtobufMessageHandler getObjectFromMessage(byte[] message)
- throws IOException {
- StorageClusterStatus.Builder builder = StorageClusterStatus.newBuilder();
- builder.mergeFrom(message);
- if (builder.hasRegions()) {
- regions = builder.getRegions();
- }
- if (builder.hasRequests()) {
- requests = builder.getRequests();
- }
- if (builder.hasAverageLoad()) {
- averageLoad = builder.getAverageLoad();
- }
- for (StorageClusterStatus.Node node: builder.getLiveNodesList()) {
- long startCode = node.hasStartCode() ? node.getStartCode() : -1;
- StorageClusterStatusModel.Node nodeModel =
- addLiveNode(node.getName(), startCode, node.getHeapSizeMB(),
- node.getMaxHeapSizeMB());
- int requests = node.hasRequests() ? node.getRequests() : 0;
- nodeModel.setRequests(requests);
- for (StorageClusterStatus.Region region: node.getRegionsList()) {
- nodeModel.addRegion(
- region.getName().toByteArray(),
- region.getStores(),
- region.getStorefiles(),
- region.getStorefileSizeMB(),
- region.getMemstoreSizeMB(),
- region.getStorefileIndexSizeMB(),
- region.getReadRequestsCount(),
- region.getWriteRequestsCount(),
- region.getRootIndexSizeKB(),
- region.getTotalStaticIndexSizeKB(),
- region.getTotalStaticBloomSizeKB(),
- region.getTotalCompactingKVs(),
- region.getCurrentCompactedKVs());
- }
- }
- for (String node: builder.getDeadNodesList()) {
- addDeadNode(node);
- }
- return this;
- }
-}
http://git-wip-us.apache.org/repos/asf/hbase/blob/876617bd/hbase-server/src/main/java/org/apache/hadoop/hbase/rest/model/StorageClusterVersionModel.java
----------------------------------------------------------------------
diff --git a/hbase-server/src/main/java/org/apache/hadoop/hbase/rest/model/StorageClusterVersionModel.java b/hbase-server/src/main/java/org/apache/hadoop/hbase/rest/model/StorageClusterVersionModel.java
deleted file mode 100644
index 4321a8e..0000000
--- a/hbase-server/src/main/java/org/apache/hadoop/hbase/rest/model/StorageClusterVersionModel.java
+++ /dev/null
@@ -1,78 +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.hadoop.hbase.rest.model;
-
-import org.codehaus.jackson.annotate.JsonValue;
-
-import java.io.Serializable;
-
-import javax.xml.bind.annotation.XmlRootElement;
-import javax.xml.bind.annotation.XmlValue;
-
-import org.apache.hadoop.hbase.classification.InterfaceAudience;
-
-/**
- * Simple representation of the version of the storage cluster
- *
- * <pre>
- * <complexType name="StorageClusterVersion">
- * <attribute name="version" type="string"></attribute>
- * </complexType>
- * </pre>
- */
-@XmlRootElement(name="ClusterVersion")
-@InterfaceAudience.Private
-public class StorageClusterVersionModel implements Serializable {
- private static final long serialVersionUID = 1L;
-
- private String version;
-
- /**
- * @return the storage cluster version
- */
- @XmlValue
- public String getVersion() {
- return version;
- }
-
- /**
- * @param version the storage cluster version
- */
- public void setVersion(String version) {
- this.version = version;
- }
-
- /* (non-Javadoc)
- * @see java.lang.Object#toString()
- */
- @JsonValue
- @Override
- public String toString() {
- return version;
- }
-
- //needed for jackson deserialization
- private static StorageClusterVersionModel valueOf(String value) {
- StorageClusterVersionModel versionModel
- = new StorageClusterVersionModel();
- versionModel.setVersion(value);
- return versionModel;
- }
-}
http://git-wip-us.apache.org/repos/asf/hbase/blob/876617bd/hbase-server/src/main/java/org/apache/hadoop/hbase/rest/model/TableInfoModel.java
----------------------------------------------------------------------
diff --git a/hbase-server/src/main/java/org/apache/hadoop/hbase/rest/model/TableInfoModel.java b/hbase-server/src/main/java/org/apache/hadoop/hbase/rest/model/TableInfoModel.java
deleted file mode 100644
index 700e766..0000000
--- a/hbase-server/src/main/java/org/apache/hadoop/hbase/rest/model/TableInfoModel.java
+++ /dev/null
@@ -1,159 +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.hadoop.hbase.rest.model;
-
-import java.io.IOException;
-import java.io.Serializable;
-import java.util.ArrayList;
-import java.util.List;
-
-import javax.xml.bind.annotation.XmlAttribute;
-import javax.xml.bind.annotation.XmlElement;
-import javax.xml.bind.annotation.XmlRootElement;
-
-import org.apache.hadoop.hbase.util.ByteStringer;
-import org.apache.hadoop.hbase.classification.InterfaceAudience;
-import org.apache.hadoop.hbase.rest.ProtobufMessageHandler;
-import org.apache.hadoop.hbase.rest.protobuf.generated.TableInfoMessage.TableInfo;
-
-/**
- * Representation of a list of table regions.
- *
- * <pre>
- * <complexType name="TableInfo">
- * <sequence>
- * <element name="region" type="tns:TableRegion"
- * maxOccurs="unbounded" minOccurs="1"></element>
- * </sequence>
- * <attribute name="name" type="string"></attribute>
- * </complexType>
- * </pre>
- */
-@XmlRootElement(name="TableInfo")
-@InterfaceAudience.Private
-public class TableInfoModel implements Serializable, ProtobufMessageHandler {
- private static final long serialVersionUID = 1L;
-
- private String name;
- private List<TableRegionModel> regions = new ArrayList<TableRegionModel>();
-
- /**
- * Default constructor
- */
- public TableInfoModel() {}
-
- /**
- * Constructor
- * @param name
- */
- public TableInfoModel(String name) {
- this.name = name;
- }
-
- /**
- * Add a region model to the list
- * @param region the region
- */
- public void add(TableRegionModel region) {
- regions.add(region);
- }
-
- /**
- * @param index the index
- * @return the region model
- */
- public TableRegionModel get(int index) {
- return regions.get(index);
- }
-
- /**
- * @return the table name
- */
- @XmlAttribute
- public String getName() {
- return name;
- }
-
- /**
- * @return the regions
- */
- @XmlElement(name="Region")
- public List<TableRegionModel> getRegions() {
- return regions;
- }
-
- /**
- * @param name the table name
- */
- public void setName(String name) {
- this.name = name;
- }
-
- /**
- * @param regions the regions to set
- */
- public void setRegions(List<TableRegionModel> regions) {
- this.regions = regions;
- }
-
- /* (non-Javadoc)
- * @see java.lang.Object#toString()
- */
- @Override
- public String toString() {
- StringBuilder sb = new StringBuilder();
- for(TableRegionModel aRegion : regions) {
- sb.append(aRegion.toString());
- sb.append('\n');
- }
- return sb.toString();
- }
-
- @Override
- public byte[] createProtobufOutput() {
- TableInfo.Builder builder = TableInfo.newBuilder();
- builder.setName(name);
- for (TableRegionModel aRegion: regions) {
- TableInfo.Region.Builder regionBuilder = TableInfo.Region.newBuilder();
- regionBuilder.setName(aRegion.getName());
- regionBuilder.setId(aRegion.getId());
- regionBuilder.setStartKey(ByteStringer.wrap(aRegion.getStartKey()));
- regionBuilder.setEndKey(ByteStringer.wrap(aRegion.getEndKey()));
- regionBuilder.setLocation(aRegion.getLocation());
- builder.addRegions(regionBuilder);
- }
- return builder.build().toByteArray();
- }
-
- @Override
- public ProtobufMessageHandler getObjectFromMessage(byte[] message)
- throws IOException {
- TableInfo.Builder builder = TableInfo.newBuilder();
- builder.mergeFrom(message);
- setName(builder.getName());
- for (TableInfo.Region region: builder.getRegionsList()) {
- add(new TableRegionModel(builder.getName(), region.getId(),
- region.getStartKey().toByteArray(),
- region.getEndKey().toByteArray(),
- region.getLocation()));
- }
- return this;
- }
-}
http://git-wip-us.apache.org/repos/asf/hbase/blob/876617bd/hbase-server/src/main/java/org/apache/hadoop/hbase/rest/model/TableListModel.java
----------------------------------------------------------------------
diff --git a/hbase-server/src/main/java/org/apache/hadoop/hbase/rest/model/TableListModel.java b/hbase-server/src/main/java/org/apache/hadoop/hbase/rest/model/TableListModel.java
deleted file mode 100644
index 596adac..0000000
--- a/hbase-server/src/main/java/org/apache/hadoop/hbase/rest/model/TableListModel.java
+++ /dev/null
@@ -1,113 +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.hadoop.hbase.rest.model;
-
-import java.io.IOException;
-import java.io.Serializable;
-import java.util.ArrayList;
-import java.util.List;
-
-import javax.xml.bind.annotation.XmlElementRef;
-import javax.xml.bind.annotation.XmlRootElement;
-
-import org.apache.hadoop.hbase.classification.InterfaceAudience;
-import org.apache.hadoop.hbase.rest.ProtobufMessageHandler;
-import org.apache.hadoop.hbase.rest.protobuf.generated.TableListMessage.TableList;
-
-/**
- * Simple representation of a list of table names.
- */
-@XmlRootElement(name="TableList")
-@InterfaceAudience.Private
-public class TableListModel implements Serializable, ProtobufMessageHandler {
-
- private static final long serialVersionUID = 1L;
-
- private List<TableModel> tables = new ArrayList<TableModel>();
-
- /**
- * Default constructor
- */
- public TableListModel() {}
-
- /**
- * Add the table name model to the list
- * @param table the table model
- */
- public void add(TableModel table) {
- tables.add(table);
- }
-
- /**
- * @param index the index
- * @return the table model
- */
- public TableModel get(int index) {
- return tables.get(index);
- }
-
- /**
- * @return the tables
- */
- @XmlElementRef(name="table")
- public List<TableModel> getTables() {
- return tables;
- }
-
- /**
- * @param tables the tables to set
- */
- public void setTables(List<TableModel> tables) {
- this.tables = tables;
- }
-
- /* (non-Javadoc)
- * @see java.lang.Object#toString()
- */
- @Override
- public String toString() {
- StringBuilder sb = new StringBuilder();
- for(TableModel aTable : tables) {
- sb.append(aTable.toString());
- sb.append('\n');
- }
- return sb.toString();
- }
-
- @Override
- public byte[] createProtobufOutput() {
- TableList.Builder builder = TableList.newBuilder();
- for (TableModel aTable : tables) {
- builder.addName(aTable.getName());
- }
- return builder.build().toByteArray();
- }
-
- @Override
- public ProtobufMessageHandler getObjectFromMessage(byte[] message)
- throws IOException {
- TableList.Builder builder = TableList.newBuilder();
- builder.mergeFrom(message);
- for (String table: builder.getNameList()) {
- this.add(new TableModel(table));
- }
- return this;
- }
-}
http://git-wip-us.apache.org/repos/asf/hbase/blob/876617bd/hbase-server/src/main/java/org/apache/hadoop/hbase/rest/model/TableModel.java
----------------------------------------------------------------------
diff --git a/hbase-server/src/main/java/org/apache/hadoop/hbase/rest/model/TableModel.java b/hbase-server/src/main/java/org/apache/hadoop/hbase/rest/model/TableModel.java
deleted file mode 100644
index 0fb0d6e..0000000
--- a/hbase-server/src/main/java/org/apache/hadoop/hbase/rest/model/TableModel.java
+++ /dev/null
@@ -1,84 +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.hadoop.hbase.rest.model;
-
-import java.io.Serializable;
-
-import javax.xml.bind.annotation.XmlAttribute;
-import javax.xml.bind.annotation.XmlRootElement;
-
-import org.apache.hadoop.hbase.classification.InterfaceAudience;
-
-/**
- * Simple representation of a table name.
- *
- * <pre>
- * <complexType name="Table">
- * <sequence>
- * <element name="name" type="string"></element>
- * </sequence>
- * </complexType>
- * </pre>
- */
-@XmlRootElement(name="table")
-@InterfaceAudience.Private
-public class TableModel implements Serializable {
-
- private static final long serialVersionUID = 1L;
-
- private String name;
-
- /**
- * Default constructor
- */
- public TableModel() {}
-
- /**
- * Constructor
- * @param name
- */
- public TableModel(String name) {
- super();
- this.name = name;
- }
-
- /**
- * @return the name
- */
- @XmlAttribute
- public String getName() {
- return name;
- }
-
- /**
- * @param name the name to set
- */
- public void setName(String name) {
- this.name = name;
- }
-
- /* (non-Javadoc)
- * @see java.lang.Object#toString()
- */
- @Override
- public String toString() {
- return this.name;
- }
-}
http://git-wip-us.apache.org/repos/asf/hbase/blob/876617bd/hbase-server/src/main/java/org/apache/hadoop/hbase/rest/model/TableRegionModel.java
----------------------------------------------------------------------
diff --git a/hbase-server/src/main/java/org/apache/hadoop/hbase/rest/model/TableRegionModel.java b/hbase-server/src/main/java/org/apache/hadoop/hbase/rest/model/TableRegionModel.java
deleted file mode 100644
index d9b2b65..0000000
--- a/hbase-server/src/main/java/org/apache/hadoop/hbase/rest/model/TableRegionModel.java
+++ /dev/null
@@ -1,196 +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.hadoop.hbase.rest.model;
-
-import java.io.Serializable;
-
-import javax.xml.bind.annotation.XmlAttribute;
-import javax.xml.bind.annotation.XmlRootElement;
-
-import org.apache.hadoop.hbase.classification.InterfaceAudience;
-import org.apache.hadoop.hbase.TableName;
-import org.apache.hadoop.hbase.HRegionInfo;
-import org.apache.hadoop.hbase.util.Bytes;
-
-/**
- * Representation of a region of a table and its current location on the
- * storage cluster.
- *
- * <pre>
- * <complexType name="TableRegion">
- * <attribute name="name" type="string"></attribute>
- * <attribute name="id" type="int"></attribute>
- * <attribute name="startKey" type="base64Binary"></attribute>
- * <attribute name="endKey" type="base64Binary"></attribute>
- * <attribute name="location" type="string"></attribute>
- * </complexType>
- * </pre>
- */
-@XmlRootElement(name="Region")
-@InterfaceAudience.Private
-public class TableRegionModel implements Serializable {
-
- private static final long serialVersionUID = 1L;
-
- private String table;
- private long id;
- private byte[] startKey;
- private byte[] endKey;
- private String location;
-
- /**
- * Constructor
- */
- public TableRegionModel() {}
-
- /**
- * Constructor
- * @param table the table name
- * @param id the encoded id of the region
- * @param startKey the start key of the region
- * @param endKey the end key of the region
- */
- public TableRegionModel(String table, long id, byte[] startKey,
- byte[] endKey) {
- this(table, id, startKey, endKey, null);
- }
-
- /**
- * Constructor
- * @param table the table name
- * @param id the encoded id of the region
- * @param startKey the start key of the region
- * @param endKey the end key of the region
- * @param location the name and port of the region server hosting the region
- */
- public TableRegionModel(String table, long id, byte[] startKey,
- byte[] endKey, String location) {
- this.table = table;
- this.id = id;
- this.startKey = startKey;
- this.endKey = endKey;
- this.location = location;
- }
-
- /**
- * @return the region name
- */
- @XmlAttribute
- public String getName() {
- byte [] tableNameAsBytes = Bytes.toBytes(this.table);
- TableName tableName = TableName.valueOf(tableNameAsBytes);
- byte [] nameAsBytes = HRegionInfo.createRegionName(
- tableName, this.startKey, this.id, !tableName.isSystemTable());
- return Bytes.toString(nameAsBytes);
- }
-
- /**
- * @return the encoded region id
- */
- @XmlAttribute
- public long getId() {
- return id;
- }
-
- /**
- * @return the start key
- */
- @XmlAttribute
- public byte[] getStartKey() {
- return startKey;
- }
-
- /**
- * @return the end key
- */
- @XmlAttribute
- public byte[] getEndKey() {
- return endKey;
- }
-
- /**
- * @return the name and port of the region server hosting the region
- */
- @XmlAttribute
- public String getLocation() {
- return location;
- }
-
- /**
- * @param name region printable name
- */
- public void setName(String name) {
- String split[] = name.split(",");
- this.table = split[0];
- this.startKey = Bytes.toBytes(split[1]);
- String tail = split[2];
- split = tail.split("\\.");
- id = Long.valueOf(split[0]);
- }
-
- /**
- * @param id the region's encoded id
- */
- public void setId(long id) {
- this.id = id;
- }
-
- /**
- * @param startKey the start key
- */
- public void setStartKey(byte[] startKey) {
- this.startKey = startKey;
- }
-
- /**
- * @param endKey the end key
- */
- public void setEndKey(byte[] endKey) {
- this.endKey = endKey;
- }
-
- /**
- * @param location the name and port of the region server hosting the region
- */
- public void setLocation(String location) {
- this.location = location;
- }
-
- /* (non-Javadoc)
- * @see java.lang.Object#toString()
- */
- @Override
- public String toString() {
- StringBuilder sb = new StringBuilder();
- sb.append(getName());
- sb.append(" [\n id=");
- sb.append(id);
- sb.append("\n startKey='");
- sb.append(Bytes.toString(startKey));
- sb.append("'\n endKey='");
- sb.append(Bytes.toString(endKey));
- if (location != null) {
- sb.append("'\n location='");
- sb.append(location);
- }
- sb.append("'\n]\n");
- return sb.toString();
- }
-}
http://git-wip-us.apache.org/repos/asf/hbase/blob/876617bd/hbase-server/src/main/java/org/apache/hadoop/hbase/rest/model/TableSchemaModel.java
----------------------------------------------------------------------
diff --git a/hbase-server/src/main/java/org/apache/hadoop/hbase/rest/model/TableSchemaModel.java b/hbase-server/src/main/java/org/apache/hadoop/hbase/rest/model/TableSchemaModel.java
deleted file mode 100644
index d843e79..0000000
--- a/hbase-server/src/main/java/org/apache/hadoop/hbase/rest/model/TableSchemaModel.java
+++ /dev/null
@@ -1,361 +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.hadoop.hbase.rest.model;
-
-import java.io.IOException;
-import java.io.Serializable;
-import java.util.ArrayList;
-import java.util.LinkedHashMap;
-import java.util.Iterator;
-import java.util.List;
-import java.util.Map;
-
-import javax.xml.bind.annotation.XmlAnyAttribute;
-import javax.xml.bind.annotation.XmlAttribute;
-import javax.xml.bind.annotation.XmlElement;
-import javax.xml.bind.annotation.XmlRootElement;
-import javax.xml.namespace.QName;
-
-import org.apache.hadoop.hbase.classification.InterfaceAudience;
-import org.apache.hadoop.hbase.HColumnDescriptor;
-import org.apache.hadoop.hbase.HConstants;
-import org.apache.hadoop.hbase.HTableDescriptor;
-import org.apache.hadoop.hbase.TableName;
-import org.apache.hadoop.hbase.io.ImmutableBytesWritable;
-import org.apache.hadoop.hbase.rest.ProtobufMessageHandler;
-import org.apache.hadoop.hbase.rest.protobuf.generated.ColumnSchemaMessage.ColumnSchema;
-import org.apache.hadoop.hbase.rest.protobuf.generated.TableSchemaMessage.TableSchema;
-import org.apache.hadoop.hbase.util.Bytes;
-import org.codehaus.jackson.annotate.JsonAnyGetter;
-import org.codehaus.jackson.annotate.JsonAnySetter;
-import org.codehaus.jackson.annotate.JsonIgnore;
-
-/**
- * A representation of HBase table descriptors.
- *
- * <pre>
- * <complexType name="TableSchema">
- * <sequence>
- * <element name="column" type="tns:ColumnSchema"
- * maxOccurs="unbounded" minOccurs="1"></element>
- * </sequence>
- * <attribute name="name" type="string"></attribute>
- * <anyAttribute></anyAttribute>
- * </complexType>
- * </pre>
- */
-@XmlRootElement(name="TableSchema")
-@InterfaceAudience.Private
-public class TableSchemaModel implements Serializable, ProtobufMessageHandler {
- private static final long serialVersionUID = 1L;
- private static final QName IS_META = new QName(HTableDescriptor.IS_META);
- private static final QName IS_ROOT = new QName(HTableDescriptor.IS_ROOT);
- private static final QName READONLY = new QName(HTableDescriptor.READONLY);
- private static final QName TTL = new QName(HColumnDescriptor.TTL);
- private static final QName VERSIONS = new QName(HConstants.VERSIONS);
- private static final QName COMPRESSION =
- new QName(HColumnDescriptor.COMPRESSION);
-
- private String name;
- private Map<QName,Object> attrs = new LinkedHashMap<QName,Object>();
- private List<ColumnSchemaModel> columns = new ArrayList<ColumnSchemaModel>();
-
- /**
- * Default constructor.
- */
- public TableSchemaModel() {}
-
- /**
- * Constructor
- * @param htd the table descriptor
- */
- public TableSchemaModel(HTableDescriptor htd) {
- setName(htd.getTableName().getNameAsString());
- for (Map.Entry<ImmutableBytesWritable, ImmutableBytesWritable> e:
- htd.getValues().entrySet()) {
- addAttribute(Bytes.toString(e.getKey().get()),
- Bytes.toString(e.getValue().get()));
- }
- for (HColumnDescriptor hcd: htd.getFamilies()) {
- ColumnSchemaModel columnModel = new ColumnSchemaModel();
- columnModel.setName(hcd.getNameAsString());
- for (Map.Entry<ImmutableBytesWritable, ImmutableBytesWritable> e:
- hcd.getValues().entrySet()) {
- columnModel.addAttribute(Bytes.toString(e.getKey().get()),
- Bytes.toString(e.getValue().get()));
- }
- addColumnFamily(columnModel);
- }
- }
-
- /**
- * Add an attribute to the table descriptor
- * @param name attribute name
- * @param value attribute value
- */
- @JsonAnySetter
- public void addAttribute(String name, Object value) {
- attrs.put(new QName(name), value);
- }
-
- /**
- * Return a table descriptor value as a string. Calls toString() on the
- * object stored in the descriptor value map.
- * @param name the attribute name
- * @return the attribute value
- */
- public String getAttribute(String name) {
- Object o = attrs.get(new QName(name));
- return o != null ? o.toString() : null;
- }
-
- /**
- * Add a column family to the table descriptor
- * @param family the column family model
- */
- public void addColumnFamily(ColumnSchemaModel family) {
- columns.add(family);
- }
-
- /**
- * Retrieve the column family at the given index from the table descriptor
- * @param index the index
- * @return the column family model
- */
- public ColumnSchemaModel getColumnFamily(int index) {
- return columns.get(index);
- }
-
- /**
- * @return the table name
- */
- @XmlAttribute
- public String getName() {
- return name;
- }
-
- /**
- * @return the map for holding unspecified (user) attributes
- */
- @XmlAnyAttribute
- @JsonAnyGetter
- public Map<QName,Object> getAny() {
- return attrs;
- }
-
- /**
- * @return the columns
- */
- @XmlElement(name="ColumnSchema")
- public List<ColumnSchemaModel> getColumns() {
- return columns;
- }
-
- /**
- * @param name the table name
- */
- public void setName(String name) {
- this.name = name;
- }
-
- /**
- * @param columns the columns to set
- */
- public void setColumns(List<ColumnSchemaModel> columns) {
- this.columns = columns;
- }
-
- /* (non-Javadoc)
- * @see java.lang.Object#toString()
- */
- @Override
- public String toString() {
- StringBuilder sb = new StringBuilder();
- sb.append("{ NAME=> '");
- sb.append(name);
- sb.append('\'');
- for (Map.Entry<QName,Object> e: attrs.entrySet()) {
- sb.append(", ");
- sb.append(e.getKey().getLocalPart());
- sb.append(" => '");
- sb.append(e.getValue().toString());
- sb.append('\'');
- }
- sb.append(", COLUMNS => [ ");
- Iterator<ColumnSchemaModel> i = columns.iterator();
- while (i.hasNext()) {
- ColumnSchemaModel family = i.next();
- sb.append(family.toString());
- if (i.hasNext()) {
- sb.append(',');
- }
- sb.append(' ');
- }
- sb.append("] }");
- return sb.toString();
- }
-
- // getters and setters for common schema attributes
-
- // cannot be standard bean type getters and setters, otherwise this would
- // confuse JAXB
-
- /**
- * @return true if IS_META attribute exists and is truel
- */
- public boolean __getIsMeta() {
- Object o = attrs.get(IS_META);
- return o != null ? Boolean.valueOf(o.toString()) : false;
- }
-
- /**
- * @return true if IS_ROOT attribute exists and is truel
- */
- public boolean __getIsRoot() {
- Object o = attrs.get(IS_ROOT);
- return o != null ? Boolean.valueOf(o.toString()) : false;
- }
-
- /**
- * @return true if READONLY attribute exists and is truel
- */
- public boolean __getReadOnly() {
- Object o = attrs.get(READONLY);
- return o != null ?
- Boolean.valueOf(o.toString()) : HTableDescriptor.DEFAULT_READONLY;
- }
-
- /**
- * @param value desired value of IS_META attribute
- */
- public void __setIsMeta(boolean value) {
- attrs.put(IS_META, Boolean.toString(value));
- }
-
- /**
- * @param value desired value of IS_ROOT attribute
- */
- public void __setIsRoot(boolean value) {
- attrs.put(IS_ROOT, Boolean.toString(value));
- }
-
- /**
- * @param value desired value of READONLY attribute
- */
- public void __setReadOnly(boolean value) {
- attrs.put(READONLY, Boolean.toString(value));
- }
-
- @Override
- public byte[] createProtobufOutput() {
- TableSchema.Builder builder = TableSchema.newBuilder();
- builder.setName(name);
- for (Map.Entry<QName, Object> e: attrs.entrySet()) {
- TableSchema.Attribute.Builder attrBuilder =
- TableSchema.Attribute.newBuilder();
- attrBuilder.setName(e.getKey().getLocalPart());
- attrBuilder.setValue(e.getValue().toString());
- builder.addAttrs(attrBuilder);
- }
- for (ColumnSchemaModel family: columns) {
- Map<QName, Object> familyAttrs = family.getAny();
- ColumnSchema.Builder familyBuilder = ColumnSchema.newBuilder();
- familyBuilder.setName(family.getName());
- for (Map.Entry<QName, Object> e: familyAttrs.entrySet()) {
- ColumnSchema.Attribute.Builder attrBuilder =
- ColumnSchema.Attribute.newBuilder();
- attrBuilder.setName(e.getKey().getLocalPart());
- attrBuilder.setValue(e.getValue().toString());
- familyBuilder.addAttrs(attrBuilder);
- }
- if (familyAttrs.containsKey(TTL)) {
- familyBuilder.setTtl(
- Integer.valueOf(familyAttrs.get(TTL).toString()));
- }
- if (familyAttrs.containsKey(VERSIONS)) {
- familyBuilder.setMaxVersions(
- Integer.valueOf(familyAttrs.get(VERSIONS).toString()));
- }
- if (familyAttrs.containsKey(COMPRESSION)) {
- familyBuilder.setCompression(familyAttrs.get(COMPRESSION).toString());
- }
- builder.addColumns(familyBuilder);
- }
- if (attrs.containsKey(READONLY)) {
- builder.setReadOnly(
- Boolean.valueOf(attrs.get(READONLY).toString()));
- }
- return builder.build().toByteArray();
- }
-
- @Override
- public ProtobufMessageHandler getObjectFromMessage(byte[] message)
- throws IOException {
- TableSchema.Builder builder = TableSchema.newBuilder();
- builder.mergeFrom(message);
- this.setName(builder.getName());
- for (TableSchema.Attribute attr: builder.getAttrsList()) {
- this.addAttribute(attr.getName(), attr.getValue());
- }
- if (builder.hasReadOnly()) {
- this.addAttribute(HTableDescriptor.READONLY, builder.getReadOnly());
- }
- for (ColumnSchema family: builder.getColumnsList()) {
- ColumnSchemaModel familyModel = new ColumnSchemaModel();
- familyModel.setName(family.getName());
- for (ColumnSchema.Attribute attr: family.getAttrsList()) {
- familyModel.addAttribute(attr.getName(), attr.getValue());
- }
- if (family.hasTtl()) {
- familyModel.addAttribute(HColumnDescriptor.TTL, family.getTtl());
- }
- if (family.hasMaxVersions()) {
- familyModel.addAttribute(HConstants.VERSIONS,
- family.getMaxVersions());
- }
- if (family.hasCompression()) {
- familyModel.addAttribute(HColumnDescriptor.COMPRESSION,
- family.getCompression());
- }
- this.addColumnFamily(familyModel);
- }
- return this;
- }
-
- /**
- * @return a table descriptor
- */
- @JsonIgnore
- public HTableDescriptor getTableDescriptor() {
- HTableDescriptor htd = new HTableDescriptor(TableName.valueOf(getName()));
- for (Map.Entry<QName, Object> e: getAny().entrySet()) {
- htd.setValue(e.getKey().getLocalPart(), e.getValue().toString());
- }
- for (ColumnSchemaModel column: getColumns()) {
- HColumnDescriptor hcd = new HColumnDescriptor(column.getName());
- for (Map.Entry<QName, Object> e: column.getAny().entrySet()) {
- hcd.setValue(e.getKey().getLocalPart(), e.getValue().toString());
- }
- htd.addFamily(hcd);
- }
- return htd;
- }
-
-}