/* * 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.codec.prefixtree; import java.io.IOException; import java.io.InputStream; import java.io.OutputStream; import org.apache.hadoop.hbase.classification.InterfaceAudience; import org.apache.hadoop.hbase.codec.prefixtree.encode.other.LongEncoder; import org.apache.hadoop.hbase.nio.ByteBuff; import org.apache.hadoop.hbase.util.Bytes; import org.apache.hadoop.hbase.util.vint.UVIntTool; import org.apache.hadoop.hbase.util.vint.UVLongTool; /** * Information about the block. Stored at the beginning of the byte[]. Contains things * like minimum timestamp and width of FInts in the row tree. * * Most fields stored in VInts that get decoded on the first access of each new block. */ @InterfaceAudience.Private public class PrefixTreeBlockMeta { /******************* static fields ********************/ public static final int VERSION = 0; public static final int MAX_FAMILY_LENGTH = Byte.MAX_VALUE;// hard-coded in KeyValue public static final int NUM_LONGS = 2, NUM_INTS = 28, NUM_SHORTS = 0,//keyValueTypeWidth not persisted NUM_SINGLE_BYTES = 2, MAX_BYTES = Bytes.SIZEOF_LONG * NUM_LONGS + Bytes.SIZEOF_SHORT * NUM_SHORTS + Bytes.SIZEOF_INT * NUM_INTS + NUM_SINGLE_BYTES; /**************** transient fields *********************/ protected int bufferOffset; /**************** persisted fields **********************/ // PrefixTree version to allow future format modifications protected int version; protected int numMetaBytes; protected int numKeyValueBytes; protected boolean includesMvccVersion;//probably don't need this explicitly, but only 1 byte // split the byte[] into 6 sections for the different data types protected int numRowBytes; protected int numFamilyBytes; protected int numQualifierBytes; protected int numTimestampBytes; protected int numMvccVersionBytes; protected int numValueBytes; protected int numTagsBytes; // number of bytes in each section of fixed width FInts protected int nextNodeOffsetWidth; protected int familyOffsetWidth; protected int qualifierOffsetWidth; protected int timestampIndexWidth; protected int mvccVersionIndexWidth; protected int valueOffsetWidth; protected int valueLengthWidth; protected int tagsOffsetWidth; // used to pre-allocate structures for reading protected int rowTreeDepth; protected int maxRowLength; protected int maxQualifierLength; protected int maxTagsLength; // the timestamp from which the deltas are calculated protected long minTimestamp; protected int timestampDeltaWidth; protected long minMvccVersion; protected int mvccVersionDeltaWidth; protected boolean allSameType; protected byte allTypes; protected int numUniqueRows; protected int numUniqueFamilies; protected int numUniqueQualifiers; protected int numUniqueTags; /***************** constructors ********************/ public PrefixTreeBlockMeta() { } public PrefixTreeBlockMeta(InputStream is) throws IOException{ this.version = VERSION; this.bufferOffset = 0; readVariableBytesFromInputStream(is); } /** * @param buffer positioned at start of PtBlockMeta */ public PrefixTreeBlockMeta(ByteBuff buffer) { initOnBlock(buffer); } public void initOnBlock(ByteBuff buffer) { bufferOffset = buffer.position(); readVariableBytesFromBuffer(buffer, bufferOffset); } /**************** operate on each field **********************/ public int calculateNumMetaBytes(){ int numBytes = 0; numBytes += UVIntTool.numBytes(version); numBytes += UVLongTool.numBytes(numMetaBytes); numBytes += UVIntTool.numBytes(numKeyValueBytes); ++numBytes;//os.write(getIncludesMvccVersion()); numBytes += UVIntTool.numBytes(numRowBytes); numBytes += UVIntTool.numBytes(numFamilyBytes); numBytes += UVIntTool.numBytes(numQualifierBytes); numBytes += UVIntTool.numBytes(numTagsBytes); numBytes += UVIntTool.numBytes(numTimestampBytes); numBytes += UVIntTool.numBytes(numMvccVersionBytes); numBytes += UVIntTool.numBytes(numValueBytes); numBytes += UVIntTool.numBytes(nextNodeOffsetWidth); numBytes += UVIntTool.numBytes(familyOffsetWidth); numBytes += UVIntTool.numBytes(qualifierOffsetWidth); numBytes += UVIntTool.numBytes(tagsOffsetWidth); numBytes += UVIntTool.numBytes(timestampIndexWidth); numBytes += UVIntTool.numBytes(mvccVersionIndexWidth); numBytes += UVIntTool.numBytes(valueOffsetWidth); numBytes += UVIntTool.numBytes(valueLengthWidth); numBytes += UVIntTool.numBytes(rowTreeDepth); numBytes += UVIntTool.numBytes(maxRowLength); numBytes += UVIntTool.numBytes(maxQualifierLength); numBytes += UVIntTool.numBytes(maxTagsLength); numBytes += UVLongTool.numBytes(minTimestamp); numBytes += UVIntTool.numBytes(timestampDeltaWidth); numBytes += UVLongTool.numBytes(minMvccVersion); numBytes += UVIntTool.numBytes(mvccVersionDeltaWidth); ++numBytes;//os.write(getAllSameTypeByte()); ++numBytes;//os.write(allTypes); numBytes += UVIntTool.numBytes(numUniqueRows); numBytes += UVIntTool.numBytes(numUniqueFamilies); numBytes += UVIntTool.numBytes(numUniqueQualifiers); numBytes += UVIntTool.numBytes(numUniqueTags); return numBytes; } public void writeVariableBytesToOutputStream(OutputStream os) throws IOException{ UVIntTool.writeBytes(version, os); UVIntTool.writeBytes(numMetaBytes, os); UVIntTool.writeBytes(numKeyValueBytes, os); os.write(getIncludesMvccVersionByte()); UVIntTool.writeBytes(numRowBytes, os); UVIntTool.writeBytes(numFamilyBytes, os); UVIntTool.writeBytes(numQualifierBytes, os); UVIntTool.writeBytes(numTagsBytes, os); UVIntTool.writeBytes(numTimestampBytes, os); UVIntTool.writeBytes(numMvccVersionBytes, os); UVIntTool.writeBytes(numValueBytes, os); UVIntTool.writeBytes(nextNodeOffsetWidth, os); UVIntTool.writeBytes(familyOffsetWidth, os); UVIntTool.writeBytes(qualifierOffsetWidth, os); UVIntTool.writeBytes(tagsOffsetWidth, os); UVIntTool.writeBytes(timestampIndexWidth, os); UVIntTool.writeBytes(mvccVersionIndexWidth, os); UVIntTool.writeBytes(valueOffsetWidth, os); UVIntTool.writeBytes(valueLengthWidth, os); UVIntTool.writeBytes(rowTreeDepth, os); UVIntTool.writeBytes(maxRowLength, os); UVIntTool.writeBytes(maxQualifierLength, os); UVIntTool.writeBytes(maxTagsLength, os); UVLongTool.writeBytes(minTimestamp, os); UVIntTool.writeBytes(timestampDeltaWidth, os); UVLongTool.writeBytes(minMvccVersion, os); UVIntTool.writeBytes(mvccVersionDeltaWidth, os); os.write(getAllSameTypeByte()); os.write(allTypes); UVIntTool.writeBytes(numUniqueRows, os); UVIntTool.writeBytes(numUniqueFamilies, os); UVIntTool.writeBytes(numUniqueQualifiers, os); UVIntTool.writeBytes(numUniqueTags, os); } public void readVariableBytesFromInputStream(InputStream is) throws IOException{ version = UVIntTool.getInt(is); numMetaBytes = UVIntTool.getInt(is); numKeyValueBytes = UVIntTool.getInt(is); setIncludesMvccVersion((byte) is.read()); numRowBytes = UVIntTool.getInt(is); numFamilyBytes = UVIntTool.getInt(is); numQualifierBytes = UVIntTool.getInt(is); numTagsBytes = UVIntTool.getInt(is); numTimestampBytes = UVIntTool.getInt(is); numMvccVersionBytes = UVIntTool.getInt(is); numValueBytes = UVIntTool.getInt(is); nextNodeOffsetWidth = UVIntTool.getInt(is); familyOffsetWidth = UVIntTool.getInt(is); qualifierOffsetWidth = UVIntTool.getInt(is); tagsOffsetWidth = UVIntTool.getInt(is); timestampIndexWidth = UVIntTool.getInt(is); mvccVersionIndexWidth = UVIntTool.getInt(is); valueOffsetWidth = UVIntTool.getInt(is); valueLengthWidth = UVIntTool.getInt(is); rowTreeDepth = UVIntTool.getInt(is); maxRowLength = UVIntTool.getInt(is); maxQualifierLength = UVIntTool.getInt(is); maxTagsLength = UVIntTool.getInt(is); minTimestamp = UVLongTool.getLong(is); timestampDeltaWidth = UVIntTool.getInt(is); minMvccVersion = UVLongTool.getLong(is); mvccVersionDeltaWidth = UVIntTool.getInt(is); setAllSameType((byte) is.read()); allTypes = (byte) is.read(); numUniqueRows = UVIntTool.getInt(is); numUniqueFamilies = UVIntTool.getInt(is); numUniqueQualifiers = UVIntTool.getInt(is); numUniqueTags = UVIntTool.getInt(is); } public void readVariableBytesFromBuffer(ByteBuff buf, int offset) { int position = offset; version = UVIntTool.getInt(buf, position); position += UVIntTool.numBytes(version); numMetaBytes = UVIntTool.getInt(buf, position); position += UVIntTool.numBytes(numMetaBytes); numKeyValueBytes = UVIntTool.getInt(buf, position); position += UVIntTool.numBytes(numKeyValueBytes); setIncludesMvccVersion(buf.get(position)); ++position; numRowBytes = UVIntTool.getInt(buf, position); position += UVIntTool.numBytes(numRowBytes); numFamilyBytes = UVIntTool.getInt(buf, position); position += UVIntTool.numBytes(numFamilyBytes); numQualifierBytes = UVIntTool.getInt(buf, position); position += UVIntTool.numBytes(numQualifierBytes); numTagsBytes = UVIntTool.getInt(buf, position); position += UVIntTool.numBytes(numTagsBytes); numTimestampBytes = UVIntTool.getInt(buf, position); position += UVIntTool.numBytes(numTimestampBytes); numMvccVersionBytes = UVIntTool.getInt(buf, position); position += UVIntTool.numBytes(numMvccVersionBytes); numValueBytes = UVIntTool.getInt(buf, position); position += UVIntTool.numBytes(numValueBytes); nextNodeOffsetWidth = UVIntTool.getInt(buf, position); position += UVIntTool.numBytes(nextNodeOffsetWidth); familyOffsetWidth = UVIntTool.getInt(buf, position); position += UVIntTool.numBytes(familyOffsetWidth); qualifierOffsetWidth = UVIntTool.getInt(buf, position); position += UVIntTool.numBytes(qualifierOffsetWidth); tagsOffsetWidth = UVIntTool.getInt(buf, position); position += UVIntTool.numBytes(tagsOffsetWidth); timestampIndexWidth = UVIntTool.getInt(buf, position); position += UVIntTool.numBytes(timestampIndexWidth); mvccVersionIndexWidth = UVIntTool.getInt(buf, position); position += UVIntTool.numBytes(mvccVersionIndexWidth); valueOffsetWidth = UVIntTool.getInt(buf, position); position += UVIntTool.numBytes(valueOffsetWidth); valueLengthWidth = UVIntTool.getInt(buf, position); position += UVIntTool.numBytes(valueLengthWidth); rowTreeDepth = UVIntTool.getInt(buf, position); position += UVIntTool.numBytes(rowTreeDepth); maxRowLength = UVIntTool.getInt(buf, position); position += UVIntTool.numBytes(maxRowLength); maxQualifierLength = UVIntTool.getInt(buf, position); position += UVIntTool.numBytes(maxQualifierLength); maxTagsLength = UVIntTool.getInt(buf, position); position += UVIntTool.numBytes(maxTagsLength); minTimestamp = UVLongTool.getLong(buf, position); position += UVLongTool.numBytes(minTimestamp); timestampDeltaWidth = UVIntTool.getInt(buf, position); position += UVIntTool.numBytes(timestampDeltaWidth); minMvccVersion = UVLongTool.getLong(buf, position); position += UVLongTool.numBytes(minMvccVersion); mvccVersionDeltaWidth = UVIntTool.getInt(buf, position); position += UVIntTool.numBytes(mvccVersionDeltaWidth); setAllSameType(buf.get(position)); ++position; allTypes = buf.get(position); ++position; numUniqueRows = UVIntTool.getInt(buf, position); position += UVIntTool.numBytes(numUniqueRows); numUniqueFamilies = UVIntTool.getInt(buf, position); position += UVIntTool.numBytes(numUniqueFamilies); numUniqueQualifiers = UVIntTool.getInt(buf, position); position += UVIntTool.numBytes(numUniqueQualifiers); numUniqueTags = UVIntTool.getInt(buf, position); position += UVIntTool.numBytes(numUniqueTags); } //TODO method that can read directly from ByteBuffer instead of InputStream /*************** methods *************************/ public int getKeyValueTypeWidth() { return allSameType ? 0 : 1; } public byte getIncludesMvccVersionByte() { return includesMvccVersion ? (byte) 1 : (byte) 0; } public void setIncludesMvccVersion(byte includesMvccVersionByte) { includesMvccVersion = includesMvccVersionByte != 0; } public byte getAllSameTypeByte() { return allSameType ? (byte) 1 : (byte) 0; } public void setAllSameType(byte allSameTypeByte) { allSameType = allSameTypeByte != 0; } public boolean isAllSameTimestamp() { return timestampIndexWidth == 0; } public boolean isAllSameMvccVersion() { return mvccVersionIndexWidth == 0; } public void setTimestampFields(LongEncoder encoder){ this.minTimestamp = encoder.getMin(); this.timestampIndexWidth = encoder.getBytesPerIndex(); this.timestampDeltaWidth = encoder.getBytesPerDelta(); this.numTimestampBytes = encoder.getTotalCompressedBytes(); } public void setMvccVersionFields(LongEncoder encoder){ this.minMvccVersion = encoder.getMin(); this.mvccVersionIndexWidth = encoder.getBytesPerIndex(); this.mvccVersionDeltaWidth = encoder.getBytesPerDelta(); this.numMvccVersionBytes = encoder.getTotalCompressedBytes(); } /*************** Object methods *************************/ /** * Generated by Eclipse */ @Override public boolean equals(Object obj) { if (this == obj) return true; if (obj == null) return false; if (getClass() != obj.getClass()) return false; PrefixTreeBlockMeta other = (PrefixTreeBlockMeta) obj; if (allSameType != other.allSameType) return false; if (allTypes != other.allTypes) return false; if (bufferOffset != other.bufferOffset) return false; if (valueLengthWidth != other.valueLengthWidth) return false; if (valueOffsetWidth != other.valueOffsetWidth) return false; if (familyOffsetWidth != other.familyOffsetWidth) return false; if (includesMvccVersion != other.includesMvccVersion) return false; if (maxQualifierLength != other.maxQualifierLength) return false; if (maxTagsLength != other.maxTagsLength) return false; if (maxRowLength != other.maxRowLength) return false; if (mvccVersionDeltaWidth != other.mvccVersionDeltaWidth) return false; if (mvccVersionIndexWidth != other.mvccVersionIndexWidth) return false; if (minMvccVersion != other.minMvccVersion) return false; if (minTimestamp != other.minTimestamp) return false; if (nextNodeOffsetWidth != other.nextNodeOffsetWidth) return false; if (numValueBytes != other.numValueBytes) return false; if (numFamilyBytes != other.numFamilyBytes) return false; if (numMvccVersionBytes != other.numMvccVersionBytes) return false; if (numMetaBytes != other.numMetaBytes) return false; if (numQualifierBytes != other.numQualifierBytes) return false; if (numTagsBytes != other.numTagsBytes) return false; if (numRowBytes != other.numRowBytes) return false; if (numTimestampBytes != other.numTimestampBytes) return false; if (numUniqueFamilies != other.numUniqueFamilies) return false; if (numUniqueQualifiers != other.numUniqueQualifiers) return false; if (numUniqueTags != other.numUniqueTags) return false; if (numUniqueRows != other.numUniqueRows) return false; if (numKeyValueBytes != other.numKeyValueBytes) return false; if (qualifierOffsetWidth != other.qualifierOffsetWidth) return false; if(tagsOffsetWidth != other.tagsOffsetWidth) return false; if (rowTreeDepth != other.rowTreeDepth) return false; if (timestampDeltaWidth != other.timestampDeltaWidth) return false; if (timestampIndexWidth != other.timestampIndexWidth) return false; if (version != other.version) return false; return true; } /** * Generated by Eclipse */ @Override public int hashCode() { final int prime = 31; int result = 1; result = prime * result + (allSameType ? 1231 : 1237); result = prime * result + allTypes; result = prime * result + bufferOffset; result = prime * result + valueLengthWidth; result = prime * result + valueOffsetWidth; result = prime * result + familyOffsetWidth; result = prime * result + (includesMvccVersion ? 1231 : 1237); result = prime * result + maxQualifierLength; result = prime * result + maxTagsLength; result = prime * result + maxRowLength; result = prime * result + mvccVersionDeltaWidth; result = prime * result + mvccVersionIndexWidth; result = prime * result + (int) (minMvccVersion ^ (minMvccVersion >>> 32)); result = prime * result + (int) (minTimestamp ^ (minTimestamp >>> 32)); result = prime * result + nextNodeOffsetWidth; result = prime * result + numValueBytes; result = prime * result + numFamilyBytes; result = prime * result + numMvccVersionBytes; result = prime * result + numMetaBytes; result = prime * result + numQualifierBytes; result = prime * result + numTagsBytes; result = prime * result + numRowBytes; result = prime * result + numTimestampBytes; result = prime * result + numUniqueFamilies; result = prime * result + numUniqueQualifiers; result = prime * result + numUniqueTags; result = prime * result + numUniqueRows; result = prime * result + numKeyValueBytes; result = prime * result + qualifierOffsetWidth; result = prime * result + tagsOffsetWidth; result = prime * result + rowTreeDepth; result = prime * result + timestampDeltaWidth; result = prime * result + timestampIndexWidth; result = prime * result + version; return result; } /** * Generated by Eclipse */ @Override public String toString() { StringBuilder builder = new StringBuilder(); builder.append("PtBlockMeta [bufferOffset="); builder.append(bufferOffset); builder.append(", version="); builder.append(version); builder.append(", numMetaBytes="); builder.append(numMetaBytes); builder.append(", numKeyValueBytes="); builder.append(numKeyValueBytes); builder.append(", includesMvccVersion="); builder.append(includesMvccVersion); builder.append(", numRowBytes="); builder.append(numRowBytes); builder.append(", numFamilyBytes="); builder.append(numFamilyBytes); builder.append(", numQualifierBytes="); builder.append(numQualifierBytes); builder.append(", numTimestampBytes="); builder.append(numTimestampBytes); builder.append(", numMvccVersionBytes="); builder.append(numMvccVersionBytes); builder.append(", numValueBytes="); builder.append(numValueBytes); builder.append(", numTagBytes="); builder.append(numTagsBytes); builder.append(", nextNodeOffsetWidth="); builder.append(nextNodeOffsetWidth); builder.append(", familyOffsetWidth="); builder.append(familyOffsetWidth); builder.append(", qualifierOffsetWidth="); builder.append(qualifierOffsetWidth); builder.append(", tagOffsetWidth="); builder.append(tagsOffsetWidth); builder.append(", timestampIndexWidth="); builder.append(timestampIndexWidth); builder.append(", mvccVersionIndexWidth="); builder.append(mvccVersionIndexWidth); builder.append(", valueOffsetWidth="); builder.append(valueOffsetWidth); builder.append(", valueLengthWidth="); builder.append(valueLengthWidth); builder.append(", rowTreeDepth="); builder.append(rowTreeDepth); builder.append(", maxRowLength="); builder.append(maxRowLength); builder.append(", maxQualifierLength="); builder.append(maxQualifierLength); builder.append(", maxTagLength="); builder.append(maxTagsLength); builder.append(", minTimestamp="); builder.append(minTimestamp); builder.append(", timestampDeltaWidth="); builder.append(timestampDeltaWidth); builder.append(", minMvccVersion="); builder.append(minMvccVersion); builder.append(", mvccVersionDeltaWidth="); builder.append(mvccVersionDeltaWidth); builder.append(", allSameType="); builder.append(allSameType); builder.append(", allTypes="); builder.append(allTypes); builder.append(", numUniqueRows="); builder.append(numUniqueRows); builder.append(", numUniqueFamilies="); builder.append(numUniqueFamilies); builder.append(", numUniqueQualifiers="); builder.append(numUniqueQualifiers); builder.append(", numUniqueTags="); builder.append(numUniqueTags); builder.append("]"); return builder.toString(); } /************** absolute getters *******************/ public int getAbsoluteRowOffset() { return getBufferOffset() + numMetaBytes; } public int getAbsoluteFamilyOffset() { return getAbsoluteRowOffset() + numRowBytes; } public int getAbsoluteQualifierOffset() { return getAbsoluteFamilyOffset() + numFamilyBytes; } public int getAbsoluteTagsOffset() { return getAbsoluteQualifierOffset() + numQualifierBytes; } public int getAbsoluteTimestampOffset() { return getAbsoluteTagsOffset() + numTagsBytes; } public int getAbsoluteMvccVersionOffset() { return getAbsoluteTimestampOffset() + numTimestampBytes; } public int getAbsoluteValueOffset() { return getAbsoluteMvccVersionOffset() + numMvccVersionBytes; } /*************** get/set ***************************/ public int getTimestampDeltaWidth() { return timestampDeltaWidth; } public void setTimestampDeltaWidth(int timestampDeltaWidth) { this.timestampDeltaWidth = timestampDeltaWidth; } public int getValueOffsetWidth() { return valueOffsetWidth; } public int getTagsOffsetWidth() { return tagsOffsetWidth; } public void setValueOffsetWidth(int dataOffsetWidth) { this.valueOffsetWidth = dataOffsetWidth; } public void setTagsOffsetWidth(int dataOffsetWidth) { this.tagsOffsetWidth = dataOffsetWidth; } public int getValueLengthWidth() { return valueLengthWidth; } public void setValueLengthWidth(int dataLengthWidth) { this.valueLengthWidth = dataLengthWidth; } public int getMaxRowLength() { return maxRowLength; } public void setMaxRowLength(int maxRowLength) { this.maxRowLength = maxRowLength; } public long getMinTimestamp() { return minTimestamp; } public void setMinTimestamp(long minTimestamp) { this.minTimestamp = minTimestamp; } public byte getAllTypes() { return allTypes; } public void setAllTypes(byte allTypes) { this.allTypes = allTypes; } public boolean isAllSameType() { return allSameType; } public void setAllSameType(boolean allSameType) { this.allSameType = allSameType; } public int getNextNodeOffsetWidth() { return nextNodeOffsetWidth; } public void setNextNodeOffsetWidth(int nextNodeOffsetWidth) { this.nextNodeOffsetWidth = nextNodeOffsetWidth; } public int getNumRowBytes() { return numRowBytes; } public void setNumRowBytes(int numRowBytes) { this.numRowBytes = numRowBytes; } public int getNumTimestampBytes() { return numTimestampBytes; } public void setNumTimestampBytes(int numTimestampBytes) { this.numTimestampBytes = numTimestampBytes; } public int getNumValueBytes() { return numValueBytes; } public int getNumTagsBytes() { return numTagsBytes; } public void setNumTagsBytes(int numTagBytes){ this.numTagsBytes = numTagBytes; } public void setNumValueBytes(int numValueBytes) { this.numValueBytes = numValueBytes; } public int getNumMetaBytes() { return numMetaBytes; } public void setNumMetaBytes(int numMetaBytes) { this.numMetaBytes = numMetaBytes; } public int getBufferOffset() { return bufferOffset; } public void setBufferOffset(int bufferOffset) { this.bufferOffset = bufferOffset; } public int getNumKeyValueBytes() { return numKeyValueBytes; } public void setNumKeyValueBytes(int numKeyValueBytes) { this.numKeyValueBytes = numKeyValueBytes; } public int getRowTreeDepth() { return rowTreeDepth; } public void setRowTreeDepth(int rowTreeDepth) { this.rowTreeDepth = rowTreeDepth; } public int getNumMvccVersionBytes() { return numMvccVersionBytes; } public void setNumMvccVersionBytes(int numMvccVersionBytes) { this.numMvccVersionBytes = numMvccVersionBytes; } public int getMvccVersionDeltaWidth() { return mvccVersionDeltaWidth; } public void setMvccVersionDeltaWidth(int mvccVersionDeltaWidth) { this.mvccVersionDeltaWidth = mvccVersionDeltaWidth; } public long getMinMvccVersion() { return minMvccVersion; } public void setMinMvccVersion(long minMvccVersion) { this.minMvccVersion = minMvccVersion; } public int getNumFamilyBytes() { return numFamilyBytes; } public void setNumFamilyBytes(int numFamilyBytes) { this.numFamilyBytes = numFamilyBytes; } public int getFamilyOffsetWidth() { return familyOffsetWidth; } public void setFamilyOffsetWidth(int familyOffsetWidth) { this.familyOffsetWidth = familyOffsetWidth; } public int getNumUniqueRows() { return numUniqueRows; } public void setNumUniqueRows(int numUniqueRows) { this.numUniqueRows = numUniqueRows; } public int getNumUniqueFamilies() { return numUniqueFamilies; } public void setNumUniqueFamilies(int numUniqueFamilies) { this.numUniqueFamilies = numUniqueFamilies; } public int getNumUniqueQualifiers() { return numUniqueQualifiers; } public void setNumUniqueQualifiers(int numUniqueQualifiers) { this.numUniqueQualifiers = numUniqueQualifiers; } public void setNumUniqueTags(int numUniqueTags) { this.numUniqueTags = numUniqueTags; } public int getNumUniqueTags() { return numUniqueTags; } public int getNumQualifierBytes() { return numQualifierBytes; } public void setNumQualifierBytes(int numQualifierBytes) { this.numQualifierBytes = numQualifierBytes; } public int getQualifierOffsetWidth() { return qualifierOffsetWidth; } public void setQualifierOffsetWidth(int qualifierOffsetWidth) { this.qualifierOffsetWidth = qualifierOffsetWidth; } public int getMaxQualifierLength() { return maxQualifierLength; } // TODO : decide on some max value for this ? INTEGER_MAX? public void setMaxQualifierLength(int maxQualifierLength) { this.maxQualifierLength = maxQualifierLength; } public int getMaxTagsLength() { return this.maxTagsLength; } public void setMaxTagsLength(int maxTagLength) { this.maxTagsLength = maxTagLength; } public int getTimestampIndexWidth() { return timestampIndexWidth; } public void setTimestampIndexWidth(int timestampIndexWidth) { this.timestampIndexWidth = timestampIndexWidth; } public int getMvccVersionIndexWidth() { return mvccVersionIndexWidth; } public void setMvccVersionIndexWidth(int mvccVersionIndexWidth) { this.mvccVersionIndexWidth = mvccVersionIndexWidth; } public int getVersion() { return version; } public void setVersion(int version) { this.version = version; } public boolean isIncludesMvccVersion() { return includesMvccVersion; } public void setIncludesMvccVersion(boolean includesMvccVersion) { this.includesMvccVersion = includesMvccVersion; } }