bbeaudreault commented on code in PR #4788: URL: https://github.com/apache/hbase/pull/4788#discussion_r1097320793
########## hbase-server/src/main/java/org/apache/hadoop/hbase/monitoring/TaskGroup.java: ########## @@ -0,0 +1,116 @@ +/* + * 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.monitoring; + +import java.util.Collection; +import java.util.Collections; +import java.util.concurrent.ConcurrentLinkedDeque; +import org.apache.yetus.audience.InterfaceAudience; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; + +/** + * The {@link TaskGroup} can be seen as a big {@link MonitoredTask}, which contains a list of sub + * monitored tasks. The monitored tasks in the group are still be managed by the + * {@link TaskMonitor}, but whether to clear/expire the monitored tasks in a task group is optional. + * Since the monitored task already has journals, which mark the phases in a task, we still also + * need a task group to monitor a big task/process because the journals in a task is serial but the + * tasks in the task group can be parallel, then we have more flexible ability to monitor the + * process. Grouping the tasks is not strictly necessary but it is cleaner for presentation to + * operators. We might want to display the tasks in a group in a list view where each task can be + * collapsed (probably by default) or expanded. + */ [email protected] +public class TaskGroup extends MonitoredTaskImpl { + private static final Logger LOG = LoggerFactory.getLogger(TaskGroup.class); + + private final ConcurrentLinkedDeque<MonitoredTask> tasks = new ConcurrentLinkedDeque<>(); + + /** Whether to be tracked(e.g. show/clear/expire) in the singleton {@link TaskMonitor} */ + private final boolean trackSubTasksInTaskMonitor; + private final MonitoredTask delegate; + + public TaskGroup(boolean trackSubTasksInTaskMonitor, String description) { + super(false, description); + this.trackSubTasksInTaskMonitor = trackSubTasksInTaskMonitor; + this.delegate = TaskMonitor.get().createStatus(description, true, true); + } + + public static TaskGroup createTaskGroup(boolean trackSubTasksInTaskMonitor, String description) { Review Comment: What do you think about moving this factory method into TaskMonitor? It seems more discoverable and better encapsulated there ########## hbase-server/src/main/java/org/apache/hadoop/hbase/monitoring/TaskMonitor.java: ########## @@ -85,14 +85,14 @@ public static synchronized TaskMonitor get() { } public MonitoredTask createStatus(String description) { - return createStatus(description, false); + return createStatus(description, true); } - public MonitoredTask createStatus(String description, boolean ignore) { - return createStatus(description, ignore, false); + public MonitoredTask createStatus(String description, boolean show) { Review Comment: Nitpick: you call this `show` here and `track` below. Can you use one name? (Track maybe better) While you are editing these methods could to also add small javadoc to explain what the param does (like you added elsewhere in TaskGroup) ########## hbase-server/src/main/java/org/apache/hadoop/hbase/monitoring/TaskGroup.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.hadoop.hbase.monitoring; + +import java.util.Collection; +import java.util.Collections; +import java.util.concurrent.ConcurrentLinkedDeque; +import org.apache.yetus.audience.InterfaceAudience; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; + +/** + * The {@link TaskGroup} can be seen as a big {@link MonitoredTask}, which contains a list of sub + * monitored tasks. The monitored tasks in the group are still be managed by the + * {@link TaskMonitor}, but whether to clear/expire the monitored tasks in a task group is optional. + * Since the monitored task already has journals, which mark the phases in a task, we still also + * need a task group to monitor a big task/process because the journals in a task is serial but the + * tasks in the task group can be parallel, then we have more flexible ability to monitor the + * process. Grouping the tasks is not strictly necessary but it is cleaner for presentation to + * operators. We might want to display the tasks in a group in a list view where each task can be + * collapsed (probably by default) or expanded. + */ [email protected] +public class TaskGroup extends MonitoredTaskImpl { + private static final Logger LOG = LoggerFactory.getLogger(TaskGroup.class); + + private final ConcurrentLinkedDeque<MonitoredTask> tasks = new ConcurrentLinkedDeque<>(); Review Comment: Ok sounds good, thanks -- 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]
