下面列出了io.grpc.Status#fromCode ( ) 实例代码,或者点击链接到github查看源代码,也可以在右侧发表评论。
@Test
public void headersRead_closed() {
ClientStream mockStream1 = mock(ClientStream.class);
doReturn(mockStream1).when(retriableStreamRecorder).newSubstream(0);
InOrder inOrder = inOrder(retriableStreamRecorder);
retriableStream.start(masterListener);
ArgumentCaptor<ClientStreamListener> sublistenerCaptor1 =
ArgumentCaptor.forClass(ClientStreamListener.class);
verify(mockStream1).start(sublistenerCaptor1.capture());
sublistenerCaptor1.getValue().headersRead(new Metadata());
inOrder.verify(retriableStreamRecorder).postCommit();
Status status = Status.fromCode(RETRIABLE_STATUS_CODE_1);
Metadata metadata = new Metadata();
sublistenerCaptor1.getValue().closed(status, metadata);
verify(masterListener).closed(status, metadata);
inOrder.verify(retriableStreamRecorder, never()).postCommit();
}
@Test
public void unretriableClosed_cancel() {
ClientStream mockStream1 = mock(ClientStream.class);
doReturn(mockStream1).when(retriableStreamRecorder).newSubstream(0);
InOrder inOrder = inOrder(retriableStreamRecorder);
retriableStream.start(masterListener);
ArgumentCaptor<ClientStreamListener> sublistenerCaptor1 =
ArgumentCaptor.forClass(ClientStreamListener.class);
verify(mockStream1).start(sublistenerCaptor1.capture());
// closed
Status status = Status.fromCode(NON_RETRIABLE_STATUS_CODE);
Metadata metadata = new Metadata();
sublistenerCaptor1.getValue().closed(status, metadata);
inOrder.verify(retriableStreamRecorder).postCommit();
verify(masterListener).closed(status, metadata);
// cancel
retriableStream.cancel(Status.CANCELLED);
inOrder.verify(retriableStreamRecorder, never()).postCommit();
}
@Test
public void droppedShouldNeverRetry() {
ClientStream mockStream1 = mock(ClientStream.class);
ClientStream mockStream2 = mock(ClientStream.class);
doReturn(mockStream1).when(retriableStreamRecorder).newSubstream(0);
doReturn(mockStream2).when(retriableStreamRecorder).newSubstream(1);
// start
retriableStream.start(masterListener);
verify(retriableStreamRecorder).newSubstream(0);
ArgumentCaptor<ClientStreamListener> sublistenerCaptor1 =
ArgumentCaptor.forClass(ClientStreamListener.class);
verify(mockStream1).start(sublistenerCaptor1.capture());
// drop and verify no retry
Status status = Status.fromCode(RETRIABLE_STATUS_CODE_1);
sublistenerCaptor1.getValue().closed(status, DROPPED, new Metadata());
verifyNoMoreInteractions(mockStream1, mockStream2);
verify(retriableStreamRecorder).postCommit();
verify(masterListener).closed(same(status), any(Metadata.class));
}
@Test
public void headersRead_closed() {
ClientStream mockStream1 = mock(ClientStream.class);
doReturn(mockStream1).when(retriableStreamRecorder).newSubstream(0);
InOrder inOrder = inOrder(retriableStreamRecorder);
retriableStream.start(masterListener);
ArgumentCaptor<ClientStreamListener> sublistenerCaptor1 =
ArgumentCaptor.forClass(ClientStreamListener.class);
verify(mockStream1).start(sublistenerCaptor1.capture());
sublistenerCaptor1.getValue().headersRead(new Metadata());
inOrder.verify(retriableStreamRecorder).postCommit();
Status status = Status.fromCode(RETRIABLE_STATUS_CODE_1);
Metadata metadata = new Metadata();
sublistenerCaptor1.getValue().closed(status, metadata);
verify(masterListener).closed(status, metadata);
inOrder.verify(retriableStreamRecorder, never()).postCommit();
}
@Test
public void unretriableClosed_cancel() {
ClientStream mockStream1 = mock(ClientStream.class);
doReturn(mockStream1).when(retriableStreamRecorder).newSubstream(0);
InOrder inOrder = inOrder(retriableStreamRecorder);
retriableStream.start(masterListener);
ArgumentCaptor<ClientStreamListener> sublistenerCaptor1 =
ArgumentCaptor.forClass(ClientStreamListener.class);
verify(mockStream1).start(sublistenerCaptor1.capture());
// closed
Status status = Status.fromCode(NON_RETRIABLE_STATUS_CODE);
Metadata metadata = new Metadata();
sublistenerCaptor1.getValue().closed(status, metadata);
inOrder.verify(retriableStreamRecorder).postCommit();
verify(masterListener).closed(status, metadata);
// cancel
retriableStream.cancel(Status.CANCELLED);
inOrder.verify(retriableStreamRecorder, never()).postCommit();
}
@Test
public void droppedShouldNeverRetry() {
ClientStream mockStream1 = mock(ClientStream.class);
ClientStream mockStream2 = mock(ClientStream.class);
doReturn(mockStream1).when(retriableStreamRecorder).newSubstream(0);
doReturn(mockStream2).when(retriableStreamRecorder).newSubstream(1);
// start
retriableStream.start(masterListener);
verify(retriableStreamRecorder).newSubstream(0);
ArgumentCaptor<ClientStreamListener> sublistenerCaptor1 =
ArgumentCaptor.forClass(ClientStreamListener.class);
verify(mockStream1).start(sublistenerCaptor1.capture());
// drop and verify no retry
Status status = Status.fromCode(RETRIABLE_STATUS_CODE_1);
sublistenerCaptor1.getValue().closed(status, DROPPED, new Metadata());
verifyNoMoreInteractions(mockStream1, mockStream2);
verify(retriableStreamRecorder).postCommit();
verify(masterListener).closed(same(status), any(Metadata.class));
}
@Test
public void retry_headersRead_closed() {
ClientStream mockStream1 = mock(ClientStream.class);
doReturn(mockStream1).when(retriableStreamRecorder).newSubstream(0);
InOrder inOrder = inOrder(retriableStreamRecorder);
retriableStream.start(masterListener);
ArgumentCaptor<ClientStreamListener> sublistenerCaptor1 =
ArgumentCaptor.forClass(ClientStreamListener.class);
verify(mockStream1).start(sublistenerCaptor1.capture());
// retry
ClientStream mockStream2 = mock(ClientStream.class);
doReturn(mockStream2).when(retriableStreamRecorder).newSubstream(1);
sublistenerCaptor1.getValue().closed(Status.fromCode(RETRIABLE_STATUS_CODE_1), new Metadata());
fakeClock.forwardTime((long) (INITIAL_BACKOFF_IN_SECONDS * FAKE_RANDOM), TimeUnit.SECONDS);
ArgumentCaptor<ClientStreamListener> sublistenerCaptor2 =
ArgumentCaptor.forClass(ClientStreamListener.class);
verify(mockStream2).start(sublistenerCaptor2.capture());
inOrder.verify(retriableStreamRecorder, never()).postCommit();
// headersRead
sublistenerCaptor2.getValue().headersRead(new Metadata());
inOrder.verify(retriableStreamRecorder).postCommit();
// closed even with retriable status
Status status = Status.fromCode(RETRIABLE_STATUS_CODE_1);
Metadata metadata = new Metadata();
sublistenerCaptor2.getValue().closed(status, metadata);
verify(masterListener).closed(status, metadata);
inOrder.verify(retriableStreamRecorder, never()).postCommit();
}
@Test
public void cancel_closed() {
ClientStream mockStream1 = mock(ClientStream.class);
doReturn(mockStream1).when(retriableStreamRecorder).newSubstream(0);
InOrder inOrder = inOrder(retriableStreamRecorder);
retriableStream.start(masterListener);
ArgumentCaptor<ClientStreamListener> sublistenerCaptor1 =
ArgumentCaptor.forClass(ClientStreamListener.class);
verify(mockStream1).start(sublistenerCaptor1.capture());
// cancel
retriableStream.cancel(Status.CANCELLED);
inOrder.verify(retriableStreamRecorder).postCommit();
ArgumentCaptor<Status> statusCaptor = ArgumentCaptor.forClass(Status.class);
verify(mockStream1).cancel(statusCaptor.capture());
assertEquals(Status.CANCELLED.getCode(), statusCaptor.getValue().getCode());
assertEquals(CANCELLED_BECAUSE_COMMITTED, statusCaptor.getValue().getDescription());
// closed even with retriable status
Status status = Status.fromCode(RETRIABLE_STATUS_CODE_1);
Metadata metadata = new Metadata();
sublistenerCaptor1.getValue().closed(status, metadata);
inOrder.verify(retriableStreamRecorder, never()).postCommit();
}
@Test
public void retry_cancel_closed() {
ClientStream mockStream1 = mock(ClientStream.class);
doReturn(mockStream1).when(retriableStreamRecorder).newSubstream(0);
InOrder inOrder = inOrder(retriableStreamRecorder);
retriableStream.start(masterListener);
ArgumentCaptor<ClientStreamListener> sublistenerCaptor1 =
ArgumentCaptor.forClass(ClientStreamListener.class);
verify(mockStream1).start(sublistenerCaptor1.capture());
// retry
ClientStream mockStream2 = mock(ClientStream.class);
doReturn(mockStream2).when(retriableStreamRecorder).newSubstream(1);
sublistenerCaptor1.getValue().closed(Status.fromCode(RETRIABLE_STATUS_CODE_1), new Metadata());
fakeClock.forwardTime((long) (INITIAL_BACKOFF_IN_SECONDS * FAKE_RANDOM), TimeUnit.SECONDS);
ArgumentCaptor<ClientStreamListener> sublistenerCaptor2 =
ArgumentCaptor.forClass(ClientStreamListener.class);
verify(mockStream2).start(sublistenerCaptor2.capture());
inOrder.verify(retriableStreamRecorder, never()).postCommit();
// cancel
retriableStream.cancel(Status.CANCELLED);
inOrder.verify(retriableStreamRecorder).postCommit();
ArgumentCaptor<Status> statusCaptor = ArgumentCaptor.forClass(Status.class);
verify(mockStream2).cancel(statusCaptor.capture());
assertEquals(Status.CANCELLED.getCode(), statusCaptor.getValue().getCode());
assertEquals(CANCELLED_BECAUSE_COMMITTED, statusCaptor.getValue().getDescription());
// closed
Status status = Status.fromCode(NON_RETRIABLE_STATUS_CODE);
Metadata metadata = new Metadata();
sublistenerCaptor2.getValue().closed(status, metadata);
inOrder.verify(retriableStreamRecorder, never()).postCommit();
}
@Test
public void retry_unretriableClosed_cancel() {
ClientStream mockStream1 = mock(ClientStream.class);
doReturn(mockStream1).when(retriableStreamRecorder).newSubstream(0);
InOrder inOrder = inOrder(retriableStreamRecorder);
retriableStream.start(masterListener);
ArgumentCaptor<ClientStreamListener> sublistenerCaptor1 =
ArgumentCaptor.forClass(ClientStreamListener.class);
verify(mockStream1).start(sublistenerCaptor1.capture());
// retry
ClientStream mockStream2 = mock(ClientStream.class);
doReturn(mockStream2).when(retriableStreamRecorder).newSubstream(1);
sublistenerCaptor1.getValue().closed(Status.fromCode(RETRIABLE_STATUS_CODE_1), new Metadata());
fakeClock.forwardTime((long) (INITIAL_BACKOFF_IN_SECONDS * FAKE_RANDOM), TimeUnit.SECONDS);
ArgumentCaptor<ClientStreamListener> sublistenerCaptor2 =
ArgumentCaptor.forClass(ClientStreamListener.class);
verify(mockStream2).start(sublistenerCaptor2.capture());
inOrder.verify(retriableStreamRecorder, never()).postCommit();
// closed
Status status = Status.fromCode(NON_RETRIABLE_STATUS_CODE);
Metadata metadata = new Metadata();
sublistenerCaptor2.getValue().closed(status, metadata);
inOrder.verify(retriableStreamRecorder).postCommit();
verify(masterListener).closed(status, metadata);
// cancel
retriableStream.cancel(Status.CANCELLED);
inOrder.verify(retriableStreamRecorder, never()).postCommit();
}
private Runnable retriable(final Code code) {
return new Runnable() {
boolean failed = false;
@Override
public void run() {
if (!failed) {
failed = true;
throw new StatusRuntimeException(Status.fromCode(code));
}
}
};
}
@Test
public void retry_headersRead_closed() {
ClientStream mockStream1 = mock(ClientStream.class);
doReturn(mockStream1).when(retriableStreamRecorder).newSubstream(0);
InOrder inOrder = inOrder(retriableStreamRecorder);
retriableStream.start(masterListener);
ArgumentCaptor<ClientStreamListener> sublistenerCaptor1 =
ArgumentCaptor.forClass(ClientStreamListener.class);
verify(mockStream1).start(sublistenerCaptor1.capture());
// retry
ClientStream mockStream2 = mock(ClientStream.class);
doReturn(mockStream2).when(retriableStreamRecorder).newSubstream(1);
sublistenerCaptor1.getValue().closed(Status.fromCode(RETRIABLE_STATUS_CODE_1), new Metadata());
fakeClock.forwardTime((long) (INITIAL_BACKOFF_IN_SECONDS * FAKE_RANDOM), TimeUnit.SECONDS);
ArgumentCaptor<ClientStreamListener> sublistenerCaptor2 =
ArgumentCaptor.forClass(ClientStreamListener.class);
verify(mockStream2).start(sublistenerCaptor2.capture());
inOrder.verify(retriableStreamRecorder, never()).postCommit();
// headersRead
sublistenerCaptor2.getValue().headersRead(new Metadata());
inOrder.verify(retriableStreamRecorder).postCommit();
// closed even with retriable status
Status status = Status.fromCode(RETRIABLE_STATUS_CODE_1);
Metadata metadata = new Metadata();
sublistenerCaptor2.getValue().closed(status, metadata);
verify(masterListener).closed(status, metadata);
inOrder.verify(retriableStreamRecorder, never()).postCommit();
}
@Test
public void cancel_closed() {
ClientStream mockStream1 = mock(ClientStream.class);
doReturn(mockStream1).when(retriableStreamRecorder).newSubstream(0);
InOrder inOrder = inOrder(retriableStreamRecorder);
retriableStream.start(masterListener);
ArgumentCaptor<ClientStreamListener> sublistenerCaptor1 =
ArgumentCaptor.forClass(ClientStreamListener.class);
verify(mockStream1).start(sublistenerCaptor1.capture());
// cancel
retriableStream.cancel(Status.CANCELLED);
inOrder.verify(retriableStreamRecorder).postCommit();
ArgumentCaptor<Status> statusCaptor = ArgumentCaptor.forClass(Status.class);
verify(mockStream1).cancel(statusCaptor.capture());
assertEquals(Status.CANCELLED.getCode(), statusCaptor.getValue().getCode());
assertEquals(CANCELLED_BECAUSE_COMMITTED, statusCaptor.getValue().getDescription());
// closed even with retriable status
Status status = Status.fromCode(RETRIABLE_STATUS_CODE_1);
Metadata metadata = new Metadata();
sublistenerCaptor1.getValue().closed(status, metadata);
inOrder.verify(retriableStreamRecorder, never()).postCommit();
}
@Test
public void retry_cancel_closed() {
ClientStream mockStream1 = mock(ClientStream.class);
doReturn(mockStream1).when(retriableStreamRecorder).newSubstream(0);
InOrder inOrder = inOrder(retriableStreamRecorder);
retriableStream.start(masterListener);
ArgumentCaptor<ClientStreamListener> sublistenerCaptor1 =
ArgumentCaptor.forClass(ClientStreamListener.class);
verify(mockStream1).start(sublistenerCaptor1.capture());
// retry
ClientStream mockStream2 = mock(ClientStream.class);
doReturn(mockStream2).when(retriableStreamRecorder).newSubstream(1);
sublistenerCaptor1.getValue().closed(Status.fromCode(RETRIABLE_STATUS_CODE_1), new Metadata());
fakeClock.forwardTime((long) (INITIAL_BACKOFF_IN_SECONDS * FAKE_RANDOM), TimeUnit.SECONDS);
ArgumentCaptor<ClientStreamListener> sublistenerCaptor2 =
ArgumentCaptor.forClass(ClientStreamListener.class);
verify(mockStream2).start(sublistenerCaptor2.capture());
inOrder.verify(retriableStreamRecorder, never()).postCommit();
// cancel
retriableStream.cancel(Status.CANCELLED);
inOrder.verify(retriableStreamRecorder).postCommit();
ArgumentCaptor<Status> statusCaptor = ArgumentCaptor.forClass(Status.class);
verify(mockStream2).cancel(statusCaptor.capture());
assertEquals(Status.CANCELLED.getCode(), statusCaptor.getValue().getCode());
assertEquals(CANCELLED_BECAUSE_COMMITTED, statusCaptor.getValue().getDescription());
// closed
Status status = Status.fromCode(NON_RETRIABLE_STATUS_CODE);
Metadata metadata = new Metadata();
sublistenerCaptor2.getValue().closed(status, metadata);
inOrder.verify(retriableStreamRecorder, never()).postCommit();
}
@Test
public void retry_unretriableClosed_cancel() {
ClientStream mockStream1 = mock(ClientStream.class);
doReturn(mockStream1).when(retriableStreamRecorder).newSubstream(0);
InOrder inOrder = inOrder(retriableStreamRecorder);
retriableStream.start(masterListener);
ArgumentCaptor<ClientStreamListener> sublistenerCaptor1 =
ArgumentCaptor.forClass(ClientStreamListener.class);
verify(mockStream1).start(sublistenerCaptor1.capture());
// retry
ClientStream mockStream2 = mock(ClientStream.class);
doReturn(mockStream2).when(retriableStreamRecorder).newSubstream(1);
sublistenerCaptor1.getValue().closed(Status.fromCode(RETRIABLE_STATUS_CODE_1), new Metadata());
fakeClock.forwardTime((long) (INITIAL_BACKOFF_IN_SECONDS * FAKE_RANDOM), TimeUnit.SECONDS);
ArgumentCaptor<ClientStreamListener> sublistenerCaptor2 =
ArgumentCaptor.forClass(ClientStreamListener.class);
verify(mockStream2).start(sublistenerCaptor2.capture());
inOrder.verify(retriableStreamRecorder, never()).postCommit();
// closed
Status status = Status.fromCode(NON_RETRIABLE_STATUS_CODE);
Metadata metadata = new Metadata();
sublistenerCaptor2.getValue().closed(status, metadata);
inOrder.verify(retriableStreamRecorder).postCommit();
verify(masterListener).closed(status, metadata);
// cancel
retriableStream.cancel(Status.CANCELLED);
inOrder.verify(retriableStreamRecorder, never()).postCommit();
}
@Test
public void hedging_transparentRetryNotAllowed() {
ClientStream mockStream1 = mock(ClientStream.class);
ClientStream mockStream2 = mock(ClientStream.class);
ClientStream mockStream3 = mock(ClientStream.class);
when(retriableStreamRecorder.newSubstream(anyInt()))
.thenReturn(mockStream1, mockStream2, mockStream3);
hedgingStream.start(masterListener);
ArgumentCaptor<ClientStreamListener> sublistenerCaptor1 =
ArgumentCaptor.forClass(ClientStreamListener.class);
verify(mockStream1).start(sublistenerCaptor1.capture());
fakeClock.forwardTime(HEDGING_DELAY_IN_SECONDS, TimeUnit.SECONDS);
ArgumentCaptor<ClientStreamListener> sublistenerCaptor2 =
ArgumentCaptor.forClass(ClientStreamListener.class);
verify(mockStream2).start(sublistenerCaptor2.capture());
fakeClock.forwardTime(HEDGING_DELAY_IN_SECONDS, TimeUnit.SECONDS);
ArgumentCaptor<ClientStreamListener> sublistenerCaptor3 =
ArgumentCaptor.forClass(ClientStreamListener.class);
verify(mockStream3).start(sublistenerCaptor3.capture());
sublistenerCaptor2.getValue()
.closed(Status.fromCode(NON_FATAL_STATUS_CODE_1), new Metadata());
// no more transparent retry
Status status = Status.fromCode(FATAL_STATUS_CODE);
Metadata metadata = new Metadata();
sublistenerCaptor3.getValue()
.closed(status, REFUSED, metadata);
ArgumentCaptor<Status> statusCaptor = ArgumentCaptor.forClass(Status.class);
verify(mockStream1).cancel(statusCaptor.capture());
assertEquals(Status.CANCELLED.getCode(), statusCaptor.getValue().getCode());
assertEquals(CANCELLED_BECAUSE_COMMITTED, statusCaptor.getValue().getDescription());
verify(retriableStreamRecorder).postCommit();
verify(masterListener).closed(status, metadata);
}
public FallbackStrategyBuildResult(
String buildTarget,
StrategyBuildResult remoteStrategyBuildResult,
BuildStrategyContext strategyContext,
BuckEventBus eventBus,
boolean localFallbackEnabled,
boolean localFallbackDisabledOnCorruptedArtifacts,
boolean localFallbackEnabledForCompletedAction) {
this.lock = new Object();
this.localStrategyBuildResult = Optional.empty();
this.buildTarget = buildTarget;
this.remoteStrategyBuildResult = remoteStrategyBuildResult;
this.strategyContext = strategyContext;
this.combinedFinalResult = SettableFuture.create();
this.hasCancellationBeenRequested = false;
this.eventBus = eventBus;
this.startedEvent = LocalFallbackEvent.createStarted(buildTarget);
this.remoteBuildResult = Optional.empty();
this.remoteExecutionTimer = Stopwatch.createStarted();
this.remoteBuildErrorMessage = Optional.empty();
this.localFallbackEnabled = localFallbackEnabled;
this.localFallbackDisabledOnCorruptedArtifacts = localFallbackDisabledOnCorruptedArtifacts;
this.localFallbackEnabledForCompletedAction = localFallbackEnabledForCompletedAction;
this.remoteGrpcStatus = Status.fromCode(Status.Code.OK);
this.lastNonTerminalState = State.WAITING;
this.exitCode = OptionalInt.empty();
this.remoteExecutionMetadata = Optional.empty();
this.eventBus.post(this.startedEvent);
this.remoteStrategyBuildResult
.getBuildResult()
.addListener(
() -> onMainBuildFinished(remoteStrategyBuildResult.getBuildResult()),
MoreExecutors.directExecutor());
}
@Test
public void hedging_transparentRetry() {
ClientStream mockStream1 = mock(ClientStream.class);
ClientStream mockStream2 = mock(ClientStream.class);
ClientStream mockStream3 = mock(ClientStream.class);
ClientStream mockStream4 = mock(ClientStream.class);
when(retriableStreamRecorder.newSubstream(anyInt()))
.thenReturn(mockStream1, mockStream2, mockStream3, mockStream4);
hedgingStream.start(masterListener);
ArgumentCaptor<ClientStreamListener> sublistenerCaptor1 =
ArgumentCaptor.forClass(ClientStreamListener.class);
verify(mockStream1).start(sublistenerCaptor1.capture());
fakeClock.forwardTime(HEDGING_DELAY_IN_SECONDS, TimeUnit.SECONDS);
ArgumentCaptor<ClientStreamListener> sublistenerCaptor2 =
ArgumentCaptor.forClass(ClientStreamListener.class);
verify(mockStream2).start(sublistenerCaptor2.capture());
fakeClock.forwardTime(HEDGING_DELAY_IN_SECONDS, TimeUnit.SECONDS);
ArgumentCaptor<ClientStreamListener> sublistenerCaptor3 =
ArgumentCaptor.forClass(ClientStreamListener.class);
verify(mockStream3).start(sublistenerCaptor3.capture());
// transparent retry for hedge2
sublistenerCaptor2.getValue()
.closed(Status.fromCode(FATAL_STATUS_CODE), REFUSED, new Metadata());
ArgumentCaptor<ClientStreamListener> sublistenerCaptor4 =
ArgumentCaptor.forClass(ClientStreamListener.class);
verify(mockStream4).start(sublistenerCaptor4.capture());
assertEquals(1, fakeClock.numPendingTasks());
// no more transparent retry
Status status = Status.fromCode(FATAL_STATUS_CODE);
Metadata metadata = new Metadata();
sublistenerCaptor3.getValue()
.closed(status, REFUSED, metadata);
ArgumentCaptor<Status> statusCaptor = ArgumentCaptor.forClass(Status.class);
verify(mockStream1).cancel(statusCaptor.capture());
assertEquals(Status.CANCELLED.getCode(), statusCaptor.getValue().getCode());
assertEquals(CANCELLED_BECAUSE_COMMITTED, statusCaptor.getValue().getDescription());
verify(mockStream4).cancel(statusCaptor.capture());
assertEquals(Status.CANCELLED.getCode(), statusCaptor.getValue().getCode());
assertEquals(CANCELLED_BECAUSE_COMMITTED, statusCaptor.getValue().getDescription());
verify(retriableStreamRecorder).postCommit();
verify(masterListener).closed(status, metadata);
}