serialize os name, arch and version too
These three properties are build in the jason response but were not transported when a node sends the response. closes #15422
This commit is contained in:
parent
082632dcac
commit
7a469538bc
|
@ -0,0 +1,34 @@
|
||||||
|
/*
|
||||||
|
* Licensed to Elasticsearch under one or more contributor
|
||||||
|
* license agreements. See the NOTICE file distributed with
|
||||||
|
* this work for additional information regarding copyright
|
||||||
|
* ownership. Elasticsearch licenses this file to you under
|
||||||
|
* the Apache License, Version 2.0 (the "License"); you may
|
||||||
|
* not use this file except in compliance with the License.
|
||||||
|
* You may obtain a copy of the License at
|
||||||
|
*
|
||||||
|
* http://www.apache.org/licenses/LICENSE-2.0
|
||||||
|
*
|
||||||
|
* Unless required by applicable law or agreed to in writing,
|
||||||
|
* software distributed under the License is distributed on an
|
||||||
|
* "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
|
||||||
|
* KIND, either express or implied. See the License for the
|
||||||
|
* specific language governing permissions and limitations
|
||||||
|
* under the License.
|
||||||
|
*/
|
||||||
|
|
||||||
|
package org.elasticsearch.monitor.os;
|
||||||
|
|
||||||
|
public class DummyOsInfo extends OsInfo {
|
||||||
|
|
||||||
|
DummyOsInfo() {
|
||||||
|
refreshInterval = 0;
|
||||||
|
availableProcessors = 0;
|
||||||
|
allocatedProcessors = 0;
|
||||||
|
name = "dummy_name";
|
||||||
|
arch = "dummy_arch";
|
||||||
|
version = "dummy_version";
|
||||||
|
}
|
||||||
|
|
||||||
|
public static final DummyOsInfo INSTANCE = new DummyOsInfo();
|
||||||
|
}
|
|
@ -108,6 +108,9 @@ public class OsInfo implements Streamable, ToXContent {
|
||||||
refreshInterval = in.readLong();
|
refreshInterval = in.readLong();
|
||||||
availableProcessors = in.readInt();
|
availableProcessors = in.readInt();
|
||||||
allocatedProcessors = in.readInt();
|
allocatedProcessors = in.readInt();
|
||||||
|
name = in.readOptionalString();
|
||||||
|
arch = in.readOptionalString();
|
||||||
|
version = in.readOptionalString();
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
|
@ -115,5 +118,8 @@ public class OsInfo implements Streamable, ToXContent {
|
||||||
out.writeLong(refreshInterval);
|
out.writeLong(refreshInterval);
|
||||||
out.writeInt(availableProcessors);
|
out.writeInt(availableProcessors);
|
||||||
out.writeInt(allocatedProcessors);
|
out.writeInt(allocatedProcessors);
|
||||||
|
out.writeOptionalString(name);
|
||||||
|
out.writeOptionalString(arch);
|
||||||
|
out.writeOptionalString(version);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -0,0 +1,28 @@
|
||||||
|
/*
|
||||||
|
* Licensed to Elasticsearch under one or more contributor
|
||||||
|
* license agreements. See the NOTICE file distributed with
|
||||||
|
* this work for additional information regarding copyright
|
||||||
|
* ownership. Elasticsearch licenses this file to you under
|
||||||
|
* the Apache License, Version 2.0 (the "License"); you may
|
||||||
|
* not use this file except in compliance with the License.
|
||||||
|
* You may obtain a copy of the License at
|
||||||
|
*
|
||||||
|
* http://www.apache.org/licenses/LICENSE-2.0
|
||||||
|
*
|
||||||
|
* Unless required by applicable law or agreed to in writing,
|
||||||
|
* software distributed under the License is distributed on an
|
||||||
|
* "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
|
||||||
|
* KIND, either express or implied. See the License for the
|
||||||
|
* specific language governing permissions and limitations
|
||||||
|
* under the License.
|
||||||
|
*/
|
||||||
|
package org.elasticsearch.plugins;
|
||||||
|
|
||||||
|
public class DummyPluginInfo extends PluginInfo {
|
||||||
|
|
||||||
|
private DummyPluginInfo(String name, String description, boolean site, String version, boolean jvm, String classname, boolean isolated) {
|
||||||
|
super(name, description, site, version, jvm, classname, isolated);
|
||||||
|
}
|
||||||
|
|
||||||
|
public static final DummyPluginInfo INSTANCE = new DummyPluginInfo("dummy_plugin_name", "dummy plugin description", true, "dummy_plugin_version", true, "DummyPluginName", true);
|
||||||
|
}
|
|
@ -0,0 +1,140 @@
|
||||||
|
/*
|
||||||
|
* Licensed to Elasticsearch under one or more contributor
|
||||||
|
* license agreements. See the NOTICE file distributed with
|
||||||
|
* this work for additional information regarding copyright
|
||||||
|
* ownership. Elasticsearch licenses this file to you under
|
||||||
|
* the Apache License, Version 2.0 (the "License"); you may
|
||||||
|
* not use this file except in compliance with the License.
|
||||||
|
* You may obtain a copy of the License at
|
||||||
|
*
|
||||||
|
* http://www.apache.org/licenses/LICENSE-2.0
|
||||||
|
*
|
||||||
|
* Unless required by applicable law or agreed to in writing,
|
||||||
|
* software distributed under the License is distributed on an
|
||||||
|
* "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
|
||||||
|
* KIND, either express or implied. See the License for the
|
||||||
|
* specific language governing permissions and limitations
|
||||||
|
* under the License.
|
||||||
|
*/
|
||||||
|
|
||||||
|
package org.elasticsearch.nodesinfo;
|
||||||
|
|
||||||
|
import org.elasticsearch.Build;
|
||||||
|
import org.elasticsearch.Version;
|
||||||
|
import org.elasticsearch.action.admin.cluster.node.info.NodeInfo;
|
||||||
|
import org.elasticsearch.action.admin.cluster.node.info.PluginsAndModules;
|
||||||
|
import org.elasticsearch.cluster.node.DiscoveryNode;
|
||||||
|
import org.elasticsearch.common.io.stream.BytesStreamOutput;
|
||||||
|
import org.elasticsearch.common.io.stream.StreamInput;
|
||||||
|
import org.elasticsearch.common.settings.Settings;
|
||||||
|
import org.elasticsearch.common.transport.BoundTransportAddress;
|
||||||
|
import org.elasticsearch.common.transport.DummyTransportAddress;
|
||||||
|
import org.elasticsearch.common.transport.TransportAddress;
|
||||||
|
import org.elasticsearch.common.xcontent.ToXContent;
|
||||||
|
import org.elasticsearch.common.xcontent.XContentBuilder;
|
||||||
|
import org.elasticsearch.http.HttpInfo;
|
||||||
|
import org.elasticsearch.monitor.jvm.JvmInfo;
|
||||||
|
import org.elasticsearch.monitor.os.DummyOsInfo;
|
||||||
|
import org.elasticsearch.monitor.os.OsInfo;
|
||||||
|
import org.elasticsearch.monitor.process.ProcessInfo;
|
||||||
|
import org.elasticsearch.plugins.DummyPluginInfo;
|
||||||
|
import org.elasticsearch.test.ESTestCase;
|
||||||
|
import org.elasticsearch.test.VersionUtils;
|
||||||
|
import org.elasticsearch.threadpool.ThreadPool;
|
||||||
|
import org.elasticsearch.threadpool.ThreadPoolInfo;
|
||||||
|
import org.elasticsearch.transport.TransportInfo;
|
||||||
|
|
||||||
|
import java.io.IOException;
|
||||||
|
import java.util.ArrayList;
|
||||||
|
import java.util.HashMap;
|
||||||
|
import java.util.List;
|
||||||
|
import java.util.Map;
|
||||||
|
|
||||||
|
import static org.elasticsearch.common.xcontent.XContentFactory.jsonBuilder;
|
||||||
|
import static org.hamcrest.core.IsEqual.equalTo;
|
||||||
|
|
||||||
|
/**
|
||||||
|
*
|
||||||
|
*/
|
||||||
|
public class NodeInfoStreamingTests extends ESTestCase {
|
||||||
|
|
||||||
|
public void testNodeInfoStreaming() throws IOException {
|
||||||
|
NodeInfo nodeInfo = createNodeInfo();
|
||||||
|
Version version = Version.CURRENT;
|
||||||
|
BytesStreamOutput out = new BytesStreamOutput();
|
||||||
|
out.setVersion(version);
|
||||||
|
nodeInfo.writeTo(out);
|
||||||
|
out.close();
|
||||||
|
StreamInput in = StreamInput.wrap(out.bytes());
|
||||||
|
in.setVersion(version);
|
||||||
|
NodeInfo readNodeInfo = NodeInfo.readNodeInfo(in);
|
||||||
|
assertExpectedUnchanged(nodeInfo, readNodeInfo);
|
||||||
|
|
||||||
|
}
|
||||||
|
// checks all properties that are expected to be unchanged. Once we start changing them between versions this method has to be changed as well
|
||||||
|
private void assertExpectedUnchanged(NodeInfo nodeInfo, NodeInfo readNodeInfo) throws IOException {
|
||||||
|
assertThat(nodeInfo.getBuild().toString(), equalTo(readNodeInfo.getBuild().toString()));
|
||||||
|
assertThat(nodeInfo.getHostname(), equalTo(readNodeInfo.getHostname()));
|
||||||
|
assertThat(nodeInfo.getVersion(), equalTo(readNodeInfo.getVersion()));
|
||||||
|
assertThat(nodeInfo.getServiceAttributes().size(), equalTo(readNodeInfo.getServiceAttributes().size()));
|
||||||
|
for (Map.Entry<String, String> entry : nodeInfo.getServiceAttributes().entrySet()) {
|
||||||
|
assertNotNull(readNodeInfo.getServiceAttributes().get(entry.getKey()));
|
||||||
|
assertThat(readNodeInfo.getServiceAttributes().get(entry.getKey()), equalTo(entry.getValue()));
|
||||||
|
}
|
||||||
|
compareJsonOutput(nodeInfo.getHttp(), readNodeInfo.getHttp());
|
||||||
|
compareJsonOutput(nodeInfo.getJvm(), readNodeInfo.getJvm());
|
||||||
|
compareJsonOutput(nodeInfo.getProcess(), readNodeInfo.getProcess());
|
||||||
|
compareJsonOutput(nodeInfo.getSettings(), readNodeInfo.getSettings());
|
||||||
|
compareJsonOutput(nodeInfo.getThreadPool(), readNodeInfo.getThreadPool());
|
||||||
|
compareJsonOutput(nodeInfo.getTransport(), readNodeInfo.getTransport());
|
||||||
|
compareJsonOutput(nodeInfo.getNode(), readNodeInfo.getNode());
|
||||||
|
compareJsonOutput(nodeInfo.getOs(), readNodeInfo.getOs());
|
||||||
|
comparePluginsAndModules(nodeInfo, readNodeInfo);
|
||||||
|
}
|
||||||
|
|
||||||
|
private void comparePluginsAndModules(NodeInfo nodeInfo, NodeInfo readNodeInfo) throws IOException {
|
||||||
|
ToXContent.Params params = ToXContent.EMPTY_PARAMS;
|
||||||
|
XContentBuilder pluginsAndModules = jsonBuilder();
|
||||||
|
pluginsAndModules.startObject();
|
||||||
|
nodeInfo.getPlugins().toXContent(pluginsAndModules, params);
|
||||||
|
pluginsAndModules.endObject();
|
||||||
|
XContentBuilder readPluginsAndModules = jsonBuilder();
|
||||||
|
readPluginsAndModules.startObject();
|
||||||
|
readNodeInfo.getPlugins().toXContent(readPluginsAndModules, params);
|
||||||
|
readPluginsAndModules.endObject();
|
||||||
|
assertThat(pluginsAndModules.string(), equalTo(readPluginsAndModules.string()));
|
||||||
|
}
|
||||||
|
|
||||||
|
private void compareJsonOutput(ToXContent param1, ToXContent param2) throws IOException {
|
||||||
|
ToXContent.Params params = ToXContent.EMPTY_PARAMS;
|
||||||
|
XContentBuilder param1Builder = jsonBuilder();
|
||||||
|
XContentBuilder param2Builder = jsonBuilder();
|
||||||
|
param1.toXContent(param1Builder, params);
|
||||||
|
param2.toXContent(param2Builder, params);
|
||||||
|
assertThat(param1Builder.string(), equalTo(param2Builder.string()));
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
private NodeInfo createNodeInfo() {
|
||||||
|
Build build = Build.CURRENT;
|
||||||
|
DiscoveryNode node = new DiscoveryNode("test_node", DummyTransportAddress.INSTANCE, VersionUtils.randomVersion(random()));
|
||||||
|
Map<String, String> serviceAttributes = new HashMap<>();
|
||||||
|
serviceAttributes.put("test", "attribute");
|
||||||
|
Settings settings = Settings.builder().put("test", "setting").build();
|
||||||
|
OsInfo osInfo = DummyOsInfo.INSTANCE;
|
||||||
|
ProcessInfo process = new ProcessInfo(randomInt(), randomBoolean());
|
||||||
|
JvmInfo jvm = JvmInfo.jvmInfo();
|
||||||
|
List<ThreadPool.Info> threadPoolInfos = new ArrayList<>();
|
||||||
|
threadPoolInfos.add(new ThreadPool.Info("test_threadpool", ThreadPool.ThreadPoolType.FIXED, 5));
|
||||||
|
ThreadPoolInfo threadPoolInfo = new ThreadPoolInfo(threadPoolInfos);
|
||||||
|
Map<String, BoundTransportAddress> profileAddresses = new HashMap<>();
|
||||||
|
BoundTransportAddress dummyBoundTransportAddress = new BoundTransportAddress(new TransportAddress[]{DummyTransportAddress.INSTANCE}, DummyTransportAddress.INSTANCE);
|
||||||
|
profileAddresses.put("test_address", dummyBoundTransportAddress);
|
||||||
|
TransportInfo transport = new TransportInfo(dummyBoundTransportAddress, profileAddresses);
|
||||||
|
HttpInfo htttpInfo = new HttpInfo(dummyBoundTransportAddress, randomLong());
|
||||||
|
PluginsAndModules plugins = new PluginsAndModules();
|
||||||
|
plugins.addModule(DummyPluginInfo.INSTANCE);
|
||||||
|
plugins.addPlugin(DummyPluginInfo.INSTANCE);
|
||||||
|
return new NodeInfo(VersionUtils.randomVersion(random()), build, node, serviceAttributes, settings, osInfo, process, jvm, threadPoolInfo, transport, htttpInfo, plugins);
|
||||||
|
}
|
||||||
|
}
|
Loading…
Reference in New Issue