in software/nosql/src/main/java/org/apache/brooklyn/entity/nosql/riak/RiakNodeSshDriver.java [222:306]
public void customize() {
checkRiakOnPath();
//create entity's runDir
newScript(CUSTOMIZING).execute();
OsDetails osDetails = getMachine().getMachineDetails().getOsDetails();
List<String> commands = Lists.newLinkedList();
commands.add(sudo("mkdir -p " + getRiakEtcDir()));
if (isVersion1()) {
String vmArgsTemplate = processTemplate(entity.getConfig(RiakNode.RIAK_VM_ARGS_TEMPLATE_URL));
String saveAsVmArgs = Urls.mergePaths(getRunDir(), "vm.args");
DynamicTasks.queue(SshEffectorTasks.put(saveAsVmArgs).contents(vmArgsTemplate));
commands.add(sudo("mv " + saveAsVmArgs + " " + getRiakEtcDir()));
String appConfigTemplate = processTemplate(entity.getConfig(RiakNode.RIAK_APP_CONFIG_TEMPLATE_URL));
String saveAsAppConfig = Urls.mergePaths(getRunDir(), "app.config");
DynamicTasks.queue(SshEffectorTasks.put(saveAsAppConfig).contents(appConfigTemplate));
commands.add(sudo("mv " + saveAsAppConfig + " " + getRiakEtcDir()));
} else {
String templateUrl = osDetails.isMac() ? entity.getConfig(RiakNode.RIAK_CONF_TEMPLATE_URL_MAC) :
entity.getConfig(RiakNode.RIAK_CONF_TEMPLATE_URL_LINUX);
String riakConfContent = processTemplate(templateUrl);
String saveAsRiakConf = Urls.mergePaths(getRunDir(), "riak.conf");
if(Strings.isNonBlank(entity.getConfig(RiakNode.RIAK_CONF_ADDITIONAL_CONTENT))) {
String additionalConfigContent = processTemplateContents(entity.getConfig(RiakNode.RIAK_CONF_ADDITIONAL_CONTENT));
riakConfContent += "\n## Brooklyn note: additional config\n";
riakConfContent += additionalConfigContent;
}
DynamicTasks.queue(SshEffectorTasks.put(saveAsRiakConf).contents(riakConfContent));
commands.add(sudo("mv " + saveAsRiakConf + " " + getRiakEtcDir()));
}
//increase open file limit (default min for riak is: 4096)
//TODO: detect the actual limit then do the modification.
//TODO: modify ulimit for linux distros
// commands.add(sudo("launchctl limit maxfiles 4096 32768"));
if (osDetails.isMac()) {
commands.add("ulimit -n 4096");
}
if (osDetails.isLinux() && isVersion1()) {
commands.add(sudo("chown -R riak:riak " + getRiakEtcDir()));
}
// TODO platform_*_dir
// TODO riak config log
ScriptHelper customizeScript = newScript(CUSTOMIZING)
.failOnNonZeroResultCode()
.body.append(commands);
if (!isRiakOnPath()) {
addRiakOnPath(customizeScript);
}
customizeScript.failOnNonZeroResultCode().execute();
if (osDetails.isLinux()) {
ImmutableMap<String, String> sysctl = ImmutableMap.<String, String>builder()
.put("vm.swappiness", "0")
.put("net.core.somaxconn", "40000")
.put("net.ipv4.tcp_max_syn_backlog", "40000")
.put("net.ipv4.tcp_sack", "1")
.put("net.ipv4.tcp_window_scaling", "15")
.put("net.ipv4.tcp_fin_timeout", "1")
.put("net.ipv4.tcp_keepalive_intvl", "30")
.put("net.ipv4.tcp_tw_reuse", "1")
.put("net.ipv4.tcp_moderate_rcvbuf", "1")
.build();
ScriptHelper optimize = newScript(CUSTOMIZING + "network")
.body.append(sudo("sysctl " + Joiner.on(' ').withKeyValueSeparator("=").join(sysctl)));
Optional<Boolean> enable = Optional.fromNullable(entity.getConfig(RiakNode.OPTIMIZE_HOST_NETWORKING));
if (!enable.isPresent()) optimize.inessential();
if (enable.or(true)) optimize.execute();
}
//set the riak node name
entity.sensors().set(RiakNode.RIAK_NODE_NAME, format("riak@%s", getSubnetHostname()));
}