thingsboard-aplcache

Details

diff --git a/application/src/main/java/org/thingsboard/server/actors/device/DeviceActorMessageProcessor.java b/application/src/main/java/org/thingsboard/server/actors/device/DeviceActorMessageProcessor.java
index d4c42d8..0c73470 100644
--- a/application/src/main/java/org/thingsboard/server/actors/device/DeviceActorMessageProcessor.java
+++ b/application/src/main/java/org/thingsboard/server/actors/device/DeviceActorMessageProcessor.java
@@ -51,13 +51,7 @@ import org.thingsboard.server.extensions.api.plugins.msg.ToDeviceRpcRequestBody;
 import org.thingsboard.server.extensions.api.plugins.msg.ToDeviceRpcRequestPluginMsg;
 import org.thingsboard.server.extensions.api.plugins.msg.ToPluginRpcResponseDeviceMsg;
 
-import java.util.HashMap;
-import java.util.HashSet;
-import java.util.List;
-import java.util.Map;
-import java.util.Optional;
-import java.util.Set;
-import java.util.UUID;
+import java.util.*;
 import java.util.concurrent.ExecutionException;
 import java.util.concurrent.TimeoutException;
 import java.util.function.Consumer;
@@ -205,25 +199,21 @@ public class DeviceActorMessageProcessor extends AbstractContextAwareMsgProcesso
 
     void processAttributesUpdate(ActorContext context, DeviceAttributesEventNotificationMsg msg) {
         refreshAttributes(msg);
-        Set<AttributeKey> keys = msg.getDeletedKeys();
         if (attributeSubscriptions.size() > 0) {
             ToDeviceMsg notification = null;
             if (msg.isDeleted()) {
-                List<AttributeKey> sharedKeys = keys.stream()
+                List<AttributeKey> sharedKeys = msg.getDeletedKeys().stream()
                         .filter(key -> DataConstants.SHARED_SCOPE.equals(key.getScope()))
                         .collect(Collectors.toList());
                 notification = new AttributesUpdateNotification(BasicAttributeKVMsg.fromDeleted(sharedKeys));
             } else {
-                List<AttributeKvEntry> attributes = keys.stream()
-                        .filter(key -> DataConstants.SHARED_SCOPE.equals(key.getScope()))
-                        .map(key -> deviceAttributes.getServerPublicAttribute(key.getAttributeKey()))
-                        .filter(Optional::isPresent)
-                        .map(Optional::get)
-                        .collect(Collectors.toList());
-                if (attributes.size() > 0) {
-                    notification = new AttributesUpdateNotification(BasicAttributeKVMsg.fromShared(attributes));
-                } else {
-                    logger.debug("[{}] No public server side attributes changed!", deviceId);
+                if (DataConstants.SHARED_SCOPE.equals(msg.getScope())) {
+                    List<AttributeKvEntry> attributes = new ArrayList<>(msg.getValues());
+                    if (attributes.size() > 0) {
+                        notification = new AttributesUpdateNotification(BasicAttributeKVMsg.fromShared(attributes));
+                    } else {
+                        logger.debug("[{}] No public server side attributes changed!", deviceId);
+                    }
                 }
             }
             if (notification != null) {