added validation for arg name and implemented destroy methods
This commit is contained in:
parent
705265c303
commit
d4f7cb7df1
@ -21,6 +21,7 @@ import org.thingsboard.server.actors.TbActorCtx;
|
|||||||
import org.thingsboard.server.actors.TbActorException;
|
import org.thingsboard.server.actors.TbActorException;
|
||||||
import org.thingsboard.server.common.data.id.EntityId;
|
import org.thingsboard.server.common.data.id.EntityId;
|
||||||
import org.thingsboard.server.common.data.id.TenantId;
|
import org.thingsboard.server.common.data.id.TenantId;
|
||||||
|
import org.thingsboard.server.common.msg.TbActorStopReason;
|
||||||
import org.thingsboard.server.common.msg.ToCalculatedFieldSystemMsg;
|
import org.thingsboard.server.common.msg.ToCalculatedFieldSystemMsg;
|
||||||
import org.thingsboard.server.common.msg.cf.CalculatedFieldPartitionChangeMsg;
|
import org.thingsboard.server.common.msg.cf.CalculatedFieldPartitionChangeMsg;
|
||||||
|
|
||||||
@ -47,6 +48,12 @@ public class CalculatedFieldEntityActor extends AbstractCalculatedFieldActor {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public void destroy(TbActorStopReason stopReason, Throwable cause) throws TbActorException {
|
||||||
|
log.debug("[{}] Stopping CF entity actor.", processor.tenantId);
|
||||||
|
processor.stop();
|
||||||
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
protected boolean doProcessCfMsg(ToCalculatedFieldSystemMsg msg) throws CalculatedFieldException {
|
protected boolean doProcessCfMsg(ToCalculatedFieldSystemMsg msg) throws CalculatedFieldException {
|
||||||
switch (msg.getMsgType()) {
|
switch (msg.getMsgType()) {
|
||||||
|
|||||||
@ -92,6 +92,12 @@ public class CalculatedFieldEntityMessageProcessor extends AbstractContextAwareM
|
|||||||
this.ctx = ctx;
|
this.ctx = ctx;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public void stop() {
|
||||||
|
log.info("[{}][{}] Stopping entity actor.", tenantId, entityId);
|
||||||
|
states.clear();
|
||||||
|
ctx.stop(ctx.getSelf());
|
||||||
|
}
|
||||||
|
|
||||||
public void process(CalculatedFieldPartitionChangeMsg msg) {
|
public void process(CalculatedFieldPartitionChangeMsg msg) {
|
||||||
if (!systemContext.getPartitionService().resolve(ServiceType.TB_RULE_ENGINE, DataConstants.CF_QUEUE_NAME, tenantId, entityId).isMyPartition()) {
|
if (!systemContext.getPartitionService().resolve(ServiceType.TB_RULE_ENGINE, DataConstants.CF_QUEUE_NAME, tenantId, entityId).isMyPartition()) {
|
||||||
log.info("[{}] Stopping entity actor due to change partition event.", entityId);
|
log.info("[{}] Stopping entity actor due to change partition event.", entityId);
|
||||||
|
|||||||
@ -20,6 +20,7 @@ import org.thingsboard.server.actors.ActorSystemContext;
|
|||||||
import org.thingsboard.server.actors.TbActorCtx;
|
import org.thingsboard.server.actors.TbActorCtx;
|
||||||
import org.thingsboard.server.actors.TbActorException;
|
import org.thingsboard.server.actors.TbActorException;
|
||||||
import org.thingsboard.server.common.data.id.TenantId;
|
import org.thingsboard.server.common.data.id.TenantId;
|
||||||
|
import org.thingsboard.server.common.msg.TbActorStopReason;
|
||||||
import org.thingsboard.server.common.msg.ToCalculatedFieldSystemMsg;
|
import org.thingsboard.server.common.msg.ToCalculatedFieldSystemMsg;
|
||||||
import org.thingsboard.server.common.msg.cf.CalculatedFieldEntityLifecycleMsg;
|
import org.thingsboard.server.common.msg.cf.CalculatedFieldEntityLifecycleMsg;
|
||||||
import org.thingsboard.server.common.msg.cf.CalculatedFieldInitMsg;
|
import org.thingsboard.server.common.msg.cf.CalculatedFieldInitMsg;
|
||||||
@ -52,6 +53,12 @@ public class CalculatedFieldManagerActor extends AbstractCalculatedFieldActor {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public void destroy(TbActorStopReason stopReason, Throwable cause) throws TbActorException {
|
||||||
|
log.debug("[{}] Stopping CF manager actor.", processor.tenantId);
|
||||||
|
processor.stop();
|
||||||
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
protected boolean doProcessCfMsg(ToCalculatedFieldSystemMsg msg) throws CalculatedFieldException {
|
protected boolean doProcessCfMsg(ToCalculatedFieldSystemMsg msg) throws CalculatedFieldException {
|
||||||
switch (msg.getMsgType()) {
|
switch (msg.getMsgType()) {
|
||||||
|
|||||||
@ -91,6 +91,15 @@ public class CalculatedFieldManagerMessageProcessor extends AbstractContextAware
|
|||||||
this.ctx = ctx;
|
this.ctx = ctx;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public void stop() {
|
||||||
|
log.info("[{}] Stopping CF manager actor.", tenantId);
|
||||||
|
calculatedFields.values().forEach(CalculatedFieldCtx::stop);
|
||||||
|
calculatedFields.clear();
|
||||||
|
entityIdCalculatedFields.clear();
|
||||||
|
entityIdCalculatedFieldLinks.clear();
|
||||||
|
ctx.stop(ctx.getSelf());
|
||||||
|
}
|
||||||
|
|
||||||
public void onFieldInitMsg(CalculatedFieldInitMsg msg) throws CalculatedFieldException {
|
public void onFieldInitMsg(CalculatedFieldInitMsg msg) throws CalculatedFieldException {
|
||||||
log.debug("[{}] Processing CF init message.", msg.getCf().getId());
|
log.debug("[{}] Processing CF init message.", msg.getCf().getId());
|
||||||
var cf = msg.getCf();
|
var cf = msg.getCf();
|
||||||
|
|||||||
@ -122,6 +122,15 @@ public class CalculatedFieldCtx {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public void stop() {
|
||||||
|
if (calculatedFieldScriptEngine != null) {
|
||||||
|
calculatedFieldScriptEngine.destroy();
|
||||||
|
}
|
||||||
|
if (customExpression != null) {
|
||||||
|
customExpression.remove();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
private CalculatedFieldScriptEngine initEngine(TenantId tenantId, String expression, TbelInvokeService tbelInvokeService) {
|
private CalculatedFieldScriptEngine initEngine(TenantId tenantId, String expression, TbelInvokeService tbelInvokeService) {
|
||||||
if (tbelInvokeService == null) {
|
if (tbelInvokeService == null) {
|
||||||
throw new IllegalArgumentException("TBEL script engine is disabled!");
|
throw new IllegalArgumentException("TBEL script engine is disabled!");
|
||||||
|
|||||||
@ -23,6 +23,7 @@ import org.thingsboard.server.common.msg.TbActorMsg;
|
|||||||
|
|
||||||
import java.util.Collections;
|
import java.util.Collections;
|
||||||
import java.util.List;
|
import java.util.List;
|
||||||
|
import java.util.Optional;
|
||||||
import java.util.Set;
|
import java.util.Set;
|
||||||
import java.util.concurrent.ConcurrentHashMap;
|
import java.util.concurrent.ConcurrentHashMap;
|
||||||
import java.util.concurrent.ConcurrentMap;
|
import java.util.concurrent.ConcurrentMap;
|
||||||
@ -225,6 +226,7 @@ public class DefaultTbActorSystem implements TbActorSystem {
|
|||||||
if (scheduler != null) {
|
if (scheduler != null) {
|
||||||
scheduler.shutdownNow();
|
scheduler.shutdownNow();
|
||||||
}
|
}
|
||||||
|
actors.values().forEach(mailbox -> Optional.ofNullable(mailbox).ifPresent(m -> m.destroy(null)));
|
||||||
actors.clear();
|
actors.clear();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@ -39,6 +39,7 @@ public class CalculatedFieldDataValidator extends DataValidator<CalculatedField>
|
|||||||
protected void validateCreate(TenantId tenantId, CalculatedField calculatedField) {
|
protected void validateCreate(TenantId tenantId, CalculatedField calculatedField) {
|
||||||
validateNumberOfCFsPerEntity(tenantId, calculatedField.getEntityId());
|
validateNumberOfCFsPerEntity(tenantId, calculatedField.getEntityId());
|
||||||
validateNumberOfArgumentsPerCF(tenantId, calculatedField);
|
validateNumberOfArgumentsPerCF(tenantId, calculatedField);
|
||||||
|
validateArgumentNames(calculatedField);
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
@ -48,6 +49,7 @@ public class CalculatedFieldDataValidator extends DataValidator<CalculatedField>
|
|||||||
throw new DataValidationException("Can't update non existing calculated field!");
|
throw new DataValidationException("Can't update non existing calculated field!");
|
||||||
}
|
}
|
||||||
validateNumberOfArgumentsPerCF(tenantId, calculatedField);
|
validateNumberOfArgumentsPerCF(tenantId, calculatedField);
|
||||||
|
validateArgumentNames(calculatedField);
|
||||||
return old;
|
return old;
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -71,4 +73,10 @@ public class CalculatedFieldDataValidator extends DataValidator<CalculatedField>
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
private void validateArgumentNames(CalculatedField calculatedField) {
|
||||||
|
if (calculatedField.getConfiguration().getArguments().containsKey("ctx")) {
|
||||||
|
throw new DataValidationException("Argument name 'ctx' is reserved and cannot be used.");
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|||||||
Loading…
x
Reference in New Issue
Block a user