Github user revans2 commented on a diff in the pull request:
https://github.com/apache/storm/pull/2743#discussion_r199497485
--- Diff:
storm-server/src/main/java/org/apache/storm/metric/timed/TimedResource.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.storm.metric.timed;
+
+import com.codahale.metrics.Timer;
+
+public class TimedResource<T extends AutoCloseable> extends Timed<T> {
+
+ public TimedResource(T measured, Timer timer) {
+ super(measured, timer);
+ }
+
+ @Override
+ public void close() throws Exception {
+ try {
+ super.close();
+ } finally {
+ getMeasured().close();
--- End diff --
This was something I suggested. I was concerned that if `super.close()`
could throw an exception then `getMeasured.close()` which is what we are
wrapping would never be closed. This lets us know it will be called no matter
what, and if both of them throw an exception (who knows why) than the exception
from `getMeasured().close()` will mask the `super.close()` exception, but
because of java8 it will store it as a masked exception.
---