Skip to content

Commit 9b50dbe

Browse files
Merge pull request Project-HAMi#35 from DSFans2014/refactor/defer_lock
refactor: defer `ReleaseNodeLock`
2 parents bd1aab9 + cee6065 commit 9b50dbe

1 file changed

Lines changed: 9 additions & 16 deletions

File tree

internal/server/server.go

Lines changed: 9 additions & 16 deletions
Original file line numberDiff line numberDiff line change
@@ -340,29 +340,25 @@ func (ps *PluginServer) GetPreferredAllocation(context.Context, *v1beta1.Preferr
340340

341341
func (ps *PluginServer) Allocate(ctx context.Context, reqs *v1beta1.AllocateRequest) (*v1beta1.AllocateResponse, error) {
342342
klog.V(5).Infof("Allocate: %v", reqs)
343+
success := false
344+
var pod *v1.Pod
345+
defer func() {
346+
lockerr := nodelock.ReleaseNodeLock(ps.nodeName, NodeLockAscend, pod, success)
347+
if lockerr != nil {
348+
klog.Errorf("failed to release lock:%s", lockerr.Error())
349+
}
350+
}()
343351
pod, err := util.GetPendingPod(ctx, ps.nodeName)
344352
if err != nil {
345353
klog.Errorf("get pending pod error: %v", err)
346-
lockerr := nodelock.ReleaseNodeLock(ps.nodeName, NodeLockAscend, pod, false)
347-
if lockerr != nil {
348-
klog.Errorf("failed to release lock:%s", err.Error())
349-
}
350354
return nil, fmt.Errorf("get pending pod error: %v", err)
351355
}
352356
resp := v1beta1.ContainerAllocateResponse{}
353357
IDs, temps, err := ps.parsePodAnnotation(pod)
354358
if err != nil {
355-
lockerr := nodelock.ReleaseNodeLock(ps.nodeName, NodeLockAscend, pod, false)
356-
if lockerr != nil {
357-
klog.Errorf("failed to release lock:%s", err.Error())
358-
}
359359
return nil, fmt.Errorf("parse pod annotation error: %v", err)
360360
}
361361
if len(IDs) == 0 {
362-
lockerr := nodelock.ReleaseNodeLock(ps.nodeName, NodeLockAscend, pod, false)
363-
if lockerr != nil {
364-
klog.Errorf("failed to release lock:%s", err.Error())
365-
}
366362
return nil, fmt.Errorf("empty id from pod annotation")
367363
}
368364
ascendVisibleDevices := fmt.Sprintf("%d", IDs[0])
@@ -382,10 +378,7 @@ func (ps *PluginServer) Allocate(ctx context.Context, reqs *v1beta1.AllocateRequ
382378
resp.Envs["ASCEND_VNPU_SPECS"] = ascendVNPUSpec
383379
}
384380
klog.V(5).Infof("allocate response: %v", resp)
385-
lockerr := nodelock.ReleaseNodeLock(ps.nodeName, NodeLockAscend, pod, true)
386-
if lockerr != nil {
387-
klog.Errorf("failed to release lock:%s", err.Error())
388-
}
381+
success = true
389382
return &v1beta1.AllocateResponse{ContainerResponses: []*v1beta1.ContainerAllocateResponse{&resp}}, nil
390383
}
391384

0 commit comments

Comments
 (0)