summaryrefslogtreecommitdiff
path: root/edge
diff options
context:
space:
mode:
authorwbc6080 <wangbincheng4@huawei.com>2023-12-02 16:32:21 +0800
committerwbc6080 <wangbincheng4@huawei.com>2024-01-18 11:27:34 +0800
commitd01a767ea2510ec33320ba95f5ed797a81eae2c2 (patch)
treeb64604bca9b352a7dbc0e440ffe48aa5d2ff396f /edge
parentMerge pull request #5330 from ZhengXinwei-F/task-manager (diff)
downloadkubeedge-d01a767ea2510ec33320ba95f5ed797a81eae2c2.tar.gz
update dmi server to get namespace
Signed-off-by: wbc6080 <wangbincheng4@huawei.com>
Diffstat (limited to 'edge')
-rw-r--r--edge/pkg/devicetwin/dmiclient/client.go14
-rw-r--r--edge/pkg/devicetwin/dmiserver/server.go25
-rw-r--r--edge/pkg/devicetwin/dtcommon/util.go2
-rw-r--r--edge/pkg/devicetwin/dtmanager/dmiworker.go21
4 files changed, 39 insertions, 23 deletions
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")