Repository: hbase
Updated Branches:
  refs/heads/branch-2 78ff501ad -> fb6625fdd


HBASE-19508 ReadOnlyConfiguration throws exception if any Configuration in 
current context calls addDefautlResource

Signed-off-by: Peter Somogyi <psomo...@cloudera.com>


Project: http://git-wip-us.apache.org/repos/asf/hbase/repo
Commit: http://git-wip-us.apache.org/repos/asf/hbase/commit/b475f15f
Tree: http://git-wip-us.apache.org/repos/asf/hbase/tree/b475f15f
Diff: http://git-wip-us.apache.org/repos/asf/hbase/diff/b475f15f

Branch: refs/heads/branch-2
Commit: b475f15f25164d002cc4770ca0e14cf60728452b
Parents: 78ff501
Author: Michael Stack <st...@apache.org>
Authored: Wed Dec 13 09:49:42 2017 -0800
Committer: Michael Stack <st...@apache.org>
Committed: Wed Dec 13 10:29:34 2017 -0800

----------------------------------------------------------------------
 .../coprocessor/ReadOnlyConfiguration.java      |  6 ++-
 .../coprocessor/TestReadOnlyConfiguration.java  | 45 ++++++++++++++++++++
 2 files changed, 50 insertions(+), 1 deletion(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/hbase/blob/b475f15f/hbase-server/src/main/java/org/apache/hadoop/hbase/coprocessor/ReadOnlyConfiguration.java
----------------------------------------------------------------------
diff --git 
a/hbase-server/src/main/java/org/apache/hadoop/hbase/coprocessor/ReadOnlyConfiguration.java
 
b/hbase-server/src/main/java/org/apache/hadoop/hbase/coprocessor/ReadOnlyConfiguration.java
index 7f2ddc8..b073ada 100644
--- 
a/hbase-server/src/main/java/org/apache/hadoop/hbase/coprocessor/ReadOnlyConfiguration.java
+++ 
b/hbase-server/src/main/java/org/apache/hadoop/hbase/coprocessor/ReadOnlyConfiguration.java
@@ -88,7 +88,11 @@ class ReadOnlyConfiguration extends Configuration {
 
   @Override
   public void reloadConfiguration() {
-    throw new UnsupportedOperationException("Read-only Configuration");
+    // This is a write operation. We need to allow it though because if any 
Configuration in
+    // current JVM context calls addDefaultResource, this forces a reload of 
all Configurations
+    // (all Configurations are 'registered' by the default constructor. Rather 
than turn
+    // somersaults, let this 'write' operation through.
+    this.conf.reloadConfiguration();
   }
 
   @Override

http://git-wip-us.apache.org/repos/asf/hbase/blob/b475f15f/hbase-server/src/test/java/org/apache/hadoop/hbase/coprocessor/TestReadOnlyConfiguration.java
----------------------------------------------------------------------
diff --git 
a/hbase-server/src/test/java/org/apache/hadoop/hbase/coprocessor/TestReadOnlyConfiguration.java
 
b/hbase-server/src/test/java/org/apache/hadoop/hbase/coprocessor/TestReadOnlyConfiguration.java
new file mode 100644
index 0000000..fb6240d
--- /dev/null
+++ 
b/hbase-server/src/test/java/org/apache/hadoop/hbase/coprocessor/TestReadOnlyConfiguration.java
@@ -0,0 +1,45 @@
+/*
+ * Copyright 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.coprocessor;
+
+import org.apache.hadoop.conf.Configuration;
+import org.apache.hadoop.hbase.CategoryBasedTimeout;
+import org.apache.hadoop.hbase.testclassification.RegionServerTests;
+import org.apache.hadoop.hbase.testclassification.SmallTests;
+import org.junit.Rule;
+import org.junit.Test;
+import org.junit.experimental.categories.Category;
+import org.junit.rules.TestName;
+import org.junit.rules.TestRule;
+
+@Category({RegionServerTests.class, SmallTests.class})
+public class TestReadOnlyConfiguration {
+  @Rule public TestName name = new TestName();
+  @Rule public final TestRule timeout = CategoryBasedTimeout.builder().
+      withTimeout(this.getClass()).
+      withLookingForStuckThread(true).
+      build();
+
+  @Test
+  public void testAddDefaultResource() {
+    Configuration configuration = new Configuration();
+    Configuration readOnlyConf = new ReadOnlyConfiguration(configuration);
+    configuration.addDefaultResource("abc.xml");
+  }
+}

Reply via email to