diff --git a/hbase-server/src/main/java/org/apache/hadoop/hbase/mob/MobUtils.java b/hbase-server/src/main/java/org/apache/hadoop/hbase/mob/MobUtils.java index 9fa4e4c..d29ee92 100644 --- a/hbase-server/src/main/java/org/apache/hadoop/hbase/mob/MobUtils.java +++ b/hbase-server/src/main/java/org/apache/hadoop/hbase/mob/MobUtils.java @@ -336,7 +336,7 @@ if (LOG.isDebugEnabled()) { LOG.debug("Checking file " + fileName); } - if (fileDate.getTime() < expireDate.getTime()) { + if (fileDate.getTime() + 1000 < expireDate.getTime()) { if (LOG.isDebugEnabled()) { LOG.debug(fileName + " is an expired file"); } @@ -920,7 +920,7 @@ expireDate = new Date(expireDate.getYear(), expireDate.getMonth(), expireDate.getDate()); try { Date date = parseDate(fileDate); - if (date.getTime() < expireDate.getTime()) { + if (date.getTime() + 1000 < expireDate.getTime()) { return true; } } catch (ParseException e) { diff --git a/hbase-server/src/test/java/org/apache/hadoop/hbase/mob/TestExpiredMobFileCleaner.java b/hbase-server/src/test/java/org/apache/hadoop/hbase/mob/TestExpiredMobFileCleaner.java index 5efb509..03b2898 100644 --- a/hbase-server/src/test/java/org/apache/hadoop/hbase/mob/TestExpiredMobFileCleaner.java +++ b/hbase-server/src/test/java/org/apache/hadoop/hbase/mob/TestExpiredMobFileCleaner.java @@ -46,6 +46,7 @@ private final static String family = "family"; private final static byte[] row1 = Bytes.toBytes("row1"); private final static byte[] row2 = Bytes.toBytes("row2"); + private final static byte[] row3 = Bytes.toBytes("row3"); private final static byte[] qf = Bytes.toBytes("qf"); private static BufferedMutator table; @@ -128,16 +129,15 @@ FileStatus[] firstFiles = TEST_UTIL.getTestFileSystem().listStatus(mobDirPath); //the first mob file assertEquals("Before cleanup without delay 1", 1, firstFiles.length); - String firstFile = firstFiles[0].getPath().getName(); - ts = System.currentTimeMillis() - 1 * secondsOfDay() * 1000; // 1 day before + ts = System.currentTimeMillis() - 2 * secondsOfDay() * 1000; // 2 day before putKVAndFlush(table, row2, dummyData, ts); FileStatus[] secondFiles = TEST_UTIL.getTestFileSystem().listStatus(mobDirPath); //now there are 2 mob files assertEquals("Before cleanup without delay 2", 2, secondFiles.length); - String f1 = secondFiles[0].getPath().getName(); - String f2 = secondFiles[1].getPath().getName(); - String secondFile = f1.equals(firstFile) ? f2 : f1; + //the third mob file + ts = System.currentTimeMillis() - 1 * secondsOfDay() * 1000; // 1 day before + putKVAndFlush(table, row3, dummyData, ts); modifyColumnExpiryDays(2); // ttl = 2, make the first row expired @@ -148,10 +148,8 @@ ToolRunner.run(TEST_UTIL.getConfiguration(), new ExpiredMobFileCleaner(), args); FileStatus[] filesAfterClean = TEST_UTIL.getTestFileSystem().listStatus(mobDirPath); - String lastFile = filesAfterClean[0].getPath().getName(); //the first mob fie is removed - assertEquals("After cleanup without delay 1", 1, filesAfterClean.length); - assertEquals("After cleanup without delay 2", secondFile, lastFile); + assertEquals("After cleanup without delay 1", 2, filesAfterClean.length); } private int secondsOfDay() {