@@ -26,6 +26,7 @@ import (
2626 informers "github.com/OpenCIDN/cidn/pkg/informers/externalversions/task/v1alpha1"
2727 "github.com/OpenCIDN/cidn/pkg/internal/utils"
2828 apierrors "k8s.io/apimachinery/pkg/api/errors"
29+ metav1 "k8s.io/apimachinery/pkg/apis/meta/v1"
2930 "k8s.io/apimachinery/pkg/labels"
3031 "k8s.io/client-go/tools/cache"
3132 "k8s.io/client-go/util/workqueue"
@@ -54,28 +55,18 @@ func NewChunkFromBearerController(
5455 bearerInformer : sharedInformerFactory .Task ().V1alpha1 ().Bearers (),
5556 client : client ,
5657 workqueue : workqueue .NewTypedDelayingQueue [string ](),
57- concurrency : 6 ,
58+ concurrency : 5 ,
5859 }
5960
6061 c .bearerInformer .Informer ().AddEventHandler (cache.ResourceEventHandlerFuncs {
6162 AddFunc : func (obj interface {}) {
6263 bearer := obj .(* v1alpha1.Bearer )
6364 key := bearer .Name
64-
65- if bearer .Status .Phase != v1alpha1 .BearerPhaseSucceeded {
66- return
67- }
68-
6965 c .workqueue .Add (key )
7066 },
7167 UpdateFunc : func (oldObj , newObj interface {}) {
7268 bearer := newObj .(* v1alpha1.Bearer )
7369 key := bearer .Name
74-
75- if bearer .Status .Phase != v1alpha1 .BearerPhaseSucceeded {
76- return
77- }
78-
7970 c .workqueue .Add (key )
8071 },
8172 })
@@ -108,40 +99,64 @@ func (c *ChunkFromBearerController) processNextItem(ctx context.Context) bool {
10899}
109100
110101func (c * ChunkFromBearerController ) handler (ctx context.Context , name string ) {
111- chunkList , err := c .chunkInformer .Lister ().List ( labels . Everything () )
102+ bearer , err := c .bearerInformer .Lister ().Get ( name )
112103 if err != nil {
113- c .workqueue .AddAfter (name , 5 * time .Second )
114- klog .Errorf ("failed to list chunks: %v" , err )
115- return
104+ if ! apierrors .IsNotFound (err ) {
105+ c .workqueue .AddAfter (name , 5 * time .Second )
106+ klog .Errorf ("failed to get bearer '%s': %v" , name , err )
107+ return
108+ }
109+ bearer , err = c .client .TaskV1alpha1 ().Bearers ().Get (ctx , name , metav1.GetOptions {})
110+ if err != nil {
111+ if apierrors .IsNotFound (err ) {
112+ return
113+ }
114+ c .workqueue .AddAfter (name , 5 * time .Second )
115+ klog .Errorf ("failed to get bearer '%s' from API server: %v" , name , err )
116+ return
117+ }
116118 }
117119
118- var retry bool
119- for _ , chunk := range chunkList {
120- if chunk . Spec . BearerName != name {
121- continue
122- }
123- if chunk . Status . Phase != v1alpha1 . ChunkPhaseFailed {
124- continue
120+ switch bearer . Status . Phase {
121+ case v1alpha1 . BearerPhaseSucceeded :
122+ chunkList , err := c . chunkInformer . Lister (). List ( labels . Everything ())
123+ if err != nil {
124+ c . workqueue . AddAfter ( name , 5 * time . Second )
125+ klog . Errorf ( "failed to list chunks: %v" , err )
126+ return
125127 }
126128
127- if ! chunk .Status .Retryable {
128- continue
129+ var retry bool
130+ for _ , chunk := range chunkList {
131+ if chunk .Spec .BearerName != name {
132+ continue
133+ }
134+ if chunk .Status .Phase != v1alpha1 .ChunkPhaseFailed {
135+ continue
136+ }
137+
138+ if ! chunk .Status .Retryable {
139+ continue
140+ }
141+
142+ _ , err = utils .UpdateResourceStatusWithRetry (ctx , c .client .TaskV1alpha1 ().Chunks (), chunk , func (ch * v1alpha1.Chunk ) * v1alpha1.Chunk {
143+ ch .Status .HandlerName = ""
144+ ch .Status .Phase = v1alpha1 .ChunkPhasePending
145+ ch .Status .Progress = 0
146+ ch .Status .Conditions = nil
147+ return ch
148+ })
149+ if err != nil && ! apierrors .IsNotFound (err ) {
150+ klog .Errorf ("failed to release chunk %s: %v" , chunk .Name , err )
151+ retry = true
152+ }
129153 }
130154
131- _ , err = utils .UpdateResourceStatusWithRetry (ctx , c .client .TaskV1alpha1 ().Chunks (), chunk , func (ch * v1alpha1.Chunk ) * v1alpha1.Chunk {
132- ch .Status .HandlerName = ""
133- ch .Status .Phase = v1alpha1 .ChunkPhasePending
134- ch .Status .Progress = 0
135- ch .Status .Conditions = nil
136- return ch
137- })
138- if err != nil && ! apierrors .IsNotFound (err ) {
139- klog .Errorf ("failed to release chunk %s: %v" , chunk .Name , err )
140- retry = true
155+ if retry {
156+ c .workqueue .AddAfter (name , 5 * time .Second )
141157 }
158+ case v1alpha1 .BearerPhaseRunning , v1alpha1 .BearerPhaseUnknown :
159+ c .workqueue .AddAfter (name , 10 * time .Second )
142160 }
143161
144- if retry {
145- c .workqueue .AddAfter (name , 5 * time .Second )
146- }
147162}
0 commit comments