Skip to content

Commit a09b821

Browse files
authored
IGNITE-24216 Fixed default node in the control.sh utility (#11817)
1 parent 4bb0be0 commit a09b821

File tree

4 files changed

+96
-3
lines changed

4 files changed

+96
-3
lines changed

modules/control-utility/src/main/java/org/apache/ignite/internal/commandline/CliIgniteClientInvoker.java

Lines changed: 13 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -17,9 +17,11 @@
1717

1818
package org.apache.ignite.internal.commandline;
1919

20+
import java.util.Collection;
2021
import java.util.function.Consumer;
2122
import org.apache.ignite.Ignition;
2223
import org.apache.ignite.client.IgniteClient;
24+
import org.apache.ignite.cluster.ClusterNode;
2325
import org.apache.ignite.configuration.ClientConfiguration;
2426
import org.apache.ignite.internal.client.GridClientNode;
2527
import org.apache.ignite.internal.client.GridClientNodeStateBeforeStart;
@@ -34,6 +36,7 @@
3436
import org.jetbrains.annotations.Nullable;
3537

3638
import static org.apache.ignite.internal.processors.odbc.ClientListenerNioListener.MANAGEMENT_CLIENT_ATTR;
39+
import static org.apache.ignite.internal.processors.odbc.ClientListenerProcessor.CLIENT_LISTENER_PORT;
3740

3841
/**
3942
* Adapter of new management API command for {@code control.sh} execution flow.
@@ -54,7 +57,16 @@ public CliIgniteClientInvoker(Command<A, ?> cmd, A arg, ClientConfiguration cfg)
5457

5558
/** {@inheritDoc} */
5659
@Override protected GridClientNode defaultNode() {
57-
return CommandUtils.clusterToClientNode(igniteClient().cluster().forOldest().node());
60+
String[] addr = cfg.getAddresses()[0].split(":");
61+
62+
String host = addr[0];
63+
String port = addr[1];
64+
65+
Collection<ClusterNode> nodes = igniteClient().cluster().nodes();
66+
67+
return CommandUtils.clusterToClientNode(F.find(nodes, U.oldest(nodes, null), node ->
68+
(node.hostNames().contains(host) || node.addresses().contains(host))
69+
&& port.equals(node.attribute(CLIENT_LISTENER_PORT).toString())));
5870
}
5971

6072
/** {@inheritDoc} */

modules/control-utility/src/test/java/org/apache/ignite/testsuites/IgniteControlUtilityTestSuite2.java

Lines changed: 4 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -34,6 +34,7 @@
3434
import org.apache.ignite.util.GridCommandHandlerPropertiesTest;
3535
import org.apache.ignite.util.GridCommandHandlerScheduleIndexRebuildTest;
3636
import org.apache.ignite.util.GridCommandHandlerTracingConfigurationTest;
37+
import org.apache.ignite.util.IdleVerifyDumpTest;
3738
import org.apache.ignite.util.MetricCommandTest;
3839
import org.apache.ignite.util.PerformanceStatisticsCommandTest;
3940
import org.apache.ignite.util.SystemViewCommandTest;
@@ -72,7 +73,9 @@
7273
CdcCommandTest.class,
7374
CdcResendCommandTest.class,
7475

75-
SecurityCommandHandlerPermissionsTest.class
76+
SecurityCommandHandlerPermissionsTest.class,
77+
78+
IdleVerifyDumpTest.class
7679
})
7780
public class IgniteControlUtilityTestSuite2 {
7881
}

modules/control-utility/src/test/java/org/apache/ignite/util/GridCommandHandlerClusterByClassTest.java

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1250,7 +1250,7 @@ public void testCacheIdleVerifyDumpExcludedCaches() throws Exception {
12501250
/**
12511251
* @return Build matcher for dump file name.
12521252
*/
1253-
@NotNull private Matcher dumpFileNameMatcher() {
1253+
@NotNull static Matcher dumpFileNameMatcher() {
12541254
Pattern fileNamePattern = Pattern.compile(".*" + IdleVerifyDumpTask.class.getSimpleName()
12551255
+ " successfully written output to '(.*)'");
12561256
return fileNamePattern.matcher(testOut.toString());
Lines changed: 78 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,78 @@
1+
/*
2+
* Licensed to the Apache Software Foundation (ASF) under one or more
3+
* contributor license agreements. See the NOTICE file distributed with
4+
* this work for additional information regarding copyright ownership.
5+
* The ASF licenses this file to You under the Apache License, Version 2.0
6+
* (the "License"); you may not use this file except in compliance with
7+
* the License. You may obtain a copy of the License at
8+
*
9+
* http://www.apache.org/licenses/LICENSE-2.0
10+
*
11+
* Unless required by applicable law or agreed to in writing, software
12+
* distributed under the License is distributed on an "AS IS" BASIS,
13+
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
14+
* See the License for the specific language governing permissions and
15+
* limitations under the License.
16+
*/
17+
18+
package org.apache.ignite.util;
19+
20+
import java.io.File;
21+
import java.nio.file.Files;
22+
import java.nio.file.Path;
23+
import java.nio.file.Paths;
24+
import java.util.regex.Matcher;
25+
import org.apache.ignite.IgniteCheckedException;
26+
import org.apache.ignite.configuration.IgniteConfiguration;
27+
import org.apache.ignite.internal.util.typedef.internal.U;
28+
import org.junit.Test;
29+
30+
import static org.apache.ignite.internal.commandline.CommandHandler.EXIT_CODE_OK;
31+
import static org.apache.ignite.testframework.GridTestUtils.assertContains;
32+
import static org.apache.ignite.util.GridCommandHandlerClusterByClassTest.dumpFileNameMatcher;
33+
34+
/** */
35+
public class IdleVerifyDumpTest extends GridCommandHandlerClusterByClassAbstractTest {
36+
/** {@inheritDoc} */
37+
@Override protected IgniteConfiguration getConfiguration(String igniteInstanceName) throws Exception {
38+
return super.getConfiguration(igniteInstanceName)
39+
.setWorkDirectory(nodeWorkDirectory(igniteInstanceName));
40+
}
41+
42+
/**
43+
* Test ensuring that idle verify dump output file is created exactly
44+
* on server node specified via the --host parameter.
45+
*/
46+
@Test
47+
public void testDumpResultMatchesConnection() throws Exception {
48+
injectTestSystemOut();
49+
50+
client.createCache(DEFAULT_CACHE_NAME).put(1, 1);
51+
52+
checkDump(0);
53+
54+
checkDump(1);
55+
}
56+
57+
/** */
58+
private void checkDump(int nodeIdx) throws Exception {
59+
assertEquals(EXIT_CODE_OK, execute("--cache", "idle_verify", "--dump", "--port", connectorPort(grid(nodeIdx))));
60+
61+
Matcher fileNameMatcher = dumpFileNameMatcher();
62+
63+
assertTrue(fileNameMatcher.find());
64+
65+
Path dumpFileName = Paths.get(fileNameMatcher.group(1));
66+
67+
String dumpRes = new String(Files.readAllBytes(dumpFileName));
68+
69+
assertContains(log, dumpRes, "The check procedure has finished, no conflicts have been found.");
70+
71+
assertContains(log, dumpFileName.toString(), nodeWorkDirectory(getTestIgniteInstanceName(nodeIdx)));
72+
}
73+
74+
/** */
75+
private String nodeWorkDirectory(String igniteInstanceName) throws IgniteCheckedException {
76+
return new File(U.defaultWorkDirectory(), igniteInstanceName).getAbsolutePath();
77+
}
78+
}

0 commit comments

Comments
 (0)