Hi,
I am using TreeUtils.getSubtree to retrieve some mibs from a a CISCO router.
The issue is that sometimes the response comes out as smaller than other times
if I run it
a couple of times. On few occassions the variable bindings returned is an empty
list .
Tried printing out the error and status from each tree event , but it never
gives an error.
The issue is more pronounced when running the program in multithreaded env with
each thread trying to get a different mib on the router in parallel.
As a result my program assumes that the query was successful but it gets only
partial data for that MIB.
Sometime no data is returned at all for the same mib object that in another run
would return more than 1000 lines.
I tried adjusting the timeout on the target oject, but doesn't help.
I want to be able to detect when the result is incomplete due to timeouts or
some error, so that we know an error occyrred and can retry.
Code snippet:
Snmp snmp4j = new Snmp(new
DefaultUdpTransportMapping());
snmp4j.listen();
Address add = new UdpAddress(ipAddr+"/"+snmpPort);
CommunityTarget target = new CommunityTarget();
target.setAddress(add);
target.setTimeout(snmpTimeout);
target.setAddress(add);
target.setRetries(numRetries);
target.setVersion(SnmpConstants.version2c);
target.setMaxSizeRequestPDU(65535);
target.setCommunity(new OctetString(commStr));
OID oID = new OID(strOid);
PDU request = new PDU();
request.setType(PDU.GETBULK);
request.setMaxRepetitions( 100);
request.setNonRepeaters( 0);
request.add(new VariableBinding(oID));
OID rootOID = request.get(0).getOid();
VariableBinding vb,ar[];
TreeUtils treeUtils = new
TreeUtils(snmp4j,
new
DefaultPDUFactory());
LinkedList l =
(LinkedList)treeUtils.getSubtree(target, rootOID);
if(l == null) {
logger.logWarning(className,
methodName,
"subTree:" + strOid+ "
results:null");
continue;
}
if (l.size() == 0 ) {
logger.logWarning(className,
methodName,
"returned tree has no
content");
}
else {
logger.logDebug( className,
methodName,"list size="+l.size());
ListIterator lt = l.listIterator(0);
boolean bBreak = false;
while (lt.hasNext()) {
TreeEvent t =
(TreeEvent)lt.next();
if ( t.getStatus() != 0 )
logger.logWarning( className, methodName," Treeevnt.status="+t.getStatus());
logger.logDebug( className,
methodName," Treeevnt.report PDU="+t.getReportPDU());
ar = t.getVariableBindings();
if(ar == null ) {
logger.logWarning(className, methodName,
"ar == null");
}
else
logger.logDebug( className,
methodName, "array length="+Array.getLength(ar));
for(int i = 0; (ar != null) &&
i < Array.getLength(ar);
i++) {
vb = ar[i];
System.out.println(vb.toString());
}
}
Ispent a day trying to address this issue, any help is greatly appreciated.
Thanks
-Hema
_______________________________________________
SNMP4J mailing list
[email protected]
http://lists.agentpp.org/mailman/listinfo/snmp4j