From 7fbaafec978aff5591e5fd13fc3e20ce41393f07 Mon Sep 17 00:00:00 2001 From: Ned Twigg Date: Mon, 20 Sep 2021 12:05:14 -0700 Subject: [PATCH 1/2] Protect GradleProvisioner.RootProvisioner from a race condition generated by multithreaded requests. --- .../gradle/spotless/GradleProvisioner.java | 18 ++++++++++++++---- 1 file changed, 14 insertions(+), 4 deletions(-) diff --git a/plugin-gradle/src/main/java/com/diffplug/gradle/spotless/GradleProvisioner.java b/plugin-gradle/src/main/java/com/diffplug/gradle/spotless/GradleProvisioner.java index a638d50f87..ba65fb8504 100644 --- a/plugin-gradle/src/main/java/com/diffplug/gradle/spotless/GradleProvisioner.java +++ b/plugin-gradle/src/main/java/com/diffplug/gradle/spotless/GradleProvisioner.java @@ -48,13 +48,23 @@ static class RootProvisioner implements Provisioner { @Override public Set provisionWithTransitives(boolean withTransitives, Collection mavenCoordinates) { Request req = new Request(withTransitives, mavenCoordinates); - Set result = cache.get(req); + Set result; + synchronized (cache) { + result = cache.get(req); + } if (result != null) { return result; } else { - result = GradleProvisioner.fromRootBuildscript(rootProject).provisionWithTransitives(req.withTransitives, req.mavenCoords); - cache.put(req, result); - return result; + synchronized (cache) { + result = cache.get(req); + if (result != null) { + return result; + } else { + result = GradleProvisioner.fromRootBuildscript(rootProject).provisionWithTransitives(req.withTransitives, req.mavenCoords); + cache.put(req, result); + return result; + } + } } } } From 2d8f9fbdb085b31a314ef5258dc9ee08099860e7 Mon Sep 17 00:00:00 2001 From: Ned Twigg Date: Mon, 20 Sep 2021 12:22:12 -0700 Subject: [PATCH 2/2] Update changelog. --- plugin-gradle/CHANGES.md | 6 ++++++ 1 file changed, 6 insertions(+) diff --git a/plugin-gradle/CHANGES.md b/plugin-gradle/CHANGES.md index 3b4fa6e346..805b520a35 100644 --- a/plugin-gradle/CHANGES.md +++ b/plugin-gradle/CHANGES.md @@ -10,6 +10,12 @@ We adhere to the [keepachangelog](https://keepachangelog.com/en/1.0.0/) format ( * `eclipse-jdt` from `4.19` to `4.20` * `eclipse-wtp` from `4.18` to `4.20` +### Fixed +* Large parallel multiproject builds could sometimes generate hard-to-reproduce errors below (reported in [#941](https://github.com/diffplug/spotless/pull/942), attempted fix in [#942](https://github.com/diffplug/spotless/pull/942)). + * `:spotlessInternalRegisterDependencies task failed.` + * `Cannot add a configuration with name 'spotless-1911100560'` +* Spotless does not [yet](https://github.com/diffplug/spotless/pull/721) support configuration-cache, but now it can never interfere with configuration-cache for other tasks. ([#720](https://github.com/diffplug/spotless/pull/720)) + ## [5.15.0] - 2021-09-04 ### Added * Added support for `google-java-format`'s `skip-reflowing-long-strings` option ([#929](https://github.com/diffplug/spotless/pull/929))