Return-Path: X-Original-To: apmail-hadoop-common-dev-archive@www.apache.org Delivered-To: apmail-hadoop-common-dev-archive@www.apache.org Received: from mail.apache.org (hermes.apache.org [140.211.11.3]) by minotaur.apache.org (Postfix) with SMTP id 9CE7DDFA2 for ; Sun, 25 Nov 2012 20:35:01 +0000 (UTC) Received: (qmail 91392 invoked by uid 500); 25 Nov 2012 20:34:59 -0000 Delivered-To: apmail-hadoop-common-dev-archive@hadoop.apache.org Received: (qmail 91251 invoked by uid 500); 25 Nov 2012 20:34:58 -0000 Mailing-List: contact common-dev-help@hadoop.apache.org; run by ezmlm Precedence: bulk List-Help: List-Unsubscribe: List-Post: List-Id: Reply-To: common-dev@hadoop.apache.org Delivered-To: mailing list common-dev@hadoop.apache.org Received: (qmail 90992 invoked by uid 99); 25 Nov 2012 20:34:58 -0000 Received: from arcas.apache.org (HELO arcas.apache.org) (140.211.11.28) by apache.org (qpsmtpd/0.29) with ESMTP; Sun, 25 Nov 2012 20:34:58 +0000 Date: Sun, 25 Nov 2012 20:34:58 +0000 (UTC) From: "Mostafa Elhemali (JIRA)" To: common-dev@hadoop.apache.org Message-ID: <332134880.21535.1353875698720.JavaMail.jiratomcat@arcas> Subject: [jira] [Created] (HADOOP-9090) Refactor MetricsSystemImpl to allow for an on-demand publish system MIME-Version: 1.0 Content-Type: text/plain; charset=utf-8 Content-Transfer-Encoding: 7bit X-JIRA-FingerPrint: 30527f35849b9dde25b450d4833f0394 Mostafa Elhemali created HADOOP-9090: ---------------------------------------- Summary: Refactor MetricsSystemImpl to allow for an on-demand publish system Key: HADOOP-9090 URL: https://issues.apache.org/jira/browse/HADOOP-9090 Project: Hadoop Common Issue Type: New Feature Components: metrics Reporter: Mostafa Elhemali Priority: Minor Attachments: HADOOP-9090.patch We have a need to publish metrics out of some short-living processes, which is not really well-suited to the current metrics system implementation which periodically publishes metrics asynchronously (a behavior that works great for long-living processes). Of course I could write my own metrics system, but it seems like such a waste to rewrite all the awesome code currently in the MetricsSystemImpl and supporting classes. The way I'm proposing to solve this is to: 1. Refactor the MetricsSystemImpl class into an abstract base MetricsSystemImpl class (common configuration and other code) and a concrete PeriodicPublishMetricsSystemImpl class (timer thread). 2. Refactor the MetricsSinkAdapter class into an abstract base MetricsSinkAdapter class (common configuration and other code) and a concrete AsyncMetricsSinkAdapter class (asynchronous publishing using the SinkQueue). 3. Derive a new simple class OnDemandPublishMetricsSystemImpl from MetricsSystemImpl, that just exposes a synchronous publish() method to do all the work. 4. Derive a SyncMetricsSinkAdapter class from MetricsSinkAdapter to just synchronously push metrics to the underlying sink. Does that sound reasonable? I'll attach the patch with all this coded up and simple tests (could use some polish I guess, but wanted to get everyone's opinion first). Notice that this is somewhat of a breaking change since MetricsSystemImpl is public (although it's marked with InterfaceAudience.Private); if the breaking change is a problem I could just rename the refactored classes so that PeriodicPublishMetricsSystemImpl is still called MetricsSystemImpl (and MetricsSystemImpl -> BaseMetricsSystemImpl). -- This message is automatically generated by JIRA. If you think it was sent incorrectly, please contact your JIRA administrators For more information on JIRA, see: http://www.atlassian.com/software/jira