diff options
| author | KubeEdge Bot <48982446+kubeedge-bot@users.noreply.github.com> | 2024-04-22 10:16:00 +0800 |
|---|---|---|
| committer | GitHub <noreply@github.com> | 2024-04-22 10:16:00 +0800 |
| commit | d794090270ae1c47f2b7c72a4383591eb99002c2 (patch) | |
| tree | af06187b96bcd27921b9df353dfe351675dbf33e /cloud/pkg/devicecontroller/controller/upstream.go | |
| parent | Merge pull request #5548 from Shelley-BaoYue/automated-cherry-pick-of-#5530-u... (diff) | |
| parent | Fix the status reporting of device to avoid issues defined by twin. (diff) | |
| download | kubeedge-1.16.2.tar.gz | |
Merge pull request #5545 from luomengY/automated-cherry-pick-of-#5467-upstream-release-1.16v1.16.2
Automated cherry pick of #5467: Fix the status reporting of device to avoid issues defined by twin.
Diffstat (limited to 'cloud/pkg/devicecontroller/controller/upstream.go')
| -rw-r--r-- | cloud/pkg/devicecontroller/controller/upstream.go | 27 |
1 files changed, 22 insertions, 5 deletions
diff --git a/cloud/pkg/devicecontroller/controller/upstream.go b/cloud/pkg/devicecontroller/controller/upstream.go index 46fea8db2..6f2298095 100644 --- a/cloud/pkg/devicecontroller/controller/upstream.go +++ b/cloud/pkg/devicecontroller/controller/upstream.go @@ -135,7 +135,7 @@ func (uc *UpstreamController) updateDeviceStatus() { } deviceStatus := &DeviceStatus{Status: cacheDevice.Status} for twinName, twin := range msgTwin.Twin { - deviceTwin := findTwinByName(twinName, deviceStatus.Status.Twins) + deviceTwin := findOrCreateTwinByName(twinName, cacheDevice.Spec.Properties, deviceStatus) if deviceTwin != nil { if twin.Actual != nil && twin.Actual.Value != nil { reported := v1beta1.TwinProperty{} @@ -226,10 +226,27 @@ func NewUpstreamController(dc *DownstreamController) (*UpstreamController, error return uc, nil } -func findTwinByName(twinName string, twins []v1beta1.Twin) *v1beta1.Twin { - for i := range twins { - if twinName == twins[i].PropertyName { - return &twins[i] +func findOrCreateTwinByName(twinName string, properties []v1beta1.DeviceProperty, deviceStatus *DeviceStatus) *v1beta1.Twin { + for i := range properties { + if twinName == properties[i].Name { + twin := findTwinByName(twinName, deviceStatus) + if twin != nil { + return twin + } + twin = &v1beta1.Twin{ + PropertyName: twinName, + } + deviceStatus.Status.Twins = append(deviceStatus.Status.Twins, *twin) + return twin + } + } + return nil +} + +func findTwinByName(twinName string, deviceStatus *DeviceStatus) *v1beta1.Twin { + for i := range deviceStatus.Status.Twins { + if twinName == deviceStatus.Status.Twins[i].PropertyName { + return &deviceStatus.Status.Twins[i] } } return nil |
