-
-
Notifications
You must be signed in to change notification settings - Fork 1.6k
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
🐛 [Bug]: Data race on shutdown #2948
Comments
Thanks for opening your first issue here! 🎉 Be sure to follow the issue template! If you need help or want to chat with us, join us on Discord https://gofiber.io/discord |
You have to use this method, I think, because it works fine for me, and I'm using Go 1.22.1 example: // waitForShutdownSignal blocks execution until an OS interrupt or SIGTERM signal is received,
// then it gracefully shuts down the Fiber app within the specified timeout.
func waitForShutdownSignal(shutdownTimeout time.Duration, app *fiber.App, db database.Service) {
// Setting up signal capturing.
quit := make(chan os.Signal, 1)
signal.Notify(quit, os.Interrupt, syscall.SIGTERM)
// Blocking until a signal is received.
sig := <-quit
Logger.LogInfof("Shutting down server... reason: %v", sig)
// Start graceful shutdown in a separate goroutine.
go func() {
// Shutdown the Fiber app
if err := app.Shutdown(); err != nil {
Logger.LogErrorf("Server forced to shutdown: %v", err)
}
// Clean up resources and close the database connection
cleanup(db)
}()
// Create a timer that will wait for the shutdownTimeout to elapse
shutdownTimer := time.NewTimer(shutdownTimeout)
defer shutdownTimer.Stop()
// Wait for the timeout to elapse
<-shutdownTimer.C
Logger.LogInfo("Server exiting")
} logs: $ go run cmd/api/main.go
2024/03/31 14:44:15 [H0llyW00dzZ] [INFO] Starting server on :8080
┌───────────────────────────────────────────────────┐
│ H0llyW00dzZ │
│ Fiber v2.52.4 │
│ http://127.0.0.1:8080 │
│ (bound on host 0.0.0.0 and port 8080) │
│ │
│ Handlers ............ 534 Processes ........... 1 │
│ Prefork ....... Disabled PID .............. 6860 │
└───────────────────────────────────────────────────┘
2024/03/31 14:44:22 [H0llyW00dzZ] [INFO] Shutting down server... reason: interrupt
2024/03/31 14:44:23 [H0llyW00dzZ] [INFO] Disconnected from database: defaultdb
2024/03/31 14:44:23 [H0llyW00dzZ] [INFO] Database connection closed.
2024/03/31 14:44:27 [H0llyW00dzZ] [INFO] Server exiting |
with -race flag: $ go run cmd/api/main.go -race flag
2024/03/31 15:05:12 [H0llyW00dzZ] [INFO] Starting server on :8080
┌───────────────────────────────────────────────────┐
│ H0llyW00dzZ │
│ Fiber v2.52.4 │
│ http://127.0.0.1:8080 │
│ (bound on host 0.0.0.0 and port 8080) │
│ │
│ Handlers ............ 534 Processes ........... 1 │
│ Prefork ....... Disabled PID ............. 16576 │
└───────────────────────────────────────────────────┘
2024/03/31 15:05:22 [H0llyW00dzZ] [INFO] Shutting down server... reason: interrupt
2024/03/31 15:05:22 [H0llyW00dzZ] [INFO] Disconnected from database: defaultdb
2024/03/31 15:05:22 [H0llyW00dzZ] [INFO] Database connection closed.
2024/03/31 15:05:27 [H0llyW00dzZ] [INFO] Server exiting |
Doesn't running with |
It is only for tests |
I send about 10 requests to a method that uses the request context for further steps, and immediately run the Shutdown method on the interrupt signal (ShutdownWithContext has similar behavior). I accidentally noticed this when app running with the -race flag. |
hi bro, Have you determined this is a bug? |
Not entirely sure, but looks like not exactly expected behavior. What do you think? |
Bug Description
I have a data race, when I call
*fiber.App.Shutdown()
methods and have some unprocessed requests , which handlers uses a request ctxSnippet of data race message:
How to Reproduce
*fiber.RequestCtx
Expected Behavior
I think this data race was not in plan
Fiber Version
2.52.4
Code Snippet (optional)
Checklist:
The text was updated successfully, but these errors were encountered: