Browse Source

defer SNMP polling until transport session is fully registered

pull/15346/head
Volodymyr Babak 7 months ago
parent
commit
4c88676321
  1. 3
      common/transport/snmp/src/main/java/org/thingsboard/server/transport/snmp/SnmpTransportContext.java
  2. 6
      common/transport/snmp/src/main/java/org/thingsboard/server/transport/snmp/service/SnmpTransportService.java

3
common/transport/snmp/src/main/java/org/thingsboard/server/transport/snmp/SnmpTransportContext.java

@ -160,7 +160,6 @@ public class SnmpTransportContext extends TransportContext {
return;
}
sessions.put(device.getId(), sessionContext);
snmpTransportService.createQueryingTasks(sessionContext);
log.info("Established SNMP device session for device {}", device.getId());
}
@ -224,6 +223,8 @@ public class SnmpTransportContext extends TransportContext {
registerTransportSession(sessionContext, msg);
});
transportService.lifecycleEvent(sessionContext.getTenantId(), sessionContext.getDeviceId(), ComponentLifecycleEvent.STARTED, true, null);
snmpTransportService.createQueryingTasks(sessionContext);
log.info("[{}] Session registered and querying tasks created", sessionContext.getDeviceId());
} else {
log.warn("[{}] Failed to process device auth", sessionContext.getDeviceId());
}

6
common/transport/snmp/src/main/java/org/thingsboard/server/transport/snmp/service/SnmpTransportService.java

@ -164,7 +164,7 @@ public class SnmpTransportService implements TbTransportService, CommandResponde
ScheduledTask scheduledTask = new ScheduledTask();
scheduledTask.init(() -> {
try {
if (sessionContext.isActive()) {
if (sessionContext.isActive() && sessionContext.isConnected()) {
return sendRequest(sessionContext, repeatingCommunicationConfig);
}
} catch (Exception e) {
@ -390,7 +390,9 @@ public class SnmpTransportService implements TbTransportService, CommandResponde
JsonObject responseData = responseDataMappers.get(requestContext.getCommunicationSpec()).map(response, requestContext);
if (responseData.size() == 0) {
log.warn("[{}] No values in the response", sessionContext.getDeviceId());
log.warn("[{}] No values in the response for spec {}. Response PDUs: {}, Mappings count: {}",
sessionContext.getDeviceId(), requestContext.getCommunicationSpec(),
response, requestContext.getResponseMappings() != null ? requestContext.getResponseMappings().size() : 0);
throw new IllegalArgumentException("No values in the response");
}

Loading…
Cancel
Save