From cf81406c25de91d6f407e87e7a3afbac6d216a9b Mon Sep 17 00:00:00 2001 From: Elliott Clark Date: Wed, 13 Feb 2013 14:00:48 -0800 Subject: [PATCH] Compactions not sorting based on size anymore. --- .../hadoop/hbase/regionserver/StoreFile.java | 19 ++++++++--- .../hadoop/hbase/regionserver/TestStoreFile.java | 36 +++++++++++++------- 2 files changed, 37 insertions(+), 18 deletions(-) diff --git src/main/java/org/apache/hadoop/hbase/regionserver/StoreFile.java src/main/java/org/apache/hadoop/hbase/regionserver/StoreFile.java index bf31c32..1aad782 100644 --- src/main/java/org/apache/hadoop/hbase/regionserver/StoreFile.java +++ src/main/java/org/apache/hadoop/hbase/regionserver/StoreFile.java @@ -1735,11 +1735,12 @@ public class StoreFile extends SchemaConfigured { * If there are ties, the path name is used as a tie-breaker. */ static final Comparator FLUSH_TIME = - Ordering.compound(ImmutableList.of( - Ordering.natural().onResultOf(new GetBulkTime()), - Ordering.natural().onResultOf(new GetSeqId()), - Ordering.natural().onResultOf(new GetPathName()) - )); + Ordering.compound(ImmutableList.of( + Ordering.natural().onResultOf(new GetBulkTime()), + Ordering.natural().onResultOf(new GetSeqId()), + Ordering.natural().onResultOf(new GetFileSize()).reverse(), + Ordering.natural().onResultOf(new GetPathName()) + )); private static class GetBulkTime implements Function { @Override @@ -1755,6 +1756,14 @@ public class StoreFile extends SchemaConfigured { return sf.getMaxSequenceId(); } } + + private static class GetFileSize implements Function { + @Override + public Long apply(StoreFile sf) { + return sf.getReader().length(); + } + } + private static class GetPathName implements Function { @Override public String apply(StoreFile sf) { diff --git src/test/java/org/apache/hadoop/hbase/regionserver/TestStoreFile.java src/test/java/org/apache/hadoop/hbase/regionserver/TestStoreFile.java index 3f63e3d..241436a 100644 --- src/test/java/org/apache/hadoop/hbase/regionserver/TestStoreFile.java +++ src/test/java/org/apache/hadoop/hbase/regionserver/TestStoreFile.java @@ -614,13 +614,14 @@ public class TestStoreFile extends HBaseTestCase { public void testFlushTimeComparator() { assertOrdering(StoreFile.Comparators.FLUSH_TIME, - mockStoreFile(true, 1000, -1, "/foo/123"), - mockStoreFile(true, 1000, -1, "/foo/126"), - mockStoreFile(true, 2000, -1, "/foo/126"), - mockStoreFile(false, -1, 1, "/foo/1"), - mockStoreFile(false, -1, 3, "/foo/2"), - mockStoreFile(false, -1, 5, "/foo/2"), - mockStoreFile(false, -1, 5, "/foo/3")); + mockStoreFile(true, 100, 1000, -1, "/foo/123"), + mockStoreFile(true, 100, 1000, -1, "/foo/124"), + mockStoreFile(true, 99, 1000, -1, "/foo/126"), + mockStoreFile(true, 98, 2000, -1, "/foo/126"), + mockStoreFile(false, 3453, -1, 1, "/foo/1"), + mockStoreFile(false, 2, -1, 3, "/foo/2"), + mockStoreFile(false, 1000, -1, 5, "/foo/2"), + mockStoreFile(false, 76, -1, 5, "/foo/3")); } /** @@ -636,26 +637,35 @@ public class TestStoreFile extends HBaseTestCase { assertTrue(Iterables.elementsEqual(Arrays.asList(sfs), sorted)); } + /** * Create a mock StoreFile with the given attributes. */ - private StoreFile mockStoreFile(boolean bulkLoad, long bulkTimestamp, - long seqId, String path) { + private StoreFile mockStoreFile(boolean bulkLoad, + long size, + long bulkTimestamp, + long seqId, + String path) { StoreFile mock = Mockito.mock(StoreFile.class); + StoreFile.Reader reader = Mockito.mock(StoreFile.Reader.class); + + Mockito.doReturn(size).when(reader).length(); + Mockito.doReturn(reader).when(mock).getReader(); + Mockito.doReturn(bulkLoad).when(mock).isBulkLoadResult(); Mockito.doReturn(bulkTimestamp).when(mock).getBulkLoadTimestamp(); if (bulkLoad) { // Bulk load files will throw if you ask for their sequence ID Mockito.doThrow(new IllegalAccessError("bulk load")) - .when(mock).getMaxSequenceId(); + .when(mock).getMaxSequenceId(); } else { Mockito.doReturn(seqId).when(mock).getMaxSequenceId(); } Mockito.doReturn(new Path(path)).when(mock).getPath(); String name = "mock storefile, bulkLoad=" + bulkLoad + - " bulkTimestamp=" + bulkTimestamp + - " seqId=" + seqId + - " path=" + path; + " bulkTimestamp=" + bulkTimestamp + + " seqId=" + seqId + + " path=" + path; Mockito.doReturn(name).when(mock).toString(); return mock; } -- 1.7.10.2 (Apple Git-33)