mirror of
https://github.com/google/nomulus.git
synced 2025-07-21 02:06:00 +02:00
* Lazily load jpaTm This fixes an exception we were seeing in production where commands that only implemented CommandWithRemoteApi (and that had nothing to do with Cloud SQL) were nevertheless trying to initialize a JPA TM instance, and then failing. That stacktrace looked like: com.google.api.client.http.HttpResponseException: 400 Bad Request { "error": "invalid_grant", "error_description": "Bad Request" } at com.google.api.client.http.HttpRequest.execute(HttpRequest.java:1113) at com.google.auth.oauth2.UserCredentials.refreshAccessToken(UserCredentials.java:193) at com.google.auth.oauth2.OAuth2Credentials.refresh(OAuth2Credentials.java:165) at com.google.auth.oauth2.OAuth2Credentials.getRequestMetadata(OAuth2Credentials.java:151) at com.google.auth.http.HttpCredentialsAdapter.initialize(HttpCredentialsAdapter.java:96) at com.google.api.client.http.HttpRequestFactory.buildRequest(HttpRequestFactory.java:88) at com.google.api.client.googleapis.services.AbstractGoogleClientRequest.buildHttpRequest(AbstractGoogleClientRequest.java:423) at com.google.api.client.googleapis.services.AbstractGoogleClientRequest.executeUnparsed(AbstractGoogleClientRequest.java:542) at com.google.api.client.googleapis.services.AbstractGoogleClientRequest.executeUnparsed(AbstractGoogleClientRequest.java:475) at com.google.api.client.googleapis.services.AbstractGoogleClientRequest.execute(AbstractGoogleClientRequest.java:592) at google.registry.keyring.kms.KmsConnectionImpl.attemptDecrypt(KmsConnectionImpl.java:163) at google.registry.keyring.kms.KmsConnectionImpl.lambda$decrypt$0(KmsConnectionImpl.java:148) at google.registry.util.Retrier.callWithRetry(Retrier.java:153) at google.registry.util.Retrier.callWithRetry(Retrier.java:130) at google.registry.util.Retrier.callWithRetry(Retrier.java:95) at google.registry.keyring.kms.KmsConnectionImpl.decrypt(KmsConnectionImpl.java:147) at google.registry.keyring.kms.KmsKeyring.getDecryptedData(KmsKeyring.java:209) at google.registry.keyring.kms.KmsKeyring.getString(KmsKeyring.java:178) at google.registry.keyring.kms.KmsKeyring.getToolsCloudSqlPassword(KmsKeyring.java:100) at google.registry.persistence.PersistenceModule.providesNomulusToolJpaTm(PersistenceModule.java:124) at google.registry.persistence.PersistenceModule_ProvidesNomulusToolJpaTmFactory.proxyProvidesNomulusToolJpaTm(PersistenceModule_ProvidesNomulusToolJpaTmFactory.java:61) at google.registry.persistence.PersistenceModule_ProvidesNomulusToolJpaTmFactory.get(PersistenceModule_ProvidesNomulusToolJpaTmFactory.java:39) at google.registry.persistence.PersistenceModule_ProvidesNomulusToolJpaTmFactory.get(PersistenceModule_ProvidesNomulusToolJpaTmFactory.java:12) at dagger.internal.DoubleCheck.get(DoubleCheck.java:47) at google.registry.persistence.DaggerPersistenceComponent.nomulusToolJpaTransactionManager(DaggerPersistenceComponent.java:168) at google.registry.persistence.transaction.TransactionManagerFactory.createJpaTransactionManager(TransactionManagerFactory.java:38) at google.registry.persistence.transaction.TransactionManagerFactory.<clinit>(TransactionManagerFactory.java:29) at google.registry.model.registry.Registries.lambda$createFreshCache$2(Registries.java:60) at com.google.common.base.Suppliers$ExpiringMemoizingSupplier.get(Suppliers.java:243) at google.registry.model.registry.Registries.getTlds(Registries.java:85) at google.registry.model.registry.Registries.assertTldsExist(Registries.java:112) at google.registry.tools.CountDomainsCommand.run(CountDomainsCommand.java:41) at google.registry.tools.RegistryCli.runCommand(RegistryCli.java:243) at google.registry.tools.RegistryCli.run(RegistryCli.java:168) at google.registry.tools.RegistryTool.main(RegistryTool.java:127) The TL;DR is that RegistryCli was over-eagerly creating the jpaTm, because there's no reason the Registries cache (which is Datastore-only) should ever need it, but because this cache is using the Datastore transaction manager, the other one was being created too. |
||
---|---|---|
.. | ||
gradle/dependency-locks | ||
src | ||
build.gradle | ||
Dockerfile | ||
karma.conf.js |