Skip to content

Commit 72f1ea2

Browse files
author
Andrei Nadyktov
committed
IGNITE-26987 Minor refactor
1 parent fe920f2 commit 72f1ea2

File tree

3 files changed

+83
-61
lines changed

3 files changed

+83
-61
lines changed

modules/control-utility/src/test/java/org/apache/ignite/internal/commandline/SecurityCommandHandlerPermissionsTest.java

Lines changed: 74 additions & 60 deletions
Original file line numberDiff line numberDiff line change
@@ -22,11 +22,12 @@
2222
import java.util.Arrays;
2323
import java.util.Collection;
2424
import java.util.Collections;
25+
import java.util.Iterator;
2526
import java.util.List;
2627
import java.util.Map;
2728
import java.util.UUID;
2829
import java.util.concurrent.CountDownLatch;
29-
import java.util.concurrent.atomic.AtomicReference;
30+
import java.util.concurrent.atomic.AtomicInteger;
3031
import java.util.stream.Collectors;
3132

3233
import org.apache.ignite.Ignite;
@@ -35,35 +36,39 @@
3536
import org.apache.ignite.compute.ComputeJob;
3637
import org.apache.ignite.compute.ComputeJobResult;
3738
import org.apache.ignite.compute.ComputeTaskAdapter;
39+
import org.apache.ignite.compute.ComputeTaskFuture;
3840
import org.apache.ignite.configuration.IgniteConfiguration;
3941
import org.apache.ignite.internal.IgniteEx;
4042
import org.apache.ignite.internal.client.thin.ServicesTest;
43+
import org.apache.ignite.internal.managers.systemview.GridSystemViewManager;
4144
import org.apache.ignite.internal.processors.security.impl.TestSecurityData;
4245
import org.apache.ignite.internal.processors.security.impl.TestSecurityPluginProvider;
4346
import org.apache.ignite.internal.util.typedef.F;
47+
import org.apache.ignite.internal.util.typedef.X;
48+
import org.apache.ignite.lang.IgniteFutureCancelledException;
4449
import org.apache.ignite.lang.IgniteProductVersion;
4550
import org.apache.ignite.plugin.security.SecurityPermission;
4651
import org.apache.ignite.plugin.security.SecurityPermissionSet;
4752
import org.apache.ignite.plugin.security.SecurityPermissionSetBuilder;
4853
import org.apache.ignite.services.ServiceConfiguration;
4954
import org.apache.ignite.services.ServiceDescriptor;
50-
import org.apache.ignite.spi.systemview.view.ComputeJobView;
51-
import org.apache.ignite.spi.systemview.view.SystemView;
55+
import org.apache.ignite.spi.systemview.view.ComputeTaskView;
5256
import org.apache.ignite.util.GridCommandHandlerAbstractTest;
5357
import org.jetbrains.annotations.NotNull;
5458
import org.jetbrains.annotations.Nullable;
5559
import org.junit.Test;
5660
import org.junit.runners.Parameterized;
5761

5862
import static java.util.Arrays.asList;
63+
import static java.util.concurrent.TimeUnit.MILLISECONDS;
5964
import static org.apache.ignite.internal.IgniteNodeAttributes.ATTR_BUILD_VER;
6065
import static org.apache.ignite.internal.commandline.ArgumentParser.CMD_PASSWORD;
6166
import static org.apache.ignite.internal.commandline.ArgumentParser.CMD_USER;
6267
import static org.apache.ignite.internal.commandline.CommandHandler.EXIT_CODE_OK;
6368
import static org.apache.ignite.internal.commandline.CommandHandler.EXIT_CODE_UNEXPECTED_ERROR;
6469
import static org.apache.ignite.internal.processors.job.GridJobProcessor.JOBS_VIEW;
70+
import static org.apache.ignite.internal.processors.task.GridTaskProcessor.TASKS_VIEW;
6571
import static org.apache.ignite.internal.util.IgniteUtils.resolveIgnitePath;
66-
import static org.apache.ignite.plugin.security.SecurityPermission.ADMIN_OPS;
6772
import static org.apache.ignite.plugin.security.SecurityPermission.ADMIN_ROLLING_UPGRADE;
6873
import static org.apache.ignite.plugin.security.SecurityPermission.CACHE_CREATE;
6974
import static org.apache.ignite.plugin.security.SecurityPermission.CACHE_DESTROY;
@@ -87,9 +92,6 @@ public class SecurityCommandHandlerPermissionsTest extends GridCommandHandlerAbs
8792
/** */
8893
public static final String DEFAULT_PWD = "pwd";
8994

