elasticsearch 启动过程源码(二)
主要涉及nodebuilder,plugin初始化,node settings更新
注
es 版本1.0
上次我们讲到了Bootstrap中的initialSettings,初始化配置文件,并产生了environment,后边有什么关键地方呢?在Bootstrap中的main方法有如下代码
bootstrap.setup(true, tuple);
tuple是什么呢?是initialSettings方法的返回值,v1是settings,v2是environment。
private void setup(boolean addShutdownHook, Tuple<Settings, Environment> tuple) throws Exception {
if (tuple.v1().getAsBoolean("bootstrap.mlockall", false)) {
Natives.tryMlockall();
}
tuple = setupJmx(tuple);
NodeBuilder nodeBuilder = NodeBuilder.nodeBuilder().settings(tuple.v1()).loadConfigSettings(false);
node = nodeBuilder.build();
if (addShutdownHook) {
Runtime.getRuntime().addShutdownHook(new Thread() {
@Override
public void run() {
node.close();
}
});
}
}
先获取bootstrap.mlockal的配置,用来进行mlockall操作,实际上此参数用来缩影物理内存,防止进行swap,在进行es性能优化的时候需要经常将此选项设置为true来提高性能。Natives.tryMlockall()方法使用jna,来调用c语言的方法,不多说了,有兴趣可以自己了解下jna。setupJmx方法没有进行如何操作,下边是关键的 nodeBuilder。NodeBuilder nodeBuilder = NodeBuilder.nodeBuilder().settings(tuple.v1()).loadConfigSettings(false);调用nodeBuilder()方法new对象,后边是设置对象的一些属性。我们来看bulid()方法。
public Node build() {
return new InternalNode(settings.build(), loadConfigSettings);
}
new了一个InternalNode