haridsv commented on code in PR #6623:
URL: https://github.com/apache/hbase/pull/6623#discussion_r2015946229


##########
hbase-client/src/main/java/org/apache/hadoop/hbase/client/QueryMetrics.java:
##########
@@ -0,0 +1,33 @@
+/*
+ * 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.hadoop.hbase.client;
+
+import org.apache.yetus.audience.InterfaceAudience;
+
[email protected]
+public class QueryMetrics {

Review Comment:
   `ServerSideScanMetrics` serves 2 purposes, 1) provides a generic container 
interface with a map of metrics counters that is extensible, 2) define a 
concrete interface (what I called as schema) for specific metrics. You can 
actually see the extensibility aspect of it in `ScanMetrics` as it extends 
`ServerSideScanMetrics` to extend the schema with a few more metrics. If you 
split the functionality of (1) and push that into a new base class 
(ScanMetricsBase or even MetricsBase, but protobuf already uses the name 
ScanMetrics), in theory, the new `QueryMetrics` class can extend it and define 
the new metric, something like below:
   
   ```
   public class QueryMetrics extends ScanMetricsBase {
     public final AtomicLong blockBytesScanned = 
createCounter(BLOCK_BYTES_SCANNED_METRIC_NAME);
   }
   ```
   
   One immediate advantage is that you don't need any new protobuf definitions, 
and the current converter methods (e.g., ProtobufUtils.toScanMetrics) can be 
refactored to take the concrete class name or even the object.
   
   The other advantage is that the new code will follow the existing pattern 
instead of introducing a new one.
   



-- 
This is an automated message from the Apache Git Service.
To respond to the message, please log on to GitHub and use the
URL above to go to the specific comment.

To unsubscribe, e-mail: [email protected]

For queries about this service, please contact Infrastructure at:
[email protected]

Reply via email to