From 5ace34bccf5d4d86b008dabbd8d2c1cc620df331 Mon Sep 17 00:00:00 2001 From: Andrii Landiak Date: Wed, 11 Oct 2023 12:37:48 +0300 Subject: [PATCH] Improve code, fix failing tests --- .../service/edge/EdgeEventSourcingListener.java | 9 ++++++--- .../entitiy/EntityStateSourcingListener.java | 2 -- .../server/service/install/InstallScripts.java | 2 +- .../service/rule/DefaultTbRuleChainService.java | 7 ------- .../auth/oauth2/AbstractOAuth2ClientMapper.java | 14 ++++++++++++++ .../ie/importing/impl/RuleChainImportService.java | 4 ---- .../sync/ie/ExportImportServiceSqlTest.java | 1 + .../server/dao/device/DeviceService.java | 1 + .../server/dao/asset/AssetProfileServiceImpl.java | 2 +- .../server/dao/device/DeviceServiceImpl.java | 2 +- .../server/dao/edge/BaseEdgeEventService.java | 10 +++++----- .../server/dao/edge/EdgeServiceImpl.java | 2 +- .../server/dao/rule/BaseRuleChainService.java | 1 - .../dao/usagerecord/ApiUsageStateServiceImpl.java | 2 +- 14 files changed, 32 insertions(+), 27 deletions(-) diff --git a/application/src/main/java/org/thingsboard/server/service/edge/EdgeEventSourcingListener.java b/application/src/main/java/org/thingsboard/server/service/edge/EdgeEventSourcingListener.java index b077908bba..18f616ddfc 100644 --- a/application/src/main/java/org/thingsboard/server/service/edge/EdgeEventSourcingListener.java +++ b/application/src/main/java/org/thingsboard/server/service/edge/EdgeEventSourcingListener.java @@ -94,7 +94,7 @@ public class EdgeEventSourcingListener { } EntityType entityType = event.getEntityId().getEntityType(); try { - if (EntityType.EDGE.equals(entityType) || EntityType.TENANT.equals(entityType)) { + if (EntityType.EDGE.equals(entityType) || EntityType.TENANT.equals(entityType) || EntityType.TB_RESOURCE.equals(entityType)) { return; } log.trace("[{}] DeleteEntityEvent called: {}", event.getTenantId(), event); @@ -155,8 +155,11 @@ public class EdgeEventSourcingListener { User user = (User) event.getEntity(); return !Authority.SYS_ADMIN.equals(user.getAuthority()); case OTA_PACKAGE: - OtaPackageInfo otaPackageInfo = (OtaPackageInfo) event.getEntity(); - return otaPackageInfo.hasUrl() || otaPackageInfo.isHasData(); + if (event.getEntity() instanceof OtaPackageInfo) { + OtaPackageInfo otaPackageInfo = (OtaPackageInfo) event.getEntity(); + return otaPackageInfo.hasUrl() || otaPackageInfo.isHasData(); + } + break; case ALARM: if (event.getEntity() instanceof AlarmApiCallResult) { AlarmApiCallResult alarmApiCallResult = (AlarmApiCallResult) event.getEntity(); diff --git a/application/src/main/java/org/thingsboard/server/service/entitiy/EntityStateSourcingListener.java b/application/src/main/java/org/thingsboard/server/service/entitiy/EntityStateSourcingListener.java index 250d88757a..7b92d8c659 100644 --- a/application/src/main/java/org/thingsboard/server/service/entitiy/EntityStateSourcingListener.java +++ b/application/src/main/java/org/thingsboard/server/service/entitiy/EntityStateSourcingListener.java @@ -51,7 +51,6 @@ import org.thingsboard.server.dao.entity.EntityStateSyncManager; import org.thingsboard.server.dao.eventsourcing.ActionEntityEvent; import org.thingsboard.server.dao.eventsourcing.DeleteEntityEvent; import org.thingsboard.server.dao.eventsourcing.SaveEntityEvent; -import org.thingsboard.server.dao.tenant.TenantService; import javax.annotation.PostConstruct; import java.util.Set; @@ -62,7 +61,6 @@ import java.util.Set; public class EntityStateSourcingListener { private final TbClusterService tbClusterService; - private final TenantService tenantService; private final EntityStateSyncManager entityStateSyncManager; @PostConstruct diff --git a/application/src/main/java/org/thingsboard/server/service/install/InstallScripts.java b/application/src/main/java/org/thingsboard/server/service/install/InstallScripts.java index ec0d6fd268..888b9b3343 100644 --- a/application/src/main/java/org/thingsboard/server/service/install/InstallScripts.java +++ b/application/src/main/java/org/thingsboard/server/service/install/InstallScripts.java @@ -167,7 +167,7 @@ public class InstallScripts { return paths; } - public RuleChain createDefaultRuleChain(TenantId tenantId, String ruleChainName) throws IOException { + public RuleChain createDefaultRuleChain(TenantId tenantId, String ruleChainName) { return createRuleChainFromFile(tenantId, getDeviceProfileDefaultRuleChainTemplateFilePath(), ruleChainName); } diff --git a/application/src/main/java/org/thingsboard/server/service/rule/DefaultTbRuleChainService.java b/application/src/main/java/org/thingsboard/server/service/rule/DefaultTbRuleChainService.java index 830c223d07..7391641598 100644 --- a/application/src/main/java/org/thingsboard/server/service/rule/DefaultTbRuleChainService.java +++ b/application/src/main/java/org/thingsboard/server/service/rule/DefaultTbRuleChainService.java @@ -192,14 +192,7 @@ public class DefaultTbRuleChainService extends AbstractTbEntityService implement TenantId tenantId = ruleChain.getTenantId(); RuleChainId ruleChainId = ruleChain.getId(); try { - List referencingRuleNodes = ruleChainService.getReferencingRuleChainNodes(tenantId, ruleChainId); - - Set referencingRuleChainIds = referencingRuleNodes.stream().map(RuleNode::getRuleChainId).collect(Collectors.toSet()); - ruleChainService.deleteRuleChainById(tenantId, ruleChainId); - - referencingRuleChainIds.remove(ruleChain.getId()); - logEntityActionService.logEntityAction(tenantId, ruleChainId, ruleChain, null, ActionType.DELETED, user, ruleChainId.toString()); } catch (Exception e) { logEntityActionService.logEntityAction(tenantId, emptyId(EntityType.RULE_CHAIN), ActionType.DELETED, diff --git a/application/src/main/java/org/thingsboard/server/service/security/auth/oauth2/AbstractOAuth2ClientMapper.java b/application/src/main/java/org/thingsboard/server/service/security/auth/oauth2/AbstractOAuth2ClientMapper.java index 3732f13b08..49d33122ef 100644 --- a/application/src/main/java/org/thingsboard/server/service/security/auth/oauth2/AbstractOAuth2ClientMapper.java +++ b/application/src/main/java/org/thingsboard/server/service/security/auth/oauth2/AbstractOAuth2ClientMapper.java @@ -20,6 +20,7 @@ import lombok.Getter; import lombok.extern.slf4j.Slf4j; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.beans.factory.annotation.Value; +import org.springframework.context.ApplicationEventPublisher; import org.springframework.security.authentication.UsernamePasswordAuthenticationToken; import org.springframework.security.core.userdetails.UsernameNotFoundException; import org.springframework.security.crypto.bcrypt.BCryptPasswordEncoder; @@ -41,6 +42,8 @@ import org.thingsboard.server.common.data.security.Authority; import org.thingsboard.server.common.data.security.UserCredentials; import org.thingsboard.server.dao.customer.CustomerService; import org.thingsboard.server.dao.dashboard.DashboardService; +import org.thingsboard.server.dao.entity.EntityStateSyncManager; +import org.thingsboard.server.dao.eventsourcing.SaveEntityEvent; import org.thingsboard.server.dao.oauth2.OAuth2User; import org.thingsboard.server.dao.tenant.TbTenantProfileCache; import org.thingsboard.server.dao.tenant.TenantService; @@ -84,6 +87,12 @@ public abstract class AbstractOAuth2ClientMapper { @Autowired protected TbTenantProfileCache tenantProfileCache; + @Autowired + private ApplicationEventPublisher eventPublisher; + + @Autowired + private EntityStateSyncManager entityStateSyncManager; + @Value("${edges.enabled}") @Getter private boolean edgesEnabled; @@ -170,12 +179,17 @@ public abstract class AbstractOAuth2ClientMapper { List tenants = tenantService.findTenants(new PageLink(1, 0, tenantName)).getData(); Tenant tenant; if (tenants == null || tenants.isEmpty()) { + entityStateSyncManager.getSync().set(true); + tenant = new Tenant(); tenant.setTitle(tenantName); tenant = tenantService.saveTenant(tenant); installScripts.createDefaultRuleChains(tenant.getId()); installScripts.createDefaultEdgeRuleChains(tenant.getId()); tenantProfileCache.evict(tenant.getId()); + + entityStateSyncManager.getSync().remove(); + eventPublisher.publishEvent(SaveEntityEvent.builder().tenantId(TenantId.SYS_TENANT_ID).entityId(tenant.getId()).entity(tenant).added(true).build()); } else { tenant = tenants.get(0); } diff --git a/application/src/main/java/org/thingsboard/server/service/sync/ie/importing/impl/RuleChainImportService.java b/application/src/main/java/org/thingsboard/server/service/sync/ie/importing/impl/RuleChainImportService.java index bb930f9634..63072dfe2b 100644 --- a/application/src/main/java/org/thingsboard/server/service/sync/ie/importing/impl/RuleChainImportService.java +++ b/application/src/main/java/org/thingsboard/server/service/sync/ie/importing/impl/RuleChainImportService.java @@ -132,10 +132,6 @@ public class RuleChainImportService extends BaseEntityImportService customerDeviceUnasigner = new PaginatedRemover() { + private PaginatedRemover customerDeviceUnasigner = new PaginatedRemover<>() { @Override protected PageData findEntities(TenantId tenantId, CustomerId id, PageLink pageLink) { diff --git a/dao/src/main/java/org/thingsboard/server/dao/edge/BaseEdgeEventService.java b/dao/src/main/java/org/thingsboard/server/dao/edge/BaseEdgeEventService.java index 46c5671002..40a968d39b 100644 --- a/dao/src/main/java/org/thingsboard/server/dao/edge/BaseEdgeEventService.java +++ b/dao/src/main/java/org/thingsboard/server/dao/edge/BaseEdgeEventService.java @@ -48,17 +48,17 @@ public class BaseEdgeEventService implements EdgeEventService { private final ApplicationEventPublisher eventPublisher; - private ExecutorService executor; + private ExecutorService edgeEventExecutor; @PostConstruct public void initExecutor() { - executor = Executors.newSingleThreadExecutor(ThingsBoardThreadFactory.forName("edge-event")); + edgeEventExecutor = Executors.newSingleThreadExecutor(ThingsBoardThreadFactory.forName("edge-event-service")); } @PreDestroy public void shutdownExecutor() { - if (executor != null) { - executor.shutdown(); + if (edgeEventExecutor != null) { + edgeEventExecutor.shutdown(); } } @@ -77,7 +77,7 @@ public class BaseEdgeEventService implements EdgeEventService { @Override public void onFailure(@NotNull Throwable throwable) {} - }, executor); + }, edgeEventExecutor); return saveFuture; } diff --git a/dao/src/main/java/org/thingsboard/server/dao/edge/EdgeServiceImpl.java b/dao/src/main/java/org/thingsboard/server/dao/edge/EdgeServiceImpl.java index d4e45961d9..72af88ab4e 100644 --- a/dao/src/main/java/org/thingsboard/server/dao/edge/EdgeServiceImpl.java +++ b/dao/src/main/java/org/thingsboard/server/dao/edge/EdgeServiceImpl.java @@ -166,7 +166,7 @@ public class EdgeServiceImpl extends AbstractCachedEntityService