This is an automated email from the ASF dual-hosted git repository.

jinmeiliao pushed a commit to branch support/1.12
in repository https://gitbox.apache.org/repos/asf/geode.git


The following commit(s) were added to refs/heads/support/1.12 by this push:
     new 3117c2e  GEODE-8091: fix AuthenticationRequiredException when starting 
a locat… (#5071)
3117c2e is described below

commit 3117c2e38d8347d1392c22e8fd9e61d0b0bffd3e
Author: Jinmei Liao <[email protected]>
AuthorDate: Mon May 11 16:05:14 2020 -0700

    GEODE-8091: fix AuthenticationRequiredException when starting a locat… 
(#5071)
---
 .../LoadClusterConfigFromDirIntegrationTest.java   | 73 ++++++++++++++++++++++
 .../InternalConfigurationPersistenceService.java   | 13 +++-
 2 files changed, 84 insertions(+), 2 deletions(-)

diff --git 
a/geode-core/src/integrationTest/java/org/apache/geode/distributed/LoadClusterConfigFromDirIntegrationTest.java
 
b/geode-core/src/integrationTest/java/org/apache/geode/distributed/LoadClusterConfigFromDirIntegrationTest.java
new file mode 100644
index 0000000..5b44b4d
--- /dev/null
+++ 
b/geode-core/src/integrationTest/java/org/apache/geode/distributed/LoadClusterConfigFromDirIntegrationTest.java
@@ -0,0 +1,73 @@
+/*
+ * 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.geode.distributed;
+
+import static org.assertj.core.api.Assertions.assertThat;
+
+import java.io.File;
+import java.io.IOException;
+import java.util.Collection;
+
+import org.apache.commons.io.FileUtils;
+import org.junit.After;
+import org.junit.Before;
+import org.junit.Rule;
+import org.junit.Test;
+
+import 
org.apache.geode.distributed.internal.InternalConfigurationPersistenceService;
+import org.apache.geode.examples.SimpleSecurityManager;
+import org.apache.geode.management.configuration.Deployment;
+import org.apache.geode.management.internal.configuration.domain.Configuration;
+import org.apache.geode.test.compiler.JarBuilder;
+import org.apache.geode.test.junit.rules.LocatorStarterRule;
+
+public class LoadClusterConfigFromDirIntegrationTest {
+  @Rule
+  public LocatorStarterRule locator = new LocatorStarterRule();
+
+  private File clusterConfigDir;
+
+  @Before
+  public void before() throws IOException {
+    clusterConfigDir = new File(locator.getWorkingDir(), "cluster_config");
+    File groupDir = new File(clusterConfigDir, "cluster");
+    groupDir.mkdirs();
+    File jarFile = new File(groupDir, "test.jar");
+    JarBuilder jarBuilder = new JarBuilder();
+    jarBuilder.buildJarFromClassNames(jarFile, "TestFunction");
+  }
+
+  @Test
+  public void canStartWithDeployedJarInClusterConfig() {
+    locator.withSecurityManager(SimpleSecurityManager.class)
+        .withProperty("load-cluster-configuration-from-dir", "true")
+        .startLocator();
+
+    InternalConfigurationPersistenceService ccService =
+        locator.getLocator().getConfigurationPersistenceService();
+    Configuration config = ccService.getConfiguration("cluster");
+    Collection<Deployment> deployments = config.getDeployments();
+    assertThat(deployments).hasSize(1);
+    Deployment deployment = deployments.iterator().next();
+    assertThat(deployment.getFileName()).isEqualTo("test.jar");
+    assertThat(deployment.getDeployedBy()).isNull();
+  }
+
+  @After
+  public void after() {
+    FileUtils.deleteQuietly(clusterConfigDir);
+  }
+}
diff --git 
a/geode-core/src/main/java/org/apache/geode/distributed/internal/InternalConfigurationPersistenceService.java
 
b/geode-core/src/main/java/org/apache/geode/distributed/internal/InternalConfigurationPersistenceService.java
index a6d4e23..8a2c1d9 100644
--- 
a/geode-core/src/main/java/org/apache/geode/distributed/internal/InternalConfigurationPersistenceService.java
+++ 
b/geode-core/src/main/java/org/apache/geode/distributed/internal/InternalConfigurationPersistenceService.java
@@ -88,6 +88,7 @@ import 
org.apache.geode.management.internal.configuration.domain.XmlEntity;
 import 
org.apache.geode.management.internal.configuration.messages.ConfigurationResponse;
 import 
org.apache.geode.management.internal.configuration.messages.SharedConfigurationStatusResponse;
 import org.apache.geode.management.internal.configuration.utils.XmlUtils;
+import org.apache.geode.security.AuthenticationRequiredException;
 
 public class InternalConfigurationPersistenceService implements 
ConfigurationPersistenceService {
   private static final Logger logger = LogService.getLogger();
@@ -849,8 +850,16 @@ public class InternalConfigurationPersistenceService 
implements ConfigurationPer
     return configuration;
   }
 
-  private String getDeployedBy() {
-    Subject subject = cache.getSecurityService().getSubject();
+  String getDeployedBy() {
+    Subject subject = null;
+    try {
+      subject = cache.getSecurityService().getSubject();
+    } catch (AuthenticationRequiredException e) {
+      // ignored. No user logged in for the deployment
+      // this would happen for offline commands like "start locator" and 
loading the cluster config
+      // from a directory
+      logger.debug("getDeployedBy: no user information is found.", 
e.getMessage());
+    }
     return subject == null ? null : subject.getPrincipal().toString();
   }
 

Reply via email to