package com.alibaba.doris.client.tools;
import java.net.InetSocketAddress;
import org.apache.commons.lang.math.RandomUtils;
import com.alibaba.doris.algorithm.vpm.VpmRouterAlgorithm;
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.net.OperationFuture;
import com.alibaba.doris.common.data.Value;
/*
* @author ajun Email:jack.yuj@alibaba-inc.com
*/
public class ConnectionFactoryTool extends PressureTestingBase {
public static void main(String[] args) {
ConnectionFactoryTool pressureTestingTool = new ConnectionFactoryTool();
pressureTestingTool.handle(args);
System.exit(0);
}
@Override
protected void release() {
if (null != factory) {
factory.releaseResources();
}
}
@Override
public Runnable createRunnableTask(int index, int count) {
if (op != null) {
if ("get".equalsIgnoreCase(op)) {
return new SimpleConnectionGet();
}
}
return new SimpleConnectionPut();
}
protected class SimpleConnectionGet extends SimpleConnectionPut {
@Override
public boolean execute(int index, int length) {
OperationFuture<Value> result = connection.get(getKey(kp + RandomUtils.nextInt(len())));
try {
return result.get().getValueBytes() != null;
} catch (Exception e) {
e.printStackTrace();
}
return false;
}
}
protected class SimpleConnectionPut extends PressureTestingBase.BaseRunnableTask {
@Override
public void prepare() {
factory = ConnectionFactory.getInstance();
String[] ips = ip.split(":");
InetSocketAddress address = new InetSocketAddress(ips[0], Integer.valueOf(ips[1]));
connection = factory.getConnection(address);
connection.open();
value = getValueObject(getValue());
}
@Override
public void destory() {
connection.close();
}
@Override
public boolean execute(int index, int length) {
OperationFuture<Boolean> result = connection.put(getKey(kp + index), value);
try {
return result.get().booleanValue();
} catch (Exception e) {
e.printStackTrace();
}
return false;
}
Connection connection;
Value value;
}
ConnectionFactory factory;
public ConnectionFactoryTool() {
options.add(new Option("-ip", "ip", "Setting the ipaddress for remote dataserver.", false, true));
options.add(new Option("-kp", "ip", "Setting the key prefix."));
options.add(new Option("-op", "op", "Setting the operation which we want to execute. 'get' 'put'", false, true));
}
@Override
public void prepareParameters() {
super.prepareParameters();
ip = commandLine.getValue("-ip");
kp = commandLine.getValue("-kp");
op = commandLine.getValue("-op");
}
VpmRouterAlgorithm algorithm = new VpmRouterAlgorithm(1, 10000);
private String ip;
private String kp;
private String op;
}