eventstore/cmd: fix mmm deinitialization.

This commit is contained in:
fiatjaf
2026-01-18 17:44:03 -03:00
parent fd2828ce94
commit df64c5b6ec
2 changed files with 49 additions and 27 deletions

View File

@@ -17,7 +17,10 @@ import (
"github.com/urfave/cli/v3"
)
var db eventstore.Store
var (
db eventstore.Store
end func()
)
var app = &cli.Command{
Name: "eventstore",
@@ -71,18 +74,31 @@ var app = &cli.Command{
switch typ {
case "lmdb":
db = &lmdb.LMDBBackend{Path: path}
if err := db.Init(); err != nil {
return ctx, err
}
end = db.Close
case "boltdb":
db = &boltdb.BoltBackend{Path: path}
if err := db.Init(); err != nil {
return ctx, err
}
end = db.Close
case "mmm":
var err error
if db, err = doMmmInit(path); err != nil {
if db, err, end = doMmmInit(path); err != nil {
if end != nil {
end()
}
return ctx, err
}
case "file":
db = &slicestore.SliceStore{}
if err := db.Init(); err != nil {
return ctx, err
}
// run this after we've called db.Init()
defer func() {
// fill in the slicestore with the data from the file
f, err := os.Open(path)
if err != nil {
log.Printf("failed to file at '%s': %s\n", path, err)
@@ -99,17 +115,17 @@ var app = &cli.Command{
db.SaveEvent(evt)
i++
}
}()
end = func() {
db.Close()
f.Close()
}
case "":
return ctx, fmt.Errorf("couldn't determine store type, you can use --type to specify it manually")
default:
return ctx, fmt.Errorf("'%s' store type is not supported by this CLI", typ)
}
if err := db.Init(); err != nil {
return ctx, err
}
return ctx, nil
},
Commands: []*cli.Command{
@@ -124,6 +140,7 @@ var app = &cli.Command{
}
func main() {
defer func() { end() }()
if err := app.Run(context.Background(), os.Args); err != nil {
fmt.Println(err)
os.Exit(1)

View File

@@ -11,7 +11,7 @@ import (
"github.com/rs/zerolog"
)
func doMmmInit(path string) (eventstore.Store, error) {
func doMmmInit(path string) (eventstore.Store, error, func()) {
logger := zerolog.New(zerolog.NewConsoleWriter(func(w *zerolog.ConsoleWriter) {
w.Out = os.Stderr
}))
@@ -20,8 +20,13 @@ func doMmmInit(path string) (eventstore.Store, error) {
Logger: &logger,
}
if err := mmmm.Init(); err != nil {
return nil, err
return nil, err, nil
}
return mmmm.EnsureLayer(filepath.Base(path))
end := func() {
mmmm.Close()
}
store, err := mmmm.EnsureLayer(filepath.Base(path))
return store, err, end
}