This is an automated email from the ASF dual-hosted git repository.
yihaochen pushed a commit to branch fix-endpoint-grouping
in repository https://gitbox.apache.org/repos/asf/skywalking.git
The following commit(s) were added to refs/heads/fix-endpoint-grouping by this
push:
new 034b0ed2dc Fix NPE and IllegalArgument in AI-based formatting
034b0ed2dc is described below
commit 034b0ed2dc11b118a05c2b477c480329b6e2e576
Author: Superskyyy <[email protected]>
AuthorDate: Tue Jun 20 17:59:12 2023 -0400
Fix NPE and IllegalArgument in AI-based formatting
---
.../core/config/group/EndpointNameGrouping.java | 20 +++++++++-----------
1 file changed, 9 insertions(+), 11 deletions(-)
diff --git
a/oap-server/server-core/src/main/java/org/apache/skywalking/oap/server/core/config/group/EndpointNameGrouping.java
b/oap-server/server-core/src/main/java/org/apache/skywalking/oap/server/core/config/group/EndpointNameGrouping.java
index a2c1bc8e0d..158551364e 100644
---
a/oap-server/server-core/src/main/java/org/apache/skywalking/oap/server/core/config/group/EndpointNameGrouping.java
+++
b/oap-server/server-core/src/main/java/org/apache/skywalking/oap/server/core/config/group/EndpointNameGrouping.java
@@ -90,26 +90,24 @@ public class EndpointNameGrouping {
if (!formattedName._2() && quickUriGroupingRule != null) {
formattedName = formatByQuickUriPattern(serviceName, endpointName);
- ConcurrentHashMap<String, ArrayBlockingQueue<String>> svrHttpUris
= cachedHttpUris.get(serviceName);
- if (svrHttpUris == null) {
- cachedHttpUris.putIfAbsent(serviceName, new
ConcurrentHashMap<>());
- svrHttpUris = cachedHttpUris.get(serviceName);
- }
- // Only cache first N(determined by maxHttpUrisNumberPerService)
URIs per 30 mins.
+ ConcurrentHashMap<String, ArrayBlockingQueue<String>> svrHttpUris =
+ cachedHttpUris.computeIfAbsent(serviceName, _ -> new
ConcurrentHashMap<>());
+
+ // Only cache first N (determined by maxHttpUrisNumberPerService)
URIs per 30 mins.
if (svrHttpUris.size() < maxHttpUrisNumberPerService) {
if (formattedName._2()) {
+ // Algorithm side should not return a pattern that has no
{var} in it else this
+ // code may accidentally retreive the size 1 queue created
by unformatted endpoint
// The queue size is 10, which means only cache the first
10 formatted names.
- final ArrayBlockingQueue<String> formattedURIs =
svrHttpUris.putIfAbsent(
- formattedName._1(), new ArrayBlockingQueue<>(10));
+ ArrayBlockingQueue<String> formattedURIs =
svrHttpUris.computeIfAbsent(
+ formattedName._1(), _ -> new
ArrayBlockingQueue<>(10));
if (formattedURIs.size() < 10) {
// Try to push the raw URI as a candidate of formatted
name.
formattedURIs.offer(endpointName);
}
} else {
- svrHttpUris.putIfAbsent(
- formattedName._1(), new ArrayBlockingQueue<>(0));
+ svrHttpUris.computeIfAbsent(endpointName, _ -> new
ArrayBlockingQueue<>(1));
}
-
}
}