[SNMP4J] DefaultMOServer Problem-method wait() doesn't exist!

Nídia S. Campos nidiascampos at gmail.com
Mon Jul 17 16:16:17 CEST 2006


Hi Frank,
Thank you very much for responde me, but ,the code below doesn't fixe the
problem. When I start TestAgent and try to create a row with a Set-Request,
it adds a lock on DefaultMOTable (snmpTArgetAddrTable) for each Subrequest
and it never comes to commit phase. If I try again, it stops at that
'Waiting for lock on DefaultMOTable' message for the first SubRequest.

SnmpTargetAddrTAble has a validator for each column, so, it must need all
values to create a new row. If you add a new row using
SnmpTargetMIB.addTargetAddr(), it works. But, if you do this remotelly, it
doesn't work because DefaultMOTable only  update or create rows using one
column, that's it, one SubRequest.  Then DefaultMOTableModel's prepare
method doesn't work for SnmpTargetAddrTable beacuse it only processes
SubRequests.

So I think for table rows that must need all columns values to be created,
DefaultMOTableModel's prepare method must receive a Request.

What do you think?

Best Regards,
Nídia

On 7/14/06, Frank Fock <fock at agentpp.com> wrote:
>
> Hi Nídia,
>
> There is a regression bug in DefaultMOTableModel's prepare method
> which does not set the phase completion state on preparation success.
>
> The code below fixes the problem:
>
>    public void prepare(SubRequest request) {
>      OID cellOID = request.getVariableBinding().getOid();
>      MOTableCellInfo cell = getCellInfo(cellOID);
>      if (cell.getIndex() == null) {
>        request.getStatus().setErrorStatus(PDU.inconsistentName);
>        return;
>      }
>      if ((cell.getColumn() >= 0) && (cell.getColumn() < columns.length)) {
>        MOColumn col = getColumn(cell.getColumn());
>        if (logger.isDebugEnabled()) {
>          logger.debug("Preparing sub-request
> ("+request.getVariableBinding()+")"+
>                       " for column: "+col);
>        }
>        if (col instanceof MOMutableColumn) {
>          MOMutableColumn mcol = (MOMutableColumn)col;
>          // check index
>          if (getIndexDef().isValidIndex(cell.getIndex ())) {
>            MOTableRow row = model.getRow(cell.getIndex());
>            if (row == null) {
>              // look for already prepared row
>              row = (MOTableRow)
>                  getNewRows(request.getRequest()).get(cell.getIndex());
>            }
>            if (row != null) {
>              prepare(request, cell, mcol, row, false);
>              request.completed();
>              return;
>            }
>            else if (model instanceof MOMutableTableModel) {
>              if (logger.isDebugEnabled()) {
>                logger.debug("Trying to create new row
> '"+cell.getIndex()+"'");
>              }
>              MOMutableTableModel mmodel = (MOMutableTableModel)model;
>              // create new row
>              try {
>                row = createRow(request, cell, mmodel);
>                prepare(request, cell, mcol, row, true);
>                request.completed();
>              }
>              catch (UnsupportedOperationException ex) {
>                request.getStatus().setErrorStatus(PDU.noCreation);
>              }
>            }
>            else {
>              request.getStatus().setErrorStatus(PDU.noCreation);
>            }
>          }
>          else {
>            // invalid index
>            if (logger.isDebugEnabled()) {
>              logger.debug("Invalid index '"+cell.getIndex()+
>                           "' for row creation in table "+getID());
>            }
>            request.getStatus().setErrorStatus(PDU.noCreation);
>          }
>        }
>        else {
>          // read-only column
>          request.getStatus ().setErrorStatus(PDU.notWritable);
>        }
>      }
>      else {
>        request.getStatus().setErrorStatus(PDU.noCreation);
>      }
>    }
>
>
> A new beta release will be available soon on the
> SNMP4J web site.
>
> Best regards,
> Frank
>
> Nídia S. Campos wrote:
> > Hi,
> > I am trying to add a entry in snmpTargetAddrTable using community
> 'public'.
> > When VACM MIB allows access for view 'fullWriteView', TestAgent stops
> > with :
> >
> > 214254 [RequestPool.3] DEBUG org.snmp4j.agent.DefaultMOServer  - Waiting
> > for
> > lock on DefaultMOTable[id=1.3.6.1.6.3.12.1.2.1,index=
> > org.snmp4j.agent.mo.snmp.SnmpTargetMIB$2 at 1ded0fd ,columns=[
> > org.snmp4j.agent.mo.MOMutableColumn[columnID=2,syntax=6,default=,mode=],
> > org.snmp4j.agent.mo.MOMutableColumn[columnID=3,syntax=4,default=,mode=],
> > org.snmp4j.agent.mo.MOMutableColumn[columnID=4,syntax=2,default=1500,mode=],
>
> >
> > org.snmp4j.agent.mo.MOMutableColumn
> [columnID=5,syntax=2,default=3,mode=],
> > org.snmp4j.agent.mo.snmp.SnmpTagList
> [columnID=6,syntax=4,default=,mode=],
> > org.snmp4j.agent.mo.MOMutableColumn[columnID=7,syntax=4,default=,mode=],
>
> > org.snmp4j.agent.mo.snmp.StorageType
> [columnID=8,syntax=2,default=3,mode=],
> > org.snmp4j.agent.mo.snmp.RowStatus
> [columnID=9,syntax=2,default=null,mode=]]]
> >
> >
> >
> > So, this messages comes from org.snmp4j.agent.DefaultMOServe.lock(Object
> > owner, ManagedObject managedObject) at this condition:
> >      else if (lock.getOwner() != owner) {
> >        try {
> >          if (logger.isDebugEnabled()) {
> >            logger.debug("Waiting for lock on "+managedObject);
> >          }
> >          wait();
> >        }
> >        catch (InterruptedException ex) {
> >          /**@todo logging*/
> >          break;
> >        }
> >      }
> >
> >
> > This methode wait() doesn't exist, so TestAgent stops at
> > org.snmp4j.agent.CommanderProcessor.
> > SetHandler.prepare (OctetString context, Request request, MOServer
> server).
> >
> > Please, may someone help me?
> >
> > Thanks in advance,
> > Nídia
> > _______________________________________________
> > SNMP4J mailing list
> > SNMP4J at agentpp.org
> > http://lists.agentpp.org/mailman/listinfo/snmp4j
>
> --
> AGENT++
> http://www.agentpp.com
> http://www.mibexplorer.com
> http://www.mibdesigner.com
>
>



More information about the SNMP4J mailing list