From ccd3bc2ff6d7e61f1eb88c1a25f836b09447993a Mon Sep 17 00:00:00 2001 From: durigon Date: Thu, 20 Sep 2018 09:39:35 +0900 Subject: [PATCH 01/18] Refactor String#replaceAll (#1146) If we repeatedly call String#replaceAll, we internally repeatedly call the regular expression pattern compilation every time as following: ```java public String replaceAll(String regex, String replacement) { return Pattern.compile(regex).matcher(this).replaceAll(replacement); } ``` The modifications are to keep the compiled pattern. Therefore, compiling a relatively expensive regular expression pattern does not have to be done every time. --- .../support/GitSkipSslValidationCredentialsProvider.java | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) diff --git a/spring-cloud-config-server/src/main/java/org/springframework/cloud/config/server/support/GitSkipSslValidationCredentialsProvider.java b/spring-cloud-config-server/src/main/java/org/springframework/cloud/config/server/support/GitSkipSslValidationCredentialsProvider.java index c3d8a61a..955fc184 100644 --- a/spring-cloud-config-server/src/main/java/org/springframework/cloud/config/server/support/GitSkipSslValidationCredentialsProvider.java +++ b/spring-cloud-config-server/src/main/java/org/springframework/cloud/config/server/support/GitSkipSslValidationCredentialsProvider.java @@ -17,6 +17,7 @@ package org.springframework.cloud.config.server.support; import java.util.ArrayList; import java.util.List; +import java.util.regex.Pattern; import org.eclipse.jgit.errors.UnsupportedCredentialItem; import org.eclipse.jgit.internal.JGitText; @@ -37,6 +38,8 @@ import org.eclipse.jgit.transport.URIish; */ public class GitSkipSslValidationCredentialsProvider extends CredentialsProvider { + private static final Pattern FORMAT_PLACEHOLDER_PATTERN = Pattern.compile("\\s*\\{\\d}\\s*"); + private final CredentialsProvider delegate; public GitSkipSslValidationCredentialsProvider(CredentialsProvider delegate) { @@ -128,6 +131,6 @@ public class GitSkipSslValidationCredentialsProvider extends CredentialsProvider } private static String stripFormattingPlaceholders(String string) { - return string.replaceAll("\\s*\\{\\d}\\s*", ""); + return FORMAT_PLACEHOLDER_PATTERN.matcher(string).replaceAll(""); } } From f8ecf25c844fc258a2e8d7b531d30f06fcb436cb Mon Sep 17 00:00:00 2001 From: Ryan Baxter Date: Mon, 1 Oct 2018 14:12:43 -0400 Subject: [PATCH 02/18] 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 77f8df378d7c23b637d18eeb8a355efb5e0b3481 Mon Sep 17 00:00:00 2001 From: Ryan Baxter Date: Mon, 1 Oct 2018 20:14:39 -0400 Subject: [PATCH 03/18] Document git refresh rate. Fixes #1147. --- docs/src/main/asciidoc/spring-cloud-config.adoc | 8 ++++++++ 1 file changed, 8 insertions(+) diff --git a/docs/src/main/asciidoc/spring-cloud-config.adoc b/docs/src/main/asciidoc/spring-cloud-config.adoc index 7d8e8d29..ab882857 100644 --- a/docs/src/main/asciidoc/spring-cloud-config.adoc +++ b/docs/src/main/asciidoc/spring-cloud-config.adoc @@ -503,6 +503,14 @@ spring: NOTE: The default value for `deleteUntrackedBranches` property is `false`. +===== Git Refresh Rate + +You can control how often the config server will fetch updated configuration data +from your Git backend by using `spring.cloud.config.server.git.refreshRate`. The +value of this property is specified in seconds. By default the value is 0, meaning +the config server will fetch updated configuration from the Git repo every time it +is requested. + ==== Version Control Backend Filesystem Use WARNING: With VCS-based backends (git, svn), files are checked out or cloned to the local filesystem. From 4ae00c95307740bc10c248acf25cb2493d37067b Mon Sep 17 00:00:00 2001 From: Ryan Baxter Date: Wed, 10 Oct 2018 11:45:07 -0400 Subject: [PATCH 04/18] Documentation for #1060. --- .../src/main/asciidoc/spring-cloud-config.adoc | 18 ++++++++++++++++++ 1 file changed, 18 insertions(+) diff --git a/docs/src/main/asciidoc/spring-cloud-config.adoc b/docs/src/main/asciidoc/spring-cloud-config.adoc index ab882857..f900bff6 100644 --- a/docs/src/main/asciidoc/spring-cloud-config.adoc +++ b/docs/src/main/asciidoc/spring-cloud-config.adoc @@ -1130,6 +1130,24 @@ An optional property named `spring.cloud.config.server.bootstrap` can be useful It is a flag to indicate whether the server should configure itself from its own remote repository. By default, the flag is off, because it can delay startup. However, when embedded in another application, it makes sense to initialize the same way as any other application. +When setting `spring.cloud.config.server.bootstrap` to `true` you must also use a <>. +For example + +[source,yaml] +---- +spring: + application: + name: configserver + profiles: + active: composite + cloud: + config: + server: + composite: + - type: native + search-locations: ${HOME}/Desktop/config + bootstrap: true +---- NOTE: If you use the bootstrap flag, the config server needs to have its name and repository URI configured in `bootstrap.yml`. From 8b122cc3f5d567e5e01b582b48737f9de0c976d6 Mon Sep 17 00:00:00 2001 From: Ryan Baxter Date: Wed, 10 Oct 2018 16:53:19 -0400 Subject: [PATCH 05/18] Adds failure analyzer for git uri error. Fixes #1060 (#1162) --- .../diagnostics/GitUriFailureAnalyzer.java | 25 ++++++++++++++ .../JGitEnvironmentRepository.java | 4 ++- .../main/resources/META-INF/spring.factories | 3 ++ .../NativeBootstrapFailureAnalyzerTests.java | 34 +++++++++++++++++++ .../test/resources/enable-nativebootstrap.yml | 5 +++ 5 files changed, 70 insertions(+), 1 deletion(-) create mode 100644 spring-cloud-config-server/src/main/java/org/springframework/cloud/config/server/diagnostics/GitUriFailureAnalyzer.java create mode 100644 spring-cloud-config-server/src/test/java/org/springframework/cloud/config/server/NativeBootstrapFailureAnalyzerTests.java create mode 100644 spring-cloud-config-server/src/test/resources/enable-nativebootstrap.yml diff --git a/spring-cloud-config-server/src/main/java/org/springframework/cloud/config/server/diagnostics/GitUriFailureAnalyzer.java b/spring-cloud-config-server/src/main/java/org/springframework/cloud/config/server/diagnostics/GitUriFailureAnalyzer.java new file mode 100644 index 00000000..1fc04280 --- /dev/null +++ b/spring-cloud-config-server/src/main/java/org/springframework/cloud/config/server/diagnostics/GitUriFailureAnalyzer.java @@ -0,0 +1,25 @@ +package org.springframework.cloud.config.server.diagnostics; + +import org.springframework.boot.diagnostics.AbstractFailureAnalyzer; +import org.springframework.boot.diagnostics.FailureAnalysis; +import org.springframework.cloud.config.server.environment.JGitEnvironmentRepository; + +/** + * @author Ryan Baxter + */ +public class GitUriFailureAnalyzer extends AbstractFailureAnalyzer { + + public static final String DESCRIPTION = "Invalid config server configuration."; + public static final String ACTION = "If you are using the git profile, you need to set a Git URI in your " + + "configuration. If you are using a native profile and have spring.cloud.config.server.bootstrap=true, " + + "you need to use a composite configuration."; + + @Override + protected FailureAnalysis analyze(Throwable rootFailure, IllegalStateException cause) { + if(JGitEnvironmentRepository.MESSAGE.equalsIgnoreCase(cause.getMessage())) { + return new FailureAnalysis(DESCRIPTION, ACTION, cause); + } + return null; + } + +} 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 214fe5fb..d7afb1d1 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 @@ -80,6 +80,8 @@ import static org.eclipse.jgit.transport.ReceiveCommand.Type.DELETE; public class JGitEnvironmentRepository extends AbstractScmEnvironmentRepository implements EnvironmentRepository, SearchPathLocator, InitializingBean { + public static final String MESSAGE = "You need to configure a uri for the git repository."; + private static final String FILE_URI_PREFIX = "file:"; private static final String LOCAL_BRANCH_REF_PREFIX = "refs/remotes/origin/"; @@ -243,7 +245,7 @@ public class JGitEnvironmentRepository extends AbstractScmEnvironmentRepository @Override public void afterPropertiesSet() throws Exception { Assert.state(getUri() != null, - "You need to configure a uri for the git repository"); + MESSAGE); initialize(); if (this.cloneOnStart) { initClonedRepository(); diff --git a/spring-cloud-config-server/src/main/resources/META-INF/spring.factories b/spring-cloud-config-server/src/main/resources/META-INF/spring.factories index f145f03c..4c3a8b2e 100644 --- a/spring-cloud-config-server/src/main/resources/META-INF/spring.factories +++ b/spring-cloud-config-server/src/main/resources/META-INF/spring.factories @@ -11,3 +11,6 @@ org.springframework.cloud.config.server.bootstrap.ConfigServerBootstrapApplicati org.springframework.boot.autoconfigure.EnableAutoConfiguration=\ org.springframework.cloud.config.server.config.ConfigServerAutoConfiguration,\ org.springframework.cloud.config.server.config.EncryptionAutoConfiguration + +org.springframework.boot.diagnostics.FailureAnalyzer=\ +org.springframework.cloud.config.server.diagnostics.GitUriFailureAnalyzer diff --git a/spring-cloud-config-server/src/test/java/org/springframework/cloud/config/server/NativeBootstrapFailureAnalyzerTests.java b/spring-cloud-config-server/src/test/java/org/springframework/cloud/config/server/NativeBootstrapFailureAnalyzerTests.java new file mode 100644 index 00000000..5666ed40 --- /dev/null +++ b/spring-cloud-config-server/src/test/java/org/springframework/cloud/config/server/NativeBootstrapFailureAnalyzerTests.java @@ -0,0 +1,34 @@ +package org.springframework.cloud.config.server; + +import org.junit.Rule; +import org.junit.Test; +import org.springframework.boot.WebApplicationType; +import org.springframework.boot.builder.SpringApplicationBuilder; +import org.springframework.boot.test.rule.OutputCapture; +import org.springframework.cloud.config.server.diagnostics.GitUriFailureAnalyzer; + +import static org.assertj.core.api.Assertions.assertThat; +import static org.junit.Assert.fail; + +/** + * @author Ryan Baxter + */ +public class NativeBootstrapFailureAnalyzerTests { + + @Rule + public OutputCapture outputCapture = new OutputCapture(); + + @Test + public void contextLoads(){ + try { + new SpringApplicationBuilder(ConfigServerApplication.class) + .web(WebApplicationType.SERVLET).properties("spring.cloud.bootstrap.name:enable-nativebootstrap").profiles("test","native").run(); + fail("Application started successfully"); + } + catch (Exception ex) { + assertThat(this.outputCapture.toString()) + .contains(GitUriFailureAnalyzer.ACTION); + assertThat(this.outputCapture.toString()).contains(GitUriFailureAnalyzer.DESCRIPTION); + } + } +} diff --git a/spring-cloud-config-server/src/test/resources/enable-nativebootstrap.yml b/spring-cloud-config-server/src/test/resources/enable-nativebootstrap.yml new file mode 100644 index 00000000..66226479 --- /dev/null +++ b/spring-cloud-config-server/src/test/resources/enable-nativebootstrap.yml @@ -0,0 +1,5 @@ +spring: + cloud: + config: + server: + bootstrap: true From 2e5933aafa3c9663ca4ee4fb857a748f0401d4f4 Mon Sep 17 00:00:00 2001 From: Ryan Baxter Date: Thu, 11 Oct 2018 11:31:44 -0400 Subject: [PATCH 06/18] Log exception when error occurs cloning Git repo. Fixes #1160 --- .../config/server/environment/JGitEnvironmentRepository.java | 1 + 1 file changed, 1 insertion(+) 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 d7afb1d1..4e513b1b 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 @@ -574,6 +574,7 @@ public class JGitEnvironmentRepository extends AbstractScmEnvironmentRepository return clone.call(); } catch (GitAPIException e) { + logger.warn("Error occured cloning to base directory.", e); deleteBaseDirIfExists(); throw e; } From cb96c6033107f175263e32d9b9d885457dc4434f Mon Sep 17 00:00:00 2001 From: buildmaster Date: Mon, 15 Oct 2018 20:33:02 +0000 Subject: [PATCH 07/18] 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 08/18] 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 09/18] 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 2d73a66a5a96e7b4c8b833e564cd9b27c07bc30a Mon Sep 17 00:00:00 2001 From: buildmaster Date: Tue, 23 Oct 2018 17:44:11 +0000 Subject: [PATCH 10/18] Update SNAPSHOT to 2.0.2.RELEASE --- 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 | 4 ++-- spring-cloud-config-sample/pom.xml | 2 +- spring-cloud-config-server/pom.xml | 4 ++-- spring-cloud-starter-config/pom.xml | 4 ++-- 8 files changed, 14 insertions(+), 14 deletions(-) diff --git a/docs/pom.xml b/docs/pom.xml index dc449d9d..d292b921 100644 --- a/docs/pom.xml +++ b/docs/pom.xml @@ -6,7 +6,7 @@ org.springframework.cloud spring-cloud-config - 2.0.2.BUILD-SNAPSHOT + 2.0.2.RELEASE .. diff --git a/pom.xml b/pom.xml index b5b45cde..f974435e 100644 --- a/pom.xml +++ b/pom.xml @@ -3,7 +3,7 @@ 4.0.0 org.springframework.cloud spring-cloud-config - 2.0.2.BUILD-SNAPSHOT + 2.0.2.RELEASE pom Spring Cloud Config Spring Cloud Config @@ -11,7 +11,7 @@ org.springframework.cloud spring-cloud-build - 2.0.3.RELEASE + 2.0.4.RELEASE @@ -22,7 +22,7 @@ config - 2.0.1.BUILD-SNAPSHOT + 2.0.2.RELEASE spring-cloud-config-dependencies diff --git a/spring-cloud-config-client/pom.xml b/spring-cloud-config-client/pom.xml index 57207eee..d548453f 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 - 2.0.2.BUILD-SNAPSHOT + 2.0.2.RELEASE .. diff --git a/spring-cloud-config-dependencies/pom.xml b/spring-cloud-config-dependencies/pom.xml index 1f607383..0af3040f 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 - 2.0.3.RELEASE + 2.0.4.RELEASE spring-cloud-config-dependencies - 2.0.2.BUILD-SNAPSHOT + 2.0.2.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 105bcf5c..c94669c8 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 - 2.0.2.BUILD-SNAPSHOT + 2.0.2.RELEASE .. spring-cloud-config-monitor @@ -13,7 +13,7 @@ Spring Cloud Config Monitor ${basedir}/../.. - 2.0.1.BUILD-SNAPSHOT + 2.0.0.RELEASE diff --git a/spring-cloud-config-sample/pom.xml b/spring-cloud-config-sample/pom.xml index 128a54e7..5ac30c4b 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 - 2.0.2.BUILD-SNAPSHOT + 2.0.2.RELEASE .. diff --git a/spring-cloud-config-server/pom.xml b/spring-cloud-config-server/pom.xml index 890a4288..ed0ef8d8 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 - 2.0.2.BUILD-SNAPSHOT + 2.0.2.RELEASE .. @@ -98,7 +98,7 @@ UTF-8 - ${project.version} + Finchley.SR2 org.springframework.cloud.config.server.ConfigServerApplication diff --git a/spring-cloud-starter-config/pom.xml b/spring-cloud-starter-config/pom.xml index ad27bbad..09953ab5 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 - 2.0.2.BUILD-SNAPSHOT + 2.0.2.RELEASE spring-cloud-starter-config - 2.0.2.BUILD-SNAPSHOT + 2.0.2.RELEASE spring-cloud-starter-config Spring Cloud Starter https://projects.spring.io/spring-cloud From a2e411fbd04fbc4f86c1c7e11d0192430b80a4a3 Mon Sep 17 00:00:00 2001 From: buildmaster Date: Tue, 23 Oct 2018 17:45:47 +0000 Subject: [PATCH 11/18] 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 | 4 ++-- spring-cloud-config-sample/pom.xml | 2 +- spring-cloud-config-server/pom.xml | 4 ++-- spring-cloud-starter-config/pom.xml | 4 ++-- 8 files changed, 14 insertions(+), 14 deletions(-) diff --git a/docs/pom.xml b/docs/pom.xml index d292b921..dc449d9d 100644 --- a/docs/pom.xml +++ b/docs/pom.xml @@ -6,7 +6,7 @@ org.springframework.cloud spring-cloud-config - 2.0.2.RELEASE + 2.0.2.BUILD-SNAPSHOT .. diff --git a/pom.xml b/pom.xml index f974435e..b5b45cde 100644 --- a/pom.xml +++ b/pom.xml @@ -3,7 +3,7 @@ 4.0.0 org.springframework.cloud spring-cloud-config - 2.0.2.RELEASE + 2.0.2.BUILD-SNAPSHOT pom Spring Cloud Config Spring Cloud Config @@ -11,7 +11,7 @@ org.springframework.cloud spring-cloud-build - 2.0.4.RELEASE + 2.0.3.RELEASE @@ -22,7 +22,7 @@ config - 2.0.2.RELEASE + 2.0.1.BUILD-SNAPSHOT spring-cloud-config-dependencies diff --git a/spring-cloud-config-client/pom.xml b/spring-cloud-config-client/pom.xml index d548453f..57207eee 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 - 2.0.2.RELEASE + 2.0.2.BUILD-SNAPSHOT .. diff --git a/spring-cloud-config-dependencies/pom.xml b/spring-cloud-config-dependencies/pom.xml index 0af3040f..1f607383 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 - 2.0.4.RELEASE + 2.0.3.RELEASE spring-cloud-config-dependencies - 2.0.2.RELEASE + 2.0.2.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 c94669c8..105bcf5c 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 - 2.0.2.RELEASE + 2.0.2.BUILD-SNAPSHOT .. spring-cloud-config-monitor @@ -13,7 +13,7 @@ Spring Cloud Config Monitor ${basedir}/../.. - 2.0.0.RELEASE + 2.0.1.BUILD-SNAPSHOT diff --git a/spring-cloud-config-sample/pom.xml b/spring-cloud-config-sample/pom.xml index 5ac30c4b..128a54e7 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 - 2.0.2.RELEASE + 2.0.2.BUILD-SNAPSHOT .. diff --git a/spring-cloud-config-server/pom.xml b/spring-cloud-config-server/pom.xml index ed0ef8d8..890a4288 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 - 2.0.2.RELEASE + 2.0.2.BUILD-SNAPSHOT .. @@ -98,7 +98,7 @@ UTF-8 - Finchley.SR2 + ${project.version} org.springframework.cloud.config.server.ConfigServerApplication diff --git a/spring-cloud-starter-config/pom.xml b/spring-cloud-starter-config/pom.xml index 09953ab5..ad27bbad 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 - 2.0.2.RELEASE + 2.0.2.BUILD-SNAPSHOT spring-cloud-starter-config - 2.0.2.RELEASE + 2.0.2.BUILD-SNAPSHOT spring-cloud-starter-config Spring Cloud Starter https://projects.spring.io/spring-cloud From c47f8a07a46eafe9381f28e6949debb057bb847d Mon Sep 17 00:00:00 2001 From: buildmaster Date: Tue, 23 Oct 2018 17:45:48 +0000 Subject: [PATCH 12/18] Bumping versions to 2.0.3.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 dc449d9d..4a650dea 100644 --- a/docs/pom.xml +++ b/docs/pom.xml @@ -6,7 +6,7 @@ org.springframework.cloud spring-cloud-config - 2.0.2.BUILD-SNAPSHOT + 2.0.3.BUILD-SNAPSHOT .. diff --git a/pom.xml b/pom.xml index b5b45cde..5ceaa3e9 100644 --- a/pom.xml +++ b/pom.xml @@ -3,7 +3,7 @@ 4.0.0 org.springframework.cloud spring-cloud-config - 2.0.2.BUILD-SNAPSHOT + 2.0.3.BUILD-SNAPSHOT pom Spring Cloud Config Spring Cloud Config @@ -11,7 +11,7 @@ org.springframework.cloud spring-cloud-build - 2.0.3.RELEASE + 2.0.4.RELEASE diff --git a/spring-cloud-config-client/pom.xml b/spring-cloud-config-client/pom.xml index 57207eee..e86513ca 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 - 2.0.2.BUILD-SNAPSHOT + 2.0.3.BUILD-SNAPSHOT .. diff --git a/spring-cloud-config-dependencies/pom.xml b/spring-cloud-config-dependencies/pom.xml index 1f607383..087ae186 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 - 2.0.3.RELEASE + 2.0.4.RELEASE spring-cloud-config-dependencies - 2.0.2.BUILD-SNAPSHOT + 2.0.3.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 105bcf5c..2ca7fe7b 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 - 2.0.2.BUILD-SNAPSHOT + 2.0.3.BUILD-SNAPSHOT .. spring-cloud-config-monitor diff --git a/spring-cloud-config-sample/pom.xml b/spring-cloud-config-sample/pom.xml index 128a54e7..384e19b3 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 - 2.0.2.BUILD-SNAPSHOT + 2.0.3.BUILD-SNAPSHOT .. diff --git a/spring-cloud-config-server/pom.xml b/spring-cloud-config-server/pom.xml index 890a4288..0fcdd29c 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 - 2.0.2.BUILD-SNAPSHOT + 2.0.3.BUILD-SNAPSHOT .. diff --git a/spring-cloud-starter-config/pom.xml b/spring-cloud-starter-config/pom.xml index ad27bbad..f104517a 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 - 2.0.2.BUILD-SNAPSHOT + 2.0.3.BUILD-SNAPSHOT spring-cloud-starter-config - 2.0.2.BUILD-SNAPSHOT + 2.0.3.BUILD-SNAPSHOT spring-cloud-starter-config Spring Cloud Starter https://projects.spring.io/spring-cloud From 09a7ffc452e62a63bc42fdbccf59af4ae57dad1f Mon Sep 17 00:00:00 2001 From: Spencer Gibb Date: Tue, 23 Oct 2018 17:15:25 -0400 Subject: [PATCH 13/18] Updates s-c-build to 2.0.5.BUILD-SNAPSHOT --- pom.xml | 2 +- spring-cloud-config-dependencies/pom.xml | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/pom.xml b/pom.xml index 5ceaa3e9..a0d15ae3 100644 --- a/pom.xml +++ b/pom.xml @@ -11,7 +11,7 @@ org.springframework.cloud spring-cloud-build - 2.0.4.RELEASE + 2.0.5.BUILD-SNAPSHOT diff --git a/spring-cloud-config-dependencies/pom.xml b/spring-cloud-config-dependencies/pom.xml index 087ae186..69b84121 100644 --- a/spring-cloud-config-dependencies/pom.xml +++ b/spring-cloud-config-dependencies/pom.xml @@ -5,7 +5,7 @@ spring-cloud-dependencies-parent org.springframework.cloud - 2.0.4.RELEASE + 2.0.5.BUILD-SNAPSHOT spring-cloud-config-dependencies 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 14/18] 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(); + } + } + } From 5c609f42d9a0134bfd421f61c70a192651d1f43d Mon Sep 17 00:00:00 2001 From: Ryan Baxter Date: Mon, 29 Oct 2018 19:28:56 -0400 Subject: [PATCH 15/18] Updating Vault documentation --- docs/src/main/asciidoc/spring-cloud-config.adoc | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/docs/src/main/asciidoc/spring-cloud-config.adoc b/docs/src/main/asciidoc/spring-cloud-config.adoc index f900bff6..c6b552c6 100644 --- a/docs/src/main/asciidoc/spring-cloud-config.adoc +++ b/docs/src/main/asciidoc/spring-cloud-config.adoc @@ -553,7 +553,7 @@ Vault is a tool for securely accessing secrets. A secret is anything that to which you want to tightly control access, such as API keys, passwords, certificates, and other sensitive information. Vault provides a unified interface to any secret while providing tight access control and recording a detailed audit log. **** -For more information on Vault, see the https://www.vaultproject.io/intro/index.html[Vault quick start guide]. +For more information on Vault, see the https://learn.hashicorp.com/vault/?track=getting-started#getting-started[Vault quick start guide]. To enable the config server to use a Vault backend, you can run your config server with the `vault` profile. For example, in your config server's `application.properties`, you can add `spring.profiles.active=vault`. @@ -609,8 +609,8 @@ First, place some data in you Vault, as shown in the following example: [source,sh] ---- -$ vault write secret/application foo=bar baz=bam -$ vault write secret/myapp foo=myappsbar +$ vault kv put secret/application foo=bar baz=bam +$ vault kv put secret/myapp foo=myappsbar ---- Second, make an HTTP request to your config server to retrieve the values, as shown in the following example: From cabc55469b49a0d1c852b3437ad99f947610f3f2 Mon Sep 17 00:00:00 2001 From: Ryan Baxter Date: Mon, 12 Nov 2018 12:22:22 -0500 Subject: [PATCH 16/18] Only override native default label if config server default label is not null. Fixes #1184 (#1185) --- .../NativeEnvironmentRepositoryFactory.java | 4 +- ...ativeEnvironmentRepositoryFactoryTest.java | 51 +++++++++++++++++++ 2 files changed, 54 insertions(+), 1 deletion(-) create mode 100644 spring-cloud-config-server/src/test/java/org/springframework/cloud/config/server/environment/NativeEnvironmentRepositoryFactoryTest.java diff --git a/spring-cloud-config-server/src/main/java/org/springframework/cloud/config/server/environment/NativeEnvironmentRepositoryFactory.java b/spring-cloud-config-server/src/main/java/org/springframework/cloud/config/server/environment/NativeEnvironmentRepositoryFactory.java index d8daa2b5..42ea7e8e 100644 --- a/spring-cloud-config-server/src/main/java/org/springframework/cloud/config/server/environment/NativeEnvironmentRepositoryFactory.java +++ b/spring-cloud-config-server/src/main/java/org/springframework/cloud/config/server/environment/NativeEnvironmentRepositoryFactory.java @@ -34,7 +34,9 @@ public class NativeEnvironmentRepositoryFactory implements EnvironmentRepository @Override public NativeEnvironmentRepository build(NativeEnvironmentProperties environmentProperties) { NativeEnvironmentRepository repository = new NativeEnvironmentRepository(environment, environmentProperties); - repository.setDefaultLabel(properties.getDefaultLabel()); + if(properties.getDefaultLabel() != null) { + repository.setDefaultLabel(properties.getDefaultLabel()); + } return repository; } } diff --git a/spring-cloud-config-server/src/test/java/org/springframework/cloud/config/server/environment/NativeEnvironmentRepositoryFactoryTest.java b/spring-cloud-config-server/src/test/java/org/springframework/cloud/config/server/environment/NativeEnvironmentRepositoryFactoryTest.java new file mode 100644 index 00000000..3c7ce758 --- /dev/null +++ b/spring-cloud-config-server/src/test/java/org/springframework/cloud/config/server/environment/NativeEnvironmentRepositoryFactoryTest.java @@ -0,0 +1,51 @@ +/* + * Copyright 2018 the original author or authors. + * + * Licensed 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.springframework.cloud.config.server.environment; + +import org.junit.Test; +import org.springframework.cloud.config.server.config.ConfigServerProperties; +import org.springframework.core.env.StandardEnvironment; + +import static org.junit.Assert.assertEquals; + + +/** + * @author Ryan Baxter + */ +public class NativeEnvironmentRepositoryFactoryTest { + + @Test + public void testDefaultLabel() { + ConfigServerProperties props = new ConfigServerProperties(); + props.setDefaultLabel("mylabel"); + NativeEnvironmentRepositoryFactory factory = new NativeEnvironmentRepositoryFactory(new StandardEnvironment(), props); + NativeEnvironmentProperties environmentProperties = new NativeEnvironmentProperties(); + NativeEnvironmentRepository repo = factory.build(environmentProperties); + assertEquals("mylabel", repo.getDefaultLabel()); + + factory = new NativeEnvironmentRepositoryFactory(new StandardEnvironment(), props); + environmentProperties = new NativeEnvironmentProperties(); + environmentProperties.setDefaultLabel("mynewlabel"); + repo = factory.build(environmentProperties); + assertEquals("mylabel", repo.getDefaultLabel()); + + factory = new NativeEnvironmentRepositoryFactory(new StandardEnvironment(), new ConfigServerProperties()); + environmentProperties = new NativeEnvironmentProperties(); + environmentProperties.setDefaultLabel("mynewlabel"); + repo = factory.build(environmentProperties); + assertEquals("mynewlabel", repo.getDefaultLabel()); + } +} \ No newline at end of file From f0ea304a87b03ca93a71ecbcd70c04d0b4111517 Mon Sep 17 00:00:00 2001 From: juneycha Date: Thu, 15 Nov 2018 09:56:27 +0900 Subject: [PATCH 17/18] Make 'JGitEnvironmentRepository.JGitFactory' public (#1188) --- .../config/server/environment/JGitEnvironmentRepository.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) 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 4e513b1b..0a7aae9c 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 @@ -686,7 +686,7 @@ public class JGitEnvironmentRepository extends AbstractScmEnvironmentRepository * Wraps the static method calls to {@link org.eclipse.jgit.api.Git} and * {@link org.eclipse.jgit.api.CloneCommand} allowing for easier unit testing. */ - static class JGitFactory { + public static class JGitFactory { public Git getGitByOpen(File file) throws IOException { Git git = Git.open(file); From e380b83026b3737be7b566cbc88be6dce5e20e3d Mon Sep 17 00:00:00 2001 From: ramaiahkk Date: Mon, 6 Aug 2018 12:51:43 -0400 Subject: [PATCH 18/18] #1103 java.lang.NullPointerException (#1104) java.lang.NullPointerException while decrypting due to value is null and still looking for cipher string. #1103 --- .../encryption/CipherEnvironmentEncryptor.java | 4 ++-- .../encryption/CipherEnvironmentEncryptorTests.java | 13 +++++++++++++ 2 files changed, 15 insertions(+), 2 deletions(-) diff --git a/spring-cloud-config-server/src/main/java/org/springframework/cloud/config/server/encryption/CipherEnvironmentEncryptor.java b/spring-cloud-config-server/src/main/java/org/springframework/cloud/config/server/encryption/CipherEnvironmentEncryptor.java index 04578abd..0e5b40fa 100644 --- a/spring-cloud-config-server/src/main/java/org/springframework/cloud/config/server/encryption/CipherEnvironmentEncryptor.java +++ b/spring-cloud-config-server/src/main/java/org/springframework/cloud/config/server/encryption/CipherEnvironmentEncryptor.java @@ -64,8 +64,8 @@ public class CipherEnvironmentEncryptor implements EnvironmentEncryptor { for (Map.Entry entry : new LinkedHashSet<>(map.entrySet())) { Object key = entry.getKey(); String name = key.toString(); - String value = entry.getValue().toString(); - if (value.startsWith("{cipher}")) { + if(entry.getValue() != null && entry.getValue().toString().startsWith("{cipher}")){ + String value = entry.getValue().toString(); map.remove(key); try { value = value.substring("{cipher}".length()); diff --git a/spring-cloud-config-server/src/test/java/org/springframework/cloud/config/server/encryption/CipherEnvironmentEncryptorTests.java b/spring-cloud-config-server/src/test/java/org/springframework/cloud/config/server/encryption/CipherEnvironmentEncryptorTests.java index f41c051f..ceddb803 100644 --- a/spring-cloud-config-server/src/test/java/org/springframework/cloud/config/server/encryption/CipherEnvironmentEncryptorTests.java +++ b/spring-cloud-config-server/src/test/java/org/springframework/cloud/config/server/encryption/CipherEnvironmentEncryptorTests.java @@ -90,5 +90,18 @@ public class CipherEnvironmentEncryptorTests { assertEquals(secret, this.encryptor.decrypt(environment).getPropertySources() .get(0).getSource().get(environment.getName())); } + @Test + public void shouldBeAbleToUseNullAsPropertyValue() { + + // when + Environment environment = new Environment("name", "profile", "label"); + environment.add(new PropertySource("a", + Collections.singletonMap(environment.getName(), + null))); + + // then + assertEquals(null, this.encryptor.decrypt(environment).getPropertySources() + .get(0).getSource().get(environment.getName())); + } }