diff options
| author | wbc6080 <wangbincheng4@huawei.com> | 2023-12-02 16:32:21 +0800 |
|---|---|---|
| committer | wbc6080 <wangbincheng4@huawei.com> | 2024-01-18 11:27:34 +0800 |
| commit | d01a767ea2510ec33320ba95f5ed797a81eae2c2 (patch) | |
| tree | b64604bca9b352a7dbc0e440ffe48aa5d2ff396f | |
| parent | Merge pull request #5330 from ZhengXinwei-F/task-manager (diff) | |
| download | kubeedge-d01a767ea2510ec33320ba95f5ed797a81eae2c2.tar.gz | |
update dmi server to get namespace
Signed-off-by: wbc6080 <wangbincheng4@huawei.com>
| -rw-r--r-- | cloud/pkg/devicecontroller/controller/downstream.go | 19 | ||||
| -rw-r--r-- | cloud/pkg/devicecontroller/manager/common.go | 5 | ||||
| -rw-r--r-- | edge/pkg/devicetwin/dmiclient/client.go | 14 | ||||
| -rw-r--r-- | edge/pkg/devicetwin/dmiserver/server.go | 25 | ||||
| -rw-r--r-- | edge/pkg/devicetwin/dtcommon/util.go | 2 | ||||
| -rw-r--r-- | edge/pkg/devicetwin/dtmanager/dmiworker.go | 21 | ||||
| -rw-r--r-- | pkg/util/util.go | 5 |
7 files changed, 54 insertions, 37 deletions
diff --git a/cloud/pkg/devicecontroller/controller/downstream.go b/cloud/pkg/devicecontroller/controller/downstream.go index f087fd567..20bc84ad1 100644 --- a/cloud/pkg/devicecontroller/controller/downstream.go +++ b/cloud/pkg/devicecontroller/controller/downstream.go @@ -39,6 +39,7 @@ import ( "github.com/kubeedge/kubeedge/cloud/pkg/devicecontroller/types" "github.com/kubeedge/kubeedge/pkg/apis/devices/v1beta1" crdinformers "github.com/kubeedge/kubeedge/pkg/client/informers/externalversions" + "github.com/kubeedge/kubeedge/pkg/util" ) // DownstreamController watch kubernetes api server and send change to edge @@ -80,21 +81,21 @@ func (dc *DownstreamController) syncDeviceModel() { // deviceModelAdded is function to process addition of new deviceModel in apiserver func (dc *DownstreamController) deviceModelAdded(deviceModel *v1beta1.DeviceModel) { // nothing to do when deviceModel added, only add in map - deviceModelID := manager.GetResourceID(deviceModel.Namespace, deviceModel.Name) + deviceModelID := util.GetResourceID(deviceModel.Namespace, deviceModel.Name) dc.deviceModelManager.DeviceModel.Store(deviceModelID, deviceModel) } // deviceModelUpdated is function to process updated deviceModel func (dc *DownstreamController) deviceModelUpdated(deviceModel *v1beta1.DeviceModel) { // nothing to do when deviceModel updated, only add in map - deviceModelID := manager.GetResourceID(deviceModel.Namespace, deviceModel.Name) + deviceModelID := util.GetResourceID(deviceModel.Namespace, deviceModel.Name) dc.deviceModelManager.DeviceModel.Store(deviceModelID, deviceModel) } // deviceModelDeleted is function to process deleted deviceModel func (dc *DownstreamController) deviceModelDeleted(deviceModel *v1beta1.DeviceModel) { // TODO: Need to use finalizer like method to delete all devices referring to this model. Need to come up with a design. - deviceModelID := manager.GetResourceID(deviceModel.Namespace, deviceModel.Name) + deviceModelID := util.GetResourceID(deviceModel.Namespace, deviceModel.Name) dc.deviceModelManager.DeviceModel.Delete(deviceModelID) } @@ -127,7 +128,7 @@ func (dc *DownstreamController) syncDevice() { // deviceAdded creates a device, adds in deviceManagers map, send a message to edge node if node selector is present. func (dc *DownstreamController) deviceAdded(device *v1beta1.Device) { - deviceID := manager.GetResourceID(device.Namespace, device.Name) + deviceID := util.GetResourceID(device.Namespace, device.Name) dc.deviceManager.Device.Store(deviceID, device) if device.Spec.NodeName != "" { edgeDevice := createDevice(device) @@ -163,7 +164,7 @@ func (dc *DownstreamController) deviceAdded(device *v1beta1.Device) { func createDevice(device *v1beta1.Device) types.Device { edgeDevice := types.Device{ // ID and name can be used as ID as we are using CRD and name(key in ETCD) will always be unique - ID: manager.GetResourceID(device.Namespace, device.Name), + ID: util.GetResourceID(device.Namespace, device.Name), Name: device.Name, } @@ -180,7 +181,7 @@ func isExistModel(deviceMap *sync.Map, device *v1beta1.Device) bool { var res bool targetNode := device.Spec.NodeName modelName := device.Spec.DeviceModelRef.Name - deviceID := manager.GetResourceID(device.Namespace, device.Name) + deviceID := util.GetResourceID(device.Namespace, device.Name) // To find another device in deviceMap that uses the same deviceModel with exclude current device deviceMap.Range(func(k, v interface{}) bool { if k == deviceID { @@ -207,7 +208,7 @@ func isExistModel(deviceMap *sync.Map, device *v1beta1.Device) bool { // If NodeName is updated, call add device for newNode, deleteDevice for old Node. // If Spec is updated, send update message to edge func (dc *DownstreamController) deviceUpdated(device *v1beta1.Device) { - deviceID := manager.GetResourceID(device.Namespace, device.Name) + deviceID := util.GetResourceID(device.Namespace, device.Name) value, ok := dc.deviceManager.Device.Load(deviceID) dc.deviceManager.Device.Store(deviceID, device) if ok { @@ -244,7 +245,7 @@ func isDeviceUpdated(oldTwin *v1beta1.Device, newTwin *v1beta1.Device) bool { // deviceDeleted send a deleted message to the edgeNode and deletes the device from the deviceManager.Device map func (dc *DownstreamController) deviceDeleted(device *v1beta1.Device) { - deviceID := manager.GetResourceID(device.Namespace, device.Name) + deviceID := util.GetResourceID(device.Namespace, device.Name) dc.deviceManager.Device.Delete(deviceID) if device.Spec.NodeName != "" { @@ -318,7 +319,7 @@ func (dc *DownstreamController) sendDeviceModelMsg(device *v1beta1.Device, opera if device == nil || device.Spec.DeviceModelRef == nil { return } - deviceModelID := manager.GetResourceID(device.Namespace, device.Spec.DeviceModelRef.Name) + deviceModelID := util.GetResourceID(device.Namespace, device.Spec.DeviceModelRef.Name) var edgeDeviceModel any var ok bool err := retry.Do( diff --git a/cloud/pkg/devicecontroller/manager/common.go b/cloud/pkg/devicecontroller/manager/common.go index 80bff1e95..3954a0704 100644 --- a/cloud/pkg/devicecontroller/manager/common.go +++ b/cloud/pkg/devicecontroller/manager/common.go @@ -44,8 +44,3 @@ func (c *CommonResourceEventHandler) OnDelete(obj interface{}) { func NewCommonResourceEventHandler(events chan watch.Event) *CommonResourceEventHandler { return &CommonResourceEventHandler{events: events} } - -// GetResourceID return resource ID -func GetResourceID(namespace, name string) string { - return namespace + "/" + name -} diff --git a/edge/pkg/devicetwin/dmiclient/client.go b/edge/pkg/devicetwin/dmiclient/client.go index af6e78a10..7f7ad0b02 100644 --- a/edge/pkg/devicetwin/dmiclient/client.go +++ b/edge/pkg/devicetwin/dmiclient/client.go @@ -93,9 +93,10 @@ func createDeviceRequest(device *v1beta1.Device) (*dmiapi.RegisterDeviceRequest, }, nil } -func removeDeviceRequest(deviceName string) (*dmiapi.RemoveDeviceRequest, error) { +func removeDeviceRequest(device *v1beta1.Device) (*dmiapi.RemoveDeviceRequest, error) { return &dmiapi.RemoveDeviceRequest{ - DeviceName: deviceName, + DeviceName: device.Name, + DeviceNamespace: device.Namespace, }, nil } @@ -132,9 +133,10 @@ func updateDeviceModelRequest(model *v1beta1.DeviceModel) (*dmiapi.UpdateDeviceM }, nil } -func removeDeviceModelRequest(deviceModelName string) (*dmiapi.RemoveDeviceModelRequest, error) { +func removeDeviceModelRequest(deviceModel *v1beta1.DeviceModel) (*dmiapi.RemoveDeviceModelRequest, error) { return &dmiapi.RemoveDeviceModelRequest{ - ModelName: deviceModelName, + ModelName: deviceModel.Name, + ModelNamespace: deviceModel.Namespace, }, nil } @@ -210,7 +212,7 @@ func (dcs *DMIClients) RemoveDevice(device *v1beta1.Device) error { defer dc.close() - rdr, err := removeDeviceRequest(device.Name) + rdr, err := removeDeviceRequest(device) if err != nil { return fmt.Errorf("fail to generate RemoveDeviceRequest for device %s with err: %v", device.Name, err) } @@ -271,7 +273,7 @@ func (dcs *DMIClients) RemoveDeviceModel(model *v1beta1.DeviceModel) error { defer dc.close() - rdmr, err := removeDeviceModelRequest(model.Name) + rdmr, err := removeDeviceModelRequest(model) if err != nil { return fmt.Errorf("fail to create RemoveDeviceModelRequest for device model %s with err: %v", model.Name, err) } diff --git a/edge/pkg/devicetwin/dmiserver/server.go b/edge/pkg/devicetwin/dmiserver/server.go index eed5bee91..ec9b78937 100644 --- a/edge/pkg/devicetwin/dmiserver/server.go +++ b/edge/pkg/devicetwin/dmiserver/server.go @@ -43,6 +43,7 @@ import ( "github.com/kubeedge/kubeedge/edge/pkg/metamanager/dao" "github.com/kubeedge/kubeedge/pkg/apis/devices/v1beta1" pb "github.com/kubeedge/kubeedge/pkg/apis/dmi/v1beta1" + "github.com/kubeedge/kubeedge/pkg/util" ) const ( @@ -99,9 +100,10 @@ func (s *server) MapperRegister(ctx context.Context, in *pb.MapperRegisterReques klog.Errorf("fail to convert device %s with err: %v", device.Name, err) continue } + modelID := util.GetResourceID(device.Namespace, device.Spec.DeviceModelRef.Name) s.dmiCache.DeviceModelMu.Lock() - model, ok := s.dmiCache.DeviceModelList[device.Spec.DeviceModelRef.Name] + model, ok := s.dmiCache.DeviceModelList[modelID] s.dmiCache.DeviceModelMu.Unlock() if !ok { klog.Errorf("fail to get device model %s in deviceModelList", device.Spec.DeviceModelRef.Name) @@ -131,20 +133,25 @@ func (s *server) ReportDeviceStatus(ctx context.Context, in *pb.ReportDeviceStat return nil, fmt.Errorf("fail to report device status because of too many request: %s", in.DeviceName) } - for _, twin := range in.ReportedDevice.Twins { - msg, err := CreateMessageTwinUpdate(twin) - if err != nil { - klog.Errorf("fail to create message data for property %s of device %s with err: %v", twin.PropertyName, in.DeviceName, err) - return nil, err + if in != nil && in.ReportedDevice != nil && in.ReportedDevice.Twins != nil { + for _, twin := range in.ReportedDevice.Twins { + msg, err := CreateMessageTwinUpdate(twin) + if err != nil { + klog.Errorf("fail to create message data for property %s of device %s with err: %v", twin.PropertyName, in.DeviceName, err) + return nil, err + } + handleDeviceTwin(in, msg) } - handleDeviceTwin(in.DeviceName, msg) + } else { + return &pb.ReportDeviceStatusResponse{}, fmt.Errorf("ReportDeviceStatusRequest does not have twin data") } return &pb.ReportDeviceStatusResponse{}, nil } -func handleDeviceTwin(deviceName string, payload []byte) { - topic := dtcommon.DeviceETPrefix + deviceName + dtcommon.TwinETUpdateSuffix +func handleDeviceTwin(in *pb.ReportDeviceStatusRequest, payload []byte) { + deviceID := util.GetResourceID(in.DeviceNamespace, in.DeviceName) + topic := dtcommon.DeviceETPrefix + deviceID + dtcommon.TwinETUpdateSuffix target := modules.TwinGroup resource := base64.URLEncoding.EncodeToString([]byte(topic)) // routing key will be $hw.<project_id>.events.user.bus.response.cluster.<cluster_id>.node.<node_id>.<base64_topic> diff --git a/edge/pkg/devicetwin/dtcommon/util.go b/edge/pkg/devicetwin/dtcommon/util.go index 5445360c9..5ef05c80a 100644 --- a/edge/pkg/devicetwin/dtcommon/util.go +++ b/edge/pkg/devicetwin/dtcommon/util.go @@ -120,6 +120,7 @@ func ConvertDevice(device *v1beta1.Device) (*pb.Device, error) { edgeDevice.Spec.Properties = edgePropertyVisitors edgeDevice.Name = device.Name edgeDevice.Spec.DeviceModelReference = device.Spec.DeviceModelRef.Name + edgeDevice.Namespace = device.Namespace return &edgeDevice, nil } @@ -138,6 +139,7 @@ func ConvertDeviceModel(model *v1beta1.DeviceModel) (*pb.DeviceModel, error) { return nil, err } edgeDeviceModel.Name = model.Name + edgeDeviceModel.Namespace = model.Namespace return &edgeDeviceModel, nil } diff --git a/edge/pkg/devicetwin/dtmanager/dmiworker.go b/edge/pkg/devicetwin/dtmanager/dmiworker.go index 87397d94f..2f8d5f770 100644 --- a/edge/pkg/devicetwin/dtmanager/dmiworker.go +++ b/edge/pkg/devicetwin/dtmanager/dmiworker.go @@ -35,6 +35,7 @@ import ( "github.com/kubeedge/kubeedge/edge/pkg/metamanager/dao" "github.com/kubeedge/kubeedge/pkg/apis/devices/v1beta1" pb "github.com/kubeedge/kubeedge/pkg/apis/dmi/v1beta1" + "github.com/kubeedge/kubeedge/pkg/util" ) // TwinWorker deal twin event @@ -120,10 +121,11 @@ func (dw *DMIWorker) dealMetaDeviceOperation(context *dtcontext.DTContext, resou if err != nil { return fmt.Errorf("invalid message content with err: %+v", err) } + deviceID := util.GetResourceID(device.Namespace, device.Name) switch message.GetOperation() { case model.InsertOperation: dw.dmiCache.DeviceMu.Lock() - dw.dmiCache.DeviceList[device.Name] = &device + dw.dmiCache.DeviceList[deviceID] = &device dw.dmiCache.DeviceMu.Unlock() err = dmiclient.DMIClientsImp.RegisterDevice(&device) if err != nil { @@ -137,11 +139,11 @@ func (dw *DMIWorker) dealMetaDeviceOperation(context *dtcontext.DTContext, resou return err } dw.dmiCache.DeviceMu.Lock() - delete(dw.dmiCache.DeviceList, device.Name) + delete(dw.dmiCache.DeviceList, deviceID) dw.dmiCache.DeviceMu.Unlock() case model.UpdateOperation: dw.dmiCache.DeviceMu.Lock() - dw.dmiCache.DeviceList[device.Name] = &device + dw.dmiCache.DeviceList[deviceID] = &device dw.dmiCache.DeviceMu.Unlock() err = dmiclient.DMIClientsImp.UpdateDevice(&device) if err != nil { @@ -156,10 +158,11 @@ func (dw *DMIWorker) dealMetaDeviceOperation(context *dtcontext.DTContext, resou if err != nil { return fmt.Errorf("invalid message content with err: %+v", err) } + dmID := util.GetResourceID(dm.Namespace, dm.Name) switch message.GetOperation() { case model.InsertOperation: dw.dmiCache.DeviceModelMu.Lock() - dw.dmiCache.DeviceModelList[dm.Name] = &dm + dw.dmiCache.DeviceModelList[dmID] = &dm dw.dmiCache.DeviceModelMu.Unlock() err = dmiclient.DMIClientsImp.CreateDeviceModel(&dm) if err != nil { @@ -173,11 +176,11 @@ func (dw *DMIWorker) dealMetaDeviceOperation(context *dtcontext.DTContext, resou return err } dw.dmiCache.DeviceModelMu.Lock() - delete(dw.dmiCache.DeviceModelList, dm.Name) + delete(dw.dmiCache.DeviceModelList, dmID) dw.dmiCache.DeviceModelMu.Unlock() case model.UpdateOperation: dw.dmiCache.DeviceModelMu.Lock() - dw.dmiCache.DeviceModelList[dm.Name] = &dm + dw.dmiCache.DeviceModelList[dmID] = &dm dw.dmiCache.DeviceModelMu.Unlock() err = dmiclient.DMIClientsImp.UpdateDeviceModel(&dm) if err != nil { @@ -208,8 +211,9 @@ func (dw *DMIWorker) initDeviceModelInfoFromDB() { klog.Errorf("fail to unmarshal device model info from db with err: %v", err) return } + deviceModelID := util.GetResourceID(deviceModel.Namespace, deviceModel.Name) dw.dmiCache.DeviceModelMu.Lock() - dw.dmiCache.DeviceModelList[deviceModel.Name] = &deviceModel + dw.dmiCache.DeviceModelList[deviceModelID] = &deviceModel dw.dmiCache.DeviceModelMu.Unlock() } klog.Infoln("success to init device model info from db") @@ -228,8 +232,9 @@ func (dw *DMIWorker) initDeviceInfoFromDB() { klog.Errorf("fail to unmarshal device info from db with err: %v", err) return } + deviceID := util.GetResourceID(device.Namespace, device.Name) dw.dmiCache.DeviceMu.Lock() - dw.dmiCache.DeviceList[device.Name] = &device + dw.dmiCache.DeviceList[deviceID] = &device dw.dmiCache.DeviceMu.Unlock() } klog.Infoln("success to init device info from db") diff --git a/pkg/util/util.go b/pkg/util/util.go index 39ca1b2b7..94091b912 100644 --- a/pkg/util/util.go +++ b/pkg/util/util.go @@ -150,3 +150,8 @@ func ConcatStrings(ss ...string) string { } return bff.String() } + +// GetResourceID return resource ID +func GetResourceID(namespace, name string) string { + return namespace + "/" + name +} |
