From e208d9c2c584a80d109950feb8419a095d8bab05 Mon Sep 17 00:00:00 2001 From: Jonas Theis <mail@jonastheis.de> Date: Mon, 16 Mar 2020 15:47:44 +0100 Subject: [PATCH] Add database plugin to call garbage collection and close DB (#289) * Add database plugin to call garbage collection and close DB on shutdown #284 * Adjust comment --- packages/shutdown/order.go | 3 ++- pluginmgr/core/plugins.go | 2 ++ plugins/database/plugin.go | 45 ++++++++++++++++++++++++++++++++++++++ 3 files changed, 49 insertions(+), 1 deletion(-) create mode 100644 plugins/database/plugin.go diff --git a/packages/shutdown/order.go b/packages/shutdown/order.go index 199c0350..9815548b 100644 --- a/packages/shutdown/order.go +++ b/packages/shutdown/order.go @@ -1,7 +1,8 @@ package shutdown const ( - ShutdownPriorityTangle = iota + ShutdownPriorityDatabase = iota + ShutdownPriorityTangle ShutdownPriorityRemoteLog ShutdownPriorityAnalysis ShutdownPriorityMetrics diff --git a/pluginmgr/core/plugins.go b/pluginmgr/core/plugins.go index 6f4a5100..c7faaaf7 100644 --- a/pluginmgr/core/plugins.go +++ b/pluginmgr/core/plugins.go @@ -5,6 +5,7 @@ import ( "github.com/iotaledger/goshimmer/plugins/banner" "github.com/iotaledger/goshimmer/plugins/cli" "github.com/iotaledger/goshimmer/plugins/config" + "github.com/iotaledger/goshimmer/plugins/database" "github.com/iotaledger/goshimmer/plugins/gossip" "github.com/iotaledger/goshimmer/plugins/gracefulshutdown" "github.com/iotaledger/goshimmer/plugins/logger" @@ -20,6 +21,7 @@ var PLUGINS = node.Plugins( logger.PLUGIN, cli.PLUGIN, portcheck.PLUGIN, + database.PLUGIN, autopeering.PLUGIN, tangle.PLUGIN, gossip.PLUGIN, diff --git a/plugins/database/plugin.go b/plugins/database/plugin.go new file mode 100644 index 00000000..3762d8f0 --- /dev/null +++ b/plugins/database/plugin.go @@ -0,0 +1,45 @@ +// database is a plugin that manages the badger database (e.g. garbage collection). +package database + +import ( + "time" + + "github.com/iotaledger/hive.go/timeutil" + + "github.com/iotaledger/goshimmer/packages/database" + "github.com/iotaledger/goshimmer/packages/shutdown" + + "github.com/iotaledger/hive.go/daemon" + "github.com/iotaledger/hive.go/logger" + "github.com/iotaledger/hive.go/node" +) + +const ( + PLUGIN_NAME = "Database" +) + +var ( + PLUGIN = node.NewPlugin(PLUGIN_NAME, node.Enabled, configure, run) + log *logger.Logger +) + +func configure(plugin *node.Plugin) { + log = logger.NewLogger(PLUGIN_NAME) + + _ = database.GetBadgerInstance() +} + +func run(plugin *node.Plugin) { + daemon.BackgroundWorker(PLUGIN_NAME+"_GC", func(shutdownSignal <-chan struct{}) { + timeutil.Ticker(func() { + database.CleanupBadgerInstance(log) + }, 5*time.Minute, shutdownSignal) + }, shutdown.ShutdownPriorityBadgerGarbageCollection) + + daemon.BackgroundWorker(PLUGIN_NAME, func(shutdownSignal <-chan struct{}) { + <-shutdownSignal + log.Infof("Syncing database to disk...") + database.GetBadgerInstance().Close() + log.Infof("Syncing database to disk... done") + }, shutdown.ShutdownPriorityDatabase) +} -- GitLab