Sequential RPC processing support
This commit is contained in:
parent
e5b988a297
commit
c29a00656a
@ -400,9 +400,9 @@ public class ActorSystemContext {
|
||||
@Getter
|
||||
private String debugPerTenantLimitsConfiguration;
|
||||
|
||||
@Value("${actors.rpc.sequence.enabled:false}")
|
||||
@Value("${actors.rpc.sequential:false}")
|
||||
@Getter
|
||||
private boolean rpcSequenceEnabled;
|
||||
private boolean rpcSequential;
|
||||
|
||||
@Value("${actors.rpc.max_retries:5}")
|
||||
@Getter
|
||||
|
||||
@ -122,7 +122,7 @@ class DeviceActorMessageProcessor extends AbstractContextAwareMsgProcessor {
|
||||
private final Map<UUID, SessionInfo> attributeSubscriptions;
|
||||
private final Map<UUID, SessionInfo> rpcSubscriptions;
|
||||
private final Map<Integer, ToDeviceRpcRequestMetadata> toDeviceRpcPendingMap;
|
||||
private final boolean rpcSequenceEnabled;
|
||||
private final boolean rpcSequential;
|
||||
|
||||
private int rpcSeq = 0;
|
||||
private String deviceName;
|
||||
@ -134,7 +134,7 @@ class DeviceActorMessageProcessor extends AbstractContextAwareMsgProcessor {
|
||||
super(systemContext);
|
||||
this.tenantId = tenantId;
|
||||
this.deviceId = deviceId;
|
||||
this.rpcSequenceEnabled = systemContext.isRpcSequenceEnabled();
|
||||
this.rpcSequential = systemContext.isRpcSequential();
|
||||
this.attributeSubscriptions = new HashMap<>();
|
||||
this.rpcSubscriptions = new HashMap<>();
|
||||
this.toDeviceRpcPendingMap = new LinkedHashMap<>();
|
||||
@ -233,7 +233,7 @@ class DeviceActorMessageProcessor extends AbstractContextAwareMsgProcessor {
|
||||
}
|
||||
|
||||
private boolean isSendNewRpcAvailable() {
|
||||
return !rpcSequenceEnabled || toDeviceRpcPendingMap.values().stream().filter(md -> !md.isDelivered()).findAny().isEmpty();
|
||||
return !rpcSequential || toDeviceRpcPendingMap.values().stream().filter(md -> !md.isDelivered()).findAny().isEmpty();
|
||||
}
|
||||
|
||||
private Rpc createRpc(ToDeviceRpcRequest request, RpcStatus status) {
|
||||
@ -332,7 +332,7 @@ class DeviceActorMessageProcessor extends AbstractContextAwareMsgProcessor {
|
||||
}
|
||||
Set<Integer> sentOneWayIds = new HashSet<>();
|
||||
|
||||
if (rpcSequenceEnabled) {
|
||||
if (rpcSequential) {
|
||||
getFirstRpc().ifPresent(processPendingRpc(context, sessionId, nodeId, sentOneWayIds));
|
||||
} else if (sessionType == SessionType.ASYNC) {
|
||||
toDeviceRpcPendingMap.entrySet().forEach(processPendingRpc(context, sessionId, nodeId, sentOneWayIds));
|
||||
@ -348,7 +348,7 @@ class DeviceActorMessageProcessor extends AbstractContextAwareMsgProcessor {
|
||||
}
|
||||
|
||||
private void sendNextPendingRequest(TbActorCtx context) {
|
||||
if (rpcSequenceEnabled) {
|
||||
if (rpcSequential) {
|
||||
rpcSubscriptions.forEach((id, s) -> sendPendingRequests(context, id, s.getNodeId()));
|
||||
}
|
||||
}
|
||||
@ -357,7 +357,7 @@ class DeviceActorMessageProcessor extends AbstractContextAwareMsgProcessor {
|
||||
return entry -> {
|
||||
ToDeviceRpcRequest request = entry.getValue().getMsg().getMsg();
|
||||
ToDeviceRpcRequestBody body = request.getBody();
|
||||
if (request.isOneway() && !rpcSequenceEnabled) {
|
||||
if (request.isOneway() && !rpcSequential) {
|
||||
sentOneWayIds.add(entry.getKey());
|
||||
systemContext.getTbCoreDeviceRpcService().processRpcResponseFromDeviceActor(new FromDeviceRpcResponse(request.getId(), null, null));
|
||||
}
|
||||
@ -599,7 +599,7 @@ class DeviceActorMessageProcessor extends AbstractContextAwareMsgProcessor {
|
||||
if (status.equals(RpcStatus.DELIVERED)) {
|
||||
if (md.getMsg().getMsg().isOneway()) {
|
||||
toDeviceRpcPendingMap.remove(responseMsg.getRequestId());
|
||||
if (rpcSequenceEnabled) {
|
||||
if (rpcSequential) {
|
||||
systemContext.getTbCoreDeviceRpcService().processRpcResponseFromDeviceActor(new FromDeviceRpcResponse(rpcId, null, null));
|
||||
}
|
||||
} else {
|
||||
|
||||
@ -328,8 +328,7 @@ actors:
|
||||
duration: "${ACTORS_RULE_TRANSACTION_DURATION:60000}"
|
||||
rpc:
|
||||
max_retries: "${ACTORS_RPC_MAX_RETRIES:5}"
|
||||
sequence:
|
||||
enabled: "${ACTORS_RPC_SEQUENCE_ENABLED:false}"
|
||||
sequential: "${ACTORS_RPC_SEQUENTIAL:false}"
|
||||
statistics:
|
||||
# Enable/disable actor statistics
|
||||
enabled: "${ACTORS_STATISTICS_ENABLED:true}"
|
||||
|
||||
@ -7,3 +7,4 @@ transport.lwm2m.server.security.key_alias=server
|
||||
transport.lwm2m.server.security.key_password=server
|
||||
transport.lwm2m.bootstrap.security.key_alias=server
|
||||
transport.lwm2m.bootstrap.security.key_password=server
|
||||
actors.rpc.sequential=true
|
||||
Loading…
x
Reference in New Issue
Block a user