This is an automated email from the ASF dual-hosted git repository.
jinmeiliao pushed a commit to branch support/1.13
in repository https://gitbox.apache.org/repos/asf/geode.git
The following commit(s) were added to refs/heads/support/1.13 by this push:
new bf38d82 GEODE-8091: fix AuthenticationRequiredException when starting
a locat… (#5071)
bf38d82 is described below
commit bf38d827c8d72acae59a0f20bff7d050d38e2d87
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 3b12693..a69c3a9 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
@@ -85,6 +85,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();
@@ -841,8 +842,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();
}