mirror of
https://github.com/vacp2p/linea-besu.git
synced 2026-01-08 20:47:59 -05:00
Only create DB data dir if it doesn't already exist (#5453)
* Only create DB data dir if it doesn't already exist Signed-off-by: Matthew Whitehead <matthew1001@gmail.com> * Add unit test Signed-off-by: Matthew Whitehead <matthew1001@gmail.com> --------- Signed-off-by: Matthew Whitehead <matthew1001@gmail.com> Co-authored-by: Matthew Whitehead <matthew1001@gmail.com>
This commit is contained in:
@@ -255,6 +255,7 @@ public class RocksDBKeyValueStorageFactory implements KeyValueStorageFactory {
|
||||
private int readDatabaseVersion(final BesuConfiguration commonConfiguration) throws IOException {
|
||||
final Path dataDir = commonConfiguration.getDataPath();
|
||||
final boolean databaseExists = commonConfiguration.getStoragePath().toFile().exists();
|
||||
final boolean dataDirExists = dataDir.toFile().exists();
|
||||
final int databaseVersion;
|
||||
if (databaseExists) {
|
||||
databaseVersion = DatabaseMetadata.lookUpFrom(dataDir).getVersion();
|
||||
@@ -265,7 +266,9 @@ public class RocksDBKeyValueStorageFactory implements KeyValueStorageFactory {
|
||||
} else {
|
||||
databaseVersion = commonConfiguration.getDatabaseVersion();
|
||||
LOG.info("No existing database detected at {}. Using version {}", dataDir, databaseVersion);
|
||||
Files.createDirectories(dataDir);
|
||||
if (!dataDirExists) {
|
||||
Files.createDirectories(dataDir);
|
||||
}
|
||||
new DatabaseMetadata(databaseVersion).writeToDirectory(dataDir);
|
||||
}
|
||||
|
||||
|
||||
@@ -199,4 +199,27 @@ public class RocksDBKeyValueStorageFactoryTest {
|
||||
.create(segment, commonConfiguration, metricsSystem))
|
||||
.isInstanceOf(IllegalStateException.class);
|
||||
}
|
||||
|
||||
@Test
|
||||
public void shouldCreateDBCorrectlyIfSymlink() throws Exception {
|
||||
final Path tempRealDataDir =
|
||||
Files.createDirectories(temporaryFolder.newFolder().toPath().resolve("real-data-dir"));
|
||||
final Path tempSymLinkDataDir =
|
||||
Files.createSymbolicLink(
|
||||
temporaryFolder.newFolder().toPath().resolve("symlink-data-dir"), tempRealDataDir);
|
||||
final Path tempDatabaseDir = temporaryFolder.newFolder().toPath().resolve("db");
|
||||
when(commonConfiguration.getStoragePath()).thenReturn(tempDatabaseDir);
|
||||
when(commonConfiguration.getDataPath()).thenReturn(tempSymLinkDataDir);
|
||||
when(commonConfiguration.getDatabaseVersion()).thenReturn(DEFAULT_VERSION);
|
||||
|
||||
final RocksDBKeyValueStorageFactory storageFactory =
|
||||
new RocksDBKeyValueStorageFactory(
|
||||
() -> rocksDbConfiguration, segments, RocksDBMetricsFactory.PUBLIC_ROCKS_DB_METRICS);
|
||||
|
||||
// Ensure that having created everything via a symlink data dir the DB meta-data has been
|
||||
// created correctly
|
||||
storageFactory.create(segment, commonConfiguration, metricsSystem);
|
||||
assertThat(DatabaseMetadata.lookUpFrom(tempRealDataDir).getVersion())
|
||||
.isEqualTo(DEFAULT_VERSION);
|
||||
}
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user