00001
00025
package org.objectweb.cjdbc.controller.loadbalancer.policies.createtable;
00026
00027
import java.util.ArrayList;
00028
import java.util.Random;
00029
00030
import org.objectweb.cjdbc.controller.backend.DatabaseBackend;
00031
00038 public class CreateTableRandom extends CreateTableRule
00039 {
00040 private Random
random =
new Random();
00041
00045 public CreateTableRandom()
00046 {
00047 super(
CreateTablePolicy.RANDOM);
00048 }
00049
00055 public CreateTableRandom(ArrayList backendList)
00056 {
00057 super(
CreateTablePolicy.RANDOM, backendList);
00058 }
00059
00063 public ArrayList
getBackends(ArrayList backends)
throws CreateTableException
00064 {
00065
int size = backends.size();
00066
00067
if (nbOfNodes == 0)
00068
return null;
00069
else if (nbOfNodes == size)
00070
return backends;
00071
00072 ArrayList result =
new ArrayList(nbOfNodes);
00073 ArrayList clonedList;
00074
00075
if (backendList.size() > 0)
00076 {
00077 clonedList =
new ArrayList(nbOfNodes);
00078
for (
int i = 0; i < size; i++)
00079 {
00080
DatabaseBackend db = (
DatabaseBackend) backends.get(i);
00081
if (db.
isWriteEnabled() && backendList.contains(db.
getName()))
00082 clonedList.add(db);
00083 }
00084 }
00085
else
00086 {
00087 clonedList =
new ArrayList(size);
00088
for (
int i = 0; i < size; i++)
00089 {
00090
DatabaseBackend db = (
DatabaseBackend) backends.get(i);
00091
if (db.
isWriteEnabled())
00092 clonedList.add(db);
00093 }
00094 }
00095
00096
int clonedSize = clonedList.size();
00097
00098
if (nbOfNodes == clonedSize)
00099
return backends;
00100
else if (nbOfNodes > clonedSize)
00101
throw new CreateTableException(
00102
"Asking for more backends ("
00103 + nbOfNodes
00104 +
") than available ("
00105 + clonedSize
00106 +
")");
00107
00108
for (
int i = 0; i < nbOfNodes; i++)
00109 result.add(clonedList.remove(
random.nextInt(clonedSize)));
00110
00111
return result;
00112 }
00113
00117 public String
getInformation()
00118 {
00119 String s;
00120
if (tableName == null)
00121 s =
"Default rule create table on ";
00122
else
00123 s =
"Rule for table " + tableName +
" create table on ";
00124
00125
return s + nbOfNodes +
" node(s) randomly from " + backendList;
00126 }
00127 }