elasticsearch 启动过程源码(三)
主要涉及NodeEnvironment
注
es 版本1.0
上次看到了InternalNode构造函数中的压缩配置,今天就涉及到InternalNode中的非常重要的一行代码
NodeEnvironment nodeEnvironment = new NodeEnvironment(this.settings, this.environment);
构造NodeEnvironment对象,我们一段一段的来看这个构造函数中都干了什么。
super(settings);
if (!DiscoveryNode.nodeRequiresLocalStorage(settings)) {//node.client true 或者(node.data false 且 node.master false)
nodeFiles = null;
nodeIndicesLocations = null;
locks = null;
localNodeId = -1;
return;
}
NodeEnvironment与PluginsService一样都继承AbstractComponent,这里的super主要用来初始化AbstractComponent中的settings配置和componentSettings配置。DiscoveryNode.nodeRequiresLocalStorage做了一个判断,来看下什么时候会执行if其中代码并返回。
public static boolean nodeRequiresLocalStorage(Settings settings) {
return !(settings.getAsBoolean("node.client", false) || (!settings.getAsBoolean("node.data", true) && !settings.getAsBoolean("node.master", true)));
}
node.client为true 或者(node.data为false 且 node.master为false)时,也就是这两种情况的节点不需要本地存储,因此将相关属性都初始化为null。
int maxLocalStorageNodes = settings.getAsInt("node.max_local_storage_nodes", 50);
for (int possibleLockId = 0; possibleLockId < maxLocalStorageNodes; possibleLockId++) {
for (int dirIndex = 0; dirIndex < environment.dataWithClusterF