chaoyli commented on a change in pull request #3744:
URL: https://github.com/apache/incubator-doris/pull/3744#discussion_r437151250



##########
File path: fe/src/main/java/org/apache/doris/qe/QueryDetail.java
##########
@@ -0,0 +1,114 @@
+// 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.doris.qe;
+
+public class QueryDetail {
+    public enum QueryMemState {
+        RUNNING,
+        FINISHED,
+        FAILED,
+        CANCELLED 
+    };
+
+    // When query received, FE will construct a QueryDtail  
+    // object. This object will set queryId, startTime, sql
+    // fields. As well state is be set as RUNNING. 
+    // After query finished, endTime and latency will
+    // be set and state will be updated to be FINISHED/FAILED/CANCELLED
+    // according to the query execution results.
+    // So, one query will be inserted into as a item and 
+    // be udpated upon finished. To indicate the two event,
+    // a extra field named eventTime is added.
+    private long eventTime;

Review comment:
       Every query will have two event.
   When starts a query, it will set QueryMemState as RUNNING.
   When finished, it will set QueryMemState as FINISHED/FAILED/CANCELLED 
according to query execution situation.
   QueryMonitor will collect QueryMemState starts a event time to handle this 
situation.

##########
File path: fe/src/main/java/org/apache/doris/qe/QueryDetailQueue.java
##########
@@ -0,0 +1,58 @@
+// 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.doris.qe;
+
+import com.google.common.collect.Lists;
+import com.google.common.collect.Maps;
+import java.util.List;
+import java.util.Map;
+import org.apache.doris.qe.QueryDetail;
+
+// Queue of QueryDetail.
+// It's used to collect queries for monitor.
+// The default copacity is 10000.
+public class QueryDetailQueue {
+    private static Map<String, QueryDetail> queryDetails = Maps.newHashMap();

Review comment:
       Because I first add QueryDetail to this data structure. 
   Then, I will update it when query finished.
   To find the item to updated fast, I use a map to address the problem.

##########
File path: fe/src/main/java/org/apache/doris/qe/QueryDetailQueue.java
##########
@@ -0,0 +1,58 @@
+// 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.doris.qe;
+
+import com.google.common.collect.Lists;
+import com.google.common.collect.Maps;
+import java.util.List;
+import java.util.Map;
+import org.apache.doris.qe.QueryDetail;
+
+// Queue of QueryDetail.
+// It's used to collect queries for monitor.
+// The default copacity is 10000.
+public class QueryDetailQueue {
+    private static Map<String, QueryDetail> queryDetails = Maps.newHashMap();
+    private static int queryNumber = 0;
+    private static int queryCapacity = 10000;
+
+    public static synchronized void addOrUpdateQueryDetail(QueryDetail 
queryDetail) {
+        if (queryDetails.get(queryDetail.getQueryId()) == null) {
+            if (queryNumber > queryCapacity) {

Review comment:
       I will change it to remove the prior items.

##########
File path: fe/src/main/java/org/apache/doris/qe/QueryDetailQueue.java
##########
@@ -0,0 +1,58 @@
+// 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.doris.qe;
+
+import com.google.common.collect.Lists;
+import com.google.common.collect.Maps;
+import java.util.List;
+import java.util.Map;
+import org.apache.doris.qe.QueryDetail;
+
+// Queue of QueryDetail.
+// It's used to collect queries for monitor.
+// The default copacity is 10000.
+public class QueryDetailQueue {
+    private static Map<String, QueryDetail> queryDetails = Maps.newHashMap();
+    private static int queryNumber = 0;
+    private static int queryCapacity = 10000;
+
+    public static synchronized void addOrUpdateQueryDetail(QueryDetail 
queryDetail) {
+        if (queryDetails.get(queryDetail.getQueryId()) == null) {

Review comment:
       Because I need to increment queryNumber according to the judgement.

##########
File path: fe/src/main/java/org/apache/doris/qe/QueryDetailQueue.java
##########
@@ -0,0 +1,58 @@
+// 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.doris.qe;
+
+import com.google.common.collect.Lists;
+import com.google.common.collect.Maps;
+import java.util.List;
+import java.util.Map;
+import org.apache.doris.qe.QueryDetail;
+
+// Queue of QueryDetail.
+// It's used to collect queries for monitor.
+// The default copacity is 10000.
+public class QueryDetailQueue {
+    private static Map<String, QueryDetail> queryDetails = Maps.newHashMap();
+    private static int queryNumber = 0;
+    private static int queryCapacity = 10000;
+
+    public static synchronized void addOrUpdateQueryDetail(QueryDetail 
queryDetail) {
+        if (queryDetails.get(queryDetail.getQueryId()) == null) {
+            if (queryNumber > queryCapacity) {
+                return;
+            }
+            queryNumber++;
+            queryDetails.put(queryDetail.getQueryId(), queryDetail);

Review comment:
       I will clear it in the following request to getQueryDetails().




----------------------------------------------------------------
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.

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



---------------------------------------------------------------------
To unsubscribe, e-mail: [email protected]
For additional commands, e-mail: [email protected]

Reply via email to