mirror of
https://github.com/kubernetes/client-go.git
synced 2025-06-25 14:41:53 +00:00
chore: Add VeryShortWatchError typed error
- Add a new VeryShortWatchError struct for error matching, returned by `handleAnyWatch`, up through `Reflector.ListAndWatch`. - Update test expectations to match exact errors. Kubernetes-commit: 6eff9db0f10db72f2c64390e106a80621d136439
This commit is contained in:
parent
1601be3d14
commit
921628ecd6
15
tools/cache/reflector.go
vendored
15
tools/cache/reflector.go
vendored
@ -960,7 +960,7 @@ loop:
|
|||||||
|
|
||||||
watchDuration := clock.Since(start)
|
watchDuration := clock.Since(start)
|
||||||
if watchDuration < 1*time.Second && eventCount == 0 {
|
if watchDuration < 1*time.Second && eventCount == 0 {
|
||||||
return watchListBookmarkReceived, fmt.Errorf("very short watch: %s: Unexpected watch close - watch lasted less than a second and no items received", name)
|
return watchListBookmarkReceived, &VeryShortWatchError{Name: name}
|
||||||
}
|
}
|
||||||
klog.FromContext(ctx).V(4).Info("Watch close", "reflector", name, "type", expectedTypeName, "totalItems", eventCount)
|
klog.FromContext(ctx).V(4).Info("Watch close", "reflector", name, "type", expectedTypeName, "totalItems", eventCount)
|
||||||
return watchListBookmarkReceived, nil
|
return watchListBookmarkReceived, nil
|
||||||
@ -1162,3 +1162,16 @@ type noopTicker struct{}
|
|||||||
func (t *noopTicker) C() <-chan time.Time { return nil }
|
func (t *noopTicker) C() <-chan time.Time { return nil }
|
||||||
|
|
||||||
func (t *noopTicker) Stop() {}
|
func (t *noopTicker) Stop() {}
|
||||||
|
|
||||||
|
// VeryShortWatchError is returned when the watch result channel is closed
|
||||||
|
// within one second, without having sent any events.
|
||||||
|
type VeryShortWatchError struct {
|
||||||
|
// Name of the Reflector
|
||||||
|
Name string
|
||||||
|
}
|
||||||
|
|
||||||
|
// Error implements the error interface
|
||||||
|
func (e *VeryShortWatchError) Error() string {
|
||||||
|
return fmt.Sprintf("very short watch: %s: Unexpected watch close - "+
|
||||||
|
"watch lasted less than a second and no items received", e.Name)
|
||||||
|
}
|
||||||
|
6
tools/cache/reflector_test.go
vendored
6
tools/cache/reflector_test.go
vendored
@ -291,8 +291,7 @@ func TestReflectorHandleWatchResultChanClosedBefore(t *testing.T) {
|
|||||||
// Simulate the result channel being closed by the producer before handleWatch is called.
|
// Simulate the result channel being closed by the producer before handleWatch is called.
|
||||||
close(resultCh)
|
close(resultCh)
|
||||||
err := handleWatch(ctx, time.Now(), fw, s, g.expectedType, g.expectedGVK, g.name, g.typeDescription, g.setLastSyncResourceVersion, g.clock, nevererrc)
|
err := handleWatch(ctx, time.Now(), fw, s, g.expectedType, g.expectedGVK, g.name, g.typeDescription, g.setLastSyncResourceVersion, g.clock, nevererrc)
|
||||||
// TODO(karlkfi): Add exact error type for "very short watch"
|
require.Equal(t, &VeryShortWatchError{Name: g.name}, err)
|
||||||
require.Error(t, err)
|
|
||||||
// Ensure handleWatch calls ResultChan and Stop
|
// Ensure handleWatch calls ResultChan and Stop
|
||||||
assert.Equal(t, []string{"ResultChan", "Stop"}, calls)
|
assert.Equal(t, []string{"ResultChan", "Stop"}, calls)
|
||||||
}
|
}
|
||||||
@ -323,8 +322,7 @@ func TestReflectorHandleWatchResultChanClosedAfter(t *testing.T) {
|
|||||||
},
|
},
|
||||||
}
|
}
|
||||||
err := handleWatch(ctx, time.Now(), fw, s, g.expectedType, g.expectedGVK, g.name, g.typeDescription, g.setLastSyncResourceVersion, g.clock, nevererrc)
|
err := handleWatch(ctx, time.Now(), fw, s, g.expectedType, g.expectedGVK, g.name, g.typeDescription, g.setLastSyncResourceVersion, g.clock, nevererrc)
|
||||||
// TODO(karlkfi): Add exact error type for "very short watch"
|
require.Equal(t, &VeryShortWatchError{Name: g.name}, err)
|
||||||
require.Error(t, err)
|
|
||||||
// Ensure handleWatch calls ResultChan and Stop
|
// Ensure handleWatch calls ResultChan and Stop
|
||||||
assert.Equal(t, []string{"ResultChan", "Stop"}, calls)
|
assert.Equal(t, []string{"ResultChan", "Stop"}, calls)
|
||||||
}
|
}
|
||||||
|
Loading…
Reference in New Issue
Block a user