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

Frank Fock fock at agentpp.com
Fri Jul 14 22:05:52 CEST 2006


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