Browse Source

Merge pull request #15346 from volodymyr-babak/snmp-pooling-fixes

SNMP: defer querying tasks until transport session is registered
pull/15598/head
Viacheslav Klimov 5 months ago
committed by GitHub
parent
commit
547559db84
No known key found for this signature in database GPG Key ID: B5690EEEBB952194
  1. 3
      common/transport/snmp/src/main/java/org/thingsboard/server/transport/snmp/SnmpTransportContext.java
  2. 8
      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());
}

8
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,11 @@ 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 count: {}, Mappings count: {}",
sessionContext.getDeviceId(), requestContext.getCommunicationSpec(),
response.size(), requestContext.getResponseMappings().size());
log.debug("[{}] No values in the response for spec {}. Response PDUs: {}",
sessionContext.getDeviceId(), requestContext.getCommunicationSpec(), response);
throw new IllegalArgumentException("No values in the response");
}

Loading…
Cancel
Save