001/** 002 * 003 * Licensed to the Apache Software Foundation (ASF) under one 004 * or more contributor license agreements. See the NOTICE file 005 * distributed with this work for additional information 006 * regarding copyright ownership. The ASF licenses this file 007 * to you under the Apache License, Version 2.0 (the 008 * "License"); you may not use this file except in compliance 009 * with the License. You may obtain a copy of the License at 010 * 011 * http://www.apache.org/licenses/LICENSE-2.0 012 * 013 * Unless required by applicable law or agreed to in writing, software 014 * distributed under the License is distributed on an "AS IS" BASIS, 015 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 016 * See the License for the specific language governing permissions and 017 * limitations under the License. 018 */ 019 020package org.apache.hadoop.hbase.ipc; 021 022import java.util.HashMap; 023import java.util.Locale; 024 025import org.apache.yetus.audience.InterfaceAudience; 026 027@InterfaceAudience.Private 028public class MetricsHBaseServerSourceFactoryImpl extends MetricsHBaseServerSourceFactory { 029 private enum SourceStorage { 030 INSTANCE; 031 HashMap<String, MetricsHBaseServerSource> sources = new HashMap<>(); 032 } 033 034 @Override 035 public MetricsHBaseServerSource create(String serverName, MetricsHBaseServerWrapper wrapper) { 036 return getSource(serverName, wrapper); 037 } 038 039 private static synchronized MetricsHBaseServerSource getSource(String serverName, 040 MetricsHBaseServerWrapper wrap) { 041 String context = createContextName(serverName); 042 MetricsHBaseServerSource source = SourceStorage.INSTANCE.sources.get(context); 043 044 if (source == null) { 045 //Create the source. 046 source = new MetricsHBaseServerSourceImpl( 047 context, 048 METRICS_DESCRIPTION, 049 context.toLowerCase(Locale.ROOT), 050 context + METRICS_JMX_CONTEXT_SUFFIX, wrap); 051 052 //Store back in storage 053 SourceStorage.INSTANCE.sources.put(context, source); 054 } 055 056 return source; 057 058 } 059 060}