Improve code, fix failing tests
This commit is contained in:
parent
987bcf476c
commit
5ace34bccf
@ -94,7 +94,7 @@ public class EdgeEventSourcingListener {
|
|||||||
}
|
}
|
||||||
EntityType entityType = event.getEntityId().getEntityType();
|
EntityType entityType = event.getEntityId().getEntityType();
|
||||||
try {
|
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;
|
return;
|
||||||
}
|
}
|
||||||
log.trace("[{}] DeleteEntityEvent called: {}", event.getTenantId(), event);
|
log.trace("[{}] DeleteEntityEvent called: {}", event.getTenantId(), event);
|
||||||
@ -155,8 +155,11 @@ public class EdgeEventSourcingListener {
|
|||||||
User user = (User) event.getEntity();
|
User user = (User) event.getEntity();
|
||||||
return !Authority.SYS_ADMIN.equals(user.getAuthority());
|
return !Authority.SYS_ADMIN.equals(user.getAuthority());
|
||||||
case OTA_PACKAGE:
|
case OTA_PACKAGE:
|
||||||
|
if (event.getEntity() instanceof OtaPackageInfo) {
|
||||||
OtaPackageInfo otaPackageInfo = (OtaPackageInfo) event.getEntity();
|
OtaPackageInfo otaPackageInfo = (OtaPackageInfo) event.getEntity();
|
||||||
return otaPackageInfo.hasUrl() || otaPackageInfo.isHasData();
|
return otaPackageInfo.hasUrl() || otaPackageInfo.isHasData();
|
||||||
|
}
|
||||||
|
break;
|
||||||
case ALARM:
|
case ALARM:
|
||||||
if (event.getEntity() instanceof AlarmApiCallResult) {
|
if (event.getEntity() instanceof AlarmApiCallResult) {
|
||||||
AlarmApiCallResult alarmApiCallResult = (AlarmApiCallResult) event.getEntity();
|
AlarmApiCallResult alarmApiCallResult = (AlarmApiCallResult) event.getEntity();
|
||||||
|
|||||||
@ -51,7 +51,6 @@ import org.thingsboard.server.dao.entity.EntityStateSyncManager;
|
|||||||
import org.thingsboard.server.dao.eventsourcing.ActionEntityEvent;
|
import org.thingsboard.server.dao.eventsourcing.ActionEntityEvent;
|
||||||
import org.thingsboard.server.dao.eventsourcing.DeleteEntityEvent;
|
import org.thingsboard.server.dao.eventsourcing.DeleteEntityEvent;
|
||||||
import org.thingsboard.server.dao.eventsourcing.SaveEntityEvent;
|
import org.thingsboard.server.dao.eventsourcing.SaveEntityEvent;
|
||||||
import org.thingsboard.server.dao.tenant.TenantService;
|
|
||||||
|
|
||||||
import javax.annotation.PostConstruct;
|
import javax.annotation.PostConstruct;
|
||||||
import java.util.Set;
|
import java.util.Set;
|
||||||
@ -62,7 +61,6 @@ import java.util.Set;
|
|||||||
public class EntityStateSourcingListener {
|
public class EntityStateSourcingListener {
|
||||||
|
|
||||||
private final TbClusterService tbClusterService;
|
private final TbClusterService tbClusterService;
|
||||||
private final TenantService tenantService;
|
|
||||||
private final EntityStateSyncManager entityStateSyncManager;
|
private final EntityStateSyncManager entityStateSyncManager;
|
||||||
|
|
||||||
@PostConstruct
|
@PostConstruct
|
||||||
|
|||||||
@ -167,7 +167,7 @@ public class InstallScripts {
|
|||||||
return paths;
|
return paths;
|
||||||
}
|
}
|
||||||
|
|
||||||
public RuleChain createDefaultRuleChain(TenantId tenantId, String ruleChainName) throws IOException {
|
public RuleChain createDefaultRuleChain(TenantId tenantId, String ruleChainName) {
|
||||||
return createRuleChainFromFile(tenantId, getDeviceProfileDefaultRuleChainTemplateFilePath(), ruleChainName);
|
return createRuleChainFromFile(tenantId, getDeviceProfileDefaultRuleChainTemplateFilePath(), ruleChainName);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@ -192,14 +192,7 @@ public class DefaultTbRuleChainService extends AbstractTbEntityService implement
|
|||||||
TenantId tenantId = ruleChain.getTenantId();
|
TenantId tenantId = ruleChain.getTenantId();
|
||||||
RuleChainId ruleChainId = ruleChain.getId();
|
RuleChainId ruleChainId = ruleChain.getId();
|
||||||
try {
|
try {
|
||||||
List<RuleNode> referencingRuleNodes = ruleChainService.getReferencingRuleChainNodes(tenantId, ruleChainId);
|
|
||||||
|
|
||||||
Set<RuleChainId> referencingRuleChainIds = referencingRuleNodes.stream().map(RuleNode::getRuleChainId).collect(Collectors.toSet());
|
|
||||||
|
|
||||||
ruleChainService.deleteRuleChainById(tenantId, ruleChainId);
|
ruleChainService.deleteRuleChainById(tenantId, ruleChainId);
|
||||||
|
|
||||||
referencingRuleChainIds.remove(ruleChain.getId());
|
|
||||||
|
|
||||||
logEntityActionService.logEntityAction(tenantId, ruleChainId, ruleChain, null, ActionType.DELETED, user, ruleChainId.toString());
|
logEntityActionService.logEntityAction(tenantId, ruleChainId, ruleChain, null, ActionType.DELETED, user, ruleChainId.toString());
|
||||||
} catch (Exception e) {
|
} catch (Exception e) {
|
||||||
logEntityActionService.logEntityAction(tenantId, emptyId(EntityType.RULE_CHAIN), ActionType.DELETED,
|
logEntityActionService.logEntityAction(tenantId, emptyId(EntityType.RULE_CHAIN), ActionType.DELETED,
|
||||||
|
|||||||
@ -20,6 +20,7 @@ import lombok.Getter;
|
|||||||
import lombok.extern.slf4j.Slf4j;
|
import lombok.extern.slf4j.Slf4j;
|
||||||
import org.springframework.beans.factory.annotation.Autowired;
|
import org.springframework.beans.factory.annotation.Autowired;
|
||||||
import org.springframework.beans.factory.annotation.Value;
|
import org.springframework.beans.factory.annotation.Value;
|
||||||
|
import org.springframework.context.ApplicationEventPublisher;
|
||||||
import org.springframework.security.authentication.UsernamePasswordAuthenticationToken;
|
import org.springframework.security.authentication.UsernamePasswordAuthenticationToken;
|
||||||
import org.springframework.security.core.userdetails.UsernameNotFoundException;
|
import org.springframework.security.core.userdetails.UsernameNotFoundException;
|
||||||
import org.springframework.security.crypto.bcrypt.BCryptPasswordEncoder;
|
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.common.data.security.UserCredentials;
|
||||||
import org.thingsboard.server.dao.customer.CustomerService;
|
import org.thingsboard.server.dao.customer.CustomerService;
|
||||||
import org.thingsboard.server.dao.dashboard.DashboardService;
|
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.oauth2.OAuth2User;
|
||||||
import org.thingsboard.server.dao.tenant.TbTenantProfileCache;
|
import org.thingsboard.server.dao.tenant.TbTenantProfileCache;
|
||||||
import org.thingsboard.server.dao.tenant.TenantService;
|
import org.thingsboard.server.dao.tenant.TenantService;
|
||||||
@ -84,6 +87,12 @@ public abstract class AbstractOAuth2ClientMapper {
|
|||||||
@Autowired
|
@Autowired
|
||||||
protected TbTenantProfileCache tenantProfileCache;
|
protected TbTenantProfileCache tenantProfileCache;
|
||||||
|
|
||||||
|
@Autowired
|
||||||
|
private ApplicationEventPublisher eventPublisher;
|
||||||
|
|
||||||
|
@Autowired
|
||||||
|
private EntityStateSyncManager entityStateSyncManager;
|
||||||
|
|
||||||
@Value("${edges.enabled}")
|
@Value("${edges.enabled}")
|
||||||
@Getter
|
@Getter
|
||||||
private boolean edgesEnabled;
|
private boolean edgesEnabled;
|
||||||
@ -170,12 +179,17 @@ public abstract class AbstractOAuth2ClientMapper {
|
|||||||
List<Tenant> tenants = tenantService.findTenants(new PageLink(1, 0, tenantName)).getData();
|
List<Tenant> tenants = tenantService.findTenants(new PageLink(1, 0, tenantName)).getData();
|
||||||
Tenant tenant;
|
Tenant tenant;
|
||||||
if (tenants == null || tenants.isEmpty()) {
|
if (tenants == null || tenants.isEmpty()) {
|
||||||
|
entityStateSyncManager.getSync().set(true);
|
||||||
|
|
||||||
tenant = new Tenant();
|
tenant = new Tenant();
|
||||||
tenant.setTitle(tenantName);
|
tenant.setTitle(tenantName);
|
||||||
tenant = tenantService.saveTenant(tenant);
|
tenant = tenantService.saveTenant(tenant);
|
||||||
installScripts.createDefaultRuleChains(tenant.getId());
|
installScripts.createDefaultRuleChains(tenant.getId());
|
||||||
installScripts.createDefaultEdgeRuleChains(tenant.getId());
|
installScripts.createDefaultEdgeRuleChains(tenant.getId());
|
||||||
tenantProfileCache.evict(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 {
|
} else {
|
||||||
tenant = tenants.get(0);
|
tenant = tenants.get(0);
|
||||||
}
|
}
|
||||||
|
|||||||
@ -132,10 +132,6 @@ public class RuleChainImportService extends BaseEntityImportService<RuleChainId,
|
|||||||
protected void onEntitySaved(User user, RuleChain savedRuleChain, RuleChain oldRuleChain) {
|
protected void onEntitySaved(User user, RuleChain savedRuleChain, RuleChain oldRuleChain) {
|
||||||
entityActionService.logEntityAction(user, savedRuleChain.getId(), savedRuleChain, null,
|
entityActionService.logEntityAction(user, savedRuleChain.getId(), savedRuleChain, null,
|
||||||
oldRuleChain == null ? ActionType.ADDED : ActionType.UPDATED, 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
|
@Override
|
||||||
|
|||||||
@ -632,6 +632,7 @@ public class ExportImportServiceSqlTest extends BaseExportImportServiceTest {
|
|||||||
any(), eq(ActionType.ADDED), isNull());
|
any(), eq(ActionType.ADDED), isNull());
|
||||||
verify(tbClusterService).onDeviceProfileChange(eq(importedDeviceProfile), any(), any());
|
verify(tbClusterService).onDeviceProfileChange(eq(importedDeviceProfile), any(), any());
|
||||||
verify(tbClusterService).sendNotificationMsgToEdge(any(), any(), eq(importedDeviceProfile.getId()), any(), any(), eq(EdgeEventActionType.ADDED));
|
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();
|
Device importedDevice = (Device) importEntity(tenantAdmin2, getAndClone(entitiesExportData, EntityType.DEVICE)).getSavedEntity();
|
||||||
verify(entityActionService).logEntityAction(any(), eq(importedDevice.getId()), eq(importedDevice),
|
verify(entityActionService).logEntityAction(any(), eq(importedDevice.getId()), eq(importedDevice),
|
||||||
|
|||||||
@ -23,6 +23,7 @@ import org.thingsboard.server.common.data.DeviceInfoFilter;
|
|||||||
import org.thingsboard.server.common.data.DeviceProfile;
|
import org.thingsboard.server.common.data.DeviceProfile;
|
||||||
import org.thingsboard.server.common.data.DeviceTransportType;
|
import org.thingsboard.server.common.data.DeviceTransportType;
|
||||||
import org.thingsboard.server.common.data.EntitySubtype;
|
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.device.DeviceSearchQuery;
|
||||||
import org.thingsboard.server.common.data.id.CustomerId;
|
import org.thingsboard.server.common.data.id.CustomerId;
|
||||||
import org.thingsboard.server.common.data.id.DeviceId;
|
import org.thingsboard.server.common.data.id.DeviceId;
|
||||||
|
|||||||
@ -130,7 +130,7 @@ public class AssetProfileServiceImpl extends AbstractCachedEntityService<AssetPr
|
|||||||
savedAssetProfile = assetProfileDao.saveAndFlush(assetProfile.getTenantId(), assetProfile);
|
savedAssetProfile = assetProfileDao.saveAndFlush(assetProfile.getTenantId(), assetProfile);
|
||||||
publishEvictEvent(new AssetProfileEvictEvent(savedAssetProfile.getTenantId(), savedAssetProfile.getName(),
|
publishEvictEvent(new AssetProfileEvictEvent(savedAssetProfile.getTenantId(), savedAssetProfile.getName(),
|
||||||
oldAssetProfile != null ? oldAssetProfile.getName() : null, savedAssetProfile.getId(), savedAssetProfile.isDefault()));
|
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());
|
.entityId(savedAssetProfile.getId()).added(oldAssetProfile == null).build());
|
||||||
} catch (Exception t) {
|
} catch (Exception t) {
|
||||||
handleEvictEvent(new AssetProfileEvictEvent(assetProfile.getTenantId(), assetProfile.getName(),
|
handleEvictEvent(new AssetProfileEvictEvent(assetProfile.getTenantId(), assetProfile.getName(),
|
||||||
|
|||||||
@ -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
|
@Override
|
||||||
protected PageData<Device> findEntities(TenantId tenantId, CustomerId id, PageLink pageLink) {
|
protected PageData<Device> findEntities(TenantId tenantId, CustomerId id, PageLink pageLink) {
|
||||||
|
|||||||
@ -48,17 +48,17 @@ public class BaseEdgeEventService implements EdgeEventService {
|
|||||||
|
|
||||||
private final ApplicationEventPublisher eventPublisher;
|
private final ApplicationEventPublisher eventPublisher;
|
||||||
|
|
||||||
private ExecutorService executor;
|
private ExecutorService edgeEventExecutor;
|
||||||
|
|
||||||
@PostConstruct
|
@PostConstruct
|
||||||
public void initExecutor() {
|
public void initExecutor() {
|
||||||
executor = Executors.newSingleThreadExecutor(ThingsBoardThreadFactory.forName("edge-event"));
|
edgeEventExecutor = Executors.newSingleThreadExecutor(ThingsBoardThreadFactory.forName("edge-event-service"));
|
||||||
}
|
}
|
||||||
|
|
||||||
@PreDestroy
|
@PreDestroy
|
||||||
public void shutdownExecutor() {
|
public void shutdownExecutor() {
|
||||||
if (executor != null) {
|
if (edgeEventExecutor != null) {
|
||||||
executor.shutdown();
|
edgeEventExecutor.shutdown();
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -77,7 +77,7 @@ public class BaseEdgeEventService implements EdgeEventService {
|
|||||||
|
|
||||||
@Override
|
@Override
|
||||||
public void onFailure(@NotNull Throwable throwable) {}
|
public void onFailure(@NotNull Throwable throwable) {}
|
||||||
}, executor);
|
}, edgeEventExecutor);
|
||||||
|
|
||||||
return saveFuture;
|
return saveFuture;
|
||||||
}
|
}
|
||||||
|
|||||||
@ -166,7 +166,7 @@ public class EdgeServiceImpl extends AbstractCachedEntityService<EdgeCacheKey, E
|
|||||||
try {
|
try {
|
||||||
Edge savedEdge = edgeDao.save(edge.getTenantId(), edge);
|
Edge savedEdge = edgeDao.save(edge.getTenantId(), edge);
|
||||||
publishEvictEvent(evictEvent);
|
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());
|
.entityId(savedEdge.getId()).entity(savedEdge).added(edge.getId() == null).build());
|
||||||
return savedEdge;
|
return savedEdge;
|
||||||
} catch (Exception t) {
|
} catch (Exception t) {
|
||||||
|
|||||||
@ -432,7 +432,6 @@ public class BaseRuleChainService extends AbstractEntityService implements RuleC
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
checkRuleNodesAndDelete(tenantId, ruleChain, referencingRuleChainIds);
|
checkRuleNodesAndDelete(tenantId, ruleChain, referencingRuleChainIds);
|
||||||
referencingRuleChainIds.remove(ruleChainId);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
|
|||||||
@ -145,7 +145,7 @@ public class ApiUsageStateServiceImpl extends AbstractEntityService implements A
|
|||||||
validateId(apiUsageState.getTenantId(), INCORRECT_TENANT_ID + apiUsageState.getTenantId());
|
validateId(apiUsageState.getTenantId(), INCORRECT_TENANT_ID + apiUsageState.getTenantId());
|
||||||
validateId(apiUsageState.getId(), "Can't save new usage state. Only update is allowed!");
|
validateId(apiUsageState.getId(), "Can't save new usage state. Only update is allowed!");
|
||||||
ApiUsageState savedState = apiUsageStateDao.save(apiUsageState.getTenantId(), apiUsageState);
|
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());
|
.entity(savedState).build());
|
||||||
return savedState;
|
return savedState;
|
||||||
}
|
}
|
||||||
|
|||||||
Loading…
x
Reference in New Issue
Block a user