diff --git a/hbase-common/src/main/java/org/apache/hadoop/hbase/KeyValue.java b/hbase-common/src/main/java/org/apache/hadoop/hbase/KeyValue.java index bbfe9a65cdf..6649e568ecc 100644 --- a/hbase-common/src/main/java/org/apache/hadoop/hbase/KeyValue.java +++ b/hbase-common/src/main/java/org/apache/hadoop/hbase/KeyValue.java @@ -69,9 +69,6 @@ import com.google.common.primitives.Longs; public class KeyValue implements Cell, HeapSize, Cloneable { static final Log LOG = LogFactory.getLog(KeyValue.class); - private static final int META_LENGTH = - TableName.META_TABLE_NAME.getName().length; // 'hbase.meta' length - // TODO: Group Key-only comparators and operations into a Key class, just // for neatness sake, if can figure what to call it. @@ -106,18 +103,6 @@ public class KeyValue implements Cell, HeapSize, Cloneable { */ public static final KeyComparator META_KEY_COMPARATOR = new MetaKeyComparator(); - /** - * A {@link KVComparator} for -ROOT- catalog table - * {@link KeyValue}s. - */ - public static final KVComparator ROOT_COMPARATOR = new RootComparator(); - - /** - * A {@link KVComparator} for -ROOT- catalog table - * {@link KeyValue} keys. - */ - public static final KeyComparator ROOT_KEY_COMPARATOR = new RootKeyComparator(); - /** * Get the appropriate row comparator for the specified table. * @@ -128,10 +113,7 @@ public class KeyValue implements Cell, HeapSize, Cloneable { * @return The comparator. */ public static KeyComparator getRowComparator(TableName tableName) { - if(TableName.ROOT_TABLE_NAME.equals(tableName)) { - return ROOT_COMPARATOR.getRawComparator(); - } - if(TableName.META_TABLE_NAME.equals(tableName)) { + if(TableName.META_TABLE_NAME.equals(tableName)) { return META_COMPARATOR.getRawComparator(); } return COMPARATOR.getRawComparator(); @@ -1782,23 +1764,6 @@ public class KeyValue implements Cell, HeapSize, Cloneable { return result; } - /** - * A {@link KVComparator} for -ROOT- catalog table - * {@link KeyValue}s. - */ - public static class RootComparator extends MetaComparator { - private final KeyComparator rawcomparator = new RootKeyComparator(); - - public KeyComparator getRawComparator() { - return this.rawcomparator; - } - - @Override - protected Object clone() throws CloneNotSupportedException { - return new RootComparator(); - } - } - /** * A {@link KVComparator} for .META. catalog table * {@link KeyValue}s. @@ -1840,7 +1805,7 @@ public class KeyValue implements Cell, HeapSize, Cloneable { right.getKeyLength()); if (ret != 0) return ret; // Negate this comparison so later edits show up first - return -Longs.compare(left.getMemstoreTS(), right.getMemstoreTS()); + return -Longs.compare(left.getMvccVersion(), right.getMvccVersion()); } public int compareTimestamps(final KeyValue left, final KeyValue right) { @@ -2000,33 +1965,6 @@ public class KeyValue implements Cell, HeapSize, Cloneable { return new KVComparator(); } - /** - * @return Comparator that ignores timestamps; useful counting versions. - */ - public KVComparator getComparatorIgnoringTimestamps() { - KVComparator c = null; - try { - c = (KVComparator)this.clone(); - c.getRawComparator().ignoreTimestamp = true; - } catch (CloneNotSupportedException e) { - LOG.error("Not supported", e); - } - return c; - } - - /** - * @return Comparator that ignores key type; useful checking deletes - */ - public KVComparator getComparatorIgnoringType() { - KVComparator c = null; - try { - c = (KVComparator)this.clone(); - c.getRawComparator().ignoreType = true; - } catch (CloneNotSupportedException e) { - LOG.error("Not supported", e); - } - return c; - } } /** @@ -2393,49 +2331,6 @@ public class KeyValue implements Cell, HeapSize, Cloneable { return length + Bytes.SIZEOF_INT; } - /** - * Compare key portion of a {@link KeyValue} for keys in -ROOT- - * table. - */ - public static class RootKeyComparator extends MetaKeyComparator { - public int compareRows(byte [] left, int loffset, int llength, - byte [] right, int roffset, int rlength) { - // Rows look like this: .META.,ROW_FROM_META,RID - // LOG.info("ROOT " + Bytes.toString(left, loffset, llength) + - // "---" + Bytes.toString(right, roffset, rlength)); - int lmetaOffsetPlusDelimiter = loffset + META_LENGTH + 1; - int leftFarDelimiter = getDelimiterInReverse(left, - lmetaOffsetPlusDelimiter, - llength - META_LENGTH - 1, HConstants.DELIMITER); - int rmetaOffsetPlusDelimiter = roffset + META_LENGTH + 1; - int rightFarDelimiter = getDelimiterInReverse(right, - rmetaOffsetPlusDelimiter, rlength - META_LENGTH - 1, - HConstants.DELIMITER); - if (leftFarDelimiter < 0 && rightFarDelimiter >= 0) { - // Nothing between .META. and regionid. Its first key. - return -1; - } else if (rightFarDelimiter < 0 && leftFarDelimiter >= 0) { - return 1; - } else if (leftFarDelimiter < 0 && rightFarDelimiter < 0) { - return 0; - } - int result = super.compareRows(left, lmetaOffsetPlusDelimiter, - leftFarDelimiter - lmetaOffsetPlusDelimiter, - right, rmetaOffsetPlusDelimiter, - rightFarDelimiter - rmetaOffsetPlusDelimiter); - if (result != 0) { - return result; - } - // Compare last part of row, the rowid. - leftFarDelimiter++; - rightFarDelimiter++; - result = compareRowid(left, leftFarDelimiter, - llength - (leftFarDelimiter - loffset), - right, rightFarDelimiter, rlength - (rightFarDelimiter - roffset)); - return result; - } - } - /** * Comparator that compares row component only of a KeyValue. */ @@ -2532,8 +2427,6 @@ public class KeyValue implements Cell, HeapSize, Cloneable { */ public static class KeyComparator implements RawComparator, SamePrefixComparator { - volatile boolean ignoreTimestamp = false; - volatile boolean ignoreType = false; public int compare(byte[] left, int loffset, int llength, byte[] right, int roffset, int rlength) { @@ -2672,26 +2565,21 @@ public class KeyValue implements Cell, HeapSize, Cloneable { private int compareTimestampAndType(byte[] left, int loffset, int llength, byte[] right, int roffset, int rlength, byte ltype, byte rtype) { int compare; - if (!this.ignoreTimestamp) { - // Get timestamps. - long ltimestamp = Bytes.toLong(left, - loffset + (llength - TIMESTAMP_TYPE_SIZE)); - long rtimestamp = Bytes.toLong(right, - roffset + (rlength - TIMESTAMP_TYPE_SIZE)); - compare = compareTimestamps(ltimestamp, rtimestamp); - if (compare != 0) { - return compare; - } + // Get timestamps. + long ltimestamp = Bytes.toLong(left, + loffset + (llength - TIMESTAMP_TYPE_SIZE)); + long rtimestamp = Bytes.toLong(right, + roffset + (rlength - TIMESTAMP_TYPE_SIZE)); + compare = compareTimestamps(ltimestamp, rtimestamp); + if (compare != 0) { + return compare; } - if (!this.ignoreType) { - // Compare types. Let the delete types sort ahead of puts; i.e. types - // of higher numbers sort before those of lesser numbers. Maximum (255) - // appears ahead of everything, and minimum (0) appears after - // everything. - return (0xff & rtype) - (0xff & ltype); - } - return 0; + // Compare types. Let the delete types sort ahead of puts; i.e. types + // of higher numbers sort before those of lesser numbers. Maximum (255) + // appears ahead of everything, and minimum (0) appears after + // everything. + return (0xff & rtype) - (0xff & ltype); } public int compare(byte[] left, byte[] right) { diff --git a/hbase-common/src/main/java/org/apache/hadoop/hbase/io/encoding/BufferedDataBlockEncoder.java b/hbase-common/src/main/java/org/apache/hadoop/hbase/io/encoding/BufferedDataBlockEncoder.java index a513584b3ad..af5fb2615d0 100644 --- a/hbase-common/src/main/java/org/apache/hadoop/hbase/io/encoding/BufferedDataBlockEncoder.java +++ b/hbase-common/src/main/java/org/apache/hadoop/hbase/io/encoding/BufferedDataBlockEncoder.java @@ -167,7 +167,7 @@ abstract class BufferedDataBlockEncoder implements DataBlockEncoder { public KeyValue getKeyValue() { ByteBuffer kvBuf = getKeyValueBuffer(); KeyValue kv = new KeyValue(kvBuf.array(), kvBuf.arrayOffset()); - kv.setMemstoreTS(current.memstoreTS); + kv.setMvccVersion(current.memstoreTS); return kv; } diff --git a/hbase-common/src/main/java/org/apache/hadoop/hbase/util/test/RedundantKVGenerator.java b/hbase-common/src/main/java/org/apache/hadoop/hbase/util/test/RedundantKVGenerator.java index e3cf8378a0b..fce7283fd2e 100644 --- a/hbase-common/src/main/java/org/apache/hadoop/hbase/util/test/RedundantKVGenerator.java +++ b/hbase-common/src/main/java/org/apache/hadoop/hbase/util/test/RedundantKVGenerator.java @@ -284,7 +284,7 @@ public class RedundantKVGenerator { for (KeyValue kv : keyValues) { totalSize += kv.getLength(); if (includesMemstoreTS) { - totalSize += WritableUtils.getVIntSize(kv.getMemstoreTS()); + totalSize += WritableUtils.getVIntSize(kv.getMvccVersion()); } } @@ -292,7 +292,7 @@ public class RedundantKVGenerator { for (KeyValue kv : keyValues) { result.put(kv.getBuffer(), kv.getOffset(), kv.getLength()); if (includesMemstoreTS) { - ByteBufferUtils.writeVLong(result, kv.getMemstoreTS()); + ByteBufferUtils.writeVLong(result, kv.getMvccVersion()); } } diff --git a/hbase-common/src/test/java/org/apache/hadoop/hbase/TestKeyValue.java b/hbase-common/src/test/java/org/apache/hadoop/hbase/TestKeyValue.java index 45f6e6c3b82..2c0b7cb7d84 100644 --- a/hbase-common/src/test/java/org/apache/hadoop/hbase/TestKeyValue.java +++ b/hbase-common/src/test/java/org/apache/hadoop/hbase/TestKeyValue.java @@ -128,28 +128,14 @@ public class TestKeyValue extends TestCase { } public void testMoreComparisons() throws Exception { - // Root compares long now = System.currentTimeMillis(); - KeyValue a = new KeyValue( - Bytes.toBytes(TableName.META_TABLE_NAME.getNameAsString()+",,99999999999999"), now); - KeyValue b = new KeyValue( - Bytes.toBytes(TableName.META_TABLE_NAME.getNameAsString()+",,1"), now); - KVComparator c = new KeyValue.RootComparator(); - assertTrue(c.compare(b, a) < 0); - KeyValue aa = new KeyValue( - Bytes.toBytes(TableName.META_TABLE_NAME.getNameAsString()+",,1"), now); - KeyValue bb = new KeyValue( - Bytes.toBytes(TableName.META_TABLE_NAME.getNameAsString()+",,1"), - Bytes.toBytes("info"), Bytes.toBytes("regioninfo"), 1235943454602L, - (byte[])null); - assertTrue(c.compare(aa, bb) < 0); // Meta compares KeyValue aaa = new KeyValue( Bytes.toBytes("TestScanMultipleVersions,row_0500,1236020145502"), now); KeyValue bbb = new KeyValue( Bytes.toBytes("TestScanMultipleVersions,,99999999999999"), now); - c = new KeyValue.MetaComparator(); + KVComparator c = new KeyValue.MetaComparator(); assertTrue(c.compare(bbb, aaa) < 0); KeyValue aaaa = new KeyValue(Bytes.toBytes("TestScanMultipleVersions,,1236023996656"), @@ -166,7 +152,6 @@ public class TestKeyValue extends TestCase { assertTrue(c.compare(x, y) < 0); comparisons(new KeyValue.MetaComparator()); comparisons(new KeyValue.KVComparator()); - metacomparisons(new KeyValue.RootComparator()); metacomparisons(new KeyValue.MetaComparator()); } @@ -217,13 +202,6 @@ public class TestKeyValue extends TestCase { Bytes.toBytes("fam"), Bytes.toBytes(""), Long.MAX_VALUE, (byte[])null); assertTrue(KeyValue.META_COMPARATOR.compare(rowA, rowB) < 0); - rowA = new KeyValue( - Bytes.toBytes(TableName.META_TABLE_NAME.getNameAsString()+",testtable,www.hbase.org/,1234,4321"), - Bytes.toBytes("fam"), Bytes.toBytes(""), Long.MAX_VALUE, (byte[])null); - rowB = new KeyValue( - Bytes.toBytes(TableName.META_TABLE_NAME.getNameAsString()+",testtable,www.hbase.org/%20,99999,99999"), - Bytes.toBytes("fam"), Bytes.toBytes(""), Long.MAX_VALUE, (byte[])null); - assertTrue(KeyValue.ROOT_COMPARATOR.compare(rowA, rowB) < 0); } private void metacomparisons(final KeyValue.MetaComparator c) { @@ -296,41 +274,6 @@ public class TestKeyValue extends TestCase { for (KeyValue k: set) { assertTrue(count++ == k.getTimestamp()); } - // Make up -ROOT- table keys. - KeyValue [] rootKeys = { - new KeyValue(Bytes.toBytes(TableName.META_TABLE_NAME.getNameAsString()+",aaaaa,\u0000\u0000,0,2"), fam, qf, 2, nb), - new KeyValue(Bytes.toBytes(TableName.META_TABLE_NAME.getNameAsString()+",aaaaa,\u0001,0,3"), fam, qf, 3, nb), - new KeyValue(Bytes.toBytes(TableName.META_TABLE_NAME.getNameAsString()+",aaaaa,,0,1"), fam, qf, 1, nb), - new KeyValue(Bytes.toBytes(TableName.META_TABLE_NAME.getNameAsString()+",aaaaa,\u1000,0,5"), fam, qf, 5, nb), - new KeyValue(Bytes.toBytes(TableName.META_TABLE_NAME.getNameAsString()+",aaaaa,a,0,4"), fam, qf, 4, nb), - new KeyValue(Bytes.toBytes(TableName.META_TABLE_NAME.getNameAsString()+",,0"), fam, qf, 0, nb), - }; - // This will output the keys incorrectly. - set = new TreeSet(new KeyValue.MetaComparator()); - // Add to set with bad comparator - for (int i = 0; i < keys.length; i++) { - set.add(rootKeys[i]); - } - assertion = false; - count = 0; - try { - for (KeyValue k: set) { - assertTrue(count++ == k.getTimestamp()); - } - } catch (junit.framework.AssertionFailedError e) { - // Expected - assertion = true; - } - // Now with right comparator - set = new TreeSet(new KeyValue.RootComparator()); - // Add to set with bad comparator - for (int i = 0; i < keys.length; i++) { - set.add(rootKeys[i]); - } - count = 0; - for (KeyValue k: set) { - assertTrue(count++ == k.getTimestamp()); - } } public void testStackedUpKeyValue() { @@ -559,14 +502,10 @@ public class TestKeyValue extends TestCase { assertTrue(newKeyValue.getTimestamp() == HConstants.LATEST_TIMESTAMP); assertTrue(newKeyValue.getType() == Type.Maximum.getCode()); - //verify root/metaKeyComparator's getShortMidpointKey output - final KeyComparator rootKeyComparator = new KeyValue.RootKeyComparator(); + //verify metaKeyComparator's getShortMidpointKey output final KeyComparator metaKeyComparator = new KeyValue.MetaKeyComparator(); kv1 = new KeyValue(Bytes.toBytes("ilovehbase123"), family, qualA, 5, Type.Put); kv2 = new KeyValue(Bytes.toBytes("ilovehbase234"), family, qualA, 0, Type.Put); - newKey = rootKeyComparator.getShortMidpointKey(kv1.getKey(), kv2.getKey()); - assertTrue(rootKeyComparator.compare(kv1.getKey(), newKey) < 0); - assertTrue(rootKeyComparator.compare(newKey, kv2.getKey()) == 0); newKey = metaKeyComparator.getShortMidpointKey(kv1.getKey(), kv2.getKey()); assertTrue(metaKeyComparator.compare(kv1.getKey(), newKey) < 0); assertTrue(metaKeyComparator.compare(newKey, kv2.getKey()) == 0); diff --git a/hbase-prefix-tree/src/main/java/org/apache/hadoop/hbase/codec/prefixtree/PrefixTreeCodec.java b/hbase-prefix-tree/src/main/java/org/apache/hadoop/hbase/codec/prefixtree/PrefixTreeCodec.java index 2aa5a2b3496..7ee4bc85ac6 100644 --- a/hbase-prefix-tree/src/main/java/org/apache/hadoop/hbase/codec/prefixtree/PrefixTreeCodec.java +++ b/hbase-prefix-tree/src/main/java/org/apache/hadoop/hbase/codec/prefixtree/PrefixTreeCodec.java @@ -27,7 +27,6 @@ import org.apache.hadoop.classification.InterfaceAudience; import org.apache.hadoop.hbase.KeyValue; import org.apache.hadoop.hbase.KeyValue.KeyComparator; import org.apache.hadoop.hbase.KeyValue.MetaKeyComparator; -import org.apache.hadoop.hbase.KeyValue.RootKeyComparator; import org.apache.hadoop.hbase.KeyValueUtil; import org.apache.hadoop.hbase.codec.prefixtree.decode.DecoderFactory; import org.apache.hadoop.hbase.codec.prefixtree.decode.PrefixTreeArraySearcher; @@ -198,10 +197,6 @@ public class PrefixTreeCodec implements DataBlockEncoder{ throw new IllegalArgumentException("DataBlockEncoding.PREFIX_TREE not compatible with META " +"table"); } - if(comparator instanceof RootKeyComparator){ - throw new IllegalArgumentException("DataBlockEncoding.PREFIX_TREE not compatible with ROOT " - +"table"); - } return new PrefixTreeSeeker(includesMvccVersion); } diff --git a/hbase-server/src/main/java/org/apache/hadoop/hbase/io/hfile/HFileReaderV2.java b/hbase-server/src/main/java/org/apache/hadoop/hbase/io/hfile/HFileReaderV2.java index 618c024988a..97a726fa483 100644 --- a/hbase-server/src/main/java/org/apache/hadoop/hbase/io/hfile/HFileReaderV2.java +++ b/hbase-server/src/main/java/org/apache/hadoop/hbase/io/hfile/HFileReaderV2.java @@ -612,7 +612,7 @@ public class HFileReaderV2 extends AbstractHFileReader { KEY_VALUE_LEN_SIZE + currKeyLen + currValueLen, currKeyLen); if (this.reader.shouldIncludeMemstoreTS()) { - ret.setMemstoreTS(currMemstoreTS); + ret.setMvccVersion(currMemstoreTS); } return ret; } diff --git a/hbase-server/src/main/java/org/apache/hadoop/hbase/io/hfile/HFileWriterV2.java b/hbase-server/src/main/java/org/apache/hadoop/hbase/io/hfile/HFileWriterV2.java index d659d1908a5..14cbaa9be06 100644 --- a/hbase-server/src/main/java/org/apache/hadoop/hbase/io/hfile/HFileWriterV2.java +++ b/hbase-server/src/main/java/org/apache/hadoop/hbase/io/hfile/HFileWriterV2.java @@ -290,9 +290,9 @@ public class HFileWriterV2 extends AbstractHFileWriter { */ @Override public void append(final KeyValue kv) throws IOException { - append(kv.getMemstoreTS(), kv.getBuffer(), kv.getKeyOffset(), kv.getKeyLength(), + append(kv.getMvccVersion(), kv.getBuffer(), kv.getKeyOffset(), kv.getKeyLength(), kv.getBuffer(), kv.getValueOffset(), kv.getValueLength()); - this.maxMemstoreTS = Math.max(this.maxMemstoreTS, kv.getMemstoreTS()); + this.maxMemstoreTS = Math.max(this.maxMemstoreTS, kv.getMvccVersion()); } /** diff --git a/hbase-server/src/main/java/org/apache/hadoop/hbase/regionserver/HRegion.java b/hbase-server/src/main/java/org/apache/hadoop/hbase/regionserver/HRegion.java index 2b72887a9fa..a5b396f495f 100644 --- a/hbase-server/src/main/java/org/apache/hadoop/hbase/regionserver/HRegion.java +++ b/hbase-server/src/main/java/org/apache/hadoop/hbase/regionserver/HRegion.java @@ -2623,7 +2623,7 @@ public class HRegion implements HeapSize { // , Writable{ Store store = getStore(family); for (Cell cell: cells) { KeyValue kv = KeyValueUtil.ensureKeyValue(cell); - kv.setMemstoreTS(localizedWriteEntry.getWriteNumber()); + kv.setMvccVersion(localizedWriteEntry.getWriteNumber()); size += store.add(kv); } } @@ -4514,7 +4514,7 @@ public class HRegion implements HeapSize { // , Writable{ writeEntry = mvcc.beginMemstoreInsert(); // 6. Apply to memstore for (KeyValue kv : mutations) { - kv.setMemstoreTS(writeEntry.getWriteNumber()); + kv.setMvccVersion(writeEntry.getWriteNumber()); byte[] family = kv.getFamily(); checkFamily(family); addedSize += stores.get(family).add(kv); @@ -4730,7 +4730,7 @@ public class HRegion implements HeapSize { // , Writable{ newKV.getBuffer(), newKV.getQualifierOffset(), kv.getQualifierLength()); - newKV.setMemstoreTS(w.getWriteNumber()); + newKV.setMvccVersion(w.getWriteNumber()); kvs.add(newKV); // Append update to WAL @@ -4880,7 +4880,7 @@ public class HRegion implements HeapSize { // , Writable{ // Append new incremented KeyValue to list KeyValue newKV = new KeyValue(row, family.getKey(), qualifier, now, Bytes.toBytes(amount)); - newKV.setMemstoreTS(w.getWriteNumber()); + newKV.setMvccVersion(w.getWriteNumber()); kvs.add(newKV); // Prepare WAL updates diff --git a/hbase-server/src/main/java/org/apache/hadoop/hbase/regionserver/MemStore.java b/hbase-server/src/main/java/org/apache/hadoop/hbase/regionserver/MemStore.java index ca34ce43e4f..02da621565f 100644 --- a/hbase-server/src/main/java/org/apache/hadoop/hbase/regionserver/MemStore.java +++ b/hbase-server/src/main/java/org/apache/hadoop/hbase/regionserver/MemStore.java @@ -82,12 +82,6 @@ public class MemStore implements HeapSize { final KeyValue.KVComparator comparator; - // Used comparing versions -- same r/c and ts but different type. - final KeyValue.KVComparator comparatorIgnoreType; - - // Used comparing versions -- same r/c and type but different timestamp. - final KeyValue.KVComparator comparatorIgnoreTimestamp; - // Used to track own heapSize final AtomicLong size; @@ -101,8 +95,6 @@ public class MemStore implements HeapSize { volatile MemStoreLAB allocator; volatile MemStoreLAB snapshotAllocator; - - /** * Default constructor. Used for tests. */ @@ -118,9 +110,6 @@ public class MemStore implements HeapSize { final KeyValue.KVComparator c) { this.conf = conf; this.comparator = c; - this.comparatorIgnoreTimestamp = - this.comparator.getComparatorIgnoringTimestamps(); - this.comparatorIgnoreType = this.comparator.getComparatorIgnoringType(); this.kvset = new KeyValueSkipListSet(c); this.snapshot = new KeyValueSkipListSet(c); timeRangeTracker = new TimeRangeTracker(); @@ -288,7 +277,7 @@ public class MemStore implements HeapSize { assert alloc != null && alloc.getData() != null; System.arraycopy(kv.getBuffer(), kv.getOffset(), alloc.getData(), alloc.getOffset(), len); KeyValue newKv = new KeyValue(alloc.getData(), alloc.getOffset(), len); - newKv.setMemstoreTS(kv.getMemstoreTS()); + newKv.setMvccVersion(kv.getMvccVersion()); return newKv; } @@ -309,12 +298,12 @@ public class MemStore implements HeapSize { // yet started because Store.flush() waits for all rwcc transactions to // commit before starting the flush to disk. KeyValue found = this.snapshot.get(kv); - if (found != null && found.getMemstoreTS() == kv.getMemstoreTS()) { + if (found != null && found.getMvccVersion() == kv.getMvccVersion()) { this.snapshot.remove(kv); } // If the key is in the memstore, delete it. Update this.size. found = this.kvset.get(kv); - if (found != null && found.getMemstoreTS() == kv.getMemstoreTS()) { + if (found != null && found.getMvccVersion() == kv.getMvccVersion()) { removeFromKVSet(kv); long s = heapSizeChange(kv, true); this.size.addAndGet(-s); @@ -623,7 +612,7 @@ public class MemStore implements HeapSize { // check that this is the row and column we are interested in, otherwise bail if (kv.matchingRow(cur) && kv.matchingQualifier(cur)) { // only remove Puts that concurrent scanners cannot possibly see - if (cur.getType() == KeyValue.Type.Put.getCode() && cur.getMemstoreTS() <= readpoint) { + if (cur.getType() == KeyValue.Type.Put.getCode() && cur.getMvccVersion() <= readpoint) { if (versionsVisible > 1) { // if we get here we have seen at least one version visible to the oldest scanner, // which means we can prove that no scanner will see this version @@ -785,7 +774,7 @@ public class MemStore implements HeapSize { try { while (it.hasNext()) { v = it.next(); - if (v.getMemstoreTS() <= readPoint) { + if (v.getMvccVersion() <= readPoint) { return v; } } @@ -969,7 +958,7 @@ public class MemStore implements HeapSize { } public final static long FIXED_OVERHEAD = ClassSize.align( - ClassSize.OBJECT + (13 * ClassSize.REFERENCE) + Bytes.SIZEOF_LONG); + ClassSize.OBJECT + (11 * ClassSize.REFERENCE) + Bytes.SIZEOF_LONG); public final static long DEEP_OVERHEAD = ClassSize.align(FIXED_OVERHEAD + ClassSize.REENTRANT_LOCK + ClassSize.ATOMIC_LONG + diff --git a/hbase-server/src/main/java/org/apache/hadoop/hbase/regionserver/ScanQueryMatcher.java b/hbase-server/src/main/java/org/apache/hadoop/hbase/regionserver/ScanQueryMatcher.java index 87f9b32d4fd..354f5a618a1 100644 --- a/hbase-server/src/main/java/org/apache/hadoop/hbase/regionserver/ScanQueryMatcher.java +++ b/hbase-server/src/main/java/org/apache/hadoop/hbase/regionserver/ScanQueryMatcher.java @@ -316,14 +316,14 @@ public class ScanQueryMatcher { tr.withinTimeRange(timestamp) : tr.withinOrAfterTimeRange(timestamp); if (includeDeleteMarker - && kv.getMemstoreTS() <= maxReadPointToTrackVersions) { + && kv.getMvccVersion() <= maxReadPointToTrackVersions) { this.deletes.add(bytes, offset, qualLength, timestamp, type); } // Can't early out now, because DelFam come before any other keys } if (retainDeletesInOutput || (!isUserScan && (EnvironmentEdgeManager.currentTimeMillis() - timestamp) <= timeToPurgeDeletes) - || kv.getMemstoreTS() > maxReadPointToTrackVersions) { + || kv.getMvccVersion() > maxReadPointToTrackVersions) { // always include or it is not time yet to check whether it is OK // to purge deltes or not if (!isUserScan) { @@ -390,7 +390,7 @@ public class ScanQueryMatcher { } MatchCode colChecker = columns.checkColumn(bytes, offset, qualLength, - timestamp, type, kv.getMemstoreTS() > maxReadPointToTrackVersions); + timestamp, type, kv.getMvccVersion() > maxReadPointToTrackVersions); /* * According to current implementation, colChecker can only be * SEEK_NEXT_COL, SEEK_NEXT_ROW, SKIP or INCLUDE. Therefore, always return diff --git a/hbase-server/src/main/java/org/apache/hadoop/hbase/regionserver/StoreFileScanner.java b/hbase-server/src/main/java/org/apache/hadoop/hbase/regionserver/StoreFileScanner.java index 9b29ad90d9d..e0a3ab885a9 100644 --- a/hbase-server/src/main/java/org/apache/hadoop/hbase/regionserver/StoreFileScanner.java +++ b/hbase-server/src/main/java/org/apache/hadoop/hbase/regionserver/StoreFileScanner.java @@ -183,7 +183,7 @@ public class StoreFileScanner implements KeyValueScanner { // readPoint while(enforceMVCC && cur != null - && (cur.getMemstoreTS() > readPoint)) { + && (cur.getMvccVersion() > readPoint)) { hfs.next(); cur = hfs.getKeyValue(); } @@ -199,8 +199,8 @@ public class StoreFileScanner implements KeyValueScanner { // older KV which was not reset to 0 (because it was // not old enough during flush). Make sure that we set it correctly now, // so that the comparision order does not change. - if (cur.getMemstoreTS() <= readPoint) { - cur.setMemstoreTS(0); + if (cur.getMvccVersion() <= readPoint) { + cur.setMvccVersion(0); } return true; } diff --git a/hbase-server/src/main/java/org/apache/hadoop/hbase/regionserver/StoreFlusher.java b/hbase-server/src/main/java/org/apache/hadoop/hbase/regionserver/StoreFlusher.java index a87e3523c2b..052ef35d62f 100644 --- a/hbase-server/src/main/java/org/apache/hadoop/hbase/regionserver/StoreFlusher.java +++ b/hbase-server/src/main/java/org/apache/hadoop/hbase/regionserver/StoreFlusher.java @@ -126,11 +126,11 @@ s */ // If we know that this KV is going to be included always, then let us // set its memstoreTS to 0. This will help us save space when writing to // disk. - if (kv.getMemstoreTS() <= smallestReadPoint) { + if (kv.getMvccVersion() <= smallestReadPoint) { // let us not change the original KV. It could be in the memstore // changing its memstoreTS could affect other threads/scanners. kv = kv.shallowCopy(); - kv.setMemstoreTS(0); + kv.setMvccVersion(0); } sink.append(kv); flushed += MemStore.heapSizeChange(kv, true); diff --git a/hbase-server/src/main/java/org/apache/hadoop/hbase/regionserver/compactions/Compactor.java b/hbase-server/src/main/java/org/apache/hadoop/hbase/regionserver/compactions/Compactor.java index ddbcb89e61b..26dc4c7f07a 100644 --- a/hbase-server/src/main/java/org/apache/hadoop/hbase/regionserver/compactions/Compactor.java +++ b/hbase-server/src/main/java/org/apache/hadoop/hbase/regionserver/compactions/Compactor.java @@ -205,8 +205,8 @@ public abstract class Compactor { hasMore = scanner.next(kvs, compactionKVMax); // output to writer: for (KeyValue kv : kvs) { - if (kv.getMemstoreTS() <= smallestReadPoint) { - kv.setMemstoreTS(0); + if (kv.getMvccVersion() <= smallestReadPoint) { + kv.setMvccVersion(0); } writer.append(kv); ++progress.currentCompactedKVs; diff --git a/hbase-server/src/test/java/org/apache/hadoop/hbase/regionserver/TestHRegion.java b/hbase-server/src/test/java/org/apache/hadoop/hbase/regionserver/TestHRegion.java index 88d6c3d2a49..84f5a5fcdd9 100644 --- a/hbase-server/src/test/java/org/apache/hadoop/hbase/regionserver/TestHRegion.java +++ b/hbase-server/src/test/java/org/apache/hadoop/hbase/regionserver/TestHRegion.java @@ -3213,9 +3213,9 @@ public class TestHRegion extends HBaseTestCase { if (Bytes.compareTo(previousKV.getValue(), thisValue) != 0) { LOG.warn("These two KV should have the same value." + " Previous KV:" + - previousKV + "(memStoreTS:" + previousKV.getMemstoreTS() + ")" + + previousKV + "(memStoreTS:" + previousKV.getMvccVersion() + ")" + ", New KV: " + - kv + "(memStoreTS:" + kv.getMemstoreTS() + ")" + kv + "(memStoreTS:" + kv.getMvccVersion() + ")" ); assertEquals(0, Bytes.compareTo(previousKV.getValue(), thisValue)); } diff --git a/hbase-server/src/test/java/org/apache/hadoop/hbase/regionserver/TestMemStore.java b/hbase-server/src/test/java/org/apache/hadoop/hbase/regionserver/TestMemStore.java index cff6488c99c..31b4081cc7f 100644 --- a/hbase-server/src/test/java/org/apache/hadoop/hbase/regionserver/TestMemStore.java +++ b/hbase-server/src/test/java/org/apache/hadoop/hbase/regionserver/TestMemStore.java @@ -238,7 +238,7 @@ public class TestMemStore extends TestCase { mvcc.beginMemstoreInsert(); KeyValue kv1 = new KeyValue(row, f, q1, v); - kv1.setMemstoreTS(w.getWriteNumber()); + kv1.setMvccVersion(w.getWriteNumber()); memstore.add(kv1); MultiVersionConsistencyControl.resetThreadReadPoint(mvcc); @@ -253,7 +253,7 @@ public class TestMemStore extends TestCase { w = mvcc.beginMemstoreInsert(); KeyValue kv2 = new KeyValue(row, f, q2, v); - kv2.setMemstoreTS(w.getWriteNumber()); + kv2.setMvccVersion(w.getWriteNumber()); memstore.add(kv2); MultiVersionConsistencyControl.resetThreadReadPoint(mvcc); @@ -286,11 +286,11 @@ public class TestMemStore extends TestCase { mvcc.beginMemstoreInsert(); KeyValue kv11 = new KeyValue(row, f, q1, v1); - kv11.setMemstoreTS(w.getWriteNumber()); + kv11.setMvccVersion(w.getWriteNumber()); memstore.add(kv11); KeyValue kv12 = new KeyValue(row, f, q2, v1); - kv12.setMemstoreTS(w.getWriteNumber()); + kv12.setMvccVersion(w.getWriteNumber()); memstore.add(kv12); mvcc.completeMemstoreInsert(w); @@ -302,11 +302,11 @@ public class TestMemStore extends TestCase { // START INSERT 2: Write both columns val2 w = mvcc.beginMemstoreInsert(); KeyValue kv21 = new KeyValue(row, f, q1, v2); - kv21.setMemstoreTS(w.getWriteNumber()); + kv21.setMvccVersion(w.getWriteNumber()); memstore.add(kv21); KeyValue kv22 = new KeyValue(row, f, q2, v2); - kv22.setMemstoreTS(w.getWriteNumber()); + kv22.setMvccVersion(w.getWriteNumber()); memstore.add(kv22); // BEFORE COMPLETING INSERT 2, SEE FIRST KVS @@ -341,11 +341,11 @@ public class TestMemStore extends TestCase { mvcc.beginMemstoreInsert(); KeyValue kv11 = new KeyValue(row, f, q1, v1); - kv11.setMemstoreTS(w.getWriteNumber()); + kv11.setMvccVersion(w.getWriteNumber()); memstore.add(kv11); KeyValue kv12 = new KeyValue(row, f, q2, v1); - kv12.setMemstoreTS(w.getWriteNumber()); + kv12.setMvccVersion(w.getWriteNumber()); memstore.add(kv12); mvcc.completeMemstoreInsert(w); @@ -358,7 +358,7 @@ public class TestMemStore extends TestCase { w = mvcc.beginMemstoreInsert(); KeyValue kvDel = new KeyValue(row, f, q2, kv11.getTimestamp(), KeyValue.Type.DeleteColumn); - kvDel.setMemstoreTS(w.getWriteNumber()); + kvDel.setMvccVersion(w.getWriteNumber()); memstore.add(kvDel); // BEFORE COMPLETING DELETE, SEE FIRST KVS @@ -418,7 +418,7 @@ public class TestMemStore extends TestCase { byte[] v = Bytes.toBytes(i); KeyValue kv = new KeyValue(row, f, q1, i, v); - kv.setMemstoreTS(w.getWriteNumber()); + kv.setMvccVersion(w.getWriteNumber()); memstore.add(kv); mvcc.completeMemstoreInsert(w); @@ -492,38 +492,6 @@ public class TestMemStore extends TestCase { m.kvset.size(), m.kvset.size() == 3); } - public void testBinary() { - MemStore mc = new MemStore(new Configuration(), KeyValue.ROOT_COMPARATOR); - final int start = 43; - final int end = 46; - for (int k = start; k <= end; k++) { - byte [] kk = Bytes.toBytes(k); - byte [] row = - Bytes.toBytes(TableName.META_TABLE_NAME+",table," + Bytes.toString(kk) + ",1," + k); - KeyValue key = new KeyValue(row, CONTENTS, BASIC, - System.currentTimeMillis(), - Bytes.toBytes(CONTENTSTR + k)); - mc.add(key); - System.out.println(key); -// key = new KeyValue(row, Bytes.toBytes(ANCHORNUM + k), -// System.currentTimeMillis(), -// Bytes.toBytes(ANCHORSTR + k)); -// mc.add(key); -// System.out.println(key); - } - int index = start; - for (KeyValue kv: mc.kvset) { - System.out.println(kv); - byte [] b = kv.getRow(); - // Hardcoded offsets into String - String str = Bytes.toString(b, TableName.META_TABLE_NAME.getName().length+7, 4); - byte [] bb = Bytes.toBytes(index); - String bbStr = Bytes.toString(bb); - assertEquals(str, bbStr); - index++; - } - } - ////////////////////////////////////////////////////////////////////////////// // Get tests //////////////////////////////////////////////////////////////////////////////