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 9a809e9d3ca..4d428573631 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 @@ -23,7 +23,9 @@ import java.lang.annotation.RetentionPolicy; import java.lang.annotation.Target; import java.lang.reflect.Method; +import java.util.ArrayList; import java.util.Collection; +import java.util.HashMap; import java.util.List; import java.util.Map; import java.util.Set; @@ -46,6 +48,7 @@ import org.apache.accumulo.core.data.TableId; import org.apache.accumulo.core.metrics.flatbuffers.FMetric; import org.apache.accumulo.core.process.thrift.MetricResponse; +import org.apache.accumulo.core.rpc.clients.ManagerClient; import org.apache.accumulo.core.util.compaction.RunningCompactionInfo; import org.apache.accumulo.monitor.Monitor; import org.apache.accumulo.monitor.next.InformationFetcher.InstanceSummary; @@ -55,6 +58,7 @@ import org.apache.accumulo.monitor.next.ec.CompactorsSummary; import org.apache.accumulo.monitor.next.ec.CoordinatorSummary; import org.apache.accumulo.monitor.next.sservers.ScanServerView; +import org.apache.accumulo.server.manager.FateLocations; import io.micrometer.core.instrument.Meter.Id; import io.micrometer.core.instrument.cumulative.CumulativeDistributionSummary; @@ -168,6 +172,30 @@ public List getManagerMetrics() { return List.of(); } + @GET + @Path("manager/responsibilities") + @Produces(MediaType.APPLICATION_JSON) + @Description("Returns each managers responsibilities") + public Map> getManagerResponsibilities() { + var fateLocs = new FateLocations(monitor.getContext()); + Map> responsibilities = new HashMap<>(); + fateLocs.getLocations().forEach((addr, partitions) -> { + partitions.forEach(partition -> { + responsibilities.computeIfAbsent(addr.toString(), a -> new ArrayList<>()) + .add(partition.toString()); + }); + }); + + var primary = ManagerClient.getPrimaryManagerLocation(monitor.getContext()); + if (primary != null) { + responsibilities.computeIfAbsent(primary, a -> new ArrayList<>()) + .addAll(List.of("TABLET_MANAGEMENT", "BALANCING", "CLIENT_RPC", "TSERVER_MONITORING", + "CLUSTER_MAINTENANCE", "COMPACTION_COORDINATION")); + } + + return responsibilities; + } + @GET @Path("gc") @Produces(MediaType.APPLICATION_JSON)