Index: src/contrib/indexed/src/java/org/apache/hadoop/hbase/regionserver/IdxRegionMBeanImpl.java =================================================================== --- src/contrib/indexed/src/java/org/apache/hadoop/hbase/regionserver/IdxRegionMBeanImpl.java (revision 30462eaf986941e753c886b1206e6817391d8abe) +++ src/contrib/indexed/src/java/org/apache/hadoop/hbase/regionserver/IdxRegionMBeanImpl.java Tue Feb 09 18:19:06 EST 2010 @@ -83,8 +83,11 @@ * * @param regionInfo the region info to create the object name from. * @return an valid object name. + * @throws IllegalStateException if an error occurs while generating the + * object name */ - static ObjectName generateObjectName(HRegionInfo regionInfo) { + static ObjectName generateObjectName(HRegionInfo regionInfo) + throws IllegalStateException{ StringBuilder builder = new StringBuilder(IdxRegionMBeanImpl.class.getPackage().getName()); builder.append(':'); @@ -99,14 +102,14 @@ if (regionInfo.getStartKey() != null && regionInfo.getStartKey().length > 0) { builder.append("startKey="); - builder.append(Bytes.toString(regionInfo.getStartKey())); + builder.append(Bytes.toStringBinary(regionInfo.getStartKey())); builder.append(','); } if (regionInfo.getEndKey() != null && regionInfo.getEndKey().length > 0) { builder.append("endKey="); - builder.append(Bytes.toString(regionInfo.getEndKey())); + builder.append(Bytes.toStringBinary(regionInfo.getEndKey())); builder.append(','); } @@ -114,8 +117,10 @@ try { return ObjectName.getInstance(builder.toString()); } catch (MalformedObjectNameException e) { - throw new IllegalStateException("Failed to create a legal object name", - e); + throw new IllegalStateException("Failed to create a legal object name " + + "for JMX console. Generated name was [" + builder.toString() + "]", + e + ); } } Index: src/contrib/indexed/src/test/org/apache/hadoop/hbase/regionserver/TestIdxRegionMBeanImpl.java =================================================================== --- src/contrib/indexed/src/test/org/apache/hadoop/hbase/regionserver/TestIdxRegionMBeanImpl.java Tue Feb 09 18:20:07 EST 2010 +++ src/contrib/indexed/src/test/org/apache/hadoop/hbase/regionserver/TestIdxRegionMBeanImpl.java Tue Feb 09 18:20:07 EST 2010 @@ -0,0 +1,55 @@ +/* + * Copyright 2010 The Apache Software Foundation + * + * 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.regionserver; + +import junit.framework.TestCase; +import junit.framework.Assert; +import org.apache.hadoop.hbase.util.Pair; +import org.apache.hadoop.hbase.util.Bytes; +import org.apache.hadoop.hbase.regionserver.idx.support.sets.IntSet; +//import org.apache.hadoop.hbase.regionserver.idx.support.sets.BitSet; +import org.apache.hadoop.hbase.regionserver.idx.support.sets.IntSetBuilder; +import org.apache.hadoop.hbase.client.idx.exp.Expression; +import org.apache.hadoop.hbase.client.idx.exp.Comparison; +import org.apache.hadoop.hbase.HRegionInfo; +import org.apache.hadoop.hbase.HTableDescriptor; +import org.easymock.EasyMock; + +import java.util.Map; +import java.util.HashMap; + +/** + * Tests the {@link org.apache.hadoop.hbase.regionserver.IdxRegionMBeanImpl} class. + */ +public class TestIdxRegionMBeanImpl extends TestCase { + /** + * Ensures that the special bytes potentially contained in the start and end + * rows are encoded. + */ + public void testGenerateObjectNameWithInvalidValue() { + HRegionInfo info = new HRegionInfo( + new HTableDescriptor("foo"), + new byte[] { '"' }, + new byte[] { 0 } + ); + IdxRegionMBeanImpl.generateObjectName(info); + } +} \ No newline at end of file Index: src/contrib/indexed/src/java/org/apache/hadoop/hbase/regionserver/IdxRegion.java =================================================================== --- src/contrib/indexed/src/java/org/apache/hadoop/hbase/regionserver/IdxRegion.java (revision 30462eaf986941e753c886b1206e6817391d8abe) +++ src/contrib/indexed/src/java/org/apache/hadoop/hbase/regionserver/IdxRegion.java Tue Feb 09 17:16:55 EST 2010 @@ -37,6 +37,7 @@ import org.apache.hadoop.metrics.util.MBeanUtil; import org.apache.hadoop.util.Progressable; +import javax.management.ObjectName; import java.io.IOException; import java.util.ArrayList; import java.util.Arrays;