From f8ecf25c844fc258a2e8d7b531d30f06fcb436cb Mon Sep 17 00:00:00 2001 From: Ryan Baxter Date: Mon, 1 Oct 2018 14:12:43 -0400 Subject: [PATCH 1/5] Clarifying asymmetric key configuration. Fixes #903 --- docs/src/main/asciidoc/spring-cloud-config.adoc | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) diff --git a/docs/src/main/asciidoc/spring-cloud-config.adoc b/docs/src/main/asciidoc/spring-cloud-config.adoc index 2258ae94..ae7020e8 100644 --- a/docs/src/main/asciidoc/spring-cloud-config.adoc +++ b/docs/src/main/asciidoc/spring-cloud-config.adoc @@ -1025,8 +1025,9 @@ To configure a symmetric key you just need to set `encrypt.key` to a secret String (or use an enviroment variable `ENCRYPT_KEY` to keep it out of plain text configuration files). -To configure an asymmetric key you can either set the key as a -PEM-encoded text value (in `encrypt.key`), or via a keystore (e.g. as +NOTE: You cannot configure an asymmetric key using `encrypt.key`. + +To configure an asymmetric key use a keystore (e.g. as created by the `keytool` utility that comes with the JDK). The keystore properties are `encrypt.keyStore.\*` with `*` equal to From cb96c6033107f175263e32d9b9d885457dc4434f Mon Sep 17 00:00:00 2001 From: buildmaster Date: Mon, 15 Oct 2018 20:33:02 +0000 Subject: [PATCH 2/5] Update SNAPSHOT to Edgware.SR5 --- docs/pom.xml | 2 +- pom.xml | 6 +++--- spring-cloud-config-client/pom.xml | 2 +- spring-cloud-config-dependencies/pom.xml | 4 ++-- spring-cloud-config-monitor/pom.xml | 2 +- spring-cloud-config-sample/pom.xml | 2 +- spring-cloud-config-server/pom.xml | 4 ++-- spring-cloud-starter-config/pom.xml | 4 ++-- 8 files changed, 13 insertions(+), 13 deletions(-) diff --git a/docs/pom.xml b/docs/pom.xml index 135f3804..f818e934 100644 --- a/docs/pom.xml +++ b/docs/pom.xml @@ -6,7 +6,7 @@ org.springframework.cloud spring-cloud-config - 1.4.5.BUILD-SNAPSHOT + 1.4.5.RELEASE .. diff --git a/pom.xml b/pom.xml index 485b4b28..632a30eb 100644 --- a/pom.xml +++ b/pom.xml @@ -3,7 +3,7 @@ 4.0.0 org.springframework.cloud spring-cloud-config - 1.4.5.BUILD-SNAPSHOT + 1.4.5.RELEASE pom Spring Cloud Config Spring Cloud Config @@ -11,7 +11,7 @@ org.springframework.cloud spring-cloud-build - 1.3.10.RELEASE + 1.3.11.RELEASE @@ -22,7 +22,7 @@ config - 1.3.4.BUILD-SNAPSHOT + 1.3.5.RELEASE spring-cloud-config-dependencies diff --git a/spring-cloud-config-client/pom.xml b/spring-cloud-config-client/pom.xml index 3d926bb4..90738962 100644 --- a/spring-cloud-config-client/pom.xml +++ b/spring-cloud-config-client/pom.xml @@ -10,7 +10,7 @@ org.springframework.cloud spring-cloud-config - 1.4.5.BUILD-SNAPSHOT + 1.4.5.RELEASE .. diff --git a/spring-cloud-config-dependencies/pom.xml b/spring-cloud-config-dependencies/pom.xml index 90e6885d..e7f711a7 100644 --- a/spring-cloud-config-dependencies/pom.xml +++ b/spring-cloud-config-dependencies/pom.xml @@ -5,11 +5,11 @@ spring-cloud-dependencies-parent org.springframework.cloud - 1.3.10.RELEASE + 1.3.11.RELEASE spring-cloud-config-dependencies - 1.4.5.BUILD-SNAPSHOT + 1.4.5.RELEASE pom spring-cloud-config-dependencies Spring Cloud Config Dependencies diff --git a/spring-cloud-config-monitor/pom.xml b/spring-cloud-config-monitor/pom.xml index b0baf3b0..64b3244d 100644 --- a/spring-cloud-config-monitor/pom.xml +++ b/spring-cloud-config-monitor/pom.xml @@ -5,7 +5,7 @@ org.springframework.cloud spring-cloud-config - 1.4.5.BUILD-SNAPSHOT + 1.4.5.RELEASE .. spring-cloud-config-monitor diff --git a/spring-cloud-config-sample/pom.xml b/spring-cloud-config-sample/pom.xml index ecd52f08..ad91b752 100644 --- a/spring-cloud-config-sample/pom.xml +++ b/spring-cloud-config-sample/pom.xml @@ -12,7 +12,7 @@ org.springframework.cloud spring-cloud-config - 1.4.5.BUILD-SNAPSHOT + 1.4.5.RELEASE .. diff --git a/spring-cloud-config-server/pom.xml b/spring-cloud-config-server/pom.xml index 08ac2abb..72f3e5bd 100644 --- a/spring-cloud-config-server/pom.xml +++ b/spring-cloud-config-server/pom.xml @@ -12,7 +12,7 @@ org.springframework.cloud spring-cloud-config - 1.4.5.BUILD-SNAPSHOT + 1.4.5.RELEASE .. @@ -90,7 +90,7 @@ UTF-8 - ${project.version} + Edgware.SR5 org.springframework.cloud.config.server.ConfigServerApplication 1.7 diff --git a/spring-cloud-starter-config/pom.xml b/spring-cloud-starter-config/pom.xml index 4d7d9371..d80bee1f 100644 --- a/spring-cloud-starter-config/pom.xml +++ b/spring-cloud-starter-config/pom.xml @@ -5,10 +5,10 @@ org.springframework.cloud spring-cloud-config - 1.4.5.BUILD-SNAPSHOT + 1.4.5.RELEASE spring-cloud-starter-config - 1.4.5.BUILD-SNAPSHOT + 1.4.5.RELEASE spring-cloud-starter-config Spring Cloud Starter https://projects.spring.io/spring-cloud From f58993305f8eddbfb0e8973482e4805fc7f5cb88 Mon Sep 17 00:00:00 2001 From: buildmaster Date: Mon, 15 Oct 2018 20:34:28 +0000 Subject: [PATCH 3/5] Going back to snapshots --- docs/pom.xml | 2 +- pom.xml | 6 +++--- spring-cloud-config-client/pom.xml | 2 +- spring-cloud-config-dependencies/pom.xml | 4 ++-- spring-cloud-config-monitor/pom.xml | 2 +- spring-cloud-config-sample/pom.xml | 2 +- spring-cloud-config-server/pom.xml | 4 ++-- spring-cloud-starter-config/pom.xml | 4 ++-- 8 files changed, 13 insertions(+), 13 deletions(-) diff --git a/docs/pom.xml b/docs/pom.xml index f818e934..135f3804 100644 --- a/docs/pom.xml +++ b/docs/pom.xml @@ -6,7 +6,7 @@ org.springframework.cloud spring-cloud-config - 1.4.5.RELEASE + 1.4.5.BUILD-SNAPSHOT .. diff --git a/pom.xml b/pom.xml index 632a30eb..485b4b28 100644 --- a/pom.xml +++ b/pom.xml @@ -3,7 +3,7 @@ 4.0.0 org.springframework.cloud spring-cloud-config - 1.4.5.RELEASE + 1.4.5.BUILD-SNAPSHOT pom Spring Cloud Config Spring Cloud Config @@ -11,7 +11,7 @@ org.springframework.cloud spring-cloud-build - 1.3.11.RELEASE + 1.3.10.RELEASE @@ -22,7 +22,7 @@ config - 1.3.5.RELEASE + 1.3.4.BUILD-SNAPSHOT spring-cloud-config-dependencies diff --git a/spring-cloud-config-client/pom.xml b/spring-cloud-config-client/pom.xml index 90738962..3d926bb4 100644 --- a/spring-cloud-config-client/pom.xml +++ b/spring-cloud-config-client/pom.xml @@ -10,7 +10,7 @@ org.springframework.cloud spring-cloud-config - 1.4.5.RELEASE + 1.4.5.BUILD-SNAPSHOT .. diff --git a/spring-cloud-config-dependencies/pom.xml b/spring-cloud-config-dependencies/pom.xml index e7f711a7..90e6885d 100644 --- a/spring-cloud-config-dependencies/pom.xml +++ b/spring-cloud-config-dependencies/pom.xml @@ -5,11 +5,11 @@ spring-cloud-dependencies-parent org.springframework.cloud - 1.3.11.RELEASE + 1.3.10.RELEASE spring-cloud-config-dependencies - 1.4.5.RELEASE + 1.4.5.BUILD-SNAPSHOT pom spring-cloud-config-dependencies Spring Cloud Config Dependencies diff --git a/spring-cloud-config-monitor/pom.xml b/spring-cloud-config-monitor/pom.xml index 64b3244d..b0baf3b0 100644 --- a/spring-cloud-config-monitor/pom.xml +++ b/spring-cloud-config-monitor/pom.xml @@ -5,7 +5,7 @@ org.springframework.cloud spring-cloud-config - 1.4.5.RELEASE + 1.4.5.BUILD-SNAPSHOT .. spring-cloud-config-monitor diff --git a/spring-cloud-config-sample/pom.xml b/spring-cloud-config-sample/pom.xml index ad91b752..ecd52f08 100644 --- a/spring-cloud-config-sample/pom.xml +++ b/spring-cloud-config-sample/pom.xml @@ -12,7 +12,7 @@ org.springframework.cloud spring-cloud-config - 1.4.5.RELEASE + 1.4.5.BUILD-SNAPSHOT .. diff --git a/spring-cloud-config-server/pom.xml b/spring-cloud-config-server/pom.xml index 72f3e5bd..08ac2abb 100644 --- a/spring-cloud-config-server/pom.xml +++ b/spring-cloud-config-server/pom.xml @@ -12,7 +12,7 @@ org.springframework.cloud spring-cloud-config - 1.4.5.RELEASE + 1.4.5.BUILD-SNAPSHOT .. @@ -90,7 +90,7 @@ UTF-8 - Edgware.SR5 + ${project.version} org.springframework.cloud.config.server.ConfigServerApplication 1.7 diff --git a/spring-cloud-starter-config/pom.xml b/spring-cloud-starter-config/pom.xml index d80bee1f..4d7d9371 100644 --- a/spring-cloud-starter-config/pom.xml +++ b/spring-cloud-starter-config/pom.xml @@ -5,10 +5,10 @@ org.springframework.cloud spring-cloud-config - 1.4.5.RELEASE + 1.4.5.BUILD-SNAPSHOT spring-cloud-starter-config - 1.4.5.RELEASE + 1.4.5.BUILD-SNAPSHOT spring-cloud-starter-config Spring Cloud Starter https://projects.spring.io/spring-cloud From b6bae9ad4487570e59f7bdab2c0ba1ecbab7109b Mon Sep 17 00:00:00 2001 From: buildmaster Date: Mon, 15 Oct 2018 20:34:29 +0000 Subject: [PATCH 4/5] Bumping versions to 1.4.6.BUILD-SNAPSHOT after release --- docs/pom.xml | 2 +- pom.xml | 4 ++-- spring-cloud-config-client/pom.xml | 2 +- spring-cloud-config-dependencies/pom.xml | 4 ++-- spring-cloud-config-monitor/pom.xml | 2 +- spring-cloud-config-sample/pom.xml | 2 +- spring-cloud-config-server/pom.xml | 2 +- spring-cloud-starter-config/pom.xml | 4 ++-- 8 files changed, 11 insertions(+), 11 deletions(-) diff --git a/docs/pom.xml b/docs/pom.xml index 135f3804..ecb1887c 100644 --- a/docs/pom.xml +++ b/docs/pom.xml @@ -6,7 +6,7 @@ org.springframework.cloud spring-cloud-config - 1.4.5.BUILD-SNAPSHOT + 1.4.6.BUILD-SNAPSHOT .. diff --git a/pom.xml b/pom.xml index 485b4b28..07a4fae0 100644 --- a/pom.xml +++ b/pom.xml @@ -3,7 +3,7 @@ 4.0.0 org.springframework.cloud spring-cloud-config - 1.4.5.BUILD-SNAPSHOT + 1.4.6.BUILD-SNAPSHOT pom Spring Cloud Config Spring Cloud Config @@ -11,7 +11,7 @@ org.springframework.cloud spring-cloud-build - 1.3.10.RELEASE + 1.3.11.RELEASE diff --git a/spring-cloud-config-client/pom.xml b/spring-cloud-config-client/pom.xml index 3d926bb4..d79603c4 100644 --- a/spring-cloud-config-client/pom.xml +++ b/spring-cloud-config-client/pom.xml @@ -10,7 +10,7 @@ org.springframework.cloud spring-cloud-config - 1.4.5.BUILD-SNAPSHOT + 1.4.6.BUILD-SNAPSHOT .. diff --git a/spring-cloud-config-dependencies/pom.xml b/spring-cloud-config-dependencies/pom.xml index 90e6885d..35c8ef7b 100644 --- a/spring-cloud-config-dependencies/pom.xml +++ b/spring-cloud-config-dependencies/pom.xml @@ -5,11 +5,11 @@ spring-cloud-dependencies-parent org.springframework.cloud - 1.3.10.RELEASE + 1.3.11.RELEASE spring-cloud-config-dependencies - 1.4.5.BUILD-SNAPSHOT + 1.4.6.BUILD-SNAPSHOT pom spring-cloud-config-dependencies Spring Cloud Config Dependencies diff --git a/spring-cloud-config-monitor/pom.xml b/spring-cloud-config-monitor/pom.xml index b0baf3b0..2d13c1d5 100644 --- a/spring-cloud-config-monitor/pom.xml +++ b/spring-cloud-config-monitor/pom.xml @@ -5,7 +5,7 @@ org.springframework.cloud spring-cloud-config - 1.4.5.BUILD-SNAPSHOT + 1.4.6.BUILD-SNAPSHOT .. spring-cloud-config-monitor diff --git a/spring-cloud-config-sample/pom.xml b/spring-cloud-config-sample/pom.xml index ecd52f08..6d6bdd62 100644 --- a/spring-cloud-config-sample/pom.xml +++ b/spring-cloud-config-sample/pom.xml @@ -12,7 +12,7 @@ org.springframework.cloud spring-cloud-config - 1.4.5.BUILD-SNAPSHOT + 1.4.6.BUILD-SNAPSHOT .. diff --git a/spring-cloud-config-server/pom.xml b/spring-cloud-config-server/pom.xml index 08ac2abb..ad8588c2 100644 --- a/spring-cloud-config-server/pom.xml +++ b/spring-cloud-config-server/pom.xml @@ -12,7 +12,7 @@ org.springframework.cloud spring-cloud-config - 1.4.5.BUILD-SNAPSHOT + 1.4.6.BUILD-SNAPSHOT .. diff --git a/spring-cloud-starter-config/pom.xml b/spring-cloud-starter-config/pom.xml index 4d7d9371..6db10cb6 100644 --- a/spring-cloud-starter-config/pom.xml +++ b/spring-cloud-starter-config/pom.xml @@ -5,10 +5,10 @@ org.springframework.cloud spring-cloud-config - 1.4.5.BUILD-SNAPSHOT + 1.4.6.BUILD-SNAPSHOT spring-cloud-starter-config - 1.4.5.BUILD-SNAPSHOT + 1.4.6.BUILD-SNAPSHOT spring-cloud-starter-config Spring Cloud Starter https://projects.spring.io/spring-cloud From be4155eb12a243a349ec417aeda1dd34ca5bd5b5 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Luk=C3=A1=C5=A1=20Vyhl=C3=ADdka?= Date: Thu, 25 Oct 2018 15:56:51 +0200 Subject: [PATCH 5/5] Fix wrong synchronization on Spring Refresh Context Event (#1168) (#1170) --- .../JGitEnvironmentRepository.java | 2 +- ...EnvironmentRepositoryConcurrencyTests.java | 146 +++++++++++++++++- 2 files changed, 146 insertions(+), 2 deletions(-) diff --git a/spring-cloud-config-server/src/main/java/org/springframework/cloud/config/server/environment/JGitEnvironmentRepository.java b/spring-cloud-config-server/src/main/java/org/springframework/cloud/config/server/environment/JGitEnvironmentRepository.java index 41d325a3..9c4d7905 100644 --- a/spring-cloud-config-server/src/main/java/org/springframework/cloud/config/server/environment/JGitEnvironmentRepository.java +++ b/spring-cloud-config-server/src/main/java/org/springframework/cloud/config/server/environment/JGitEnvironmentRepository.java @@ -216,7 +216,7 @@ public class JGitEnvironmentRepository extends AbstractScmEnvironmentRepository } @Override - public void afterPropertiesSet() throws Exception { + public synchronized void afterPropertiesSet() throws Exception { Assert.state(getUri() != null, "You need to configure a uri for the git repository"); initialize(); diff --git a/spring-cloud-config-server/src/test/java/org/springframework/cloud/config/server/environment/JGitEnvironmentRepositoryConcurrencyTests.java b/spring-cloud-config-server/src/test/java/org/springframework/cloud/config/server/environment/JGitEnvironmentRepositoryConcurrencyTests.java index 84e359cd..6da158be 100644 --- a/spring-cloud-config-server/src/test/java/org/springframework/cloud/config/server/environment/JGitEnvironmentRepositoryConcurrencyTests.java +++ b/spring-cloud-config-server/src/test/java/org/springframework/cloud/config/server/environment/JGitEnvironmentRepositoryConcurrencyTests.java @@ -17,17 +17,28 @@ package org.springframework.cloud.config.server.environment; import java.io.File; +import java.io.IOException; import java.util.ArrayList; import java.util.List; import java.util.concurrent.ExecutorService; import java.util.concurrent.Executors; import java.util.concurrent.Future; +import java.util.concurrent.atomic.AtomicInteger; +import org.apache.commons.logging.Log; +import org.apache.commons.logging.LogFactory; +import org.eclipse.jgit.api.CheckoutCommand; +import org.eclipse.jgit.api.CloneCommand; +import org.eclipse.jgit.api.FetchCommand; +import org.eclipse.jgit.api.Git; +import org.eclipse.jgit.api.errors.*; +import org.eclipse.jgit.lib.Ref; +import org.eclipse.jgit.lib.Repository; +import org.eclipse.jgit.transport.FetchResult; import org.eclipse.jgit.util.FileUtils; import org.junit.After; import org.junit.Before; import org.junit.Test; - import org.springframework.boot.autoconfigure.context.PropertyPlaceholderAutoConfiguration; import org.springframework.boot.builder.SpringApplicationBuilder; import org.springframework.boot.context.properties.EnableConfigurationProperties; @@ -94,6 +105,63 @@ public class JGitEnvironmentRepositoryConcurrencyTests { assertEquals("master", environment.getLabel()); } + protected Log logger = LogFactory.getLog(getClass()); + + /** + * Simulates following actions in parallel: + * - Client tries to obtain configuration with specified label + * - Spring Refresh Context Event occurs + */ + @Test + public void concurrentRefreshContextAndGetLabels() throws Exception { + // Prepare the repo + final JGitConfigServerTestData testData = JGitConfigServerTestData.prepareClonedGitRepository(TestConfiguration.class); + JGitEnvironmentRepository repository = testData.getRepository(); + repository.setCloneOnStart(true); + repository.setGitFactory(new DelayedGitFactoryMock()); + repository.setBasedir(testData.getClonedGit().getGitWorkingDirectory()); + repository.setUri(testData.getServerGit().getGitWorkingDirectory().getAbsolutePath().replace("file://", "")); + + final AtomicInteger errorCount = new AtomicInteger(); + + // Prepare two threads to do the parallel work + Thread client = new Thread(new Runnable() { + @Override + public void run() { + logger.info("client start."); + try { + Environment environment = testData.getRepository().findOne("bar", "staging", "master"); + } catch (Exception e) { + errorCount.incrementAndGet(); + e.printStackTrace(); + } + logger.info("client end."); + } + }); + + Thread refresh = new Thread(new Runnable() { + @Override + public void run() { + try { + logger.info("refresh start."); + testData.getRepository().afterPropertiesSet(); + logger.info("refresh end."); + } catch (Exception e) { + errorCount.incrementAndGet(); + e.printStackTrace(); + } + } + }); + + // Start the parallel actions and wait till the end. + refresh.start(); + client.start(); + refresh.join(); + client.join(); + + assertEquals(0, errorCount.get()); + } + @Configuration @EnableConfigurationProperties(ConfigServerProperties.class) @Import({ PropertyPlaceholderAutoConfiguration.class, @@ -101,4 +169,80 @@ public class JGitEnvironmentRepositoryConcurrencyTests { protected static class TestConfiguration { } + private static class DelayedGitFactoryMock extends JGitEnvironmentRepository.JGitFactory { + + @Override + public Git getGitByOpen(File file) throws IOException { + Git originalGit = DelayedGitMock.open(file); + return new DelayedGitMock(originalGit.getRepository()); + } + + @Override + public CloneCommand getCloneCommandByCloneRepository() { + return new DelayedCloneCommand(); + } + } + + private static class DelayedGitMock extends Git { + + public DelayedGitMock(Repository repo) { + super(repo); + } + + @Override + public FetchCommand fetch() { + return new DelayedFetchCommand(getRepository()); + } + + @Override + public CheckoutCommand checkout() { + return new DelayedCheckoutCommand(getRepository()); + } + } + + private static class DelayedCloneCommand extends CloneCommand { + @Override + public Git call() throws GitAPIException, InvalidRemoteException, TransportException { + try { + Thread.sleep(250); + } catch (InterruptedException e) { + e.printStackTrace(); + } + return super.call(); + } + } + + private static class DelayedFetchCommand extends FetchCommand { + + public DelayedFetchCommand(Repository repo) { + super(repo); + } + + @Override + public FetchResult call() throws GitAPIException, InvalidRemoteException, TransportException { + try { + Thread.sleep(250); + } catch (InterruptedException e) { + e.printStackTrace(); + } + return super.call(); + } + } + + private static class DelayedCheckoutCommand extends CheckoutCommand { + public DelayedCheckoutCommand(Repository repo) { + super(repo); + } + + @Override + public Ref call() throws GitAPIException, RefAlreadyExistsException, RefNotFoundException, InvalidRefNameException, CheckoutConflictException { + try { + Thread.sleep(250); + } catch (InterruptedException e) { + e.printStackTrace(); + } + return super.call(); + } + } + }