Skip to content

Commit eae763d

Browse files
authored
move database directory to top-level (fixes #1348) (#3566)
`ecdb` for execution client db - this approach makes it both coherent and compatible with running nimbus-eth2 from the same data-dir, where we already have `era`, `era1` and `db`. Databases in the old location should automatically be moved as long as a new db is not present.
1 parent ec19ebe commit eae763d

File tree

1 file changed

+22
-13
lines changed

1 file changed

+22
-13
lines changed

execution_chain/db/core_db/backend/rocksdb_desc.nim

Lines changed: 22 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -15,8 +15,8 @@ import std/[os, sequtils], rocksdb, chronicles
1515
export rocksdb
1616

1717
const
18-
BaseFolder = "nimbus"
19-
DataFolder = "aristo"
18+
LegacyFolder = "nimbus" / "aristo" # pre-alpha
19+
DbFolder = "ecdb" # execution client db - must not collide with consensus
2020

2121
type
2222
RocksDbInstanceRef* = ref object ## Shared handle to a single rocksdb instance
@@ -32,11 +32,11 @@ type
3232
closes*: int
3333
families*: seq[ColFamilyReadWrite]
3434

35-
func dataDir*(baseDir: string): string =
36-
baseDir / BaseFolder / DataFolder
35+
func ecdbDir(baseDir: string): string =
36+
baseDir / DbFolder
3737

38-
func dataDir*(rdb: RocksDbInstanceRef): string =
39-
rdb.baseDir.dataDir
38+
func ecdbDir(rdb: RocksDbInstanceRef): string =
39+
rdb.baseDir.ecdbDir
4040

4141
proc isClosed*(session: SharedWriteBatchRef): bool =
4242
session == nil or session.batch.isClosed()
@@ -80,20 +80,29 @@ proc open*(
8080
dbOpts: DbOptionsRef,
8181
cfs: openArray[(string, ColFamilyOptionsRef)],
8282
): Result[RocksDbInstanceRef, string] =
83-
let dataDir = baseDir.dataDir
83+
84+
let ecdbDir = baseDir.ecdbDir
85+
86+
if not dirExists(ecdbDir):
87+
let legacyDir = baseDir / LegacyFolder
88+
if dirExists(legacyDir):
89+
try:
90+
moveDir(legacyDir, ecdbDir)
91+
except CatchableError as exc:
92+
return err ("Found legacy database directory but cannot move it: " & exc.msg)
8493

8594
try:
86-
dataDir.createDir
95+
ecdbDir.createDir
8796
except CatchableError as exc:
88-
return err("Cannot create database directory " & dataDir & ": " & exc.msg)
97+
return err("Cannot create database directory " & ecdbDir & ": " & exc.msg)
8998

9099
var
91100
descs = cfs.mapIt(it[0].initColFamilyDescriptor(it[1]))
92101
cfNames = cfs.mapIt(it[0])
93102

94103
# Must include all column families or openRocksDb will fail
95-
if (dataDir / "CURRENT").fileExists:
96-
let hdCFs = dataDir.listColumnFamilies.valueOr:
104+
if (ecdbDir / "CURRENT").fileExists:
105+
let hdCFs = ecdbDir.listColumnFamilies.valueOr:
97106
raiseAssert "Cannot read existing CFs: " & error
98107

99108
for name in hdCFs:
@@ -103,7 +112,7 @@ proc open*(
103112
)
104113

105114
ok RocksDbInstanceRef(
106-
db: ?openRocksDb(dataDir, dbOpts, columnFamilies = descs), baseDir: baseDir
115+
db: ?openRocksDb(ecdbDir, dbOpts, columnFamilies = descs), baseDir: baseDir
107116
)
108117

109118
proc close*(rdb: RocksDbInstanceRef, eradicate = false) =
@@ -113,7 +122,7 @@ proc close*(rdb: RocksDbInstanceRef, eradicate = false) =
113122

114123
if eradicate:
115124
try:
116-
rdb.dataDir.removeDir
125+
rdb.ecdbDir.removeDir
117126

118127
# Remove the base folder if it is empty
119128
block done:

0 commit comments

Comments
 (0)