mirror of
https://github.com/google/nomulus.git
synced 2025-07-09 04:33:28 +02:00
Lazily instantiate jpaTm (#491)
* 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.
This commit is contained in:
parent
bbacdb9704
commit
7bb69e50c5
3 changed files with 18 additions and 6 deletions
|
@ -132,13 +132,13 @@ abstract class JpaTransactionManagerRule extends ExternalResource {
|
|||
properties,
|
||||
extraEntityClasses);
|
||||
JpaTransactionManagerImpl txnManager = new JpaTransactionManagerImpl(emf, clock);
|
||||
cachedTm = TransactionManagerFactory.jpaTm;
|
||||
TransactionManagerFactory.jpaTm = txnManager;
|
||||
cachedTm = TransactionManagerFactory.jpaTm();
|
||||
TransactionManagerFactory.setJpaTmForTesting(txnManager);
|
||||
}
|
||||
|
||||
@Override
|
||||
public void after() {
|
||||
TransactionManagerFactory.jpaTm = cachedTm;
|
||||
TransactionManagerFactory.setJpaTmForTesting(cachedTm);
|
||||
if (emf != null) {
|
||||
emf.close();
|
||||
emf = null;
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue