Встроенный ElasticSearch не может подключиться к транспортному порту в интеграционном тесте

Я пытаюсь создать встроенный узел ElasticSearch для интеграционного тестирования.

Вот создание кода

private static final String THREAD_NAME = "ES-THREAD";
private static final String CLUSTER_NAME = "ES-INTEGRATION-TEST";
private static final String ES_HOME_PATH = "elastic-search-home";
private static final String ES_DATA_PATH = "elastic-search-data";
private static final String DATA_PORTS = "9500-9599";
private static final String TRANSPORT_PORTS = "9600-9699";
public void before() throws Throwable {
        try {
            homeDir = Files.createTempDirectory(ES_HOME_PATH);
            dataDir = Files.createTempDirectory(ES_DATA_PATH);

            log.info("Created temp directory {} and {}", homeDir, dataDir);
        } catch (IOException ex) {
            throw new IllegalStateException("Temp Elastic Search directory not created", ex);
        }

        Properties props = new Properties();

        props.setProperty("name", THREAD_NAME);
        props.setProperty("path.home", homeDir.toString());
        props.setProperty("path.data", dataDir.toString());
        props.setProperty("http.port", DATA_PORTS);
        props.setProperty("transport.tcp.port", TRANSPORT_PORTS);
        props.setProperty("node.local", "true");
        props.setProperty("script.groovy.sandbox.enabled", "true");
        props.setProperty("script.engine.groovy.inline.aggs", "true");
        props.setProperty("script.engine.groovy.inline.search", "true");
        props.setProperty("script.engine.groovy.inline.update", "true");
        props.setProperty("script.engine.groovy.inline.mapping", "true");


        esNode = NodeBuilder.nodeBuilder().local(false).client(false)
                .settings(Settings.settingsBuilder().put(props).build()).clusterName(CLUSTER_NAME).build();

        esNode.start();
}

В протестированном коде есть следующий метод, который создает транспортное соединение с ElasticSearch.

private Client createClient() throws UnknownHostException {
    Settings.Builder builder = Settings.builder();
    builder.put("cluster.name", clusterName);
    builder.put("client.transport.ignore_cluster_name", true);

    Settings settings = builder.build();
    return TransportClient.builder().settings(settings).build()
            .addTransportAddress(new InetSocketTransportAddress(InetAddress.getByName(hostname), port));
}

когда я запускаю тест, я получаю исключение

java.net.BindException: Can't assign requested address
    at sun.nio.ch.Net.connect0(Native Method)
    at sun.nio.ch.Net.connect(Net.java:454)
    at sun.nio.ch.Net.connect(Net.java:446)
    at sun.nio.ch.SocketChannelImpl.connect(SocketChannelImpl.java:648)
    at org.jboss.netty.channel.socket.nio.NioClientSocketPipelineSink.connect(NioClientSocketPipelineSink.java:108)
    at org.jboss.netty.channel.socket.nio.NioClientSocketPipelineSink.eventSunk(NioClientSocketPipelineSink.java:70)
    at org.jboss.netty.channel.DefaultChannelPipeline.sendDownstream(DefaultChannelPipeline.java:574)
    at org.jboss.netty.channel.Channels.connect(Channels.java:634)
    at org.jboss.netty.channel.AbstractChannel.connect(AbstractChannel.java:216)
    at org.jboss.netty.bootstrap.ClientBootstrap.connect(ClientBootstrap.java:229)
    at org.jboss.netty.bootstrap.ClientBootstrap.connect(ClientBootstrap.java:182)
    at org.elasticsearch.transport.netty.NettyTransport.connectToChannelsLight(NettyTransport.java:913)
    at org.elasticsearch.transport.netty.NettyTransport.connectToNode(NettyTransport.java:880)
    at org.elasticsearch.transport.netty.NettyTransport.connectToNodeLight(NettyTransport.java:852)
    at org.elasticsearch.transport.TransportService.connectToNodeLight(TransportService.java:250)
    at org.elasticsearch.client.transport.TransportClientNodesService$SimpleNodeSampler.doSample(TransportClientNodesService.java:354)
    at org.elasticsearch.client.transport.TransportClientNodesService$NodeSampler.sample(TransportClientNodesService.java:300)
    at org.elasticsearch.client.transport.TransportClientNodesService$ScheduledNodeSampler.run(TransportClientNodesService.java:333)
    at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1142)
    at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:617)
    at java.lang.Thread.run(Thread.java:745)

Значения, которые я отправляю для тестируемого кода, поскольку имя хоста — это localhost, и я отправляю порт, который я извлекаю из встроенного ElasticSearch,

NodeInfo nodeInfo = esNode.client().admin().cluster().prepareNodesInfo(localNodeId).get().iterator().next();
transportAddress = nodeInfo.getTransport().address().publishAddress().getAddress();

Я видел, что транспортный порт всегда равен 0, и когда я оцениваю nodeInfo.getTransport().address(), его значение является локальным[1].

Что в создании узла не так? Есть ли другая конфигурация, которую мне нужно добавить?

Спасибо,

Даниэла


person Daniela    schedule 14.10.2016    source источник


Ответы (1)


когда я изменил props.setProperty("node.local", "true"); to props.setProperty("node.local", "false"); был создан транспортный порт.

person Daniela    schedule 15.10.2016