From 9bfed983405e75803b1d92ea8b842a7fb8a2584f Mon Sep 17 00:00:00 2001 From: luomengY <2938893385@qq.com> Date: Thu, 21 Dec 2023 15:32:02 +0800 Subject: Add a retry mechanism to solve situations where the device is deployed before the devicemodel. Signed-off-by: luomengY <2938893385@qq.com> --- cloud/pkg/devicecontroller/controller/downstream.go | 21 ++++++++++++++++++--- 1 file changed, 18 insertions(+), 3 deletions(-) (limited to 'cloud') diff --git a/cloud/pkg/devicecontroller/controller/downstream.go b/cloud/pkg/devicecontroller/controller/downstream.go index 43793fddd..107787048 100644 --- a/cloud/pkg/devicecontroller/controller/downstream.go +++ b/cloud/pkg/devicecontroller/controller/downstream.go @@ -17,10 +17,12 @@ limitations under the License. package controller import ( + "fmt" "reflect" "sync" "time" + "github.com/avast/retry-go" "github.com/google/uuid" "k8s.io/apimachinery/pkg/runtime/schema" "k8s.io/apimachinery/pkg/watch" @@ -308,9 +310,22 @@ func (dc *DownstreamController) sendDeviceModelMsg(device *v1beta1.Device, opera if device == nil || device.Spec.DeviceModelRef == nil { return } - edgeDeviceModel, ok := dc.deviceModelManager.DeviceModel.Load(device.Spec.DeviceModelRef.Name) - if !ok { - klog.Warningf("not found device model for device: %s, operation: %s", device.Name, operation) + var edgeDeviceModel any + var ok bool + err := retry.Do( + func() error { + edgeDeviceModel, ok = dc.deviceModelManager.DeviceModel.Load(device.Spec.DeviceModelRef.Name) + if !ok { + return fmt.Errorf("not found device model for device: %s, operation: %s", device.Name, operation) + } + return nil + }, + retry.Delay(1*time.Second), + retry.Attempts(10), + retry.DelayType(retry.FixedDelay), + ) + if err != nil { + klog.Warningf(err.Error()) return } -- cgit v1.2.3