Improve code, fix failing tests

This commit is contained in:
Andrii Landiak 2023-10-11 12:37:48 +03:00
parent 987bcf476c
commit 5ace34bccf
14 changed files with 32 additions and 27 deletions

View File

@ -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();

View File

@ -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

View File

@ -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);
}

View File

@ -192,14 +192,7 @@ public class DefaultTbRuleChainService extends AbstractTbEntityService implement
TenantId tenantId = ruleChain.getTenantId();
RuleChainId ruleChainId = ruleChain.getId();
try {
List<RuleNode> referencingRuleNodes = ruleChainService.getReferencingRuleChainNodes(tenantId, ruleChainId);
Set<RuleChainId> 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,

View File

@ -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<Tenant> 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);
}

View File

@ -132,10 +132,6 @@ public class RuleChainImportService extends BaseEntityImportService<RuleChainId,
protected void onEntitySaved(User user, RuleChain savedRuleChain, RuleChain oldRuleChain) {
entityActionService.logEntityAction(user, savedRuleChain.getId(), savedRuleChain, null,
oldRuleChain == null ? ActionType.ADDED : ActionType.UPDATED, null);
if (savedRuleChain.getType() == RuleChainType.CORE) {
clusterService.broadcastEntityStateChangeEvent(user.getTenantId(), savedRuleChain.getId(),
oldRuleChain == null ? ComponentLifecycleEvent.CREATED : ComponentLifecycleEvent.UPDATED);
}
}
@Override

View File

@ -632,6 +632,7 @@ public class ExportImportServiceSqlTest extends BaseExportImportServiceTest {
any(), eq(ActionType.ADDED), isNull());
verify(tbClusterService).onDeviceProfileChange(eq(importedDeviceProfile), any(), any());
verify(tbClusterService).sendNotificationMsgToEdge(any(), any(), eq(importedDeviceProfile.getId()), any(), any(), eq(EdgeEventActionType.ADDED));
verify(otaPackageStateService).update(eq(importedDeviceProfile), eq(false), eq(false));
Device importedDevice = (Device) importEntity(tenantAdmin2, getAndClone(entitiesExportData, EntityType.DEVICE)).getSavedEntity();
verify(entityActionService).logEntityAction(any(), eq(importedDevice.getId()), eq(importedDevice),

View File

@ -23,6 +23,7 @@ import org.thingsboard.server.common.data.DeviceInfoFilter;
import org.thingsboard.server.common.data.DeviceProfile;
import org.thingsboard.server.common.data.DeviceTransportType;
import org.thingsboard.server.common.data.EntitySubtype;
import org.thingsboard.server.common.data.Tenant;
import org.thingsboard.server.common.data.device.DeviceSearchQuery;
import org.thingsboard.server.common.data.id.CustomerId;
import org.thingsboard.server.common.data.id.DeviceId;

View File

@ -130,7 +130,7 @@ public class AssetProfileServiceImpl extends AbstractCachedEntityService<AssetPr
savedAssetProfile = assetProfileDao.saveAndFlush(assetProfile.getTenantId(), assetProfile);
publishEvictEvent(new AssetProfileEvictEvent(savedAssetProfile.getTenantId(), savedAssetProfile.getName(),
oldAssetProfile != null ? oldAssetProfile.getName() : null, savedAssetProfile.getId(), savedAssetProfile.isDefault()));
eventPublisher.publishEvent(SaveEntityEvent.builder().tenantId(savedAssetProfile.getTenantId())
eventPublisher.publishEvent(SaveEntityEvent.builder().tenantId(savedAssetProfile.getTenantId()).entity(savedAssetProfile)
.entityId(savedAssetProfile.getId()).added(oldAssetProfile == null).build());
} catch (Exception t) {
handleEvictEvent(new AssetProfileEvictEvent(assetProfile.getTenantId(), assetProfile.getName(),

View File

@ -672,7 +672,7 @@ public class DeviceServiceImpl extends AbstractCachedEntityService<DeviceCacheKe
}
};
private PaginatedRemover<CustomerId, Device> customerDeviceUnasigner = new PaginatedRemover<CustomerId, Device>() {
private PaginatedRemover<CustomerId, Device> customerDeviceUnasigner = new PaginatedRemover<>() {
@Override
protected PageData<Device> findEntities(TenantId tenantId, CustomerId id, PageLink pageLink) {

View File

@ -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;
}

View File

@ -166,7 +166,7 @@ public class EdgeServiceImpl extends AbstractCachedEntityService<EdgeCacheKey, E
try {
Edge savedEdge = edgeDao.save(edge.getTenantId(), edge);
publishEvictEvent(evictEvent);
eventPublisher.publishEvent(SaveEntityEvent.builder().tenantId(edge.getTenantId())
eventPublisher.publishEvent(SaveEntityEvent.builder().tenantId(savedEdge.getTenantId())
.entityId(savedEdge.getId()).entity(savedEdge).added(edge.getId() == null).build());
return savedEdge;
} catch (Exception t) {

View File

@ -432,7 +432,6 @@ public class BaseRuleChainService extends AbstractEntityService implements RuleC
}
}
checkRuleNodesAndDelete(tenantId, ruleChain, referencingRuleChainIds);
referencingRuleChainIds.remove(ruleChainId);
}
@Override

View File

@ -145,7 +145,7 @@ public class ApiUsageStateServiceImpl extends AbstractEntityService implements A
validateId(apiUsageState.getTenantId(), INCORRECT_TENANT_ID + apiUsageState.getTenantId());
validateId(apiUsageState.getId(), "Can't save new usage state. Only update is allowed!");
ApiUsageState savedState = apiUsageStateDao.save(apiUsageState.getTenantId(), apiUsageState);
eventPublisher.publishEvent(SaveEntityEvent.builder().tenantId(apiUsageState.getTenantId()).entityId(savedState.getId())
eventPublisher.publishEvent(SaveEntityEvent.builder().tenantId(savedState.getTenantId()).entityId(savedState.getId())
.entity(savedState).build());
return savedState;
}