Forum Discussion

Brian_Hayes_118's avatar
Brian_Hayes_118
Icon for Nimbostratus rankNimbostratus
Aug 12, 2009

Get a CommonEnabledState from Monitor State

Hello all - I have been working on code to gracefully shut down a node of a pool, I followed the examples in the code repo but what I could never find was a way to get a CommonEnabledState from the methods like you can get from the session state. I wasn't concerned about this until I started to think about users issuing a CommonEnabledState on a node when it is already in that state (both session and/or monitor).

 

I am using BIG-IP_v9.3.1 and java 5.0.

 

To get the Session information it returns CommonEnabledState object.

 

 
     /** 
      *  
      * @param member 
      *            - The {@link BigIPPool.PoolMember} who's session state you need. 
      * @return - {@link CommonEnabledState} of the given pool member. 
      * @throws RemoteException 
      * @throws Exception 
      */ 
     public static CommonEnabledState getPoolMemberSessionState(BigIPPool.PoolMember member) throws RemoteException, Exception { 
  
         String[] poolname = new String[] { member.getBigIPPoolName() }; 
  
         LocalLBPoolMemberPortType lbpool = BigIP.getIControlInterFace().getLocalLBPoolMember(); 
  
         LocalLBPoolMemberMemberSessionState[][] poolStates = lbpool.get_session_enabled_state(poolname); 
  
         for (LocalLBPoolMemberMemberSessionState[] memberStates : poolStates) { 
  
             for (LocalLBPoolMemberMemberSessionState memberState : memberStates) { 
  
                 if (member.getPortDefinition().equals(memberState.getMember())) { 
                     return memberState.getSession_state(); 
                 } 
             } 
         } 
         return null; 
     } 
 

 

When I try to do the same thing for the monitor it returns a different object.

 

 
     /** 
      *  
      * @param member 
      *            - The {@link BigIPPool.PoolMember} who's monitor state you need. 
      * @return - {@link LocalLBMonitorStatus} of the given pool member. 
      * @throws RemoteException 
      * @throws Exception 
      */ 
     public static LocalLBMonitorStatus getPoolMemberMonitorState(BigIPPool.PoolMember member) throws RemoteException, Exception { 
  
         String[] poolname = new String[] { member.getBigIPPoolName() }; 
  
         LocalLBPoolMemberPortType lbpool = BigIP.getIControlInterFace().getLocalLBPoolMember(); 
  
         LocalLBPoolMemberMemberMonitorStatus[][] poolStates = lbpool.get_monitor_status(poolname); 
  
         for (LocalLBPoolMemberMemberMonitorStatus[] memberStates : poolStates) { 
  
             for (LocalLBPoolMemberMemberMonitorStatus memberState : memberStates) { 
  
                 if (member.getPortDefinition().equals(memberState.getMember())) { 
                     return memberState.getMonitor_status(); 
                 } 
             } 
         } 
         return null; 
     } 
  
 

 

 

 

The issue in what I am doing is that when you set the status of either monitor or session you use the CommonEnabledState object and I want to make sure that neither the session or Monitor are already set to the supplied CommonEnabledState value.

 

 

 
    /** 
      * Set the Monitor State of a member to a given {@link CommonEnabledState}. 
      *  
      * @param member 
      *            - Member to set the session state on. 
      * @param state 
      *            - The {@link CommonEnabledState} to us. 
      * @return {@link LocalLBMonitorStatus} of the member after it has been set. 
      * @throws RemoteException 
      * @throws Exception 
      */ 
  
     public static LocalLBMonitorStatus setPoolMemberMonitorState(BigIPPool.PoolMember member, CommonEnabledState state) throws RemoteException, Exception { 
  
  
         String[] poolname = new String[] { member.getBigIPPoolName() }; 
  
         LocalLBPoolMemberMemberMonitorState newMonitorState = new LocalLBPoolMemberMemberMonitorState(); 
  
         newMonitorState.setMonitor_state(state); 
  
         newMonitorState.setMember(member.getPortDefinition()); 
  
         LocalLBPoolMemberMemberMonitorState newMonitorStateArray[][] = { { newMonitorState } }; 
  
         LocalLBPoolMemberPortType lbpool = BigIP.getIControlInterFace().getLocalLBPoolMember(); 
  
         lbpool.set_monitor_state(poolname, newMonitorStateArray); 
  
         return getPoolMemberMonitorState(member); 
  
     } 
  
     /** 
      * Set the state of a member to a given {@link CommonEnabledState}. 
      *  
      * @param member 
      *            - Member to set the session state on. 
      * @param state 
      *            - The {@link CommonEnabledState} to us. 
      * @return {@link CommonEnabledState} of the member after it has been set. 
      * @throws RemoteException 
      * @throws Exception 
      */ 
     public static CommonEnabledState setPoolMemberSessionState(BigIPPool.PoolMember member, CommonEnabledState state) throws RemoteException, Exception { 
  
         String[] poolname = new String[] { member.getBigIPPoolName() }; 
  
         LocalLBPoolMemberMemberSessionState newSessionState = new LocalLBPoolMemberMemberSessionState(); 
  
         newSessionState.setSession_state(state); 
  
         newSessionState.setMember(member.getPortDefinition()); 
  
         iControl.LocalLBPoolMemberMemberSessionState monitorstatArray[][] = { { newSessionState } }; 
  
         LocalLBPoolMemberPortType lbpool = BigIP.getIControlInterFace().getLocalLBPoolMember(); 
  
         lbpool.set_session_enabled_state(poolname, monitorstatArray); 
  
         return getPoolMemberSessionState(member); 
     } 
 

 

No RepliesBe the first to reply