Skip to content

Commit a79e908

Browse files
committed
Refactor database shutdown procedures in server, ingester, and producer modules
- Removed direct dependencies on bun.DB and replaced with a unified GracefulDatabaseShutdown function to handle various database types. - Enhanced shutdown logic to support both SQL and MongoDB, ensuring proper disconnection and resource cleanup. - Updated logging for clearer shutdown status across modules.
1 parent 4b39285 commit a79e908

File tree

4 files changed

+38
-15
lines changed

4 files changed

+38
-15
lines changed

apps/server/cmd/api/main.go

Lines changed: 3 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -41,7 +41,6 @@ import (
4141
"peekaping/internal/version"
4242
"syscall"
4343

44-
"github.com/uptrace/bun"
4544
"go.uber.org/dig"
4645
"go.uber.org/zap"
4746
)
@@ -186,7 +185,6 @@ func main() {
186185
// Start the server with graceful shutdown
187186
err = container.Invoke(func(
188187
server *internal.Server,
189-
db *bun.DB,
190188
eventBus events.EventBus,
191189
logger *zap.SugaredLogger,
192190
) error {
@@ -220,9 +218,9 @@ func main() {
220218
logger.Errorw("Failed to close event bus", "error", err)
221219
}
222220

223-
// Perform graceful SQLite shutdown if using SQLite
224-
if err := infra.GracefulSQLiteShutdown(db, internalCfg.DBType, logger); err != nil {
225-
logger.Errorw("Failed to gracefully shutdown database", "error", err)
221+
// Perform graceful database shutdown
222+
if err := infra.GracefulDatabaseShutdown(container, internalCfg, logger); err != nil {
223+
logger.Errorw("Failed to shutdown database", "error", err)
226224
}
227225

228226
logger.Info("Server stopped gracefully")

apps/server/cmd/ingester/main.go

Lines changed: 3 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -22,7 +22,6 @@ import (
2222
"syscall"
2323

2424
"github.com/hibiken/asynq"
25-
"github.com/uptrace/bun"
2625
"go.uber.org/dig"
2726
"go.uber.org/zap"
2827
)
@@ -118,7 +117,6 @@ func main() {
118117
// Start the ingester
119118
err = container.Invoke(func(
120119
ing *ingester.Ingester,
121-
db *bun.DB,
122120
eventBus events.EventBus,
123121
logger *zap.SugaredLogger,
124122
) error {
@@ -145,9 +143,9 @@ func main() {
145143
logger.Errorw("Failed to close event bus", "error", err)
146144
}
147145

148-
// Perform graceful SQLite shutdown if using SQLite
149-
if err := infra.GracefulSQLiteShutdown(db, internalCfg.DBType, logger); err != nil {
150-
logger.Errorw("Failed to gracefully shutdown database", "error", err)
146+
// Perform graceful database shutdown
147+
if err := infra.GracefulDatabaseShutdown(container, internalCfg, logger); err != nil {
148+
logger.Errorw("Failed to shutdown database", "error", err)
151149
}
152150

153151
logger.Info("Ingester stopped gracefully")

apps/server/cmd/producer/main.go

Lines changed: 3 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -27,7 +27,6 @@ import (
2727
"peekaping/internal/version"
2828
"syscall"
2929

30-
"github.com/uptrace/bun"
3130
"go.uber.org/dig"
3231
"go.uber.org/zap"
3332
)
@@ -91,7 +90,6 @@ func main() {
9190
err = container.Invoke(func(
9291
prod *producer.Producer,
9392
eventListener *producer.EventListener,
94-
db *bun.DB,
9593
eventBus events.EventBus,
9694
logger *zap.SugaredLogger,
9795
) error {
@@ -120,9 +118,9 @@ func main() {
120118
logger.Errorw("Failed to close event bus", "error", err)
121119
}
122120

123-
// Perform graceful SQLite shutdown if using SQLite
124-
if err := infra.GracefulSQLiteShutdown(db, internalCfg.DBType, logger); err != nil {
125-
logger.Errorw("Failed to gracefully shutdown database", "error", err)
121+
// Perform graceful database shutdown
122+
if err := infra.GracefulDatabaseShutdown(container, internalCfg, logger); err != nil {
123+
logger.Errorw("Failed to shutdown database", "error", err)
126124
}
127125

128126
logger.Info("Producer stopped gracefully")

apps/server/internal/infra/sql.go

Lines changed: 29 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,7 @@
11
package infra
22

33
import (
4+
"context"
45
"database/sql"
56
"fmt"
67
"peekaping/internal/config"
@@ -12,6 +13,8 @@ import (
1213
"github.com/uptrace/bun/driver/pgdriver"
1314
"github.com/uptrace/bun/driver/sqliteshim"
1415
"github.com/uptrace/bun/extra/bundebug"
16+
"go.mongodb.org/mongo-driver/mongo"
17+
"go.uber.org/dig"
1518
"go.uber.org/zap"
1619

1720
_ "github.com/go-sql-driver/mysql"
@@ -203,3 +206,29 @@ func GracefulSQLiteShutdown(db *bun.DB, dbType string, logger *zap.SugaredLogger
203206
logger.Info("SQLite database closed gracefully")
204207
return nil
205208
}
209+
210+
// GracefulDatabaseShutdown performs graceful shutdown for any database type
211+
// It uses the DI container to get the appropriate database connection
212+
func GracefulDatabaseShutdown(container *dig.Container, cfg *config.Config, logger *zap.SugaredLogger) error {
213+
switch cfg.DBType {
214+
case "postgres", "postgresql", "mysql", "sqlite":
215+
// For SQL databases, perform graceful shutdown
216+
return container.Invoke(func(db *bun.DB) {
217+
if err := GracefulSQLiteShutdown(db, cfg.DBType, logger); err != nil {
218+
logger.Errorw("Failed to gracefully shutdown database", "error", err)
219+
}
220+
})
221+
case "mongo", "mongodb":
222+
// For MongoDB, disconnect the client
223+
return container.Invoke(func(client *mongo.Client) {
224+
if err := client.Disconnect(context.Background()); err != nil {
225+
logger.Errorw("Failed to disconnect MongoDB client", "error", err)
226+
} else {
227+
logger.Info("MongoDB client disconnected gracefully")
228+
}
229+
})
230+
default:
231+
logger.Warnf("Unknown database type for shutdown: %s", cfg.DBType)
232+
return nil
233+
}
234+
}

0 commit comments

Comments
 (0)