You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@uniffle.apache.org by ro...@apache.org on 2022/11/16 10:02:35 UTC
[incubator-uniffle] branch master updated: [ISSUE-309][FEATURE] Support ShuffleServer latency metrics. (#327)
This is an automated email from the ASF dual-hosted git repository.
roryqi pushed a commit to branch master
in repository https://gitbox.apache.org/repos/asf/incubator-uniffle.git
The following commit(s) were added to refs/heads/master by this push:
new 4004f44d [ISSUE-309][FEATURE] Support ShuffleServer latency metrics. (#327)
4004f44d is described below
commit 4004f44dd89a73dfb91306740a5dbb664e86ce7d
Author: Xianming Lei <31...@users.noreply.github.com>
AuthorDate: Wed Nov 16 18:02:30 2022 +0800
[ISSUE-309][FEATURE] Support ShuffleServer latency metrics. (#327)
### What changes were proposed in this pull request?
For https://github.com/apache/incubator-uniffle/issues/309, support ShuffleServer latency metrics.
### Why are the changes needed?
Accurately determine whether the current service load has caused a large delay to the client's read and write.
### Does this PR introduce _any_ user-facing change?
No
### How was this patch tested?
UT
Co-authored-by: leixianming <le...@didiglobal.com>
---
.../apache/uniffle/common/metrics/GRPCMetrics.java | 27 ++++++++++
.../uniffle/common/metrics/MetricsManager.java | 11 ++++
.../org/apache/uniffle/common/util/Constants.java | 2 +
.../client/impl/grpc/ShuffleServerGrpcClient.java | 9 ++--
proto/src/main/proto/Rss.proto | 3 ++
.../uniffle/server/ShuffleServerGrpcMetrics.java | 26 ++++++++++
.../uniffle/server/ShuffleServerGrpcService.java | 42 ++++++++++++++-
.../server/ShuffleServerGrpcMetricsTest.java | 59 ++++++++++++++++++++++
.../uniffle/server/ShuffleServerMetricsTest.java | 2 +-
9 files changed, 175 insertions(+), 6 deletions(-)
diff --git a/common/src/main/java/org/apache/uniffle/common/metrics/GRPCMetrics.java b/common/src/main/java/org/apache/uniffle/common/metrics/GRPCMetrics.java
index 0e3fc7fd..7d8b4846 100644
--- a/common/src/main/java/org/apache/uniffle/common/metrics/GRPCMetrics.java
+++ b/common/src/main/java/org/apache/uniffle/common/metrics/GRPCMetrics.java
@@ -23,6 +23,9 @@ import com.google.common.collect.Maps;
import io.prometheus.client.CollectorRegistry;
import io.prometheus.client.Counter;
import io.prometheus.client.Gauge;
+import io.prometheus.client.Summary;
+
+import org.apache.uniffle.common.util.Constants;
public abstract class GRPCMetrics {
// Grpc server internal executor metrics
@@ -36,6 +39,8 @@ public abstract class GRPCMetrics {
private boolean isRegister = false;
protected Map<String, Counter> counterMap = Maps.newConcurrentMap();
protected Map<String, Gauge> gaugeMap = Maps.newConcurrentMap();
+ protected Map<String, Summary> transportTimeSummaryMap = Maps.newConcurrentMap();
+ protected Map<String, Summary> processTimeSummaryMap = Maps.newConcurrentMap();
protected Gauge gaugeGrpcOpen;
protected Counter counterGrpcTotal;
protected MetricsManager metricsManager;
@@ -100,6 +105,20 @@ public abstract class GRPCMetrics {
}
}
+ public void recordTransportTime(String methodName, long transportTimeInMillionSecond) {
+ Summary summary = transportTimeSummaryMap.get(methodName);
+ if (summary != null) {
+ summary.observe(transportTimeInMillionSecond / Constants.MILLION_SECONDS_PER_SECOND);
+ }
+ }
+
+ public void recordProcessTime(String methodName, long processTimeInMillionSecond) {
+ Summary summary = processTimeSummaryMap.get(methodName);
+ if (summary != null) {
+ summary.observe(processTimeInMillionSecond / Constants.MILLION_SECONDS_PER_SECOND);
+ }
+ }
+
public CollectorRegistry getCollectorRegistry() {
return metricsManager.getCollectorRegistry();
}
@@ -119,4 +138,12 @@ public abstract class GRPCMetrics {
public Counter getCounterGrpcTotal() {
return counterGrpcTotal;
}
+
+ public Map<String, Summary> getTransportTimeSummaryMap() {
+ return transportTimeSummaryMap;
+ }
+
+ public Map<String, Summary> getProcessTimeSummaryMap() {
+ return processTimeSummaryMap;
+ }
}
diff --git a/common/src/main/java/org/apache/uniffle/common/metrics/MetricsManager.java b/common/src/main/java/org/apache/uniffle/common/metrics/MetricsManager.java
index b09c7ccf..2981ca22 100644
--- a/common/src/main/java/org/apache/uniffle/common/metrics/MetricsManager.java
+++ b/common/src/main/java/org/apache/uniffle/common/metrics/MetricsManager.java
@@ -21,9 +21,12 @@ import io.prometheus.client.CollectorRegistry;
import io.prometheus.client.Counter;
import io.prometheus.client.Gauge;
import io.prometheus.client.Histogram;
+import io.prometheus.client.Summary;
public class MetricsManager {
private CollectorRegistry collectorRegistry;
+ private static final double[] QUANTILES = {0.50, 0.75, 0.90, 0.95, 0.99};
+ private static final double QUANTILE_ERROR = 0.01;
public MetricsManager() {
this(null);
@@ -64,4 +67,12 @@ public class MetricsManager {
public Histogram addHistogram(String name, String help, double[] buckets, String[] labels) {
return Histogram.build().name(name).buckets(buckets).labelNames(labels).help(help).register(collectorRegistry);
}
+
+ public Summary addSummary(String name) {
+ Summary.Builder builder = Summary.build().name(name).help("Summary " + name);
+ for (int i = 0; i < QUANTILES.length; i++) {
+ builder = builder.quantile(QUANTILES[i], QUANTILE_ERROR);
+ }
+ return builder.register(collectorRegistry);
+ }
}
diff --git a/common/src/main/java/org/apache/uniffle/common/util/Constants.java b/common/src/main/java/org/apache/uniffle/common/util/Constants.java
index 1921c312..f21597ab 100644
--- a/common/src/main/java/org/apache/uniffle/common/util/Constants.java
+++ b/common/src/main/java/org/apache/uniffle/common/util/Constants.java
@@ -65,4 +65,6 @@ public class Constants {
public static int MR_REDUCE_LIMIT_DEFAULT_VALUE = 0;
public static final String MR_SLOW_START = "mapreduce.job.reduce.slowstart.completedmaps";
public static double MR_SLOW_START_DEFAULT_VALUE = 0.05;
+
+ public static final double MILLION_SECONDS_PER_SECOND = 1E3D;
}
diff --git a/internal-client/src/main/java/org/apache/uniffle/client/impl/grpc/ShuffleServerGrpcClient.java b/internal-client/src/main/java/org/apache/uniffle/client/impl/grpc/ShuffleServerGrpcClient.java
index 3d54e50a..4adf8229 100644
--- a/internal-client/src/main/java/org/apache/uniffle/client/impl/grpc/ShuffleServerGrpcClient.java
+++ b/internal-client/src/main/java/org/apache/uniffle/client/impl/grpc/ShuffleServerGrpcClient.java
@@ -307,13 +307,14 @@ public class ShuffleServerGrpcClient extends GrpcClient implements ShuffleServer
throw new RssException(String.format(
"requirePreAllocation failed! size[%s], host[%s], port[%s]", allocateSize, host, port));
}
+ long start = System.currentTimeMillis();
SendShuffleDataRequest rpcRequest = SendShuffleDataRequest.newBuilder()
.setAppId(appId)
.setShuffleId(stb.getKey())
.setRequireBufferId(requireId)
.addAllShuffleData(shuffleData)
+ .setTimestamp(start)
.build();
- long start = System.currentTimeMillis();
SendShuffleDataResponse response = getBlockingStub().sendShuffleData(rpcRequest);
LOG.info("Do sendShuffleData to {}:{} rpc cost:" + (System.currentTimeMillis() - start)
+ " ms for " + allocateSize + " bytes with " + finalBlockNum + " blocks", host, port);
@@ -522,6 +523,7 @@ public class ShuffleServerGrpcClient extends GrpcClient implements ShuffleServer
@Override
public RssGetShuffleDataResponse getShuffleData(RssGetShuffleDataRequest request) {
+ long start = System.currentTimeMillis();
GetLocalShuffleDataRequest rpcRequest = GetLocalShuffleDataRequest
.newBuilder()
.setAppId(request.getAppId())
@@ -531,8 +533,8 @@ public class ShuffleServerGrpcClient extends GrpcClient implements ShuffleServer
.setPartitionNum(request.getPartitionNum())
.setOffset(request.getOffset())
.setLength(request.getLength())
+ .setTimestamp(start)
.build();
- long start = System.currentTimeMillis();
GetLocalShuffleDataResponse rpcResponse = getBlockingStub().getLocalShuffleData(rpcRequest);
String requestInfo = "appId[" + request.getAppId() + "], shuffleId["
+ request.getShuffleId() + "], partitionId[" + request.getPartitionId() + "]";
@@ -595,6 +597,7 @@ public class ShuffleServerGrpcClient extends GrpcClient implements ShuffleServer
@Override
public RssGetInMemoryShuffleDataResponse getInMemoryShuffleData(
RssGetInMemoryShuffleDataRequest request) {
+ long start = System.currentTimeMillis();
GetMemoryShuffleDataRequest rpcRequest = GetMemoryShuffleDataRequest
.newBuilder()
.setAppId(request.getAppId())
@@ -602,9 +605,9 @@ public class ShuffleServerGrpcClient extends GrpcClient implements ShuffleServer
.setPartitionId(request.getPartitionId())
.setLastBlockId(request.getLastBlockId())
.setReadBufferSize(request.getReadBufferSize())
+ .setTimestamp(start)
.build();
- long start = System.currentTimeMillis();
GetMemoryShuffleDataResponse rpcResponse = getBlockingStub().getMemoryShuffleData(rpcRequest);
String requestInfo = "appId[" + request.getAppId() + "], shuffleId["
+ request.getShuffleId() + "], partitionId[" + request.getPartitionId() + "]";
diff --git a/proto/src/main/proto/Rss.proto b/proto/src/main/proto/Rss.proto
index 68b5c02c..5c7e80b8 100644
--- a/proto/src/main/proto/Rss.proto
+++ b/proto/src/main/proto/Rss.proto
@@ -76,6 +76,7 @@ message GetLocalShuffleDataRequest {
int32 partitionNum = 5;
int64 offset = 6;
int32 length = 7;
+ int64 timestamp = 8;
}
message GetLocalShuffleDataResponse {
@@ -90,6 +91,7 @@ message GetMemoryShuffleDataRequest {
int32 partitionId = 3;
int64 lastBlockId = 4;
int32 readBufferSize = 5;
+ int64 timestamp = 6;
}
message GetMemoryShuffleDataResponse {
@@ -195,6 +197,7 @@ message SendShuffleDataRequest {
int32 shuffleId = 2;
int64 requireBufferId = 3;
repeated ShuffleData shuffleData = 4;
+ int64 timestamp = 5;
}
message SendShuffleDataResponse {
diff --git a/server/src/main/java/org/apache/uniffle/server/ShuffleServerGrpcMetrics.java b/server/src/main/java/org/apache/uniffle/server/ShuffleServerGrpcMetrics.java
index 9ca3c757..e83d7b85 100644
--- a/server/src/main/java/org/apache/uniffle/server/ShuffleServerGrpcMetrics.java
+++ b/server/src/main/java/org/apache/uniffle/server/ShuffleServerGrpcMetrics.java
@@ -60,6 +60,18 @@ public class ShuffleServerGrpcMetrics extends GRPCMetrics {
"grpc_get_in_memory_shuffle_data_total";
private static final String GRPC_GET_SHUFFLE_INDEX_TOTAL = "grpc_get_local_shuffle_index_total";
+ private static final String GRPC_SEND_SHUFFLE_DATA_TRANSPORT_LATENCY =
+ "grpc_send_shuffle_data_transport_latency";
+ private static final String GRPC_GET_SHUFFLE_DATA_TRANSPORT_LATENCY =
+ "grpc_get_local_shuffle_data_transport_latency";
+ private static final String GRPC_GET_IN_MEMORY_SHUFFLE_DATA_TRANSPORT_LATENCY =
+ "grpc_get_in_memory_shuffle_data_transport_latency";
+
+ private static final String GRPC_SEND_SHUFFLE_DATA_PROCESS_LATENCY = "grpc_send_shuffle_data_process_latency";
+ private static final String GRPC_GET_SHUFFLE_DATA_PROCESS_LATENCY = "grpc_get_local_shuffle_data_process_latency";
+ private static final String GRPC_GET_IN_MEMORY_SHUFFLE_DATA_PROCESS_LATENCY =
+ "grpc_get_in_memory_shuffle_data_process_latency";
+
@Override
public void registerMetrics() {
gaugeGrpcOpen = metricsManager.addGauge(GRPC_OPEN);
@@ -110,6 +122,20 @@ public class ShuffleServerGrpcMetrics extends GRPCMetrics {
metricsManager.addCounter(GRPC_GET_IN_MEMORY_SHUFFLE_DATA_TOTAL));
counterMap.putIfAbsent(GET_SHUFFLE_INDEX_METHOD,
metricsManager.addCounter(GRPC_GET_SHUFFLE_INDEX_TOTAL));
+
+ transportTimeSummaryMap.putIfAbsent(SEND_SHUFFLE_DATA_METHOD,
+ metricsManager.addSummary(GRPC_SEND_SHUFFLE_DATA_TRANSPORT_LATENCY));
+ transportTimeSummaryMap.putIfAbsent(GET_SHUFFLE_DATA_METHOD,
+ metricsManager.addSummary(GRPC_GET_SHUFFLE_DATA_TRANSPORT_LATENCY));
+ transportTimeSummaryMap.putIfAbsent(GET_IN_MEMORY_SHUFFLE_DATA_METHOD,
+ metricsManager.addSummary(GRPC_GET_IN_MEMORY_SHUFFLE_DATA_TRANSPORT_LATENCY));
+
+ processTimeSummaryMap.putIfAbsent(SEND_SHUFFLE_DATA_METHOD,
+ metricsManager.addSummary(GRPC_SEND_SHUFFLE_DATA_PROCESS_LATENCY));
+ processTimeSummaryMap.putIfAbsent(GET_SHUFFLE_DATA_METHOD,
+ metricsManager.addSummary(GRPC_GET_SHUFFLE_DATA_PROCESS_LATENCY));
+ processTimeSummaryMap.putIfAbsent(GET_IN_MEMORY_SHUFFLE_DATA_METHOD,
+ metricsManager.addSummary(GRPC_GET_IN_MEMORY_SHUFFLE_DATA_PROCESS_LATENCY));
}
}
diff --git a/server/src/main/java/org/apache/uniffle/server/ShuffleServerGrpcService.java b/server/src/main/java/org/apache/uniffle/server/ShuffleServerGrpcService.java
index 6af12b76..2d857264 100644
--- a/server/src/main/java/org/apache/uniffle/server/ShuffleServerGrpcService.java
+++ b/server/src/main/java/org/apache/uniffle/server/ShuffleServerGrpcService.java
@@ -186,6 +186,21 @@ public class ShuffleServerGrpcService extends ShuffleServerImplBase {
String appId = req.getAppId();
int shuffleId = req.getShuffleId();
long requireBufferId = req.getRequireBufferId();
+ long timestamp = req.getTimestamp();
+ if (timestamp > 0) {
+ /*
+ * Here we record the transport time, but we don't consider the impact of data size on transport time.
+ * The amount of data will not cause great fluctuations in latency. For example, 100K costs 1ms,
+ * and 1M costs 10ms. This seems like a normal fluctuation, but it may rise to 10s when the server load is high.
+ * In addition, we need to pay attention to that the time of the client machine and the machine
+ * time of the Shuffle Server should be kept in sync. TransportTime is accurate only if this condition is met.
+ * */
+ long transportTime = System.currentTimeMillis() - timestamp;
+ if (transportTime > 0) {
+ shuffleServer.getGrpcMetrics().recordTransportTime(
+ ShuffleServerGrpcMetrics.SEND_SHUFFLE_DATA_METHOD, transportTime);
+ }
+ }
int requireSize = shuffleServer
.getShuffleTaskManager().getRequireBufferSize(requireBufferId);
@@ -240,8 +255,10 @@ public class ShuffleServerGrpcService extends ShuffleServerImplBase {
}
}
reply = SendShuffleDataResponse.newBuilder().setStatus(valueOf(ret)).setRetMsg(responseMessage).build();
+ long costTime = System.currentTimeMillis() - start;
+ shuffleServer.getGrpcMetrics().recordProcessTime(ShuffleServerGrpcMetrics.SEND_SHUFFLE_DATA_METHOD, costTime);
LOG.debug("Cache Shuffle Data for appId[" + appId + "], shuffleId[" + shuffleId
- + "], cost " + (System.currentTimeMillis() - start)
+ + "], cost " + costTime
+ " ms with " + shufflePartitionedData.size() + " blocks and " + requireSize + " bytes");
} else {
reply = SendShuffleDataResponse
@@ -476,6 +493,14 @@ public class ShuffleServerGrpcService extends ShuffleServerImplBase {
int partitionNum = request.getPartitionNum();
long offset = request.getOffset();
int length = request.getLength();
+ long timestamp = request.getTimestamp();
+ if (timestamp > 0) {
+ long transportTime = System.currentTimeMillis() - timestamp;
+ if (transportTime > 0) {
+ shuffleServer.getGrpcMetrics().recordTransportTime(
+ ShuffleServerGrpcMetrics.GET_SHUFFLE_DATA_METHOD, transportTime);
+ }
+ }
String storageType = shuffleServer.getShuffleServerConf().get(RssBaseConf.RSS_STORAGE_TYPE);
StatusCode status = StatusCode.SUCCESS;
String msg = "OK";
@@ -497,6 +522,8 @@ public class ShuffleServerGrpcService extends ShuffleServerImplBase {
ShuffleServerMetrics.counterTotalReadTime.inc(readTime);
ShuffleServerMetrics.counterTotalReadDataSize.inc(sdr.getData().length);
ShuffleServerMetrics.counterTotalReadLocalDataFileSize.inc(sdr.getData().length);
+ shuffleServer.getGrpcMetrics().recordProcessTime(
+ ShuffleServerGrpcMetrics.GET_SHUFFLE_DATA_METHOD, readTime);
LOG.info("Successfully getShuffleData cost {} ms for shuffle"
+ " data with {}", readTime, requestInfo);
reply = GetLocalShuffleDataResponse.newBuilder()
@@ -607,6 +634,14 @@ public class ShuffleServerGrpcService extends ShuffleServerImplBase {
int partitionId = request.getPartitionId();
long blockId = request.getLastBlockId();
int readBufferSize = request.getReadBufferSize();
+ long timestamp = request.getTimestamp();
+ if (timestamp > 0) {
+ long transportTime = System.currentTimeMillis() - timestamp;
+ if (transportTime > 0) {
+ shuffleServer.getGrpcMetrics().recordTransportTime(
+ ShuffleServerGrpcMetrics.GET_IN_MEMORY_SHUFFLE_DATA_METHOD, transportTime);
+ }
+ }
long start = System.currentTimeMillis();
StatusCode status = StatusCode.SUCCESS;
String msg = "OK";
@@ -627,8 +662,11 @@ public class ShuffleServerGrpcService extends ShuffleServerImplBase {
ShuffleServerMetrics.counterTotalReadDataSize.inc(data.length);
ShuffleServerMetrics.counterTotalReadMemoryDataSize.inc(data.length);
}
+ long costTime = System.currentTimeMillis() - start;
+ shuffleServer.getGrpcMetrics().recordProcessTime(
+ ShuffleServerGrpcMetrics.GET_IN_MEMORY_SHUFFLE_DATA_METHOD, costTime);
LOG.info("Successfully getInMemoryShuffleData cost {} ms with {} bytes shuffle"
- + " data for {}", (System.currentTimeMillis() - start), data.length, requestInfo);
+ + " data for {}", costTime, data.length, requestInfo);
reply = GetMemoryShuffleDataResponse.newBuilder()
.setStatus(valueOf(status))
diff --git a/server/src/test/java/org/apache/uniffle/server/ShuffleServerGrpcMetricsTest.java b/server/src/test/java/org/apache/uniffle/server/ShuffleServerGrpcMetricsTest.java
new file mode 100644
index 00000000..33e2a9d5
--- /dev/null
+++ b/server/src/test/java/org/apache/uniffle/server/ShuffleServerGrpcMetricsTest.java
@@ -0,0 +1,59 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements. See the NOTICE file distributed with
+ * this work for additional information regarding copyright ownership.
+ * The ASF licenses this file to You under the Apache License, Version 2.0
+ * (the "License"); you may not use this file except in compliance with
+ * the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+package org.apache.uniffle.server;
+
+import java.util.Map;
+
+import io.prometheus.client.CollectorRegistry;
+import io.prometheus.client.Summary;
+import org.junit.jupiter.api.Test;
+
+import static org.junit.jupiter.api.Assertions.assertEquals;
+
+public class ShuffleServerGrpcMetricsTest {
+ @Test
+ public void testLatencyMetrics() {
+ ShuffleServerGrpcMetrics metrics = new ShuffleServerGrpcMetrics();
+ metrics.register(new CollectorRegistry(true));
+ metrics.recordTransportTime(ShuffleServerGrpcMetrics.SEND_SHUFFLE_DATA_METHOD, 1000);
+ metrics.recordTransportTime(ShuffleServerGrpcMetrics.GET_SHUFFLE_DATA_METHOD, 500);
+ metrics.recordTransportTime(ShuffleServerGrpcMetrics.GET_IN_MEMORY_SHUFFLE_DATA_METHOD, 200);
+ metrics.recordProcessTime(ShuffleServerGrpcMetrics.SEND_SHUFFLE_DATA_METHOD, 1000);
+ metrics.recordProcessTime(ShuffleServerGrpcMetrics.GET_SHUFFLE_DATA_METHOD, 500);
+ metrics.recordProcessTime(ShuffleServerGrpcMetrics.GET_IN_MEMORY_SHUFFLE_DATA_METHOD, 200);
+ Map<String, Summary> sendTimeSummaryTime = metrics.getTransportTimeSummaryMap();
+ Map<String, Summary> processTimeSummaryTime = metrics.getProcessTimeSummaryMap();
+ assertEquals(3, sendTimeSummaryTime.size());
+ assertEquals(3, processTimeSummaryTime.size());
+
+ assertEquals(1D, sendTimeSummaryTime.get(
+ ShuffleServerGrpcMetrics.SEND_SHUFFLE_DATA_METHOD).get().sum);
+ assertEquals(0.5D, sendTimeSummaryTime.get(
+ ShuffleServerGrpcMetrics.GET_SHUFFLE_DATA_METHOD).get().sum);
+ assertEquals(0.2D, sendTimeSummaryTime.get(
+ ShuffleServerGrpcMetrics.GET_IN_MEMORY_SHUFFLE_DATA_METHOD).get().sum);
+
+ assertEquals(1D, processTimeSummaryTime.get(
+ ShuffleServerGrpcMetrics.SEND_SHUFFLE_DATA_METHOD).get().sum);
+ assertEquals(0.5D, processTimeSummaryTime.get(
+ ShuffleServerGrpcMetrics.GET_SHUFFLE_DATA_METHOD).get().sum);
+ assertEquals(0.2D, processTimeSummaryTime.get(
+ ShuffleServerGrpcMetrics.GET_IN_MEMORY_SHUFFLE_DATA_METHOD).get().sum);
+ }
+
+}
diff --git a/server/src/test/java/org/apache/uniffle/server/ShuffleServerMetricsTest.java b/server/src/test/java/org/apache/uniffle/server/ShuffleServerMetricsTest.java
index 965a567b..6276dc23 100644
--- a/server/src/test/java/org/apache/uniffle/server/ShuffleServerMetricsTest.java
+++ b/server/src/test/java/org/apache/uniffle/server/ShuffleServerMetricsTest.java
@@ -150,7 +150,7 @@ public class ShuffleServerMetricsTest {
ObjectMapper mapper = new ObjectMapper();
JsonNode actualObj = mapper.readTree(content);
assertEquals(2, actualObj.size());
- assertEquals(27, actualObj.get("metrics").size());
+ assertEquals(69, actualObj.get("metrics").size());
}
@Test