(oldContainer *container.C, configPath string, asyncStopWg *sync.WaitGroup)
| 459 | } |
| 460 | |
| 461 | func moduleReload(oldContainer *container.C, configPath string, asyncStopWg *sync.WaitGroup) *container.C { |
| 462 | oldContainer.DefaultLogger.Msg("reloading server...") |
| 463 | systemdStatus(SDReloading, "Reloading server...") |
| 464 | |
| 465 | rollbackReload := func() { |
| 466 | // Restore DefaultLogger config that might be set by moduleConfig |
| 467 | log.DefaultLogger.Out = oldContainer.DefaultLogger.Out |
| 468 | } |
| 469 | |
| 470 | oldContainer.DefaultLogger.Msg("loading new configuration...") |
| 471 | newContainer, err := moduleConfigure(configPath) |
| 472 | if err != nil { |
| 473 | rollbackReload() |
| 474 | oldContainer.DefaultLogger.Error("failed to load new configuration", err) |
| 475 | |
| 476 | return oldContainer |
| 477 | } |
| 478 | |
| 479 | oldContainer.DefaultLogger.Msg("configuration loaded") |
| 480 | rollbackReload = func() { |
| 481 | // Restore DefaultLogger config that might be set by moduleConfig |
| 482 | log.DefaultLogger.Out = oldContainer.DefaultLogger.Out |
| 483 | container.Global = oldContainer |
| 484 | } |
| 485 | |
| 486 | if err := oldContainer.Lifetime.EarlyStopAll(); err != nil { |
| 487 | rollbackReload() |
| 488 | oldContainer.DefaultLogger.Error("failed to early-stop old server", err) |
| 489 | |
| 490 | return oldContainer |
| 491 | } |
| 492 | |
| 493 | netresource.ResetListenersUsage() |
| 494 | oldContainer.DefaultLogger.Msg("starting new server") |
| 495 | if err := moduleStart(newContainer); err != nil { |
| 496 | rollbackReload() |
| 497 | oldContainer.DefaultLogger.Error("failed to start new server", err) |
| 498 | |
| 499 | return oldContainer |
| 500 | } |
| 501 | |
| 502 | newContainer.DefaultLogger.Msg("new server started", "version", Version) |
| 503 | |
| 504 | systemdStatus(SDReloading, "New configuration running. Waiting for old connections and transactions to finish...") |
| 505 | |
| 506 | asyncStopWg.Add(1) |
| 507 | go func() { |
| 508 | defer asyncStopWg.Done() |
| 509 | defer func() { |
| 510 | if err := netresource.CloseUnusedListeners(); err != nil { |
| 511 | oldContainer.DefaultLogger.Error("CloseUnusedListeners failed", err) |
| 512 | } |
| 513 | }() |
| 514 | |
| 515 | oldContainer.DefaultLogger.Msg("stopping old server") |
| 516 | if err := moduleStop(oldContainer, false); err != nil { |
| 517 | oldContainer.DefaultLogger.Error("moduleStop failed", err) |
| 518 | } |
no test coverage detected