This is an automated email from the ASF dual-hosted git repository.
domgarguilo pushed a commit to branch main
in repository https://gitbox.apache.org/repos/asf/accumulo.git
The following commit(s) were added to refs/heads/main by this push:
new 8d0171459f Refactor External Compactions monitor view to use
snapshot-backed Top 50 data (#6211)
8d0171459f is described below
commit 8d0171459fb9f2f40d33b3a64ac19f620f5f0461
Author: Dom G. <[email protected]>
AuthorDate: Fri Mar 13 11:22:41 2026 -0400
Refactor External Compactions monitor view to use snapshot-backed Top 50
data (#6211)
* moves EC monitor data gathering into InformationFetcher/SystemInformation
snapshot flow
* serves the active compaction data from top 50 longest running compactions
view
* removes the old/competing rest-v2/compactions/detail path
* makes no intended changes to the active compactions page and just
refactors the data collection on the backend
---
.../java/org/apache/accumulo/monitor/Monitor.java | 99 ----------------------
.../apache/accumulo/monitor/next/Endpoints.java | 46 +++-------
.../accumulo/monitor/next/InformationFetcher.java | 21 +++--
.../accumulo/monitor/next/SystemInformation.java | 75 ++++++++++------
.../monitor/next/ec/CoordinatorSummary.java | 7 +-
.../accumulo/monitor/resources/js/functions.js | 19 -----
6 files changed, 79 insertions(+), 188 deletions(-)
diff --git
a/server/monitor/src/main/java/org/apache/accumulo/monitor/Monitor.java
b/server/monitor/src/main/java/org/apache/accumulo/monitor/Monitor.java
index 010eba9570..376568d550 100644
--- a/server/monitor/src/main/java/org/apache/accumulo/monitor/Monitor.java
+++ b/server/monitor/src/main/java/org/apache/accumulo/monitor/Monitor.java
@@ -49,9 +49,6 @@ import org.apache.accumulo.core.Constants;
import org.apache.accumulo.core.cli.ServerOpts;
import org.apache.accumulo.core.client.admin.servers.ServerId;
import org.apache.accumulo.core.client.admin.servers.ServerId.Type;
-import org.apache.accumulo.core.compaction.thrift.CompactionCoordinatorService;
-import org.apache.accumulo.core.compaction.thrift.TExternalCompaction;
-import org.apache.accumulo.core.compaction.thrift.TExternalCompactionMap;
import org.apache.accumulo.core.conf.Property;
import org.apache.accumulo.core.fate.zookeeper.ZooReaderWriter;
import org.apache.accumulo.core.fate.zookeeper.ZooUtil.NodeExistsPolicy;
@@ -66,7 +63,6 @@ import
org.apache.accumulo.core.manager.thrift.ManagerClientService;
import org.apache.accumulo.core.manager.thrift.ManagerMonitorInfo;
import org.apache.accumulo.core.manager.thrift.TableInfo;
import org.apache.accumulo.core.manager.thrift.TabletServerStatus;
-import org.apache.accumulo.core.metadata.schema.ExternalCompactionId;
import org.apache.accumulo.core.metrics.MetricsInfo;
import org.apache.accumulo.core.rpc.ThriftUtil;
import org.apache.accumulo.core.rpc.clients.ThriftClientTypes;
@@ -81,7 +77,6 @@ import org.apache.accumulo.monitor.next.InformationFetcher;
import org.apache.accumulo.server.AbstractServer;
import org.apache.accumulo.server.ServerContext;
import org.apache.accumulo.server.util.TableInfoUtil;
-import org.apache.thrift.transport.TTransportException;
import org.apache.zookeeper.KeeperException;
import org.eclipse.jetty.ee10.servlet.ResourceServlet;
import org.eclipse.jetty.ee10.servlet.ServletHolder;
@@ -559,13 +554,6 @@ public class Monitor extends AbstractServer implements
Connection.Listener {
private final Supplier<Map<HostAndPort,CompactionStats>> compactionsSupplier
=
Suppliers.memoizeWithExpiration(this::fetchCompactions,
expirationTimeMinutes, MINUTES);
- private final Supplier<ExternalCompactorSnapshot> compactorInfoSupplier =
- Suppliers.memoizeWithExpiration(this::fetchCompactorsInfo,
expirationTimeMinutes, MINUTES);
-
- private final Supplier<ExternalCompactionsSnapshot>
externalCompactionsSupplier =
- Suppliers.memoizeWithExpiration(this::computeExternalCompactionsSnapshot,
- expirationTimeMinutes, MINUTES);
-
/**
* @return active tablet server scans. Values are cached and refresh after
* {@link #expirationTimeMinutes}.
@@ -589,41 +577,6 @@ public class Monitor extends AbstractServer implements
Connection.Listener {
return compactionsSupplier.get();
}
- /**
- * @return compaction coordinator host from the latest external compaction
fetch.
- */
- public HostAndPort getCompactionCoordinatorHost() {
- return compactorInfoSupplier.get().coordinatorHost;
- }
-
- /**
- * @return compactors from the latest external compaction fetch.
- */
- public Set<ServerId> getCompactorServers() {
- return compactorInfoSupplier.get().compactors;
- }
-
- /**
- * @return timestamp in millis when external compactor info was last fetched.
- */
- public long getCompactorInfoFetchedTimeMillis() {
- return compactorInfoSupplier.get().fetchedTimeMillis;
- }
-
- /**
- * @return running external compactions keyed by ECID.
- */
- public Map<String,TExternalCompaction> getRunningCompactionsMap() {
- return externalCompactionsSupplier.get().ecRunningMap;
- }
-
- /**
- * @return running external compaction for the provided ECID, or null when
not found.
- */
- public TExternalCompaction getRunningCompaction(ExternalCompactionId ecid) {
- return getRunningCompactionsMap().get(ecid.canonical());
- }
-
private Map<HostAndPort,ScanStats> fetchScans(Collection<ServerId> servers) {
ServerContext context = getContext();
Map<HostAndPort,ScanStats> scans = new HashMap<>();
@@ -670,58 +623,6 @@ public class Monitor extends AbstractServer implements
Connection.Listener {
return Collections.unmodifiableMap(allCompactions);
}
- private ExternalCompactorSnapshot fetchCompactorsInfo() {
- var compactionCoordinatorHost =
- coordinatorHost.orElseThrow(() -> new
IllegalStateException(coordinatorMissingMsg));
- Set<ServerId> compactors =
- getContext().instanceOperations().getServers(ServerId.Type.COMPACTOR);
- log.debug("Found compactors: {}", compactors);
- return new ExternalCompactorSnapshot(compactionCoordinatorHost, compactors,
- System.currentTimeMillis());
- }
-
- private record ExternalCompactorSnapshot(HostAndPort coordinatorHost,
Set<ServerId> compactors,
- long fetchedTimeMillis) {
- private ExternalCompactorSnapshot(HostAndPort coordinatorHost,
Set<ServerId> compactors,
- long fetchedTimeMillis) {
- this.coordinatorHost = coordinatorHost;
- this.compactors = Set.copyOf(compactors);
- this.fetchedTimeMillis = fetchedTimeMillis;
- }
- }
-
- private record ExternalCompactionsSnapshot(Map<String,TExternalCompaction>
ecRunningMap) {
- private
ExternalCompactionsSnapshot(Optional<Map<String,TExternalCompaction>>
ecRunningMap) {
-
this(ecRunningMap.map(Collections::unmodifiableMap).orElse(Collections.emptyMap()));
- }
- }
-
- private ExternalCompactionsSnapshot computeExternalCompactionsSnapshot() {
- if (coordinatorHost.isEmpty()) {
- throw new IllegalStateException(coordinatorMissingMsg);
- }
- var ccHost = coordinatorHost.orElseThrow();
- log.info("User initiated fetch of running External Compactions from {}",
ccHost);
- try {
- CompactionCoordinatorService.Client client =
- ThriftUtil.getClient(ThriftClientTypes.COORDINATOR, ccHost,
getContext());
- TExternalCompactionMap running;
- try {
- running = client.getRunningCompactions(TraceUtil.traceInfo(),
getContext().rpcCreds());
- return new
ExternalCompactionsSnapshot(Optional.ofNullable(running.getCompactions()));
- } catch (Exception e) {
- throw new IllegalStateException("Unable to get running compactions
from " + ccHost, e);
- } finally {
- if (client != null) {
- ThriftUtil.returnClient(client, getContext());
- }
- }
- } catch (TTransportException e) {
- log.error("Unable to get Compaction coordinator at {}", ccHost);
- throw new IllegalStateException(coordinatorMissingMsg, e);
- }
- }
-
/**
* Get the monitor lock in ZooKeeper
*/
diff --git
a/server/monitor/src/main/java/org/apache/accumulo/monitor/next/Endpoints.java
b/server/monitor/src/main/java/org/apache/accumulo/monitor/next/Endpoints.java
index 9ecab2a74c..3a30fda67f 100644
---
a/server/monitor/src/main/java/org/apache/accumulo/monitor/next/Endpoints.java
+++
b/server/monitor/src/main/java/org/apache/accumulo/monitor/next/Endpoints.java
@@ -46,7 +46,6 @@ import jakarta.ws.rs.core.MediaType;
import org.apache.accumulo.core.Constants;
import org.apache.accumulo.core.client.admin.TabletInformation;
import org.apache.accumulo.core.client.admin.servers.ServerId;
-import org.apache.accumulo.core.compaction.thrift.TExternalCompaction;
import org.apache.accumulo.core.data.ResourceGroupId;
import org.apache.accumulo.core.data.TableId;
import org.apache.accumulo.core.metadata.schema.ExternalCompactionId;
@@ -330,41 +329,14 @@ public class Endpoints {
return
monitor.getInformationFetcher().getSummaryForEndpoint().getCompactionMetricSummary();
}
- @GET
- @Path("compactions/detail")
- @Produces(MediaType.APPLICATION_JSON)
- @Description("Returns a map of Compactor resource group to the 50 oldest
running compactions")
- public Map<String,List<TExternalCompaction>> getCompactions() {
- Map<String,List<TExternalCompaction>> all =
-
monitor.getInformationFetcher().getSummaryForEndpoint().getCompactions();
- if (all == null) {
- return Map.of();
- }
- return all;
- }
-
- @GET
- @Path("compactions/detail/{" + GROUP_PARAM_KEY + "}")
- @Produces(MediaType.APPLICATION_JSON)
- @Description("Returns a list of the 50 oldest running compactions in the
supplied resource group")
- public List<TExternalCompaction>
- getCompactions(@PathParam(GROUP_PARAM_KEY) String resourceGroup) {
- validateResourceGroup(resourceGroup);
- List<TExternalCompaction> compactions =
-
monitor.getInformationFetcher().getSummaryForEndpoint().getCompactions(resourceGroup);
- if (compactions == null) {
- return List.of();
- }
- return compactions;
- }
-
@GET
@Path("ec")
@Produces(MediaType.APPLICATION_JSON)
@Description("Returns External Compaction coordinator summary")
public CoordinatorSummary getExternalCompactionCoordinator() {
- return new CoordinatorSummary(monitor.getCompactionCoordinatorHost(),
- monitor.getCompactorServers(),
monitor.getCompactorInfoFetchedTimeMillis());
+ var summary = monitor.getInformationFetcher().getSummaryForEndpoint();
+ return CoordinatorSummary.fromHost(summary.getCoordinatorHost(),
summary.getCompactorServers(),
+ summary.getTimestamp());
}
@GET
@@ -372,16 +344,17 @@ public class Endpoints {
@Produces(MediaType.APPLICATION_JSON)
@Description("Returns External Compactor process details")
public CompactorsSummary getExternalCompactors() {
- return new CompactorsSummary(monitor.getCompactorServers(),
- monitor.getCompactorInfoFetchedTimeMillis());
+ var summary = monitor.getInformationFetcher().getSummaryForEndpoint();
+ return new CompactorsSummary(summary.getCompactorServers(),
summary.getTimestamp());
}
@GET
@Path("ec/running")
@Produces(MediaType.APPLICATION_JSON)
- @Description("Returns running External Compactions")
+ @Description("Returns the 50 longest-running External Compactions for the
UI")
public RunningCompactionsSummary getExternalCompactions() {
- return new RunningCompactionsSummary(monitor.getRunningCompactionsMap());
+ return new RunningCompactionsSummary(
+
monitor.getInformationFetcher().getSummaryForEndpoint().getTopRunningCompactions());
}
@GET
@@ -394,7 +367,8 @@ public class Endpoints {
throw new BadRequestException("Missing required query parameter: ecid");
}
final var externalCompactionId = ExternalCompactionId.from(ecid);
- var runningCompaction = monitor.getRunningCompaction(externalCompactionId);
+ var runningCompaction =
monitor.getInformationFetcher().getSummaryForEndpoint()
+ .getRunningCompactions().get(externalCompactionId.canonical());
if (runningCompaction == null) {
throw new IllegalStateException("Failed to find details for ECID: " +
externalCompactionId);
}
diff --git
a/server/monitor/src/main/java/org/apache/accumulo/monitor/next/InformationFetcher.java
b/server/monitor/src/main/java/org/apache/accumulo/monitor/next/InformationFetcher.java
index 4c528776a2..428ae1da00 100644
---
a/server/monitor/src/main/java/org/apache/accumulo/monitor/next/InformationFetcher.java
+++
b/server/monitor/src/main/java/org/apache/accumulo/monitor/next/InformationFetcher.java
@@ -43,7 +43,7 @@ import
org.apache.accumulo.core.client.admin.TabletInformation;
import org.apache.accumulo.core.client.admin.servers.ServerId;
import org.apache.accumulo.core.client.admin.servers.ServerId.Type;
import org.apache.accumulo.core.compaction.thrift.CompactionCoordinatorService;
-import org.apache.accumulo.core.compaction.thrift.TExternalCompactionList;
+import org.apache.accumulo.core.compaction.thrift.TExternalCompaction;
import org.apache.accumulo.core.conf.Property;
import org.apache.accumulo.core.data.RowRange;
import org.apache.accumulo.core.data.TableId;
@@ -180,8 +180,7 @@ public class InformationFetcher implements
RemovalListener<ServerId,MetricRespon
this.summary = summary;
}
- // Copied from Monitor
- private Map<String,TExternalCompactionList> getLongRunningCompactions() {
+ private Map<String,TExternalCompaction> getRunningCompactions() {
Set<ServerId> managers =
ctx.instanceOperations().getServers(ServerId.Type.MANAGER);
if (managers.isEmpty()) {
throw new IllegalStateException(coordinatorMissingMsg);
@@ -192,7 +191,11 @@ public class InformationFetcher implements
RemovalListener<ServerId,MetricRespon
CompactionCoordinatorService.Client client =
ThriftUtil.getClient(ThriftClientTypes.COORDINATOR, hp, ctx);
try {
- return client.getLongRunningCompactions(TraceUtil.traceInfo(),
ctx.rpcCreds());
+ var running = client.getRunningCompactions(TraceUtil.traceInfo(),
ctx.rpcCreds());
+ if (running == null || running.getCompactions() == null) {
+ return Map.of();
+ }
+ return running.getCompactions();
} catch (Exception e) {
throw new IllegalStateException("Unable to get running compactions
from " + hp, e);
} finally {
@@ -209,7 +212,7 @@ public class InformationFetcher implements
RemovalListener<ServerId,MetricRespon
@Override
public void run() {
try {
- summary.processExternalCompactionList(getLongRunningCompactions());
+ summary.processExternalCompactions(getRunningCompactions());
} catch (Exception e) {
LOG.warn("Error gathering running compaction information.", e);
}
@@ -307,6 +310,14 @@ public class InformationFetcher implements
RemovalListener<ServerId,MetricRespon
final List<Future<?>> futures = new ArrayList<>();
final SystemInformation summary = new SystemInformation(allMetrics,
this.ctx);
+ Set<ServerId> managers =
this.ctx.instanceOperations().getServers(ServerId.Type.MANAGER);
+ HostAndPort coordinatorHost = null;
+ if (!managers.isEmpty()) {
+ ServerId manager = managers.iterator().next();
+ coordinatorHost = HostAndPort.fromParts(manager.getHost(),
manager.getPort());
+ }
+ Set<ServerId> compactors =
this.ctx.instanceOperations().getServers(Type.COMPACTOR);
+ summary.processExternalCompactionInventory(compactors, coordinatorHost);
for (ServerId.Type type : ServerId.Type.values()) {
if (type == Type.MONITOR) {
diff --git
a/server/monitor/src/main/java/org/apache/accumulo/monitor/next/SystemInformation.java
b/server/monitor/src/main/java/org/apache/accumulo/monitor/next/SystemInformation.java
index 82f061f06d..c24e213eb0 100644
---
a/server/monitor/src/main/java/org/apache/accumulo/monitor/next/SystemInformation.java
+++
b/server/monitor/src/main/java/org/apache/accumulo/monitor/next/SystemInformation.java
@@ -22,11 +22,10 @@ import java.nio.ByteBuffer;
import java.time.Duration;
import java.util.ArrayList;
import java.util.Collections;
-import java.util.HashMap;
+import java.util.Comparator;
import java.util.HashSet;
import java.util.List;
import java.util.Map;
-import java.util.Map.Entry;
import java.util.Optional;
import java.util.Set;
import java.util.concurrent.ConcurrentHashMap;
@@ -40,7 +39,6 @@ import
org.apache.accumulo.core.client.admin.TabletInformation;
import org.apache.accumulo.core.client.admin.TabletMergeabilityInfo;
import org.apache.accumulo.core.client.admin.servers.ServerId;
import org.apache.accumulo.core.compaction.thrift.TExternalCompaction;
-import org.apache.accumulo.core.compaction.thrift.TExternalCompactionList;
import org.apache.accumulo.core.data.ResourceGroupId;
import org.apache.accumulo.core.data.TableId;
import org.apache.accumulo.core.data.TabletId;
@@ -52,6 +50,7 @@ import org.apache.accumulo.core.metrics.flatbuffers.FMetric;
import org.apache.accumulo.core.metrics.flatbuffers.FTag;
import org.apache.accumulo.core.process.thrift.MetricResponse;
import org.apache.accumulo.core.spi.balancer.TableLoadBalancer;
+import org.apache.accumulo.core.util.compaction.RunningCompactionInfo;
import org.apache.accumulo.monitor.next.sservers.ScanServerView;
import org.apache.accumulo.server.ServerContext;
import org.apache.accumulo.server.conf.TableConfiguration;
@@ -60,6 +59,7 @@ import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import com.github.benmanes.caffeine.cache.Cache;
+import com.google.common.net.HostAndPort;
import io.micrometer.core.instrument.Clock;
import io.micrometer.core.instrument.Meter.Id;
@@ -336,9 +336,12 @@ public class SystemInformation {
new ConcurrentHashMap<>();
// Compaction Information
+ private static final int ACTIVE_COMPACTIONS_LIMIT = 50;
private final Map<String,List<FMetric>> queueMetrics = new
ConcurrentHashMap<>();
- private final AtomicReference<Map<String,TExternalCompactionList>>
oldestCompactions =
- new AtomicReference<>();
+ private volatile Set<ServerId> registeredCompactors = Set.of();
+ private volatile HostAndPort coordinatorHost;
+ private volatile Map<String,TExternalCompaction> runningCompactions =
Map.of();
+ private volatile List<RunningCompactionInfo> runningCompactionsTop =
List.of();
// Table Information
private final Map<TableId,TableSummary> tables = new ConcurrentHashMap<>();
@@ -371,6 +374,10 @@ public class SystemInformation {
rgSServerMetrics.clear();
rgTServerMetrics.clear();
queueMetrics.clear();
+ registeredCompactors = Set.of();
+ coordinatorHost = null;
+ runningCompactions = Map.of();
+ runningCompactionsTop = List.of();
tables.clear();
tablets.clear();
deployment.clear();
@@ -476,8 +483,21 @@ public class SystemInformation {
}
- public void
processExternalCompactionList(Map<String,TExternalCompactionList> running) {
- oldestCompactions.set(running);
+ public void processExternalCompactions(Map<String,TExternalCompaction>
running) {
+ if (running == null) {
+ runningCompactions = Map.of();
+ } else {
+ runningCompactions = Map.copyOf(running);
+ }
+ }
+
+ public void processExternalCompactionInventory(Set<ServerId> compactors,
HostAndPort host) {
+ if (compactors == null) {
+ registeredCompactors = Set.of();
+ } else {
+ registeredCompactors = Set.copyOf(compactors);
+ }
+ coordinatorHost = host;
}
public void processTabletInformation(TableId tableId, String tableName,
TabletInformation info) {
@@ -523,6 +543,8 @@ public class SystemInformation {
timestamp = System.currentTimeMillis();
scanServerView = ScanServerView.fromMetrics(responses, scanServers.size(),
problemScanServerCount, timestamp);
+ runningCompactionsTop =
+ buildTopRunningCompactions(runningCompactions,
ACTIVE_COMPACTIONS_LIMIT);
}
public Set<String> getResourceGroups() {
@@ -584,29 +606,20 @@ public class SystemInformation {
return this.queueMetrics;
}
- public Map<String,List<TExternalCompaction>> getCompactions() {
+ public Set<ServerId> getCompactorServers() {
+ return registeredCompactors;
+ }
- Map<String,TExternalCompactionList> oldest = oldestCompactions.get();
- if (oldest == null) {
- return null;
- }
+ public HostAndPort getCoordinatorHost() {
+ return coordinatorHost;
+ }
- Map<String,List<TExternalCompaction>> results = new HashMap<>();
- for (Entry<String,TExternalCompactionList> e : oldest.entrySet()) {
- List<TExternalCompaction> compactions = e.getValue().getCompactions();
- if (compactions != null && compactions.size() > 0) {
- results.put(e.getKey(), compactions);
- }
- }
- return results;
+ public Map<String,TExternalCompaction> getRunningCompactions() {
+ return runningCompactions;
}
- public List<TExternalCompaction> getCompactions(String group) {
- TExternalCompactionList list = oldestCompactions.get().get(group);
- if (list == null) {
- return null;
- }
- return list.getCompactions();
+ public List<RunningCompactionInfo> getTopRunningCompactions() {
+ return runningCompactionsTop;
}
public Map<TableId,TableSummary> getTables() {
@@ -633,4 +646,14 @@ public class SystemInformation {
return this.scanServerView;
}
+ private static List<RunningCompactionInfo>
+ buildTopRunningCompactions(Map<String,TExternalCompaction>
allCompactions, int limit) {
+ if (allCompactions == null || allCompactions.isEmpty()) {
+ return List.of();
+ }
+ return allCompactions.values().stream().map(RunningCompactionInfo::new)
+ .sorted(Comparator.comparingLong((RunningCompactionInfo r) ->
r.duration).reversed())
+ .limit(limit).toList();
+ }
+
}
diff --git
a/server/monitor/src/main/java/org/apache/accumulo/monitor/next/ec/CoordinatorSummary.java
b/server/monitor/src/main/java/org/apache/accumulo/monitor/next/ec/CoordinatorSummary.java
index c639b2f3fe..59b44eb770 100644
---
a/server/monitor/src/main/java/org/apache/accumulo/monitor/next/ec/CoordinatorSummary.java
+++
b/server/monitor/src/main/java/org/apache/accumulo/monitor/next/ec/CoordinatorSummary.java
@@ -28,9 +28,10 @@ import com.google.common.net.HostAndPort;
public record CoordinatorSummary(long lastContact, String server, long
numQueues,
int numCompactors) {
- public CoordinatorSummary(HostAndPort coordinatorHost, Set<ServerId>
compactors,
- long fetchedTimeMillis) {
- this(System.currentTimeMillis() - fetchedTimeMillis,
coordinatorHost.toString(),
+ public static CoordinatorSummary fromHost(HostAndPort coordinatorHost,
Set<ServerId> compactors,
+ long snapshotTimeMillis) {
+ return new CoordinatorSummary(System.currentTimeMillis() -
snapshotTimeMillis,
+ coordinatorHost == null ? null : coordinatorHost.toString(),
compactors.stream().map(ServerId::getResourceGroup).distinct().count(),
compactors.size());
}
}
diff --git
a/server/monitor/src/main/resources/org/apache/accumulo/monitor/resources/js/functions.js
b/server/monitor/src/main/resources/org/apache/accumulo/monitor/resources/js/functions.js
index 2d7457f01e..8a1c39ea43 100644
---
a/server/monitor/src/main/resources/org/apache/accumulo/monitor/resources/js/functions.js
+++
b/server/monitor/src/main/resources/org/apache/accumulo/monitor/resources/js/functions.js
@@ -702,25 +702,6 @@ function getTable(name) {
return getJSONForTable(url, sessionDataVar);
}
-/**
- * REST GET call for /compactions/detail/{num},
- * stores it on a sessionStorage variable
- * @param {number} num Detail number
- */
-function getCompactionsDetail(num) {
- const url = `${REST_V2_PREFIX}/compactions/detail/${num}`;
- const sessionDataVar = `compactionsDetail_${num}`;
- return getJSONForTable(url, sessionDataVar);
-}
-
-/**
- * REST GET call for /compactions/detail,
- * stores it on a sessionStorage variable
- */
-function getCompactionsDetail() {
- return getJSONForTable(REST_V2_PREFIX + '/compactions/detail',
'compactionsDetail');
-}
-
/**
* REST GET call for /compactions/summary,
* stores it on a sessionStorage variable