Slackbot
04/22/2023, 12:55 AMChris Lee
04/22/2023, 6:12 AMZac Sweers
04/22/2023, 6:36 PMinit
or registration creation action also shows that multiple instances are created.Chris Lee
04/22/2023, 6:59 PMZac Sweers
04/22/2023, 6:59 PMChris Lee
04/22/2023, 7:01 PMproject
is passed in as a parameter, so presumably it could be any project. Perhaps the code should be project.rootProject.layout.buildDirectory
.Zac Sweers
04/22/2023, 7:03 PMChris Lee
04/22/2023, 7:04 PMChris Lee
04/22/2023, 7:04 PMChris Lee
04/22/2023, 7:06 PMZac Sweers
04/22/2023, 7:07 PMZac Sweers
04/22/2023, 7:07 PMChris Lee
04/22/2023, 7:08 PMZac Sweers
04/22/2023, 7:09 PMChris Lee
04/22/2023, 7:17 PMBuildServiceRegistration<?, ?> existing = registrations.findByName(name);
if (existing != null) {
// TODO - assert same type
// TODO - assert same parameters
return uncheckedNonnullCast(existing.getService());
}
Hard to see how that path is failing; perhaps something on the resolution / use of the service.Chris Lee
04/22/2023, 7:30 PMBuildServiceRegistry
(either injected or via project.gradle.sharedServices) is a Gradle-build singleton and stores a named set of services - one service instance per name, making it impossible to store multiple instances of a service (in a given BuildServiceRegistry). Perhaps somehow there are multiple BuildServiceRegistry instances…Zac Sweers
04/22/2023, 7:32 PMZac Sweers
04/22/2023, 7:32 PMChris Lee
04/22/2023, 7:33 PMZac Sweers
04/22/2023, 7:34 PMChris Lee
04/22/2023, 7:35 PMChris Lee
04/22/2023, 7:37 PMregisterIfAbsent
only called once (other resolutions are lookups-by-name that fail if the name is not present and don’t create a service instance) it’s an unknown who would instantiate subsequent instances of the services. Having that stack (and perhaps one for the first - good - instantiation for comparison) may show us where in the Gradle internals its creating these.Chris Lee
04/22/2023, 7:40 PMprivate T getInstance() {
listener.beforeGet(this);
synchronized (this) {
if (instance == null) {
instance = instantiate();
}
}
return instance.get();
}
Chris Lee
04/22/2023, 7:41 PMZac Sweers
04/22/2023, 7:47 PMZac Sweers
04/22/2023, 7:48 PMChris Lee
04/22/2023, 7:48 PMZac Sweers
04/22/2023, 7:48 PMZac Sweers
04/22/2023, 7:54 PMZac Sweers
04/22/2023, 8:13 PM~/dev/android/personal/CatchUp z/testBuildServicesIssues ± gw :app:assembleDebug --debug | grep SlackTools
2023-04-22T16:11:47.453-0400 [DEBUG] [SlackTools] [SlackTools] SlackTools created
2023-04-22T16:11:47.453-0400 [DEBUG] [SlackTools] [SlackTools] Multiple instances of SlackTools created. This is likely a bug in the build. New count is 3
Chris Lee
04/22/2023, 8:13 PMZac Sweers
04/22/2023, 8:13 PMZac Sweers
04/22/2023, 8:15 PMChris Lee
04/22/2023, 8:21 PM➜ CatchUp git:(z/testBuildServicesIssues) ./gradlew :app:assembleDebug --debug | grep SlackTools
2023-04-22T13:21:02.356-0700 [DEBUG] [SlackTools] [SlackTools] SlackTools created
2023-04-22T13:21:02.356-0700 [DEBUG] [SlackTools] [SlackTools] Multiple instances of SlackTools created. This is likely a bug in the build. New count is 7
Zac Sweers
04/22/2023, 8:34 PMZac Sweers
04/22/2023, 8:35 PM2023-04-22T16:35:12.483-0400 [DEBUG] [SlackTools] [SlackTools] SlackTools created
2023-04-22T16:35:12.483-0400 [DEBUG] [SlackTools] [SlackTools] Multiple instances of SlackTools created. This is likely a bug in the build. New count is 27
java.lang.Throwable
at slack.gradle.SlackTools.<init>(SlackTools.kt:83)
at slack.gradle.SlackTools$Inject.<init>(Unknown Source)
at java.base/jdk.internal.reflect.DirectConstructorHandleAccessor.newInstance(DirectConstructorHandleAccessor.java:67)
at java.base/java.lang.reflect.Constructor.newInstanceWithCaller(Constructor.java:500)
at java.base/java.lang.reflect.Constructor.newInstance(Constructor.java:484)
at org.gradle.internal.instantiation.generator.AsmBackedClassGenerator$InvokeConstructorStrategy.newInstance(AsmBackedClassGenerator.java:1993)
at org.gradle.internal.instantiation.generator.AbstractClassGenerator$GeneratedClassImpl$GeneratedConstructorImpl.newInstance(AbstractClassGenerator.java:512)
at org.gradle.internal.instantiation.generator.DependencyInjectingInstantiator.doCreate(DependencyInjectingInstantiator.java:64)
at org.gradle.internal.instantiation.generator.DependencyInjectingInstantiator.newInstance(DependencyInjectingInstantiator.java:55)
at org.gradle.api.services.internal.RegisteredBuildServiceProvider.instantiate(RegisteredBuildServiceProvider.java:142)
at org.gradle.api.services.internal.RegisteredBuildServiceProvider.instantiate(RegisteredBuildServiceProvider.java:131)
at org.gradle.api.services.internal.RegisteredBuildServiceProvider.getInstance(RegisteredBuildServiceProvider.java:118)
at org.gradle.api.services.internal.RegisteredBuildServiceProvider.calculateOwnValue(RegisteredBuildServiceProvider.java:111)
at org.gradle.api.internal.provider.AbstractMinimalProvider.calculateOwnPresentValue(AbstractMinimalProvider.java:73)
at org.gradle.api.internal.provider.AbstractMinimalProvider.get(AbstractMinimalProvider.java:93)
at slack.gradle.SlackRootPlugin$configureRootProject$3$1$1.execute(SlackRootPlugin.kt:117)
at slack.gradle.SlackRootPlugin$configureRootProject$3$1$1.execute(SlackRootPlugin.kt:116)
at com.gradle.enterprise.gradleplugin.internal.extension.a$4.run(SourceFile:172)
at java.base/java.util.concurrent.Executors$RunnableAdapter.call(Executors.java:577)
at java.base/java.util.concurrent.FutureTask.run(FutureTask.java:317)
at java.base/java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1144)
at java.base/java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:642)
at java.base/java.lang.Thread.run(Thread.java:1589)
Zac Sweers
04/22/2023, 8:36 PMChris Lee
04/22/2023, 8:36 PMZac Sweers
04/22/2023, 8:36 PMZac Sweers
04/22/2023, 8:36 PMChris Lee
04/22/2023, 8:37 PMRegisteredBuildServiceProvider.calculateOwnValue
- those are the .get() calls to the provider that should be memoizedZac Sweers
04/22/2023, 8:38 PMChris Lee
04/22/2023, 8:38 PM--no-daemon
to sidestep cachingZac Sweers
04/22/2023, 8:39 PMat com.gradle.enterprise.gradleplugin.internal.extension.a$4.run(SourceFile:172)
in the later one. It's as if the gradle enterprise plugin is re-initting itChris Lee
04/22/2023, 8:39 PMChris Lee
04/22/2023, 8:39 PMZac Sweers
04/22/2023, 8:39 PMZac Sweers
04/22/2023, 8:39 PMZac Sweers
04/22/2023, 8:40 PMAutoCloseable
)Chris Lee
04/22/2023, 8:40 PMZac Sweers
04/22/2023, 8:41 PMChris Lee
04/22/2023, 8:41 PMChris Lee
04/22/2023, 8:42 PMChris Lee
04/22/2023, 8:46 PMZac Sweers
04/22/2023, 8:46 PMZac Sweers
04/22/2023, 8:46 PMbackground
thing is tricky because it serializes all the inputsChris Lee
04/22/2023, 8:47 PMZac Sweers
04/22/2023, 9:01 PMZac Sweers
04/22/2023, 9:01 PMZac Sweers
04/22/2023, 9:01 PMChris Lee
04/22/2023, 9:08 PMZac Sweers
04/22/2023, 9:17 PMZac Sweers
04/22/2023, 9:18 PMChris Lee
04/22/2023, 9:20 PMZac Sweers
04/22/2023, 9:31 PMZac Sweers
04/22/2023, 9:31 PMZac Sweers
04/22/2023, 9:31 PMZac Sweers
04/23/2023, 7:30 PMZac Sweers
04/23/2023, 7:30 PMZac Sweers
04/23/2023, 7:30 PM