fix(router): close httpLoader on shutdown, log parse errors, default nil logger

- Add missing httpLoader.Close() in localRouter.Close() to prevent
  resource leak
- Log parse errors from file/redis/http loaders instead of silently
  discarding them
- Add nil reader guards before calling parseRoutes in load()
- Default nil logger to xlogger.Nop() to prevent nil panics
- Use context.Background() instead of context.TODO() for root context
- Use strings.ReplaceAll instead of deprecated strings.Replace with -1
- Add doc comments to all exported symbols
- Add 27 unit tests + 1 benchmark
This commit is contained in:
ginuerzh
2026-05-25 23:03:19 +08:00
parent f20e151cfa
commit 4443b0b964
6 changed files with 864 additions and 10 deletions
+3
View File
@@ -12,6 +12,7 @@ import (
"google.golang.org/grpc"
)
// grpcPlugin implements router.Router via a gRPC plugin connection.
type grpcPlugin struct {
conn grpc.ClientConnInterface
client proto.RouterClient
@@ -44,6 +45,7 @@ func NewGRPCPlugin(name string, addr string, opts ...plugin.Option) router.Route
return p
}
// GetRoute queries the gRPC plugin for the route to the given destination.
func (p *grpcPlugin) GetRoute(ctx context.Context, dst string, opts ...router.Option) *router.Route {
if p.client == nil {
return nil
@@ -67,6 +69,7 @@ func (p *grpcPlugin) GetRoute(ctx context.Context, dst string, opts ...router.Op
return xrouter.ParseRoute(r.Dst, r.Gateway)
}
// Close closes the underlying gRPC connection.
func (p *grpcPlugin) Close() error {
if p.conn == nil {
return nil