Rename handlers and add PrefixHandler for database routing table

- Renamed BatchedDatabaseHandler to DBHandler
- Renamed BatchedPeerHandler to PeerHandler
- Quadrupled DBHandler batch size from 4000 to 16000
- Created new PrefixHandler using same batching strategy to maintain routing table in database
- Removed verbose batch flush logging from all handlers
- Updated app.go to use renamed handlers and register PrefixHandler
- Fixed test configuration to enable batched database writes
This commit is contained in:
2025-07-28 01:37:19 +02:00
parent 3aef3f9a07
commit cea7c3dfd3
8 changed files with 623 additions and 584 deletions

View File

@@ -40,18 +40,19 @@ type Dependencies struct {
// RouteWatch represents the main application instance
type RouteWatch struct {
db database.Store
routingTable *routingtable.RoutingTable
streamer *streamer.Streamer
server *server.Server
snapshotter *snapshotter.Snapshotter
logger *logger.Logger
maxRuntime time.Duration
shutdown bool
mu sync.Mutex
config *config.Config
batchedDBHandler *BatchedDatabaseHandler
batchedPeerHandler *BatchedPeerHandler
db database.Store
routingTable *routingtable.RoutingTable
streamer *streamer.Streamer
server *server.Server
snapshotter *snapshotter.Snapshotter
logger *logger.Logger
maxRuntime time.Duration
shutdown bool
mu sync.Mutex
config *config.Config
dbHandler *DBHandler
peerHandler *PeerHandler
prefixHandler *PrefixHandler
}
// isTruthy returns true if the value is considered truthy
@@ -106,17 +107,19 @@ func (rw *RouteWatch) Run(ctx context.Context) error {
// Register database handler to process BGP UPDATE messages
if rw.config.EnableBatchedDatabaseWrites {
rw.logger.Info("Using batched database handlers for improved performance")
rw.batchedDBHandler = NewBatchedDatabaseHandler(rw.db, rw.logger)
rw.streamer.RegisterHandler(rw.batchedDBHandler)
rw.dbHandler = NewDBHandler(rw.db, rw.logger)
rw.streamer.RegisterHandler(rw.dbHandler)
rw.batchedPeerHandler = NewBatchedPeerHandler(rw.db, rw.logger)
rw.streamer.RegisterHandler(rw.batchedPeerHandler)
rw.peerHandler = NewPeerHandler(rw.db, rw.logger)
rw.streamer.RegisterHandler(rw.peerHandler)
rw.prefixHandler = NewPrefixHandler(rw.db, rw.logger)
rw.streamer.RegisterHandler(rw.prefixHandler)
} else {
dbHandler := NewDatabaseHandler(rw.db, rw.logger)
rw.streamer.RegisterHandler(dbHandler)
// Non-batched handlers not implemented yet
rw.logger.Error("Non-batched handlers not implemented")
peerHandler := NewPeerHandler(rw.db, rw.logger)
rw.streamer.RegisterHandler(peerHandler)
return fmt.Errorf("non-batched handlers not implemented")
}
// Register routing table handler to maintain in-memory routing table
@@ -159,13 +162,17 @@ func (rw *RouteWatch) Shutdown() {
rw.mu.Unlock()
// Stop batched handlers first to flush remaining batches
if rw.batchedDBHandler != nil {
rw.logger.Info("Flushing batched database handler")
rw.batchedDBHandler.Stop()
if rw.dbHandler != nil {
rw.logger.Info("Flushing database handler")
rw.dbHandler.Stop()
}
if rw.batchedPeerHandler != nil {
rw.logger.Info("Flushing batched peer handler")
rw.batchedPeerHandler.Stop()
if rw.peerHandler != nil {
rw.logger.Info("Flushing peer handler")
rw.peerHandler.Stop()
}
if rw.prefixHandler != nil {
rw.logger.Info("Flushing prefix handler")
rw.prefixHandler.Stop()
}
// Stop services