[SNMP4J] implementing auto-reconnection Agentx -> master-agent

Amit Dor-Shifer amitds at oversi.com
Tue Jan 29 10:05:26 CET 2008


Hello Mr. Fock.

Recently I was required to address an issue with reconnection. When
mater agent had terminated and recovered quickly, before our subagent
timed-out for the first time, then reconnection was working just fine.
However when master agent was down for more than a second or two,
reconnection could no longer happen. Sniffing showed that in-fact master
agent is responding to the "OPEN" PDU, yet the subagent wasn't getting
it. I've noticed that in the former case,  connection state has changed
to DISCONNECTED_REMOTELY, then immediately back to CONNECTED, while in
the latter case, it moved from DISCONNECTED_REMOTELY to CLOSED. Here are
the log traces for the first and then second scenarios:

when master agent recovers immediately:
2008/01/29 08:45:29.798 (JavaLogAdapter at log) FINE: Socket for address
'127.0.0.1/705' is closed, opening it...
2008/01/29 08:45:29.799 (JavaLogAdapter at log) FINE: Trying to connect to
127.0.0.1/705
2008/01/29 08:45:29.799 (JavaLogAdapter at log) FINE: Connected to
127.0.0.1/705
2008/01/29 08:45:29.800 (JavaLogAdapter at log) FINE: Firing transport
state event:
org.snmp4j.transport.TransportStateEvent[source=org.snmp4j.transport.DefaultTcpTransportMapping at 42a7a434,peerAddress=null,newState=1,cancelled=false,causingException=null]

when master agent os gone for a longer duration:
2008/01/29 08:46:05.017 (JavaLogAdapter at log) FINE: Socket for address
'127.0.0.1/705' is closed, opening it...
2008/01/29 08:46:05.018 (JavaLogAdapter at log) FINE: Trying to connect to
127.0.0.1/705
2008/01/29 08:46:05.021 (JavaLogAdapter at log) WARNING:
java.net.ConnectException: Connection refused
2008/01/29 08:46:05.021 (JavaLogAdapter at log) SEVERE:
java.nio.channels.ClosedChannelException
2008/01/29 08:46:05.021 (JavaLogAdapter at log) FINE: Firing transport
state event:
org.snmp4j.transport.TransportStateEvent[source=org.snmp4j.transport.DefaultTcpTransportMapping at 42a7a434,peerAddress=127.0.0.1/705,newState=4,cancelled=false,causingException=java.nio.channels.ClosedChannelException]
2008/01/29 08:46:10.018 (JavaLogAdapter at log) FINE: AgentX request timed
out: 49
2008/01/29 08:46:10.019 (JavaLogAdapter at log) SEVERE: Timeout on
connection to master 127.0.0.1/705
2008/01/29 08:46:10.020 (JavaLogAdapter at log) SEVERE:
java.nio.channels.ClosedChannelException
2008/01/29 08:46:10.020 (JavaLogAdapter at log) FINE: Firing transport
state event:
org.snmp4j.transport.TransportStateEvent[source=org.snmp4j.transport.DefaultTcpTransportMapping at 42a7a434,peerAddress=127.0.0.1/705,newState=4,cancelled=false,causingException=java.nio.channels.ClosedChannelException]
2008/01/29 08:46:10.027 (JavaLogAdapter at log) FINE: Socket to
127.0.0.1/705 closed

I've found that in-order for the subagent to succeed in reconnection in
the second case as-well, I had to re-initialize the subagent object:

        subagent = new AgentXSubagent(agentX, SUBAGENT_ID, new
OctetString("AgentX4J"));
        subagent.addMOServer(server);


FYI
Thanks,
Amit



More information about the SNMP4J mailing list