Browse Source

fix(iot-hub): skip already-installed check for non-widget/solution-template root entries

Root entries other than WIDGET or SOLUTION_TEMPLATE should always be installed even when a prior version is already installed — only widgets and solution templates are deduplicated by item id at install-plan resolution time.
pull/15193/head
Igor Kulikov 4 months ago
parent
commit
8cbac06ffc
  1. 13
      application/src/main/java/org/thingsboard/server/service/iot_hub/DefaultIotHubService.java

13
application/src/main/java/org/thingsboard/server/service/iot_hub/DefaultIotHubService.java

@ -814,7 +814,7 @@ public class DefaultIotHubService implements IotHubService {
entry.setType(optText(versionInfo, FIELD_TYPE)); entry.setType(optText(versionInfo, FIELD_TYPE));
entry.setVersion(optText(versionInfo, FIELD_VERSION)); entry.setVersion(optText(versionInfo, FIELD_VERSION));
entry.setRoot(root); entry.setRoot(root);
entry.setStatus(isAlreadyInstalled(itemId, alreadyInstalledItemIds) entry.setStatus(isAlreadyInstalled(entry, alreadyInstalledItemIds)
? InstallPlanEntry.Status.ALREADY_INSTALLED ? InstallPlanEntry.Status.ALREADY_INSTALLED
: InstallPlanEntry.Status.WILL_INSTALL); : InstallPlanEntry.Status.WILL_INSTALL);
entries.put(itemId, entry); entries.put(itemId, entry);
@ -872,7 +872,7 @@ public class DefaultIotHubService implements IotHubService {
} }
case ALREADY_INSTALLED -> resultEntries.add(resultEntry); case ALREADY_INSTALLED -> resultEntries.add(resultEntry);
case WILL_INSTALL -> { case WILL_INSTALL -> {
if (isAlreadyInstalled(entry.getItemId(), alreadyInstalledItemIds)) { if (isAlreadyInstalled(entry, alreadyInstalledItemIds)) {
// Installed since the plan was resolved — skip rather than create a duplicate. // Installed since the plan was resolved — skip rather than create a duplicate.
resultEntry.setStatus(InstallPlanEntry.Status.ALREADY_INSTALLED); resultEntry.setStatus(InstallPlanEntry.Status.ALREADY_INSTALLED);
resultEntries.add(resultEntry); resultEntries.add(resultEntry);
@ -946,12 +946,15 @@ public class DefaultIotHubService implements IotHubService {
} }
} }
private static boolean isAlreadyInstalled(String itemId, Set<UUID> alreadyInstalledItemIds) { private static boolean isAlreadyInstalled(InstallPlanEntry entry, Set<UUID> alreadyInstalledItemIds) {
if (itemId == null) { if (entry == null || entry.getItemId() == null) {
return false;
}
if (entry.isRoot() && (!"WIDGET".equals(entry.getType()) && !"SOLUTION_TEMPLATE".equals(entry.getType()))) {
return false; return false;
} }
try { try {
return alreadyInstalledItemIds.contains(UUID.fromString(itemId)); return alreadyInstalledItemIds.contains(UUID.fromString(entry.getItemId()));
} catch (IllegalArgumentException ex) { } catch (IllegalArgumentException ex) {
return false; return false;
} }

Loading…
Cancel
Save