package voldemort.performance;
import java.io.StringReader;
import java.util.concurrent.ExecutorService;
import java.util.concurrent.Executors;
import java.util.concurrent.ThreadFactory;
import java.util.concurrent.TimeUnit;
import org.apache.log4j.Logger;
import voldemort.client.ClientConfig;
import voldemort.client.SocketStoreClientFactory;
import voldemort.store.metadata.MetadataStore;
import voldemort.xml.ClusterMapper;
import voldemort.xml.MappingException;
import voldemort.xml.StoreDefinitionsMapper;
public class MetadataStressTest {
private final static Logger logger = Logger.getLogger(MetadataStressTest.class);
public static void main(String[] args) throws Exception {
if(args.length < 3) {
System.err.println("java voldemort.performance.MetadataStressTest url iterations threads selectors");
System.exit(-1);
}
String url = args[0];
final int count = Integer.parseInt(args[1]);
int numThreads = Integer.parseInt(args[2]);
int numSelectors = args.length > 3 ? Integer.parseInt(args[3]) : 8;
int timeoutSecs = args.length > 4 ? Integer.parseInt(args[4]) : 10;
ExecutorService executor = Executors.newFixedThreadPool(numThreads, new ThreadFactory() {
public Thread newThread(Runnable r) {
Thread thread = new Thread(r);
thread.setName("stress-test");
return thread;
}
});
try {
final SocketStoreClientFactory factory = new SocketStoreClientFactory(new ClientConfig().setBootstrapUrls(url)
.setEnableLazy(false)
.setConnectionTimeout(timeoutSecs,
TimeUnit.SECONDS)
.setSocketTimeout(timeoutSecs,
TimeUnit.SECONDS)
.setMaxThreads(numThreads)
.setSelectors(numSelectors));
for(int i = 0; i < numThreads; i++) {
executor.submit(new Runnable() {
public void run() {
for(int j = 0; j < count; j++) {
try {
String clusterXml = factory.bootstrapMetadataWithRetries(MetadataStore.CLUSTER_KEY);
new ClusterMapper().readCluster(new StringReader(clusterXml));
String storesXml = factory.bootstrapMetadataWithRetries(MetadataStore.STORES_KEY);
new StoreDefinitionsMapper().readStoreList(new StringReader(storesXml));
if(logger.isTraceEnabled())
logger.trace("ok " + j);
} catch(MappingException me) {
logger.fatal(me, me);
System.exit(-1);
} catch(Exception e) {
logger.error(e, e);
}
}
}
});
}
} finally {
executor.shutdown();
}
}
}