This is an automated email from the ASF dual-hosted git repository.

songxiaosheng pushed a commit to branch 3.2
in repository https://gitbox.apache.org/repos/asf/dubbo.git


The following commit(s) were added to refs/heads/3.2 by this push:
     new e93c5cf777 RequestEvent optimization (#12655)
e93c5cf777 is described below

commit e93c5cf777af18a07d0f6979f52735cc5a67fdc3
Author: PiteXChen <44110731+rappe...@users.noreply.github.com>
AuthorDate: Sun Jul 30 09:44:52 2023 +0800

    RequestEvent optimization (#12655)
    
    * RequestEvent optimization
    
    * RequestEvent optimization
    
    * RequestEvent optimization(#12655)
    
    * RequestEvent optimization(#12655)
    
    * fix conflict
    
    * code optimize
    
    * code optimize
    
    * optimize
    
    ---------
    
    Co-authored-by: songxiaosheng <songxiaosh...@elastic.link>
---
 .../filter/support/MetricsClusterFilter.java       |  4 +-
 .../org/apache/dubbo/metrics/MetricsConstants.java |  2 +-
 .../metrics/collector/DefaultMetricsCollector.java |  3 +-
 .../dubbo/metrics/event/DefaultSubDispatcher.java  |  7 ++-
 .../dubbo/metrics/event/RequestBeforeEvent.java    | 51 ----------------------
 .../apache/dubbo/metrics/event/RequestEvent.java   | 23 +++++++++-
 .../collector/AggregateMetricsCollectorTest.java   |  6 +--
 .../metrics/collector/DefaultCollectorTest.java    |  4 +-
 8 files changed, 33 insertions(+), 67 deletions(-)

diff --git 
a/dubbo-cluster/src/main/java/org/apache/dubbo/rpc/cluster/filter/support/MetricsClusterFilter.java
 
b/dubbo-cluster/src/main/java/org/apache/dubbo/rpc/cluster/filter/support/MetricsClusterFilter.java
index 03c9018517..5634202384 100644
--- 
a/dubbo-cluster/src/main/java/org/apache/dubbo/rpc/cluster/filter/support/MetricsClusterFilter.java
+++ 
b/dubbo-cluster/src/main/java/org/apache/dubbo/rpc/cluster/filter/support/MetricsClusterFilter.java
@@ -22,7 +22,7 @@ import org.apache.dubbo.common.extension.Activate;
 import org.apache.dubbo.metrics.collector.DefaultMetricsCollector;
 import org.apache.dubbo.metrics.event.MetricsDispatcher;
 import org.apache.dubbo.metrics.event.MetricsEventBus;
-import org.apache.dubbo.metrics.event.RequestBeforeEvent;
+import org.apache.dubbo.metrics.event.RequestEvent;
 import org.apache.dubbo.rpc.BaseFilter;
 import org.apache.dubbo.rpc.Invocation;
 import org.apache.dubbo.rpc.Invoker;
@@ -73,7 +73,7 @@ public class MetricsClusterFilter implements ClusterFilter, 
BaseFilter.Listener,
         if (t instanceof RpcException) {
             RpcException e = (RpcException) t;
             if (e.isForbidden()) {
-                
MetricsEventBus.publish(RequestBeforeEvent.toEvent(applicationModel, appName, 
metricsDispatcher, invocation, CONSUMER_SIDE));
+                
MetricsEventBus.publish(RequestEvent.toRequestErrorEvent(applicationModel, 
appName, metricsDispatcher, invocation, CONSUMER_SIDE, e.getCode()));
             }
         }
     }
diff --git 
a/dubbo-metrics/dubbo-metrics-api/src/main/java/org/apache/dubbo/metrics/MetricsConstants.java
 
b/dubbo-metrics/dubbo-metrics-api/src/main/java/org/apache/dubbo/metrics/MetricsConstants.java
index a99e4c6657..232de1fa59 100644
--- 
a/dubbo-metrics/dubbo-metrics-api/src/main/java/org/apache/dubbo/metrics/MetricsConstants.java
+++ 
b/dubbo-metrics/dubbo-metrics-api/src/main/java/org/apache/dubbo/metrics/MetricsConstants.java
@@ -22,8 +22,8 @@ public interface MetricsConstants {
     String INVOCATION = "metric_filter_invocation";
     String METHOD_METRICS = "metric_filter_method_metrics";
     String INVOCATION_METRICS_COUNTER = "metric_filter_invocation_counter";
-
     String INVOCATION_SIDE = "metric_filter_side";
+    String INVOCATION_REQUEST_ERROR  = "metric_request_error";
 
     String ATTACHMENT_KEY_SERVICE = "serviceKey";
     String ATTACHMENT_KEY_SIZE = "size";
diff --git 
a/dubbo-metrics/dubbo-metrics-default/src/main/java/org/apache/dubbo/metrics/collector/DefaultMetricsCollector.java
 
b/dubbo-metrics/dubbo-metrics-default/src/main/java/org/apache/dubbo/metrics/collector/DefaultMetricsCollector.java
index c4c3ef9ec0..4581141771 100644
--- 
a/dubbo-metrics/dubbo-metrics-default/src/main/java/org/apache/dubbo/metrics/collector/DefaultMetricsCollector.java
+++ 
b/dubbo-metrics/dubbo-metrics-default/src/main/java/org/apache/dubbo/metrics/collector/DefaultMetricsCollector.java
@@ -29,7 +29,6 @@ import org.apache.dubbo.metrics.data.MethodStatComposite;
 import org.apache.dubbo.metrics.data.RtStatComposite;
 import org.apache.dubbo.metrics.event.DefaultSubDispatcher;
 import org.apache.dubbo.metrics.event.MetricsEvent;
-import org.apache.dubbo.metrics.event.RequestBeforeEvent;
 import org.apache.dubbo.metrics.event.RequestEvent;
 import org.apache.dubbo.metrics.model.ApplicationMetric;
 import org.apache.dubbo.metrics.model.MetricsCategory;
@@ -138,7 +137,7 @@ public class DefaultMetricsCollector extends 
CombMetricsCollector<RequestEvent>
 
     @Override
     public boolean isSupport(MetricsEvent event) {
-        return event instanceof RequestEvent || event instanceof 
RequestBeforeEvent;
+        return event instanceof RequestEvent;
     }
 
     public SimpleMetricsCountSampler<String, MetricsEvent.Type, 
ApplicationMetric> applicationSampler = new SimpleMetricsCountSampler<String, 
MetricsEvent.Type, ApplicationMetric>() {
diff --git 
a/dubbo-metrics/dubbo-metrics-default/src/main/java/org/apache/dubbo/metrics/event/DefaultSubDispatcher.java
 
b/dubbo-metrics/dubbo-metrics-default/src/main/java/org/apache/dubbo/metrics/event/DefaultSubDispatcher.java
index 9894c67d11..807736709b 100644
--- 
a/dubbo-metrics/dubbo-metrics-default/src/main/java/org/apache/dubbo/metrics/event/DefaultSubDispatcher.java
+++ 
b/dubbo-metrics/dubbo-metrics-default/src/main/java/org/apache/dubbo/metrics/event/DefaultSubDispatcher.java
@@ -43,17 +43,16 @@ public final class DefaultSubDispatcher extends 
SimpleMetricsEventMulticaster {
         
super.addListener(categoryOverall.getFinish().getEventFunc().apply(collector));
         
super.addListener(categoryOverall.getError().getEventFunc().apply(collector));
 
-        super.addListener(new MetricsListener<RequestBeforeEvent>() {
+        super.addListener(new MetricsListener<RequestEvent>() {
 
             @Override
             public boolean isSupport(MetricsEvent event) {
-                return event instanceof RequestBeforeEvent;
+                return event instanceof RequestEvent && ((RequestEvent) 
event).isRequestErrorEvent();
             }
 
-
             private final MetricsPlaceValue dynamicPlaceType = 
MetricsPlaceValue.of(CommonConstants.CONSUMER, MetricsLevel.METHOD);
             @Override
-            public void onEvent(RequestBeforeEvent event) {
+            public void onEvent(RequestEvent event) {
                 
MetricsSupport.increment(METRIC_REQUESTS_SERVICE_UNAVAILABLE_FAILED, 
dynamicPlaceType, (MethodMetricsCollector) collector, event);
             }
         });
diff --git 
a/dubbo-metrics/dubbo-metrics-default/src/main/java/org/apache/dubbo/metrics/event/RequestBeforeEvent.java
 
b/dubbo-metrics/dubbo-metrics-default/src/main/java/org/apache/dubbo/metrics/event/RequestBeforeEvent.java
deleted file mode 100644
index 5b7d7c64da..0000000000
--- 
a/dubbo-metrics/dubbo-metrics-default/src/main/java/org/apache/dubbo/metrics/event/RequestBeforeEvent.java
+++ /dev/null
@@ -1,51 +0,0 @@
-/*
- * 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.dubbo.metrics.event;
-
-import org.apache.dubbo.metrics.MetricsConstants;
-import org.apache.dubbo.metrics.model.MethodMetric;
-import org.apache.dubbo.metrics.model.MetricsSupport;
-import org.apache.dubbo.metrics.model.key.MetricsKey;
-import org.apache.dubbo.metrics.model.key.MetricsLevel;
-import org.apache.dubbo.metrics.model.key.TypeWrapper;
-import org.apache.dubbo.rpc.Invocation;
-import org.apache.dubbo.rpc.model.ApplicationModel;
-
-import static org.apache.dubbo.metrics.MetricsConstants.ATTACHMENT_KEY_SERVICE;
-
-/**
- * Acts on MetricsClusterFilter to monitor exceptions that occur before 
request execution
- */
-public class RequestBeforeEvent extends TimeCounterEvent {
-
-    public RequestBeforeEvent(ApplicationModel source, String appName, 
MetricsDispatcher metricsDispatcher, TypeWrapper typeWrapper) {
-        super(source, appName, metricsDispatcher, typeWrapper);
-
-    }
-
-    private static final TypeWrapper REQUEST_BEFORE_EVENT = new 
TypeWrapper(MetricsLevel.METHOD, MetricsKey.METRIC_REQUESTS);
-    public static RequestBeforeEvent toEvent(ApplicationModel 
applicationModel, String appName, MetricsDispatcher metricsDispatcher, 
Invocation invocation, String side) {
-        RequestBeforeEvent event = new RequestBeforeEvent(applicationModel, 
appName, metricsDispatcher, REQUEST_BEFORE_EVENT);
-        event.putAttachment(ATTACHMENT_KEY_SERVICE, 
MetricsSupport.getInterfaceName(invocation));
-        event.putAttachment(MetricsConstants.INVOCATION_SIDE, side);
-        event.putAttachment(MetricsConstants.INVOCATION, invocation);
-        event.putAttachment(MetricsConstants.METHOD_METRICS, new 
MethodMetric(applicationModel, invocation));
-        return event;
-    }
-
-}
diff --git 
a/dubbo-metrics/dubbo-metrics-default/src/main/java/org/apache/dubbo/metrics/event/RequestEvent.java
 
b/dubbo-metrics/dubbo-metrics-default/src/main/java/org/apache/dubbo/metrics/event/RequestEvent.java
index acb0aad159..93ad680df1 100644
--- 
a/dubbo-metrics/dubbo-metrics-default/src/main/java/org/apache/dubbo/metrics/event/RequestEvent.java
+++ 
b/dubbo-metrics/dubbo-metrics-default/src/main/java/org/apache/dubbo/metrics/event/RequestEvent.java
@@ -23,6 +23,7 @@ import 
org.apache.dubbo.metrics.collector.DefaultMetricsCollector;
 import org.apache.dubbo.metrics.exception.MetricsNeverHappenException;
 import org.apache.dubbo.metrics.model.MethodMetric;
 import org.apache.dubbo.metrics.model.MetricsSupport;
+import org.apache.dubbo.metrics.model.key.MetricsKey;
 import org.apache.dubbo.metrics.model.key.MetricsLevel;
 import org.apache.dubbo.metrics.model.key.TypeWrapper;
 import org.apache.dubbo.rpc.Invocation;
@@ -39,7 +40,8 @@ import static 
org.apache.dubbo.metrics.model.key.MetricsKey.METRIC_REQUEST_BUSIN
  * Request related events
  */
 public class RequestEvent extends TimeCounterEvent {
-    private static final TypeWrapper TYPE_WRAPPER = new 
TypeWrapper(MetricsLevel.SERVICE, METRIC_REQUESTS, METRIC_REQUESTS_SUCCEED, 
METRIC_REQUEST_BUSINESS_FAILED);
+    private static final TypeWrapper REQUEST_EVENT = new 
TypeWrapper(MetricsLevel.SERVICE, METRIC_REQUESTS, METRIC_REQUESTS_SUCCEED, 
METRIC_REQUEST_BUSINESS_FAILED);
+    private static final TypeWrapper REQUEST_ERROR_EVENT = new 
TypeWrapper(MetricsLevel.METHOD, MetricsKey.METRIC_REQUESTS);
 
     public RequestEvent(ApplicationModel applicationModel, String appName, 
MetricsDispatcher metricsDispatcher, DefaultMetricsCollector collector, 
TypeWrapper TYPE_WRAPPER) {
         super(applicationModel, appName, metricsDispatcher, TYPE_WRAPPER);
@@ -56,7 +58,7 @@ public class RequestEvent extends TimeCounterEvent {
                                               MetricsDispatcher 
metricsDispatcher, DefaultMetricsCollector collector,
                                               Invocation invocation, String 
side) {
         MethodMetric methodMetric = new MethodMetric(applicationModel, 
invocation);
-        RequestEvent requestEvent = new RequestEvent(applicationModel, 
appName, metricsDispatcher, collector, TYPE_WRAPPER);
+        RequestEvent requestEvent = new RequestEvent(applicationModel, 
appName, metricsDispatcher, collector, REQUEST_EVENT);
         requestEvent.putAttachment(MetricsConstants.INVOCATION, invocation);
         requestEvent.putAttachment(MetricsConstants.METHOD_METRICS, 
methodMetric);
         requestEvent.putAttachment(ATTACHMENT_KEY_SERVICE, 
MetricsSupport.getInterfaceName(invocation));
@@ -74,4 +76,21 @@ public class RequestEvent extends TimeCounterEvent {
         }
         super.putAttachment(METRIC_THROWABLE, ((Result) 
postResult).getException());
     }
+
+    /**
+     * Acts on MetricsClusterFilter to monitor exceptions that occur before 
request execution
+     */
+    public static RequestEvent toRequestErrorEvent(ApplicationModel 
applicationModel, String appName, MetricsDispatcher metricsDispatcher, 
Invocation invocation, String side, int code) {
+        RequestEvent event = new RequestEvent(applicationModel, appName, 
metricsDispatcher, null,  REQUEST_ERROR_EVENT);
+        event.putAttachment(ATTACHMENT_KEY_SERVICE, 
MetricsSupport.getInterfaceName(invocation));
+        event.putAttachment(MetricsConstants.INVOCATION_SIDE, side);
+        event.putAttachment(MetricsConstants.INVOCATION, invocation);
+        event.putAttachment(MetricsConstants.INVOCATION_REQUEST_ERROR, code);
+        event.putAttachment(MetricsConstants.METHOD_METRICS, new 
MethodMetric(applicationModel, invocation));
+        return event;
+    }
+
+    public boolean isRequestErrorEvent(){
+        return 
super.getAttachmentValue(MetricsConstants.INVOCATION_REQUEST_ERROR) != null;
+    }
 }
diff --git 
a/dubbo-metrics/dubbo-metrics-default/src/test/java/org/apache/dubbo/metrics/collector/AggregateMetricsCollectorTest.java
 
b/dubbo-metrics/dubbo-metrics-default/src/test/java/org/apache/dubbo/metrics/collector/AggregateMetricsCollectorTest.java
index a99be4735d..652d335ab8 100644
--- 
a/dubbo-metrics/dubbo-metrics-default/src/test/java/org/apache/dubbo/metrics/collector/AggregateMetricsCollectorTest.java
+++ 
b/dubbo-metrics/dubbo-metrics-default/src/test/java/org/apache/dubbo/metrics/collector/AggregateMetricsCollectorTest.java
@@ -31,7 +31,6 @@ import org.apache.dubbo.metrics.TestMetricsInvoker;
 import org.apache.dubbo.metrics.aggregate.TimeWindowCounter;
 import org.apache.dubbo.metrics.event.MetricsDispatcher;
 import org.apache.dubbo.metrics.event.MetricsEventBus;
-import org.apache.dubbo.metrics.event.RequestBeforeEvent;
 import org.apache.dubbo.metrics.event.RequestEvent;
 import org.apache.dubbo.metrics.filter.MetricsFilter;
 import org.apache.dubbo.metrics.listener.MetricsListener;
@@ -143,9 +142,10 @@ class AggregateMetricsCollectorTest {
     void testListener() {
         AggregateMetricsCollector metricsCollector = new 
AggregateMetricsCollector(applicationModel);
         RequestEvent event = RequestEvent.toRequestEvent(applicationModel, 
null, null, null, invocation, MetricsSupport.getSide(invocation));
-        RequestBeforeEvent beforeEvent = new 
RequestBeforeEvent(applicationModel, null, null, new 
TypeWrapper(MetricsLevel.METHOD, MetricsKey.METRIC_REQUESTS));
+        RequestEvent beforeEvent = 
RequestEvent.toRequestErrorEvent(applicationModel, null, null, invocation, 
MetricsSupport.getSide(invocation), RpcException.FORBIDDEN_EXCEPTION);
+
         Assertions.assertTrue(metricsCollector.isSupport(event));
-        Assertions.assertFalse(metricsCollector.isSupport(beforeEvent));
+        Assertions.assertTrue(metricsCollector.isSupport(beforeEvent));
     }
 
     @AfterEach
diff --git 
a/dubbo-metrics/dubbo-metrics-default/src/test/java/org/apache/dubbo/metrics/collector/DefaultCollectorTest.java
 
b/dubbo-metrics/dubbo-metrics-default/src/test/java/org/apache/dubbo/metrics/collector/DefaultCollectorTest.java
index 6113908990..450da8a7c6 100644
--- 
a/dubbo-metrics/dubbo-metrics-default/src/test/java/org/apache/dubbo/metrics/collector/DefaultCollectorTest.java
+++ 
b/dubbo-metrics/dubbo-metrics-default/src/test/java/org/apache/dubbo/metrics/collector/DefaultCollectorTest.java
@@ -22,7 +22,6 @@ import org.apache.dubbo.common.constants.CommonConstants;
 import org.apache.dubbo.config.ApplicationConfig;
 import org.apache.dubbo.metrics.TestMetricsInvoker;
 import org.apache.dubbo.metrics.event.MetricsDispatcher;
-import org.apache.dubbo.metrics.event.RequestBeforeEvent;
 import org.apache.dubbo.metrics.event.RequestEvent;
 import org.apache.dubbo.metrics.filter.MetricsFilter;
 import org.apache.dubbo.metrics.model.MetricsSupport;
@@ -114,7 +113,8 @@ class DefaultCollectorTest {
     void testListener() {
         DefaultMetricsCollector metricsCollector = new 
DefaultMetricsCollector(applicationModel);
         RequestEvent event = RequestEvent.toRequestEvent(applicationModel, 
null, null, null, invocation, MetricsSupport.getSide(invocation));
-        RequestBeforeEvent beforeEvent = new 
RequestBeforeEvent(applicationModel, null, null, new 
TypeWrapper(MetricsLevel.METHOD, MetricsKey.METRIC_REQUESTS));
+        RequestEvent beforeEvent = 
RequestEvent.toRequestErrorEvent(applicationModel, null, null, invocation, 
MetricsSupport.getSide(invocation), RpcException.FORBIDDEN_EXCEPTION);
+
         Assertions.assertTrue(metricsCollector.isSupport(event));
         Assertions.assertTrue(metricsCollector.isSupport(beforeEvent));
     }

Reply via email to