dlmarion commented on code in PR #5332:
URL: https://github.com/apache/accumulo/pull/5332#discussion_r1963555988
##########
server/base/src/main/java/org/apache/accumulo/server/util/ECAdmin.java:
##########
@@ -153,43 +166,112 @@ private void listCompactorsByQueue(ServerContext
context) {
}
}
- private void runningCompactions(ServerContext context, boolean details) {
+ private void runningCompactions(ServerContext context, boolean details,
String format) {
CompactionCoordinatorService.Client coordinatorClient = null;
- TExternalCompactionList running;
+ Map<String,TExternalCompaction> runningCompactionsMap = new HashMap<>();
+
try {
coordinatorClient = getCoordinatorClient(context);
- running = coordinatorClient.getRunningCompactions(TraceUtil.traceInfo(),
context.rpcCreds());
- if (running == null) {
+
+ // Fetch running compactions as a list and convert to a map
+ TExternalCompactionList running =
+ coordinatorClient.getRunningCompactions(TraceUtil.traceInfo(),
context.rpcCreds());
+
+ if (running == null || running.getCompactions().isEmpty()) {
System.out.println("No running compactions found.");
return;
}
- var ecidMap = running.getCompactions();
- if (ecidMap == null) {
- System.out.println("No running compactions found.");
- return;
+
+ // Convert the list to a map
+ for (Map.Entry<String,TExternalCompaction> entry :
running.getCompactions().entrySet()) {
+ runningCompactionsMap.put(entry.getKey(), entry.getValue());
}
- ecidMap.forEach((ecid, ec) -> {
- if (ec != null) {
- var runningCompaction = new RunningCompaction(ec);
- var addr = runningCompaction.getCompactorAddress();
- var kind = runningCompaction.getJob().kind;
- var queue = runningCompaction.getQueueName();
- var ke = KeyExtent.fromThrift(runningCompaction.getJob().extent);
- System.out.format("%s %s %s %s TableId: %s\n", ecid, addr, kind,
queue, ke.tableId());
+
+ StringBuilder csvOutput = new StringBuilder();
+ List<Map<String,Object>> jsonOutput = new ArrayList<>();
+
+ if ("csv".equalsIgnoreCase(format)) {
+ csvOutput.append(
+
"ECID,Compactor,Kind,Queue,TableId,Status,LastUpdate,Duration,NumFiles,Progress\n");
+ }
+
+ for (Map.Entry<String,TExternalCompaction> entry :
runningCompactionsMap.entrySet()) {
+ TExternalCompaction ec = entry.getValue();
+ if (ec == null) {
+ continue;
+ }
+
+ var runningCompaction = new RunningCompaction(ec);
+ String ecid = runningCompaction.getJob().getExternalCompactionId();
+ var addr = runningCompaction.getCompactorAddress();
+ var kind = runningCompaction.getJob().kind;
+
+ // Ensure getQueueName() exists, else use an alternative like
getGroupName()
+ var queueName = runningCompaction.getQueueName(); // If this method
does not exist, replace
+ // with
getGroupName()
+
+ var ke = KeyExtent.fromThrift(runningCompaction.getJob().extent);
+ String tableId = ke.tableId().canonical();
+
+ String status = "";
+ long lastUpdate = 0, duration = 0;
+ int numFiles = 0;
+ double progress = 0.0;
+
+ if (details) {
+ var runningCompactionInfo = new RunningCompactionInfo(ec);
+ status = runningCompactionInfo.status;
+ lastUpdate = runningCompactionInfo.lastUpdate;
+ duration = runningCompactionInfo.duration;
+ numFiles = runningCompactionInfo.numFiles;
+ progress = runningCompactionInfo.progress;
+ }
+
+ if ("plain".equalsIgnoreCase(format)) {
+ System.out.format("%s %s %s %s TableId: %s\n", ecid, addr, kind,
queueName, tableId);
if (details) {
- var runningCompactionInfo = new RunningCompactionInfo(ec);
- var status = runningCompactionInfo.status;
- var last = runningCompactionInfo.lastUpdate;
- var duration = runningCompactionInfo.duration;
- var numFiles = runningCompactionInfo.numFiles;
- var progress = runningCompactionInfo.progress;
System.out.format(" %s Last Update: %dms Duration: %dms Files: %d
Progress: %.2f%%\n",
- status, last, duration, numFiles, progress);
+ status, lastUpdate, duration, numFiles, progress);
+ }
+ }
+
+ if ("csv".equalsIgnoreCase(format)) {
+ csvOutput.append(String.format("%s,%s,%s,%s,%s,%s,%d,%d,%d,%.2f\n",
ecid, addr, kind,
+ queueName, tableId, status, lastUpdate, duration, numFiles,
progress));
Review Comment:
Do we need to build up all of the output to output at the end, or can we
just output as we process each running compaction?
##########
server/base/src/main/java/org/apache/accumulo/server/util/ECAdmin.java:
##########
@@ -153,43 +166,112 @@ private void listCompactorsByQueue(ServerContext
context) {
}
}
- private void runningCompactions(ServerContext context, boolean details) {
+ private void runningCompactions(ServerContext context, boolean details,
String format) {
CompactionCoordinatorService.Client coordinatorClient = null;
- TExternalCompactionList running;
+ Map<String,TExternalCompaction> runningCompactionsMap = new HashMap<>();
+
Review Comment:
You should probably validate that the format parameter is one of the
expected types early in the process and fail if not .
--
This is an automated message from the Apache Git Service.
To respond to the message, please log on to GitHub and use the
URL above to go to the specific comment.
To unsubscribe, e-mail: [email protected]
For queries about this service, please contact Infrastructure at:
[email protected]