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: [email protected] > To: [email protected] > 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 > [email protected] > http://lists.agentpp.org/mailman/listinfo/snmp4j _______________________________________________ SNMP4J mailing list [email protected] http://lists.agentpp.org/mailman/listinfo/snmp4j
