Skip to content

Commit 9abbcb5

Browse files
authored
remove panic chack code (#33)
Signed-off-by: Jeeva Kandasamy <jkandasa@gmail.com>
1 parent 0bdbe31 commit 9abbcb5

File tree

2 files changed

+24
-96
lines changed

2 files changed

+24
-96
lines changed

pkg/utils/queue/bonded_queue.go

Lines changed: 24 additions & 47 deletions
Original file line numberDiff line numberDiff line change
@@ -127,28 +127,21 @@ func (q *BoundedQueue) StartConsumersWithFactory(num int, factory func() Consume
127127
select {
128128
case <-time.After(retryDelay):
129129
retryAttemptNumber++
130-
func() {
131-
defer func() {
132-
if r := recover(); r != nil {
133-
// Panic occurred, treat as error by not clearing hasRetry
134-
}
135-
}()
136-
err := consumer.Consume(retryItem)
137-
if err != nil {
138-
// Still failing, increase delay (exponential backoff)
139-
retryDelay = retryDelay * 2
140-
if retryDelay > q.retryConfig.delay {
141-
retryDelay = q.retryConfig.delay
142-
}
143-
} else {
144-
// Success! Clear retry state and decrement size
145-
hasRetry = false
146-
retryItem = nil
147-
retryDelay = time.Millisecond * 100
148-
retryAttemptNumber = 0
149-
q.size.Add(-1)
130+
err := consumer.Consume(retryItem)
131+
if err != nil {
132+
// Still failing, increase delay (exponential backoff)
133+
retryDelay = retryDelay * 2
134+
if retryDelay > q.retryConfig.delay {
135+
retryDelay = q.retryConfig.delay
150136
}
151-
}()
137+
} else {
138+
// Success! Clear retry state and decrement size
139+
hasRetry = false
140+
retryItem = nil
141+
retryDelay = time.Millisecond * 100
142+
retryAttemptNumber = 0
143+
q.size.Add(-1)
144+
}
152145
case <-q.stopCh:
153146
// Queue is closing
154147
if hasRetry {
@@ -161,24 +154,15 @@ func (q *BoundedQueue) StartConsumersWithFactory(num int, factory func() Consume
161154
select {
162155
case item, ok := <-queue:
163156
if ok {
164-
func() {
165-
defer func() {
166-
if r := recover(); r != nil {
167-
// Panic occurred, treat as error
168-
retryItem = item
169-
hasRetry = true
170-
}
171-
}()
172-
err := consumer.Consume(item)
173-
if err != nil {
174-
// Failed, set as retry item
175-
retryItem = item
176-
hasRetry = true
177-
} else {
178-
// Success, decrement size
179-
q.size.Add(-1)
180-
}
181-
}()
157+
err := consumer.Consume(item)
158+
if err != nil {
159+
// Failed, set as retry item
160+
retryItem = item
161+
hasRetry = true
162+
} else {
163+
// Success, decrement size
164+
q.size.Add(-1)
165+
}
182166
} else {
183167
// channel closed, finish worker
184168
return
@@ -194,14 +178,7 @@ func (q *BoundedQueue) StartConsumersWithFactory(num int, factory func() Consume
194178
select {
195179
case item, ok := <-queue:
196180
if ok {
197-
func() {
198-
defer func() {
199-
if r := recover(); r != nil {
200-
// Panic occurred, but with retry disabled we still decrement size
201-
}
202-
}()
203-
_ = consumer.Consume(item)
204-
}()
181+
_ = consumer.Consume(item)
205182
q.size.Add(-1)
206183
} else {
207184
// channel closed, finish worker

pkg/utils/queue/bonded_queue_test.go

Lines changed: 0 additions & 49 deletions
Original file line numberDiff line numberDiff line change
@@ -558,55 +558,6 @@ func TestConsumerFunc(t *testing.T) {
558558
})
559559
}
560560

561-
// TestBoundedQueuePanicHandling tests panic recovery in consumers
562-
func TestBoundedQueuePanicHandling(t *testing.T) {
563-
tests := []struct {
564-
name string
565-
retryEnabled bool
566-
expectedMin int // Minimum expected processed items
567-
}{
568-
{"panic with retry disabled", false, 1},
569-
{"panic with retry enabled", true, 0}, // With retry, panic item may be retried and dropped
570-
}
571-
572-
for _, tt := range tests {
573-
t.Run(tt.name, func(t *testing.T) {
574-
var processed int32
575-
consumer := func(item interface{}) error {
576-
if item == "panic" {
577-
panic("test panic")
578-
}
579-
atomic.AddInt32(&processed, 1)
580-
return nil
581-
}
582-
583-
var q *BoundedQueue
584-
if tt.retryEnabled {
585-
q = NewBoundedQueueWithRetry(10, nil, 2, 10*time.Millisecond)
586-
} else {
587-
q = NewBoundedQueue(10, nil)
588-
}
589-
defer q.Stop()
590-
591-
q.StartConsumers(1, consumer)
592-
time.Sleep(10 * time.Millisecond)
593-
594-
// This should not crash the test
595-
q.Produce("panic")
596-
time.Sleep(200 * time.Millisecond) // Longer wait for retry scenarios
597-
598-
// Queue should still be functional
599-
q.Produce("normal")
600-
time.Sleep(200 * time.Millisecond)
601-
602-
finalProcessed := atomic.LoadInt32(&processed)
603-
if int(finalProcessed) < tt.expectedMin {
604-
t.Errorf("Expected at least %d processed items, got %d", tt.expectedMin, finalProcessed)
605-
}
606-
})
607-
}
608-
}
609-
610561
// min helper function for Go versions that don't have it built-in
611562
func min(a, b int) int {
612563
if a < b {

0 commit comments

Comments
 (0)