90-
/** */
91-
public static CountDownLatch computeLatch;
92-
9395
/** */
9496
@Parameterized.Parameters(name = "cmdHnd={0}")
9597
public static List<String> commandHandlers() {
@@ -103,6 +105,8 @@ public static List<String> commandHandlers() {
103105
persistenceEnable(false);
104106

105107
injectTestSystemOut();
108+
109+
TestJob.CANCELLED_JOB_CNT.set(0);
106110
}
107111

108112
/** {@inheritDoc} */
@@ -176,22 +180,22 @@ public void testRollingUpgrade() throws Exception {
176180

177181
List<String> cmdArgs = asList("--rolling-upgrade", "enable", targetVerStr);
178182

179-
assertEquals(EXIT_CODE_UNEXPECTED_ERROR, execute(enrichWithConnectionArguments(cmdArgs, TEST_NO_PERMISSIONS_LOGIN)));
183+
assertEquals(EXIT_CODE_UNEXPECTED_ERROR, executeOnBehalf(cmdArgs, TEST_NO_PERMISSIONS_LOGIN));
180184

181185
assertFalse(ign.context().rollingUpgrade().enabled());
182186

183-
assertEquals(EXIT_CODE_OK, execute(enrichWithConnectionArguments(cmdArgs, TEST_LOGIN)));
187+
assertEquals(EXIT_CODE_OK, executeOnBehalf(cmdArgs, TEST_LOGIN));
184188

185189
assertTrue(ign.context().rollingUpgrade().enabled());
186190
assertEquals(IgniteProductVersion.fromString(targetVerStr), ign.context().rollingUpgrade().versions().get2());
187191

188192
cmdArgs = asList("--rolling-upgrade", "disable");
189193

190-
assertEquals(EXIT_CODE_UNEXPECTED_ERROR, execute(enrichWithConnectionArguments(cmdArgs, TEST_NO_PERMISSIONS_LOGIN)));
194+
assertEquals(EXIT_CODE_UNEXPECTED_ERROR, executeOnBehalf(cmdArgs, TEST_NO_PERMISSIONS_LOGIN));
191195

192196
assertTrue(ign.context().rollingUpgrade().enabled());
193197

194-
assertEquals(EXIT_CODE_OK, execute(enrichWithConnectionArguments(cmdArgs, TEST_LOGIN)));
198+
assertEquals(EXIT_CODE_OK, executeOnBehalf(cmdArgs, TEST_LOGIN));
195199

196200
assertFalse(ign.context().rollingUpgrade().enabled());
197201
}
@@ -219,10 +223,10 @@ public void testServiceCancel() throws Exception {
219223

220224
Collection<ServiceDescriptor> svcs = ignite.services().serviceDescriptors();
221225

222-
assertEquals(EXIT_CODE_UNEXPECTED_ERROR, execute(enrichWithConnectionArguments(cmdArgs, TEST_NO_PERMISSIONS_LOGIN)));
226+
assertEquals(EXIT_CODE_UNEXPECTED_ERROR, executeOnBehalf(cmdArgs, TEST_NO_PERMISSIONS_LOGIN));
223227
assertEquals(1, svcs.size());
224228

225-
assertEquals(EXIT_CODE_OK, execute(enrichWithConnectionArguments(cmdArgs, TEST_LOGIN)));
229+
assertEquals(EXIT_CODE_OK, executeOnBehalf(cmdArgs, TEST_LOGIN));
226230

227231
svcs = ignite.services().serviceDescriptors();
228232
assertEquals(0, svcs.size());
@@ -233,42 +237,50 @@ public void testServiceCancel() throws Exception {
233237
public void testTaskCancel() throws Exception {
234238
IgniteEx ignite = startGrid(
235239
0,
236-
userData(TEST_NO_PERMISSIONS_LOGIN, taskPermission(TestTask.class.getName())),
237-
userData(TEST_LOGIN, taskPermission(TestTask.class.getName(), TASK_CANCEL))
240+
userData(TEST_NO_PERMISSIONS_LOGIN, NO_PERMISSIONS),
241+
userData(TEST_LOGIN, SecurityPermissionSetBuilder.create()
242+
.defaultAllowAll(false)
243+
.appendTaskPermissions(TestTask.class.getName(), TASK_CANCEL)
244+
.build())
238245
);
239246

240-
computeLatch = new CountDownLatch(1);
247+
ComputeTaskFuture<ComputeJobResult> fut = ignite.compute().executeAsync(new TestTask(), null);
241248

242-
ignite.compute().executeAsync(new TestTask(), null);
249+
GridSystemViewManager viewMgr = ignite.context().systemView();
243250

244-
try {
245-
AtomicReference<ComputeJobView> jobViewHolder = new AtomicReference<>();
251+
assertTrue(waitForCondition(() -> viewMgr.view(TASKS_VIEW).size() >= 1, getTestTimeout()));
252+
assertTrue(waitForCondition(() -> viewMgr.view(JOBS_VIEW).size() >= 1, getTestTimeout()));
253+
254+
Iterator<ComputeTaskView> iter = viewMgr.<ComputeTaskView>view(TASKS_VIEW).iterator();
255+
256+
String sesId = iter.next().sessionId().toString();
257+
258+
assertFalse(iter.hasNext());
246259

247-
boolean res = waitForCondition(() -> {
248-
SystemView<ComputeJobView> jobs = ignite.context().systemView().view(JOBS_VIEW);
260+
Collection<String> cmdArgs = asList("--kill", "compute", sesId);
249261

250-
if (jobs.size() >= 1) {
251-
assertEquals(1, jobs.size());
252-
jobViewHolder.set(jobs.iterator().next());
253-
return true;
254-
}
262+
assertEquals(EXIT_CODE_UNEXPECTED_ERROR, executeOnBehalf(cmdArgs, TEST_NO_PERMISSIONS_LOGIN));
255263

256-
return false;
257-
}, getTestTimeout());
264+
assertFalse(fut.isDone());
258265

259-
assertTrue(res);
266+
assertEquals(0, TestJob.CANCELLED_JOB_CNT.get());
260267

261-
String sesId = jobViewHolder.get().sessionId().toString();
262-
Collection<String> cmdArgs = asList("--kill", "compute", sesId);
268+
assertTrue(waitForCondition(() -> viewMgr.view(TASKS_VIEW).size() >= 1, getTestTimeout()));
269+
assertTrue(waitForCondition(() -> viewMgr.view(JOBS_VIEW).size() >= 1, getTestTimeout()));
263270

264-
assertEquals(EXIT_CODE_UNEXPECTED_ERROR,
265-
execute(enrichWithConnectionArguments(cmdArgs, TEST_NO_PERMISSIONS_LOGIN)));
271+
assertEquals(EXIT_CODE_OK, executeOnBehalf(cmdArgs, TEST_LOGIN));
266272

267-
assertEquals(EXIT_CODE_OK, execute(enrichWithConnectionArguments(cmdArgs, TEST_LOGIN)));
273+
try {
274+
assertTrue(fut.get(getTestTimeout(), MILLISECONDS).isCancelled());
268275
}
269-
finally {
270-
computeLatch.countDown();
276+
catch (Exception e) {
277+
assertTrue(X.hasCause(e, IgniteFutureCancelledException.class));
271278
}
279+
280+
assertTrue(waitForCondition(() -> viewMgr.view(TASKS_VIEW).size() == 0, getTestTimeout()));
281+
assertTrue(waitForCondition(() -> viewMgr.view(JOBS_VIEW).size() == 0, getTestTimeout()));
282+
283+
assertEquals(1, TestJob.CANCELLED_JOB_CNT.get());
272284
}
273285

274286
/** */
@@ -292,13 +304,13 @@ private void checkCommandPermissions(Collection<String> cmdArgs, SecurityPermiss
292304

293305
ignite.createCache(DEFAULT_CACHE_NAME);
294306

295-
assertEquals(EXIT_CODE_UNEXPECTED_ERROR, execute(enrichWithConnectionArguments(cmdArgs, TEST_NO_PERMISSIONS_LOGIN)));
307+
assertEquals(EXIT_CODE_UNEXPECTED_ERROR, executeOnBehalf(cmdArgs, TEST_NO_PERMISSIONS_LOGIN));
296308

297-
// We are losing command failure cause for --cache clear commnad. See IGNITE-21023 for more details.
309+
// We are losing command failure cause for --cache clear command. See IGNITE-21023 for more details.
298310
if (!cmdArgs.containsAll(Arrays.asList("--cache", "clear")))
299311
assertTrue(testOut.toString().contains("Authorization failed"));
300312

301-
assertEquals(EXIT_CODE_OK, execute(enrichWithConnectionArguments(cmdArgs, TEST_LOGIN)));
313+
assertEquals(EXIT_CODE_OK, executeOnBehalf(cmdArgs, TEST_LOGIN));
302314
}
303315

304316
/** */
@@ -331,15 +343,6 @@ private SecurityPermissionSet servicePermission(String name, SecurityPermission.
331343
.build();
332344
}
333345

334-
/** */
335-
private SecurityPermissionSet taskPermission(String name, SecurityPermission... perms) {
336-
return SecurityPermissionSetBuilder.create()
337-
.defaultAllowAll(false)
338-
.appendSystemPermissions(ADMIN_OPS)
339-
.appendTaskPermissions(name, perms)
340-
.build();
341-
}
342-
343346
/** */
344347
private TestSecurityData userData(String login, SecurityPermissionSet perms) {
345348
return new TestSecurityData(
@@ -351,41 +354,52 @@ private TestSecurityData userData(String login, SecurityPermissionSet perms) {
351354
}
352355

353356
/** */
354-
private static class TestTask extends ComputeTaskAdapter<Object, Object> {
357+
private int executeOnBehalf(Collection<String> cmdArgs, String login) {
358+
return execute(enrichWithConnectionArguments(cmdArgs, login));
359+
}
360+
361+
/** */
362+
private static class TestTask extends ComputeTaskAdapter<Object, ComputeJobResult> {
355363
/** {@inheritDoc} */
356364
@Override public @NotNull Map<? extends ComputeJob, ClusterNode> map(
357365
List<ClusterNode> subgrid,
358366
@Nullable Object arg
359367
) throws IgniteException {
360-
return subgrid.stream().filter(g -> !g.isClient()).collect(Collectors.toMap(ignored -> job(), srv -> srv));
368+
return subgrid.stream().filter(g -> !g.isClient()).collect(Collectors.toMap(ignored -> new TestJob(), srv -> srv));
361369
}
362370

363371
/** {@inheritDoc} */
364-
@Override public @Nullable Object reduce(List<ComputeJobResult> results) throws IgniteException {
365-
return null;
366-
}
372+
@Override public @Nullable ComputeJobResult reduce(List<ComputeJobResult> results) throws IgniteException {
373+
assertTrue(results.size() == 1);
367374

368-
/** */
369-
protected ComputeJob job() {
370-
return new TestJob();
375+
return results.get(0);
371376
}
372377
}
373378

374379
/** */
375380
private static class TestJob implements ComputeJob {
381+
/** */
382+
private final CountDownLatch jobBlockedLatch = new CountDownLatch(1);
383+
384+
/** */
385+
private static final AtomicInteger CANCELLED_JOB_CNT = new AtomicInteger();
386+
376387
/** {@inheritDoc} */
377388
@Override public void cancel() {
378-
//No-op
389+
jobBlockedLatch.countDown();
390+
391+
CANCELLED_JOB_CNT.incrementAndGet();
379392
}
380393

381394
/** {@inheritDoc} */
382-
@Override public Object execute() {
395+
@Override public Object execute() throws IgniteException {
383396
try {
384-
computeLatch.await();
397+
assertTrue(jobBlockedLatch.await(5_000, MILLISECONDS));
385398
}
386-
catch (Exception e) {
399+
catch (InterruptedException e) {
387400
throw new IgniteException(e);
388401
}
402+
389403
return null;
390404
}
391405
}

modules/core/src/main/java/org/apache/ignite/internal/ComputeMXBeanImpl.java

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -52,7 +52,7 @@ public ComputeMXBeanImpl(GridKernalContext ctx) {
5252
}
5353

5454
/**
55-
* Kills compute task by the session idenitifier.
55+
* Kills compute task by the session identifier.
5656
*
5757
* @param sesId Session id.
5858
*/

modules/core/src/main/java/org/apache/ignite/internal/management/kill/ComputeCancelSessionTask.java

Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -22,6 +22,9 @@
2222
import org.apache.ignite.internal.util.typedef.internal.S;
2323
import org.apache.ignite.internal.visor.VisorJob;
2424
import org.apache.ignite.internal.visor.VisorOneNodeTask;
25+
import org.apache.ignite.plugin.security.SecurityPermissionSet;
26+
27+
import static org.apache.ignite.plugin.security.SecurityPermissionSetBuilder.NO_PERMISSIONS;
2528

2629
/**
2730
* Cancels given tasks sessions on all cluster nodes.
@@ -58,6 +61,11 @@ private ComputeCancelSessionJob(KillComputeCommandArg arg, boolean debug) {
5861
return null;
5962
}
6063

64+
/** {@inheritDoc} */
65+
@Override public SecurityPermissionSet requiredPermissions() {
66+
return NO_PERMISSIONS;
67+
}
68+
6169
/** {@inheritDoc} */
6270
@Override public String toString() {
6371
return S.toString(ComputeCancelSessionJob.class, this);

0 commit comments

Comments
 (0)