From 3fb66514d9056043789a98bab75c96d97588be46 Mon Sep 17 00:00:00 2001 From: Tigran Mkrtchyan Date: Wed, 2 Aug 2023 13:35:30 +0200 Subject: [PATCH] pool: add option to display user subject with `mover ls` Motivation: sometimes it's hard to match a mover with a particular user. However, this information is available to `mover ls` command. Modification: update `mover ls` to accept `-u` option that will include user subject information with mover info. Result: more info for admins ``` [nairi] (pool_write@dCacheDomain) admin > mover ls -u 1 : RUNNING : 00003AB2ADD08BB34F668BEAEB1959A47274 IoMode=[WRITE, READ, CREATE] ... LM=7 si={test:public} ``` Acked-by: Lea Morschel Acked-by: Albert Rossi Target: master Require-book: no Require-notes: yes --- .../dcache/pool/classic/IoQueueManager.java | 19 +++++++++++++++---- 1 file changed, 15 insertions(+), 4 deletions(-) diff --git a/modules/dcache/src/main/java/org/dcache/pool/classic/IoQueueManager.java b/modules/dcache/src/main/java/org/dcache/pool/classic/IoQueueManager.java index b6b08ec8882..3fa6c6e5810 100644 --- a/modules/dcache/src/main/java/org/dcache/pool/classic/IoQueueManager.java +++ b/modules/dcache/src/main/java/org/dcache/pool/classic/IoQueueManager.java @@ -19,6 +19,7 @@ import java.util.Collections; import java.util.Comparator; import java.util.List; +import java.util.Objects; import java.util.Optional; import java.util.concurrent.Callable; import java.util.concurrent.ConcurrentHashMap; @@ -26,6 +27,7 @@ import java.util.concurrent.CopyOnWriteArrayList; import java.util.concurrent.atomic.AtomicInteger; import java.util.function.Function; +import java.util.stream.Collectors; import javax.annotation.Nonnull; import org.dcache.pool.FaultEvent; import org.dcache.pool.FaultListener; @@ -206,8 +208,14 @@ private String moverSetMaxActive(MoverRequestScheduler js, int active) } private static void toMoverString(MoverRequestScheduler.PrioritizedRequest j, - StringBuilder sb) { + StringBuilder sb, boolean displaySubject) { sb.append(j.getId()).append(" : ").append(j).append('\n'); + if (displaySubject) { + sb.append( + j.getMover().getSubject().getPrincipals().stream().map(Objects::toString).collect( + Collectors.joining(",", " <", ">"))) + .append("\n"); + } } @AffectsSetup @@ -405,6 +413,9 @@ public class MoverLsCommand implements Callable { @Option(name = "r", usage = "Sort output in reverse order.") boolean reverseSort; + @Option(name = "u", usage = "Include user subject into output.") + boolean displaySubject; + @Override public Serializable call() throws CommandException { if (id != null) { @@ -457,12 +468,12 @@ public Serializable call() throws CommandException { sb.append("[").append(q.getName()).append("]\n"); q.getJobs() .sorted() - .forEach(j -> IoQueueManager.toMoverString(j, sb)); + .forEach(j -> toMoverString(j, sb, displaySubject)); }); } else { queues.stream().flatMap(s -> s.getJobs()) .sorted(comparator) - .forEach(j -> IoQueueManager.toMoverString(j, sb)); + .forEach(j -> toMoverString(j, sb, displaySubject)); } return sb.toString(); } @@ -490,7 +501,7 @@ public Serializable call() throws CommandException { } else { StringBuilder sb = new StringBuilder(); p2pQueue.getJobs() - .forEach(j -> IoQueueManager.toMoverString(j, sb)); + .forEach(j -> toMoverString(j, sb, false)); return sb.toString(); } }