[SNMP4J] TreeUtils getSubTree returning partial results

Hema Gupta hemagupta at hotmail.com
Mon Apr 25 20:40:58 CEST 2011


Just to add, I tried similar test using Net-snmp, there too when running in parallel, I get some partial results,
however, I get the timeout error in that case.

 
> From: hemagupta at hotmail.com
> To: snmp4j at agentpp.org
> Date: Mon, 25 Apr 2011 10:13:35 -0400
> Subject: Re: [SNMP4J] TreeUtils getSubTree returning partial results
> 
> 
> 
> 
> 
> 
> 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
> SNMP4J at agentpp.org
> http://lists.agentpp.org/mailman/listinfo/snmp4j
 		 	   		  


More information about the SNMP4J mailing list