mirror of
https://github.com/google/nomulus.git
synced 2025-06-24 13:30:54 +02:00
See [] for details, but basically, @FlowScope causes the Flow instance produced by flowProvider.get() in FlowRunner to be the same each time it's called, which leads to the instance being re-used when a transactional retry (e.g. for a ConcurrentModificationException) causes a flow to be attempted more than once. Flow is not meant to be re-used and certain flows fail at runtime when this happens, so the effect is that a CME now aborts most EPP requests, which is bad. This is a bit of a hacky fix; finding a better one is tracked in [] == TESTING == This is very hard to test because there isn't really a clean way to trigger a CME from within a flow's execution without hardcoding in assumptions about what a given flow is doing when it runs, and we can't easily supply a custom Flow for testing while also exercising the Flow daggerization process (since this bug only appears due to the specific way that dagger constructs the Provider<Flow>). Ideally a fix would improve the testability here as well. For now, I've manually tested this change by pasting code into FlowRunner that explicitly throws a ConcurrentModificationException after running the flow (similar to DryRunException), but only on the first transaction attempt. With @FlowScope on provideFlow(), this change reproduces the UnsupportedOperationException issue in many tests; once it's removed (i.e. with this CL submitted) the problem goes away. ------------- Created by MOE: https://github.com/google/moe MOE_MIGRATED_REVID=126226066 |
||
---|---|---|
.. | ||
async | ||
contact | ||
domain | ||
host | ||
picker | ||
poll | ||
session | ||
soy | ||
BUILD | ||
CheckApiAction.java | ||
EppConsoleAction.java | ||
EppController.java | ||
EppException.java | ||
EppRequestHandler.java | ||
EppRequestSource.java | ||
EppTlsAction.java | ||
EppToolAction.java | ||
EppXmlTransformer.java | ||
Flow.java | ||
FlowComponent.java | ||
FlowModule.java | ||
FlowRunner.java | ||
FlowScope.java | ||
GaeUserCredentials.java | ||
HttpSessionMetadata.java | ||
LoggedInFlow.java | ||
OwnedResourceMutateFlow.java | ||
OwnedResourceMutatePendingTransferFlow.java | ||
PasswordOnlyTransportCredentials.java | ||
ResourceAsyncDeleteFlow.java | ||
ResourceCheckFlow.java | ||
ResourceCreateFlow.java | ||
ResourceCreateOrMutateFlow.java | ||
ResourceDeleteFlow.java | ||
ResourceFlow.java | ||
ResourceFlowUtils.java | ||
ResourceInfoFlow.java | ||
ResourceMutateFlow.java | ||
ResourceMutatePendingTransferFlow.java | ||
ResourceQueryFlow.java | ||
ResourceSyncDeleteFlow.java | ||
ResourceTransferApproveFlow.java | ||
ResourceTransferCancelFlow.java | ||
ResourceTransferFlow.java | ||
ResourceTransferQueryFlow.java | ||
ResourceTransferRejectFlow.java | ||
ResourceTransferRequestFlow.java | ||
ResourceUpdateFlow.java | ||
SessionMetadata.java | ||
SingleResourceFlow.java | ||
StatelessRequestSessionMetadata.java | ||
TlsCredentials.java | ||
TransactionalFlow.java | ||
TransportCredentials.java |