Commit 0fbb347b27a4f70e324beac90f79313697abd81b
Committed by
Andrew Shvayka
1 parent
9720dfac
persistent rpc improvements
Showing
5 changed files
with
19 additions
and
6 deletions
... | ... | @@ -515,7 +515,8 @@ class DeviceActorMessageProcessor extends AbstractContextAwareMsgProcessor { |
515 | 515 | systemContext.getTbCoreDeviceRpcService().processRpcResponseFromDeviceActor(new FromDeviceRpcResponse(requestMd.getMsg().getMsg().getId(), |
516 | 516 | responseMsg.getPayload(), null)); |
517 | 517 | if (requestMd.getMsg().getMsg().isPersisted()) { |
518 | - systemContext.getTbRpcService().save(tenantId, new RpcId(requestMd.getMsg().getMsg().getId()), RpcStatus.SUCCESSFUL, JacksonUtil.toJsonNode(responseMsg.getPayload())); | |
518 | + RpcStatus status = responseMsg.getFailed() ? RpcStatus.FAILED : RpcStatus.SUCCESSFUL; | |
519 | + systemContext.getTbRpcService().save(tenantId, new RpcId(requestMd.getMsg().getMsg().getId()), status, JacksonUtil.toJsonNode(responseMsg.getPayload())); | |
519 | 520 | } |
520 | 521 | } else { |
521 | 522 | log.debug("[{}] Rpc command response [{}] is stale!", deviceId, responseMsg.getRequestId()); | ... | ... |
... | ... | @@ -84,7 +84,6 @@ public class LwM2mSessionMsgListener implements GenericFutureListener<Future<? s |
84 | 84 | public void onToDeviceRpcRequest(UUID sessionId, ToDeviceRpcRequestMsg toDeviceRequest) { |
85 | 85 | log.trace("[{}] Received RPC command to device", sessionId); |
86 | 86 | this.rpcHandler.onToDeviceRpcRequest(toDeviceRequest, this.sessionInfo); |
87 | - transportService.process(sessionInfo, toDeviceRequest, false, TransportServiceCallback.EMPTY); | |
88 | 87 | } |
89 | 88 | |
90 | 89 | @Override | ... | ... |
... | ... | @@ -314,7 +314,7 @@ public class DefaultLwM2MRpcRequestHandler implements LwM2MRpcRequestHandler { |
314 | 314 | |
315 | 315 | private void sendErrorRpcResponse(TransportProtos.SessionInfoProto sessionInfo, int requestId, String result, String error) { |
316 | 316 | String payload = JacksonUtil.toString(JacksonUtil.newObjectNode().put("result", result).put("error", error)); |
317 | - TransportProtos.ToDeviceRpcResponseMsg msg = TransportProtos.ToDeviceRpcResponseMsg.newBuilder().setRequestId(requestId).setPayload(payload).build(); | |
317 | + TransportProtos.ToDeviceRpcResponseMsg msg = TransportProtos.ToDeviceRpcResponseMsg.newBuilder().setRequestId(requestId).setPayload(payload).setFailed(true).build(); | |
318 | 318 | transportService.process(sessionInfo, msg, null); |
319 | 319 | } |
320 | 320 | ... | ... |
... | ... | @@ -16,12 +16,16 @@ |
16 | 16 | package org.thingsboard.server.transport.lwm2m.server.rpc; |
17 | 17 | |
18 | 18 | import org.eclipse.leshan.core.ResponseCode; |
19 | +import org.eclipse.leshan.core.request.exception.ClientSleepingException; | |
19 | 20 | import org.thingsboard.common.util.JacksonUtil; |
20 | 21 | import org.thingsboard.server.common.transport.TransportService; |
22 | +import org.thingsboard.server.common.transport.TransportServiceCallback; | |
21 | 23 | import org.thingsboard.server.gen.transport.TransportProtos; |
22 | 24 | import org.thingsboard.server.transport.lwm2m.server.client.LwM2mClient; |
23 | 25 | import org.thingsboard.server.transport.lwm2m.server.downlink.DownlinkRequestCallback; |
24 | 26 | |
27 | +import java.util.concurrent.TimeoutException; | |
28 | + | |
25 | 29 | public abstract class RpcDownlinkRequestCallbackProxy<R, T> implements DownlinkRequestCallback<R, T> { |
26 | 30 | |
27 | 31 | private final TransportService transportService; |
... | ... | @@ -39,6 +43,7 @@ public abstract class RpcDownlinkRequestCallbackProxy<R, T> implements DownlinkR |
39 | 43 | |
40 | 44 | @Override |
41 | 45 | public void onSuccess(R request, T response) { |
46 | + transportService.process(client.getSession(), this.request, false, TransportServiceCallback.EMPTY); | |
42 | 47 | sendRpcReplyOnSuccess(response); |
43 | 48 | if (callback != null) { |
44 | 49 | callback.onSuccess(request, response); |
... | ... | @@ -55,16 +60,23 @@ public abstract class RpcDownlinkRequestCallbackProxy<R, T> implements DownlinkR |
55 | 60 | |
56 | 61 | @Override |
57 | 62 | public void onError(String params, Exception e) { |
58 | - sendRpcReplyOnError(e); | |
63 | + if (!(e instanceof TimeoutException || e instanceof ClientSleepingException)) { | |
64 | + sendRpcReplyOnError(e); | |
65 | + } | |
59 | 66 | if (callback != null) { |
60 | 67 | callback.onError(params, e); |
61 | 68 | } |
62 | 69 | } |
63 | 70 | |
64 | 71 | protected void reply(LwM2MRpcResponseBody response) { |
72 | + reply(response, false); | |
73 | + } | |
74 | + | |
75 | + protected void reply(LwM2MRpcResponseBody response, boolean failed) { | |
65 | 76 | TransportProtos.ToDeviceRpcResponseMsg msg = TransportProtos.ToDeviceRpcResponseMsg.newBuilder() |
66 | 77 | .setPayload(JacksonUtil.toString(response)) |
67 | 78 | .setRequestId(request.getRequestId()) |
79 | + .setFailed(failed) | |
68 | 80 | .build(); |
69 | 81 | transportService.process(client.getSession(), msg, null); |
70 | 82 | } |
... | ... | @@ -72,11 +84,11 @@ public abstract class RpcDownlinkRequestCallbackProxy<R, T> implements DownlinkR |
72 | 84 | abstract protected void sendRpcReplyOnSuccess(T response); |
73 | 85 | |
74 | 86 | protected void sendRpcReplyOnValidationError(String msg) { |
75 | - reply(LwM2MRpcResponseBody.builder().result(ResponseCode.BAD_REQUEST.getName()).error(msg).build()); | |
87 | + reply(LwM2MRpcResponseBody.builder().result(ResponseCode.BAD_REQUEST.getName()).error(msg).build(), true); | |
76 | 88 | } |
77 | 89 | |
78 | 90 | protected void sendRpcReplyOnError(Exception e) { |
79 | - reply(LwM2MRpcResponseBody.builder().result(ResponseCode.INTERNAL_SERVER_ERROR.getName()).error(e.getMessage()).build()); | |
91 | + reply(LwM2MRpcResponseBody.builder().result(ResponseCode.INTERNAL_SERVER_ERROR.getName()).error(e.getMessage()).build(), true); | |
80 | 92 | } |
81 | 93 | |
82 | 94 | } | ... | ... |