Re: [SNMP4J] TableUtils.getTable() doesn't return

2016-10-25 Thread Frank Fock

Hi Steffen,

Yes, this will be included in the next (2.5.3) release.

Best regards,
Frank

Am 25.10.2016 um 16:09 schrieb Steffen Brüntjen:

Hi!

I can approve that this edit

boolean sentChunk = sendNextChunk();
if (!sentChunk) {
if (anyMatch) {
sent = 0;
anyMatch = false;
sentChunk = sendNextChunk();
}
if (!sentChunk) {
emptyCache();
finished = true;
listener.finished(new TableEvent(this, 
userObject));
}
}

solves the problem. Are you going to merge this to the next release?

The device with this issue is an HP ProCurve Switch 2910al-48G (J9147A).

Best regards,
Steffen Brüntjen



-Original Message-
From: SNMP4J [mailto:snmp4j-boun...@agentpp.org] On Behalf Of Frank Fock
Sent: Dienstag, 25. Oktober 2016 02:03
To: snmp4j@agentpp.org
Subject: Re: [SNMP4J] TableUtils.getTable() doesn't return

Hi Steffen,

I cannot imagine a standard conforming agent that will cause the
situation you
described, but anyway you are right, that there is a "hole" in the
algorithm of
TableUtils.

To fix it, you can replace the "relevant part in
TableRequest.onResponse" with

boolean sentChunk;
if (!(sentChunk = sendNextChunk())) {
if (anyMatch) {
  sent =0;
  anyMatch =false;
  sentChunk = sendNextChunk();
}
if (!sentChunk) {
  emptyCache();
  finished =true;
  listener.finished(new TableEvent(this,userObject));
}
}

Best regards,
Frank


Am 24.10.2016 um 18:36 schrieb Steffen Brüntjen:

Hi!

I found a problem in the TableUtils class. I set maxNumColumnsPerPDU in my
TableUtils object to 1 (because one of the test devices returns results in
wrong lexicographic order). Then, in some cases the TableUtils method

public List getTable(Target target,
OID[] columnOIDs,
OID lowerBoundIndex,
OID upperBoundIndex) {

doesn't return. It starts waiting for a notify() on InternalTableListener
which never comes.

This is the relevant part in TableRequest.onResponse:

if (!sendNextChunk()) {
if (anyMatch) {
sent = 0;
anyMatch = false;
sendNextChunk();
} else {
emptyCache();
finished = true;
listener.finished(new TableEvent(this, 
userObject));
}
}

The problem arises when the second call of sendNextChunk() returns false.
And this is what's happening. In sendNextChunk(), the first false comes
from here:

if (sent >= lastReceived.size()) {
return false;
}

The second false comes from here:

sent += chunkSize;
if (pdu.size() == 0) {
return false;
}
sendRequest(pdu, target, sentColumns);


Best regards,
Steffen Brüntjen

___
SNMP4J mailing list
SNMP4J@agentpp.org
https://oosnmp.net/mailman/listinfo/snmp4j


--
---
AGENT++
Maximilian-Kolbe-Str. 10
73257 Koengen, Germany
https://agentpp.com
Phone: +49 7024 8688230
Fax:   +49 7024 8688231

___
SNMP4J mailing list
SNMP4J@agentpp.org
https://oosnmp.net/mailman/listinfo/snmp4j


Re: [SNMP4J] TableUtils.getTable() doesn't return

2016-10-25 Thread Steffen Brüntjen
Hi!

I can approve that this edit

boolean sentChunk = sendNextChunk();
if (!sentChunk) {
if (anyMatch) {
sent = 0;
anyMatch = false;
sentChunk = sendNextChunk();
}
if (!sentChunk) {
emptyCache();
finished = true;
listener.finished(new TableEvent(this, 
userObject));
}
}

solves the problem. Are you going to merge this to the next release?

The device with this issue is an HP ProCurve Switch 2910al-48G (J9147A).

Best regards,
Steffen Brüntjen 



-Original Message-
From: SNMP4J [mailto:snmp4j-boun...@agentpp.org] On Behalf Of Frank Fock
Sent: Dienstag, 25. Oktober 2016 02:03
To: snmp4j@agentpp.org
Subject: Re: [SNMP4J] TableUtils.getTable() doesn't return

Hi Steffen,

I cannot imagine a standard conforming agent that will cause the 
situation you
described, but anyway you are right, that there is a "hole" in the 
algorithm of
TableUtils.

To fix it, you can replace the "relevant part in 
TableRequest.onResponse" with

boolean sentChunk;
if (!(sentChunk = sendNextChunk())) {
   if (anyMatch) {
 sent =0;
 anyMatch =false;
 sentChunk = sendNextChunk();
   }
   if (!sentChunk) {
 emptyCache();
 finished =true;
 listener.finished(new TableEvent(this,userObject));
   }
}

Best regards,
Frank


Am 24.10.2016 um 18:36 schrieb Steffen Brüntjen:
> Hi!
>
> I found a problem in the TableUtils class. I set maxNumColumnsPerPDU in my
> TableUtils object to 1 (because one of the test devices returns results in
> wrong lexicographic order). Then, in some cases the TableUtils method
>
>   public List getTable(Target target,
>   OID[] columnOIDs,
>   OID lowerBoundIndex,
>   OID upperBoundIndex) {
>
> doesn't return. It starts waiting for a notify() on InternalTableListener
> which never comes.
>
> This is the relevant part in TableRequest.onResponse:
>
>   if (!sendNextChunk()) {
>   if (anyMatch) {
>   sent = 0;
>   anyMatch = false;
>   sendNextChunk();
>   } else {
>   emptyCache();
>   finished = true;
>   listener.finished(new TableEvent(this, 
> userObject));
>   }
>   }
>
> The problem arises when the second call of sendNextChunk() returns false.
> And this is what's happening. In sendNextChunk(), the first false comes
> from here:
>
>   if (sent >= lastReceived.size()) {
>   return false;
>   }
>
> The second false comes from here:
>
>   sent += chunkSize;
>   if (pdu.size() == 0) {
>   return false;
>   }
>   sendRequest(pdu, target, sentColumns);
>
>
> Best regards,
> Steffen Brüntjen
>
> ___
> SNMP4J mailing list
> SNMP4J@agentpp.org
> https://oosnmp.net/mailman/listinfo/snmp4j

-- 
---
AGENT++
Maximilian-Kolbe-Str. 10
73257 Koengen, Germany
https://agentpp.com
Phone: +49 7024 8688230
Fax:   +49 7024 8688231

___
SNMP4J mailing list
SNMP4J@agentpp.org
https://oosnmp.net/mailman/listinfo/snmp4j
___
SNMP4J mailing list
SNMP4J@agentpp.org
https://oosnmp.net/mailman/listinfo/snmp4j