1 21 22 package org.continuent.sequoia.driver.connectpolicy; 23 24 import java.util.ArrayList ; 25 import java.util.Random ; 26 27 import org.continuent.sequoia.common.exceptions.NoMoreControllerException; 28 import org.continuent.sequoia.driver.ControllerInfo; 29 import org.continuent.sequoia.driver.SequoiaUrl; 30 31 40 public class RandomConnectPolicy extends AbstractControllerConnectPolicy 41 { 42 private Random rand; 43 private ArrayList availableControllerList; 44 45 54 public RandomConnectPolicy(ControllerInfo[] controllerList, 55 long retryIntervalInMs, int debugLevel) 56 { 57 super(controllerList, retryIntervalInMs, debugLevel); 58 availableControllerList = new ArrayList (controllerList.length); 60 for (int i = 0; i < controllerList.length; i++) 61 { 62 if (controllerList[i] == null) 63 throw new RuntimeException ( 64 "Invalid null controller in list while instanciating RandomConnectPolicy"); 65 availableControllerList.add(controllerList[i]); 66 } 67 rand = new Random (System.currentTimeMillis()); 68 } 69 70 73 public synchronized void removeControllerFromSuspectList(ControllerInfo controller) 74 { 75 super.removeControllerFromSuspectList(controller); 76 availableControllerList.add(controller); 77 } 78 79 82 public synchronized void suspectControllerOfFailure( 83 ControllerInfo controllerInfo) 84 { 85 super.suspectControllerOfFailure(controllerInfo); 86 while (availableControllerList.remove(controllerInfo)) 87 { } 89 } 90 91 94 public synchronized ControllerInfo getController() 95 throws NoMoreControllerException 96 { 97 int size = availableControllerList.size(); 98 if (size == 0) 99 throw new NoMoreControllerException(); 100 101 ControllerInfo controllerInfo = (ControllerInfo) availableControllerList 102 .get(rand.nextInt(size)); 103 if (debugLevel == SequoiaUrl.DEBUG_LEVEL_DEBUG) 104 System.out.println("Selected controller " + controllerInfo); 105 return controllerInfo; 106 } 107 108 } 109 | Popular Tags |