Return-Path: X-Original-To: apmail-hbase-commits-archive@www.apache.org Delivered-To: apmail-hbase-commits-archive@www.apache.org Received: from mail.apache.org (hermes.apache.org [140.211.11.3]) by minotaur.apache.org (Postfix) with SMTP id B561DE801 for ; Sat, 26 Jan 2013 00:21:05 +0000 (UTC) Received: (qmail 45925 invoked by uid 500); 26 Jan 2013 00:21:05 -0000 Delivered-To: apmail-hbase-commits-archive@hbase.apache.org Received: (qmail 45864 invoked by uid 500); 26 Jan 2013 00:21:05 -0000 Mailing-List: contact commits-help@hbase.apache.org; run by ezmlm Precedence: bulk List-Help: List-Unsubscribe: List-Post: List-Id: Reply-To: dev@hbase.apache.org Delivered-To: mailing list commits@hbase.apache.org Received: (qmail 45856 invoked by uid 99); 26 Jan 2013 00:21:05 -0000 Received: from athena.apache.org (HELO athena.apache.org) (140.211.11.136) by apache.org (qpsmtpd/0.29) with ESMTP; Sat, 26 Jan 2013 00:21:05 +0000 X-ASF-Spam-Status: No, hits=-2000.0 required=5.0 tests=ALL_TRUSTED X-Spam-Check-By: apache.org Received: from [140.211.11.4] (HELO eris.apache.org) (140.211.11.4) by apache.org (qpsmtpd/0.29) with ESMTP; Sat, 26 Jan 2013 00:21:04 +0000 Received: from eris.apache.org (localhost [127.0.0.1]) by eris.apache.org (Postfix) with ESMTP id 4518C2388A3D; Sat, 26 Jan 2013 00:20:45 +0000 (UTC) Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit Subject: svn commit: r1438789 - in /hbase/trunk/hbase-server/src: main/java/org/apache/hadoop/hbase/HTableDescriptor.java test/java/org/apache/hadoop/hbase/TestHTableDescriptor.java Date: Sat, 26 Jan 2013 00:20:45 -0000 To: commits@hbase.apache.org From: apurtell@apache.org X-Mailer: svnmailer-1.0.8-patched Message-Id: <20130126002045.4518C2388A3D@eris.apache.org> X-Virus-Checked: Checked by ClamAV on apache.org Author: apurtell Date: Sat Jan 26 00:20:44 2013 New Revision: 1438789 URL: http://svn.apache.org/viewvc?rev=1438789&view=rev Log: HBASE-7654. Add List getCoprocessors() to HTableDescriptor (Jean-Marc Spaggiari) Modified: hbase/trunk/hbase-server/src/main/java/org/apache/hadoop/hbase/HTableDescriptor.java hbase/trunk/hbase-server/src/test/java/org/apache/hadoop/hbase/TestHTableDescriptor.java Modified: hbase/trunk/hbase-server/src/main/java/org/apache/hadoop/hbase/HTableDescriptor.java URL: http://svn.apache.org/viewvc/hbase/trunk/hbase-server/src/main/java/org/apache/hadoop/hbase/HTableDescriptor.java?rev=1438789&r1=1438788&r2=1438789&view=diff ============================================================================== --- hbase/trunk/hbase-server/src/main/java/org/apache/hadoop/hbase/HTableDescriptor.java (original) +++ hbase/trunk/hbase-server/src/main/java/org/apache/hadoop/hbase/HTableDescriptor.java Sat Jan 26 00:20:44 2013 @@ -21,6 +21,7 @@ package org.apache.hadoop.hbase; import java.io.DataInput; import java.io.DataOutput; import java.io.IOException; +import java.util.ArrayList; import java.util.Collection; import java.util.Collections; import java.util.HashMap; @@ -1158,10 +1159,10 @@ public class HTableDescriptor implements setValue(key, value); } - + /** * Check if the table has an attached co-processor represented by the name className - * + * * @param className - Class name of the co-processor * @return true of the table has a co-processor className */ @@ -1192,6 +1193,30 @@ public class HTableDescriptor implements } /** + * Return the list of attached co-processor represented by their name className + * + * @return The list of co-processors classNames + */ + public List getCoprocessors() { + List result = new ArrayList(); + Matcher keyMatcher; + Matcher valueMatcher; + for (Map.Entry e : this.values.entrySet()) { + keyMatcher = HConstants.CP_HTD_ATTR_KEY_PATTERN.matcher(Bytes.toString(e.getKey().get())); + if (!keyMatcher.matches()) { + continue; + } + valueMatcher = HConstants.CP_HTD_ATTR_VALUE_PATTERN.matcher(Bytes + .toString(e.getValue().get())); + if (!valueMatcher.matches()) { + continue; + } + result.add(valueMatcher.group(2).trim()); // classname is the 2nd field + } + return result; + } + + /** * Remove a coprocessor from those set on the table * @param className Class name of the co-processor */ Modified: hbase/trunk/hbase-server/src/test/java/org/apache/hadoop/hbase/TestHTableDescriptor.java URL: http://svn.apache.org/viewvc/hbase/trunk/hbase-server/src/test/java/org/apache/hadoop/hbase/TestHTableDescriptor.java?rev=1438789&r1=1438788&r2=1438789&view=diff ============================================================================== --- hbase/trunk/hbase-server/src/test/java/org/apache/hadoop/hbase/TestHTableDescriptor.java (original) +++ hbase/trunk/hbase-server/src/test/java/org/apache/hadoop/hbase/TestHTableDescriptor.java Sat Jan 26 00:20:44 2013 @@ -24,6 +24,7 @@ import static org.junit.Assert.assertTru import java.io.IOException; import org.apache.hadoop.hbase.coprocessor.BaseRegionObserver; +import org.apache.hadoop.hbase.coprocessor.SampleRegionWALObserver; import org.junit.Test; import org.junit.experimental.categories.Category; @@ -65,6 +66,43 @@ public class TestHTableDescriptor { } /** + * Test cps in the table description + * @throws Exception + */ + @Test + public void testSetListRemoveCP() throws Exception { + HTableDescriptor desc = new HTableDescriptor("testGetSetRemoveCP"); + // simple CP + String className1 = BaseRegionObserver.class.getName(); + String className2 = SampleRegionWALObserver.class.getName(); + // Check that any coprocessor is present. + assertTrue(desc.getCoprocessors().size() == 0); + + // Add the 1 coprocessor and check if present. + desc.addCoprocessor(className1); + assertTrue(desc.getCoprocessors().size() == 1); + assertTrue(desc.getCoprocessors().contains(className1)); + + // Add the 2nd coprocessor and check if present. + // remove it and check that it is gone + desc.addCoprocessor(className2); + assertTrue(desc.getCoprocessors().size() == 2); + assertTrue(desc.getCoprocessors().contains(className2)); + + // Remove one and check + desc.removeCoprocessor(className1); + assertTrue(desc.getCoprocessors().size() == 1); + assertFalse(desc.getCoprocessors().contains(className1)); + assertTrue(desc.getCoprocessors().contains(className2)); + + // Remove the last and check + desc.removeCoprocessor(className2); + assertTrue(desc.getCoprocessors().size() == 0); + assertFalse(desc.getCoprocessors().contains(className1)); + assertFalse(desc.getCoprocessors().contains(className2)); + } + + /** * Test that we add and remove strings from settings properly. * @throws Exception */