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();
|
||||
availableProcessors = in.readInt();
|
||||
allocatedProcessors = in.readInt();
|
||||
name = in.readOptionalString();
|
||||
arch = in.readOptionalString();
|
||||
version = in.readOptionalString();
|
||||
}
|
||||
|
||||
@Override
|
||||
|
@ -115,5 +118,8 @@ public class OsInfo implements Streamable, ToXContent {
|
|||
out.writeLong(refreshInterval);
|
||||
out.writeInt(availableProcessors);
|
||||
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