package resa.evaluation.simulate.sleep;
import backtype.storm.Config;
import backtype.storm.StormSubmitter;
import backtype.storm.topology.TopologyBuilder;
import resa.metrics.RedisMetricsCollector;
import resa.topology.ResaTopologyBuilder;
import resa.util.ConfigUtil;
import resa.util.ResaConfig;
import java.io.File;
/**
* This topology demonstrates Storm's stream groupings and multilang
* capabilities.
*/
public class TAExpServWC2Path {
public static void main(String[] args) throws Exception {
Config conf = ConfigUtil.readConfig(new File(args[1]));
if (conf == null) {
throw new RuntimeException("cannot find conf file " + args[1]);
}
ResaConfig resaConfig = ResaConfig.create();
resaConfig.putAll(conf);
TopologyBuilder builder = new ResaTopologyBuilder();
int numWorkers = ConfigUtil.getInt(conf, "a3-worker.count", 1);
int numAckers = ConfigUtil.getInt(conf, "a3-acker.count", 1);
resaConfig.setNumWorkers(numWorkers);
resaConfig.setNumAckers(numAckers);
String host = (String) conf.get("redis.host");
int port = ConfigUtil.getInt(conf, "redis.port", 6379);
String queue = (String) conf.get("a3-redis.queue");
int defaultTaskNum = ConfigUtil.getInt(conf, "a3-task.default", 10);
builder.setSpout("spout2Path", new TASentenceSpout2Path(host, port, queue,
ConfigUtil.getDouble(conf, "a3-spout.prob", 1.0)),
ConfigUtil.getInt(conf, "a3-spout.parallelism", 1));
double splitP_mu = ConfigUtil.getDouble(conf, "a3-splitP.mu", 1.0);
double splitNotP_mu = ConfigUtil.getDouble(conf, "a3-splitNotP.mu", 1.0);
builder.setBolt("splitP",
new TASplitSentence(() -> (long) (-Math.log(Math.random()) * 1000.0 / splitP_mu)),
ConfigUtil.getInt(conf, "a3-splitP.parallelism", 1))
.setNumTasks(defaultTaskNum)
.shuffleGrouping("spout2Path", "Bolt-P");
builder.setBolt("splitNotP",
new TASplitSentence(() -> (long) (-Math.log(Math.random()) * 1000.0 / splitNotP_mu)),
ConfigUtil.getInt(conf, "a3-splitNotP.parallelism", 1))
.setNumTasks(defaultTaskNum)
.shuffleGrouping("spout2Path", "Bolt-NotP");
double counter_mu = ConfigUtil.getDouble(conf, "a3-counter.mu", 1.0);
builder.setBolt("counter", new TAWordCounter(() -> (long) (-Math.log(Math.random()) * 1000.0 / counter_mu)),
ConfigUtil.getInt(conf, "a3-counter.parallelism", 1))
.setNumTasks(defaultTaskNum)
.shuffleGrouping("splitP").shuffleGrouping("splitNotP");
if (ConfigUtil.getBoolean(conf, "a3-metric.resa", false)) {
resaConfig.addDrsSupport();
resaConfig.put(ResaConfig.REBALANCE_WAITING_SECS, 0);
System.out.println("ResaMetricsCollector is registered");
}
if (ConfigUtil.getBoolean(conf, "a3-metric.redis", true)) {
resaConfig.registerMetricsConsumer(RedisMetricsCollector.class);
System.out.println("RedisMetricsCollector is registered");
}
StormSubmitter.submitTopology(args[0], resaConfig, builder.createTopology());
}
}