Public Member Functions | |
ParallelDB_RR (VirtualDatabase vdb) throws Exception | |
DatabaseBackend | chooseBackendForReadRequest (AbstractRequest request) throws SQLException |
DatabaseBackend | chooseBackendForWriteRequest (AbstractWriteRequest request) throws SQLException |
String | getInformation () |
String | getParallelDBXml () |
Definition at line 44 of file ParallelDB_RR.java.
|
Creates a new
Definition at line 55 of file ParallelDB_RR.java. 00056 { 00057 super(vdb); 00058 }
|
|
Choose a backend using a round-robin algorithm for read request execution.
Implements org.objectweb.cjdbc.controller.loadbalancer.paralleldb.ParallelDB. Definition at line 67 of file ParallelDB_RR.java. References org.objectweb.cjdbc.controller.virtualdatabase.VirtualDatabase.acquireReadLockBackendLists(), org.objectweb.cjdbc.common.log.Trace.error(), org.objectweb.cjdbc.controller.virtualdatabase.VirtualDatabase.getBackends(), org.objectweb.cjdbc.controller.virtualdatabase.VirtualDatabase.getSQLShortFormLength(), and org.objectweb.cjdbc.controller.backend.DatabaseBackend.isReadEnabled(). 00069 { 00070 // Choose a backend 00071 try 00072 { 00073 vdb.acquireReadLockBackendLists(); 00074 } 00075 catch (InterruptedException e) 00076 { 00077 String msg = Translate.get( 00078 "loadbalancer.backendlist.acquire.readlock.failed", e); 00079 logger.error(msg); 00080 throw new SQLException(msg); 00081 } 00082 00083 DatabaseBackend backend = null; // The backend that will execute the query 00084 00085 // Note that vdb lock is released in the finally clause of this try/catch 00086 // block 00087 try 00088 { 00089 ArrayList backends = vdb.getBackends(); 00090 int size = backends.size(); 00091 00092 if (size == 0) 00093 throw new SQLException(Translate.get( 00094 "loadbalancer.execute.no.backend.available", request.getId())); 00095 00096 // Take the next backend 00097 int maxTries = size; 00098 synchronized (this) 00099 { 00100 do 00101 { 00102 index = (index + 1) % size; 00103 backend = (DatabaseBackend) backends.get(index); 00104 maxTries--; 00105 } 00106 while ((!backend.isReadEnabled() && maxTries >= 0)); 00107 } 00108 00109 if (maxTries < 0) 00110 throw new SQLException(Translate.get( 00111 "loadbalancer.execute.no.backend.enabled", request.getId())); 00112 } 00113 catch (RuntimeException e) 00114 { 00115 String msg = Translate.get("loadbalancer.execute.find.backend.failed", 00116 new String[]{request.getSQLShortForm(vdb.getSQLShortFormLength()), 00117 e.getMessage()}); 00118 logger.error(msg, e); 00119 throw new SQLException(msg); 00120 } 00121 finally 00122 { 00123 vdb.releaseReadLockBackendLists(); 00124 } 00125 return backend; 00126 }
|
|
Choose a backend using a round-robin algorithm for write request execution.
Implements org.objectweb.cjdbc.controller.loadbalancer.paralleldb.ParallelDB. Definition at line 135 of file ParallelDB_RR.java. References org.objectweb.cjdbc.controller.virtualdatabase.VirtualDatabase.acquireReadLockBackendLists(), org.objectweb.cjdbc.controller.virtualdatabase.VirtualDatabase.getBackends(), org.objectweb.cjdbc.controller.backend.DatabaseBackend.isDisabling(), and org.objectweb.cjdbc.controller.backend.DatabaseBackend.isWriteEnabled(). 00137 { 00138 // Choose a backend 00139 try 00140 { 00141 vdb.acquireReadLockBackendLists(); 00142 } 00143 catch (InterruptedException e) 00144 { 00145 String msg = Translate.get( 00146 "loadbalancer.backendlist.acquire.readlock.failed", e); 00147 logger.error(msg); 00148 throw new SQLException(msg); 00149 } 00150 00151 DatabaseBackend backend = null; // The backend that will execute the query 00152 00153 // Note that vdb lock is released in the finally clause of this try/catch 00154 // block 00155 try 00156 { 00157 ArrayList backends = vdb.getBackends(); 00158 int size = backends.size(); 00159 00160 if (size == 0) 00161 throw new SQLException(Translate.get( 00162 "loadbalancer.execute.no.backend.available", request.getId())); 00163 00164 // Take the next backend 00165 int maxTries = size; 00166 synchronized (this) 00167 { 00168 do 00169 { 00170 index = (index + 1) % size; 00171 backend = (DatabaseBackend) backends.get(index); 00172 maxTries--; 00173 } 00174 while ((!backend.isWriteEnabled() || backend.isDisabling()) 00175 && (maxTries >= 0)); 00176 } 00177 00178 if (maxTries < 0) 00179 throw new SQLException(Translate.get( 00180 "loadbalancer.execute.no.backend.enabled", request.getId())); 00181 } 00182 catch (RuntimeException e) 00183 { 00184 String msg = Translate.get("loadbalancer.execute.find.backend.failed", 00185 new String[]{request.getSQLShortForm(vdb.getSQLShortFormLength()), 00186 e.getMessage()}); 00187 logger.error(msg, e); 00188 throw new SQLException(msg); 00189 } 00190 finally 00191 { 00192 vdb.releaseReadLockBackendLists(); 00193 } 00194 return backend; 00195 }
|
|
Implements org.objectweb.cjdbc.controller.loadbalancer.AbstractLoadBalancer. Definition at line 200 of file ParallelDB_RR.java. 00201 { 00202 // We don't lock since we don't need a top accurate value 00203 int size = vdb.getBackends().size(); 00204 00205 if (size == 0) 00206 return "ParallelDB Round-Robin Request load balancer: !!!Warning!!! No backend nodes found\n"; 00207 else 00208 return "ParallelDB Round-Robin Request load balancer (" + size 00209 + " backends)\n"; 00210 }
|
|
Implements org.objectweb.cjdbc.controller.loadbalancer.paralleldb.ParallelDB. Definition at line 215 of file ParallelDB_RR.java. 00216 { 00217 return "<" + DatabasesXmlTags.ELT_ParallelDB_RoundRobin + "/>"; 00218 }
|