From 3e0ceb86b889453abb860b7dae45442ab41205a8 Mon Sep 17 00:00:00 2001 From: zhyzhyzhy <1012146386@qq.com> Date: Tue, 18 Aug 2020 10:49:29 +0800 Subject: [PATCH 1/2] support .sst and .ldb extension --- .../java/org/iq80/leveldb/impl/Filename.java | 8 +++++ .../org/iq80/leveldb/impl/TableCache.java | 4 +++ .../org/iq80/leveldb/impl/DbImplTest.java | 35 ++++++++++++++++--- 3 files changed, 42 insertions(+), 5 deletions(-) diff --git a/leveldb/src/main/java/org/iq80/leveldb/impl/Filename.java b/leveldb/src/main/java/org/iq80/leveldb/impl/Filename.java index b12ec99a..d86b3589 100755 --- a/leveldb/src/main/java/org/iq80/leveldb/impl/Filename.java +++ b/leveldb/src/main/java/org/iq80/leveldb/impl/Filename.java @@ -58,6 +58,10 @@ public static String logFileName(long number) */ public static String tableFileName(long number) { + return makeFileName(number, "ldb"); + } + + public static String sstTableFileName(long number) { return makeFileName(number, "sst"); } @@ -149,6 +153,10 @@ else if (fileName.endsWith(".sst")) { long fileNumber = Long.parseLong(removeSuffix(fileName, ".sst")); return new FileInfo(FileType.TABLE, fileNumber); } + else if (fileName.endsWith(".ldb")) { + long fileNumber = Long.parseLong(removeSuffix(fileName, ".ldb")); + return new FileInfo(FileType.TABLE, fileNumber); + } else if (fileName.endsWith(".dbtmp")) { long fileNumber = Long.parseLong(removeSuffix(fileName, ".dbtmp")); return new FileInfo(FileType.TEMP, fileNumber); diff --git a/leveldb/src/main/java/org/iq80/leveldb/impl/TableCache.java b/leveldb/src/main/java/org/iq80/leveldb/impl/TableCache.java index ce2fb0e8..8363e434 100755 --- a/leveldb/src/main/java/org/iq80/leveldb/impl/TableCache.java +++ b/leveldb/src/main/java/org/iq80/leveldb/impl/TableCache.java @@ -121,6 +121,10 @@ private TableAndFile(File databaseDir, long fileNumber, UserComparator userCompa { String tableFileName = Filename.tableFileName(fileNumber); File tableFile = new File(databaseDir, tableFileName); + if (!tableFile.exists()) { + tableFileName = Filename.sstTableFileName(fileNumber); + tableFile = new File(databaseDir, tableFileName); + } FileInputStream fis = null; try { fis = new FileInputStream(tableFile); diff --git a/leveldb/src/test/java/org/iq80/leveldb/impl/DbImplTest.java b/leveldb/src/test/java/org/iq80/leveldb/impl/DbImplTest.java index cc833cbe..77473dfb 100644 --- a/leveldb/src/test/java/org/iq80/leveldb/impl/DbImplTest.java +++ b/leveldb/src/test/java/org/iq80/leveldb/impl/DbImplTest.java @@ -54,11 +54,7 @@ import static org.iq80.leveldb.table.BlockHelper.afterString; import static org.iq80.leveldb.table.BlockHelper.assertSequence; import static org.iq80.leveldb.table.BlockHelper.beforeString; -import static org.testng.Assert.assertEquals; -import static org.testng.Assert.assertFalse; -import static org.testng.Assert.assertNull; -import static org.testng.Assert.assertTrue; -import static org.testng.Assert.fail; +import static org.testng.Assert.*; public class DbImplTest { @@ -188,6 +184,35 @@ public void testGetFromVersions() assertEquals(db.get("foo"), "v1"); } + @Test + public void testFileExtensionCompatible() + throws Exception + { + DbStringWrapper db = new DbStringWrapper(new Options(), databaseDir); + db.put("foo", "v1"); + db.compactMemTable(); + db.put("bar", "v1"); + db.compactMemTable(); + db.put("xvf", "v1"); + db.compactMemTable(); + ImmutableList files = FileUtils.listFiles(databaseDir); + for (File file : files) { + Filename.FileInfo fileInfo = Filename.parseFileName(file); + assertNotNull(fileInfo); + + if (fileInfo.getFileType().equals(Filename.FileType.TABLE)) { + assertTrue(file.getName().endsWith(".ldb")); + long fileNumber = fileInfo.getFileNumber(); + File newFile = new File(databaseDir, Filename.sstTableFileName(fileNumber)); + file.renameTo(newFile); + } + } + db.reopen(); + assertEquals(db.get("foo"), "v1"); + assertEquals(db.get("bar"), "v1"); + assertEquals(db.get("xvf"), "v1"); + } + @Test public void testGetSnapshot() throws Exception From 9fb5249939355abf73b5a54bc8360d0db1f0212a Mon Sep 17 00:00:00 2001 From: zhyzhyzhy <1012146386@qq.com> Date: Tue, 18 Aug 2020 23:00:14 +0800 Subject: [PATCH 2/2] fix code style --- leveldb/src/main/java/org/iq80/leveldb/impl/Filename.java | 3 ++- .../src/test/java/org/iq80/leveldb/impl/DbImplTest.java | 7 ++++++- 2 files changed, 8 insertions(+), 2 deletions(-) diff --git a/leveldb/src/main/java/org/iq80/leveldb/impl/Filename.java b/leveldb/src/main/java/org/iq80/leveldb/impl/Filename.java index d86b3589..4350f73b 100755 --- a/leveldb/src/main/java/org/iq80/leveldb/impl/Filename.java +++ b/leveldb/src/main/java/org/iq80/leveldb/impl/Filename.java @@ -61,7 +61,8 @@ public static String tableFileName(long number) return makeFileName(number, "ldb"); } - public static String sstTableFileName(long number) { + public static String sstTableFileName(long number) + { return makeFileName(number, "sst"); } diff --git a/leveldb/src/test/java/org/iq80/leveldb/impl/DbImplTest.java b/leveldb/src/test/java/org/iq80/leveldb/impl/DbImplTest.java index 77473dfb..3321be38 100644 --- a/leveldb/src/test/java/org/iq80/leveldb/impl/DbImplTest.java +++ b/leveldb/src/test/java/org/iq80/leveldb/impl/DbImplTest.java @@ -54,7 +54,12 @@ import static org.iq80.leveldb.table.BlockHelper.afterString; import static org.iq80.leveldb.table.BlockHelper.assertSequence; import static org.iq80.leveldb.table.BlockHelper.beforeString; -import static org.testng.Assert.*; +import static org.testng.Assert.assertEquals; +import static org.testng.Assert.assertFalse; +import static org.testng.Assert.assertNotNull; +import static org.testng.Assert.assertNull; +import static org.testng.Assert.assertTrue; +import static org.testng.Assert.fail; public class DbImplTest {