/**
*
*/
package com.alibaba.doris.client.tools.datamaker;
import java.net.InetSocketAddress;
import java.util.concurrent.CountDownLatch;
import com.alibaba.doris.cli.CommandLineHandler;
import com.alibaba.doris.cli.Option;
import com.alibaba.doris.client.net.Connection;
import com.alibaba.doris.client.net.ConnectionFactory;
import com.alibaba.doris.client.tools.concurrent.ParralelExecutor;
import com.alibaba.doris.client.tools.concurrent.ParralelExecutorImpl;
import com.alibaba.doris.client.tools.concurrent.ParralelTask;
import com.alibaba.doris.client.tools.concurrent.ParralelTaskFactory;
import com.alibaba.doris.client.tools.concurrent.PermMeter;
import com.alibaba.doris.common.route.MockVirtualRouter;
import com.alibaba.doris.common.route.VirtualRouter;
/**
* @author raymond
*
*/
public class NodeDataMakerTool extends CommandLineHandler {
private String ip;
private int port;
private int vn;
private String kp;
private String vp;
private int vl;
private String o;
private int s;
private int e;
private int c;
private String p; //performance anlyze and print result.
private Connection connection = null ;
public NodeDataMakerTool() {
options.add(new Option("-ip", "IP", "DataServer IP"));
options.add(new Option("-port", "Port", "DataServer Port"));
options.add(new Option("-vn", "VirtualNumber", "Virtual Number to routing."));
options.add(new Option("-kp", "Key prefix", "Key prefix, e.g. abc"));
options.add(new Option("-vp", "Value prefix", "Key prefix "));
options.add(new Option("-vl", "Value Len", "Value Len "));
options.add(new Option("-o", "KV Operation", "get( default) , put, or delete", false, true));
options.add(new Option("-s", "Key start suffix number", "Key start suffix number, e.g. abc0, abc1, ..."));
options.add(new Option("-e", "Key end suffix number ", "Key end suffix number "));
options.add(new Option("-c", "Concurrent", "number, Concurrent worker thread,default =1 ", false, true));
options.add(new Option("-p", "Performance", "true/false, performance anlyze and print result. ", false, true));
}
@Override
public void prepareParameters() {
ip = commandLine.getValue("-ip");
port = commandLine.getInt("-port");
vn = commandLine.getInt("-vn");
kp = commandLine.getValue("-kp");
vp = commandLine.getValue("-vp");
vl = commandLine.getInt("-vl");
o = commandLine.getValue("-o");
s = commandLine.getInt("-s");
e = commandLine.getInt("-e");
c = commandLine.getInt("-c");
p = commandLine.getValue("-p");
}
@Override
public void handleCommand() {
try {
final VirtualRouter virtualRouter = new MockVirtualRouter(vn);
ConnectionFactory factory = ConnectionFactory.getInstance();
InetSocketAddress remoteAddress = new InetSocketAddress(ip, port);
final Connection connection0 = factory.getConnection(remoteAddress);
connection0.open();
connection = connection0;
boolean needProfiling = "true".equals(p);
ParralelExecutor executor = new ParralelExecutorImpl( s ,e, c, needProfiling, NodePutTask.class );
executor.setParralelTaskFactory( new ParralelTaskFactory() {
@Override
public ParralelTask createTask(Class<? extends ParralelTask> parralelTaskClass, int i, long start, long end,
CountDownLatch countDownLatch,
CountDownLatch resultCountDownLatch) {
NodePutTask nodePutTask = (NodePutTask) super.createTask( parralelTaskClass, i, start, end, countDownLatch, resultCountDownLatch);
nodePutTask.setConnection( connection0 );
nodePutTask.setVirtualRouter(virtualRouter);
nodePutTask.setKp(kp);
nodePutTask.setVp(vp);
nodePutTask.setOperation(o );
return nodePutTask;
}
});
executor.start();
Object result;
try {
result = executor.getResult();
System.out.println("result: " + result );
} catch(Exception e) {
}
if( "true".endsWith(p)) {
executor.getPermMeter().printReport();
}
}finally {
if( connection!=null) connection.close();
}
}
/**
* @param args
*/
public static void main(String[] args) {
//Command e.g : clientDataMaker -config doris-client.properties -ns StringName -kp abc -vp vvv -s 0 -e 1000 -c 10 -p true
NodeDataMakerTool nodeDataMakerTool = new NodeDataMakerTool();
nodeDataMakerTool.handle(args);
System.exit( 0);
}
}