diff --git a/hbase-server/src/main/java/org/apache/hadoop/hbase/regionserver/wal/SequenceIdAccounting.java b/hbase-server/src/main/java/org/apache/hadoop/hbase/regionserver/wal/SequenceIdAccounting.java index 5c6fcd2d1aa6..6be95391819b 100644 --- a/hbase-server/src/main/java/org/apache/hadoop/hbase/regionserver/wal/SequenceIdAccounting.java +++ b/hbase-server/src/main/java/org/apache/hadoop/hbase/regionserver/wal/SequenceIdAccounting.java @@ -250,7 +250,11 @@ ConcurrentMap getOrCreateLowestSequenceIds(byte[] enco */ private static long getLowestSequenceId(Map sequenceids) { long lowest = HConstants.NO_SEQNUM; - for (Long sid: sequenceids.values()) { + for (Map.Entry entry : sequenceids.entrySet()){ + if (entry.getKey().toString().equals("METAFAMILY")){ + continue; + } + Long sid = entry.getValue(); if (lowest == HConstants.NO_SEQNUM || sid.longValue() < lowest) { lowest = sid.longValue(); } diff --git a/hbase-server/src/test/java/org/apache/hadoop/hbase/regionserver/wal/TestSequenceIdAccounting.java b/hbase-server/src/test/java/org/apache/hadoop/hbase/regionserver/wal/TestSequenceIdAccounting.java index 098dc86461b6..8eb99b3a4772 100644 --- a/hbase-server/src/test/java/org/apache/hadoop/hbase/regionserver/wal/TestSequenceIdAccounting.java +++ b/hbase-server/src/test/java/org/apache/hadoop/hbase/regionserver/wal/TestSequenceIdAccounting.java @@ -44,10 +44,14 @@ public class TestSequenceIdAccounting { private static final byte [] ENCODED_REGION_NAME = Bytes.toBytes("r"); private static final byte [] FAMILY_NAME = Bytes.toBytes("cf"); + private static final byte [] META_FAMILY = Bytes.toBytes("METAFAMILY"); private static final Set FAMILIES; + private static final Set META_FAMILY_SET; static { FAMILIES = new HashSet<>(); FAMILIES.add(FAMILY_NAME); + META_FAMILY_SET = new HashSet<>(); + META_FAMILY_SET.add(META_FAMILY); } @Test @@ -123,6 +127,20 @@ public void testAreAllLower() { sida.update(ENCODED_REGION_NAME, FAMILIES, ++sequenceid, true); sida.update(ENCODED_REGION_NAME, FAMILIES, ++sequenceid, true); assertTrue(sida.areAllLower(m, null)); + m.put(ENCODED_REGION_NAME, sequenceid); + assertFalse(sida.areAllLower(m, null)); + + // Test the METAFAMILY is filtered in SequenceIdAccounting.lowestUnflushedSequenceIds + SequenceIdAccounting meta_sida = new SequenceIdAccounting(); + Map meta_m = new HashMap<>(); + meta_sida.getOrCreateLowestSequenceIds(ENCODED_REGION_NAME); + meta_m.put(ENCODED_REGION_NAME, sequenceid); + meta_sida.update(ENCODED_REGION_NAME, META_FAMILY_SET, ++sequenceid, true); + meta_sida.update(ENCODED_REGION_NAME, META_FAMILY_SET, ++sequenceid, true); + meta_sida.update(ENCODED_REGION_NAME, META_FAMILY_SET, ++sequenceid, true); + assertTrue(meta_sida.areAllLower(meta_m, null)); + meta_m.put(ENCODED_REGION_NAME, sequenceid); + assertTrue(meta_sida.areAllLower(meta_m, null)); } @Test