🔧 Add nil logger handling in NewConsumerManager and NewStreamManager; update integration test to pass config

This commit is contained in:
windyboy
2025-12-24 14:53:14 +08:00
parent 9a5f8a7d72
commit cf8e196248
3 changed files with 35 additions and 2 deletions
+31 -1
View File
@@ -19,6 +19,9 @@ type ConsumerManager struct {
// NewConsumerManager creates a new consumer manager
func NewConsumerManager(js nats.JetStreamContext, streamName, consumerName, subject string, logger *zap.Logger) *ConsumerManager {
if logger == nil {
logger = zap.NewNop()
}
return &ConsumerManager{
js: js,
streamName: streamName,
@@ -66,5 +69,32 @@ func (cm *ConsumerManager) CreatePullSubscription() (*nats.Subscription, error)
// CreatePullSubscriptionWithRecovery creates a pull subscription
func (cm *ConsumerManager) CreatePullSubscriptionWithRecovery(streamManager *StreamManager, consumerConfig *nats.ConsumerConfig) (*nats.Subscription, error) {
return cm.CreatePullSubscription()
sub, err := cm.CreatePullSubscription()
if err == nil {
return sub, nil
}
// Attempt recovery when the consumer or stream is missing.
if !errors.Is(err, nats.ErrConsumerNotFound) && !errors.Is(err, nats.ErrStreamNotFound) {
return nil, fmt.Errorf("create pull subscription: %w", err)
}
if streamManager != nil {
if streamErr := streamManager.EnsureStream(nil); streamErr != nil {
return nil, fmt.Errorf("recover stream %s: %w", cm.streamName, streamErr)
}
}
if consumerConfig == nil {
return nil, fmt.Errorf("consumer config is required for recovery")
}
if err := cm.EnsureConsumer(consumerConfig); err != nil {
return nil, fmt.Errorf("recover consumer %s: %w", cm.consumerName, err)
}
sub, err = cm.CreatePullSubscription()
if err != nil {
return nil, fmt.Errorf("create pull subscription after recovery: %w", err)
}
return sub, nil
}
+3
View File
@@ -29,6 +29,9 @@ type StreamConfig struct {
// NewStreamManager creates a new stream manager
func NewStreamManager(js nats.JetStreamContext, streamName string, subjects []string, logger *zap.Logger) *StreamManager {
if logger == nil {
logger = zap.NewNop()
}
return &StreamManager{
js: js,
streamName: streamName,
@@ -82,7 +82,7 @@ func TestJetStreamToTimescaleFlow(t *testing.T) {
}
telemetryRecorder := telemetryinfra.NewNoop()
proc := app.NewMessageProcessor(parser.ProvideParser(), repo, publisher, telemetryRecorder, logger)
proc := app.NewMessageProcessor(parser.ProvideParser(), repo, publisher, telemetryRecorder, logger, cfg)
consumer, err := natsinfra.ProvideConsumer(conn, js, proc, cfg, telemetryRecorder, logger)
if err != nil {
t.Fatalf("failed to init consumer: %v", err)