Forum Discussion

patrickmamaid_1's avatar
patrickmamaid_1
Icon for Nimbostratus rankNimbostratus
Dec 25, 2008

how do i force down a pool member in java?

help I'm trying to force down a pool member in java but I'm having some trouble.

here is my attempt:

  
  private iControl.Interfaces interfaces = new iControl.Interfaces();  
    
  //interfaces initialized somewhere in a constructor  
  interfaces.initialize(S_BIGIPPROD_MIT, L_BIGIPPORT, username, password);  
    
  

      
          public void forceDownMember(PoolMember member) {     
              //PoolMember is a predefined class just stores the what poolname it belongs to, ip addr and hostname    
              String[] pool = {member.getPoolName()};      
              LocalLBPoolMemberMemberSessionState[][] b = null;      
              try {      
            
                  b = interfaces.getLocalLBPoolMember().get_session_enabled_state(pool);      
              } catch (Exception ex) {      
                  Logger.getLogger(PatricksBIGIPSOAPGrabberClass.class.getName()).log(Level.SEVERE, null, ex);      
              }      
            
              if (b != null) {      
            
                  for (int i = 0; i < b.length; i++) {      
                      for (int j = 0; j < b.length; j++) {      
            
                          if (b[j].getMember().getAddress().equals(member.getHostip())) {      
                              b[j].setSession_state(CommonEnabledState.STATE_DISABLED);      
                                   
                              System.out.println("connections are being drained");      
                                 
                          }      
                      }      
                  }      
            
              }      
            
          }      
            
            
      

 

 

the function doesnt seem to drain the connections or change anything?

 

is this the right function to force down a pool member? I want to do this in

 

order to perform maintenance on a server

 

3 Replies

  • I got it to work! partially however.. it now sets the pool member to

     

     

    state:"Disabled (Only persistent or active connections allowed) "

     

    but i want:

     

     

    state:

     

    "Forced Offline (Only active connections allowed) " and without: "Apply new state to all pool member instances "

     

     

    here is my code so far:

     

     

     

         
       public void forceDownMember(PoolMember member) {   
                 //set up a sessionstate obj.     
                 iControl.LocalLBPoolMemberMemberSessionState sessionstate = new LocalLBPoolMemberMemberSessionState();     
                 iControl.CommonIPPortDefinition ipportdef = new iControl.CommonIPPortDefinition();     
                   
              
              
                 ipportdef.setAddress(member.getHostip());     
                 ipportdef.setPort(member.getHostport());     
              
                 sessionstate.setMember(ipportdef);     
                 sessionstate.setSession_state(CommonEnabledState.STATE_DISABLED);     
              
                 iControl.LocalLBPoolMemberMemberSessionState[][] lbpoolmembersessionstateArray = {{sessionstate}};     
              
                 try {     
                     String tmp[] = {member.getPoolName()};     
                     interfaces.getLocalLBPoolMember().set_session_enabled_state(tmp, lbpoolmembersessionstateArray);     
                     System.out.println("Taking down "+member.getHostip()+" "+member.getHostname());     
                 }     
                 catch(Exception e){     
                     System.out.println("forceDownMember: "+e.toString());     
                 }     
       }//end of method   
              
         

     

     

    hopefully someone can help me out with this
  • I have got my force down the pool member code to work!

     

    here is the code:

     

     

     
     public void forceDownMember(PoolMember member) { 
      
             //set up a sessionstate obj. 
             iControl.LocalLBPoolMemberMemberSessionState sessionstate = new LocalLBPoolMemberMemberSessionState(); 
             iControl.CommonIPPortDefinition sessionipportdef = new iControl.CommonIPPortDefinition(); 
      
      
      
             sessionipportdef.setAddress(member.getHostip()); 
             sessionipportdef.setPort(member.getHostport()); 
      
             sessionstate.setMember(sessionipportdef); 
             sessionstate.setSession_state(CommonEnabledState.STATE_DISABLED); 
      
             iControl.LocalLBPoolMemberMemberSessionState[][] lbpoolmembersessionstateArray = {{sessionstate}}; 
      
             //set up member state obj 
             iControl.LocalLBPoolMemberMemberMonitorState monitorstate = new LocalLBPoolMemberMemberMonitorState(); 
             iControl.CommonIPPortDefinition monitoripportdef = new iControl.CommonIPPortDefinition(); 
      
             monitoripportdef.setAddress(member.getHostip()); 
             monitoripportdef.setPort(member.getHostport()); 
             monitorstate.setMember(monitoripportdef); 
             monitorstate.setMonitor_state(CommonEnabledState.STATE_DISABLED); 
             iControl.LocalLBPoolMemberMemberMonitorState monitorstatArray[][] = {{monitorstate}}; 
      
              
      
             try { 
                 String tmp[] = {member.getPoolName()}; 
                 interfaces.getLocalLBPoolMember().set_session_enabled_state(tmp, lbpoolmembersessionstateArray); 
                 interfaces.getLocalLBPoolMember().set_monitor_state(tmp, monitorstatArray); 
                 System.out.println("Took down " + member.getHostip() + " " + member.getHostname()); 
             } catch (Exception e) { 
                 System.out.println("forceDownMember: " + e.toString()); 
             } 
      
      
         } 
     

     

     

    you must have both monitor state and session state disabled so it can be forced down

     

  • Patrick, first of all, sorry for not getting back to you sooner. I've been off the last few weeks so I'm just now getting caught up on forum questions. Also, thanks for posting all your great code snippets - it makes helping out that much easier.

     

     

    As for the GUI states, I've posted in the forums a while back the API-GUI mappings.

     

     

    http://devcentral.f5.com/Default.aspx?tabid=53&forumid=1&tpage=1&view=topic&postid=860428711

     

    Click here

     

     

     

    Please post any and all other questions you get and I'll do my best go answer them sooner next time B-).

     

     

    Cheers!

     

     

    -Joe