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.common.data.id.EntityId;
|
||||
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.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
|
||||
protected boolean doProcessCfMsg(ToCalculatedFieldSystemMsg msg) throws CalculatedFieldException {
|
||||
switch (msg.getMsgType()) {
|
||||
|
||||
@ -92,6 +92,12 @@ public class CalculatedFieldEntityMessageProcessor extends AbstractContextAwareM
|
||||
this.ctx = ctx;
|
||||
}
|
||||
|
||||
public void stop() {
|
||||
log.info("[{}][{}] Stopping entity actor.", tenantId, entityId);
|
||||
states.clear();
|
||||
ctx.stop(ctx.getSelf());
|
||||
}
|
||||
|
||||
public void process(CalculatedFieldPartitionChangeMsg msg) {
|
||||
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);
|
||||
|
||||
@ -20,6 +20,7 @@ import org.thingsboard.server.actors.ActorSystemContext;
|
||||
import org.thingsboard.server.actors.TbActorCtx;
|
||||
import org.thingsboard.server.actors.TbActorException;
|
||||
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.cf.CalculatedFieldEntityLifecycleMsg;
|
||||
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
|
||||
protected boolean doProcessCfMsg(ToCalculatedFieldSystemMsg msg) throws CalculatedFieldException {
|
||||
switch (msg.getMsgType()) {
|
||||
|
||||
@ -91,6 +91,15 @@ public class CalculatedFieldManagerMessageProcessor extends AbstractContextAware
|
||||
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 {
|
||||
log.debug("[{}] Processing CF init message.", msg.getCf().getId());
|
||||
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) {
|
||||
if (tbelInvokeService == null) {
|
||||
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.List;
|
||||
import java.util.Optional;
|
||||
import java.util.Set;
|
||||
import java.util.concurrent.ConcurrentHashMap;
|
||||
import java.util.concurrent.ConcurrentMap;
|
||||
@ -225,6 +226,7 @@ public class DefaultTbActorSystem implements TbActorSystem {
|
||||
if (scheduler != null) {
|
||||
scheduler.shutdownNow();
|
||||
}
|
||||
actors.values().forEach(mailbox -> Optional.ofNullable(mailbox).ifPresent(m -> m.destroy(null)));
|
||||
actors.clear();
|
||||
}
|
||||
|
||||
|
||||
@ -39,6 +39,7 @@ public class CalculatedFieldDataValidator extends DataValidator<CalculatedField>
|
||||
protected void validateCreate(TenantId tenantId, CalculatedField calculatedField) {
|
||||
validateNumberOfCFsPerEntity(tenantId, calculatedField.getEntityId());
|
||||
validateNumberOfArgumentsPerCF(tenantId, calculatedField);
|
||||
validateArgumentNames(calculatedField);
|
||||
}
|
||||
|
||||
@Override
|
||||
@ -48,6 +49,7 @@ public class CalculatedFieldDataValidator extends DataValidator<CalculatedField>
|
||||
throw new DataValidationException("Can't update non existing calculated field!");
|
||||
}
|
||||
validateNumberOfArgumentsPerCF(tenantId, calculatedField);
|
||||
validateArgumentNames(calculatedField);
|
||||
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