@@ -284,21 +284,13 @@ public void mutateRow(
284284 return ;
285285 }
286286
287- // TODO(developer): evaluate if we want to manually unpack the proto into a model, instead of
288- // using fromProto. Same for the other methods.
289287 RowMutation mutation = RowMutation .fromProto (request .getRequest ());
290288 try {
291289 // This response is empty.
292290 client .dataClient ().mutateRow (mutation );
293291 } catch (ApiException e ) {
294292 responseObserver .onNext (
295- MutateRowResult .newBuilder ()
296- .setStatus (
297- com .google .rpc .Status .newBuilder ()
298- .setCode (e .getStatusCode ().getCode ().ordinal ())
299- .setMessage (e .getMessage ())
300- .build ())
301- .build ());
293+ MutateRowResult .newBuilder ().setStatus (convertStatus (e )).build ());
302294 responseObserver .onCompleted ();
303295 return ;
304296 } catch (StatusRuntimeException e ) {
@@ -351,13 +343,7 @@ public void bulkMutateRows(
351343 return ;
352344 } catch (ApiException e ) {
353345 responseObserver .onNext (
354- MutateRowsResult .newBuilder ()
355- .setStatus (
356- com .google .rpc .Status .newBuilder ()
357- .setCode (e .getStatusCode ().getCode ().ordinal ())
358- .setMessage (e .getMessage ())
359- .build ())
360- .build ());
346+ MutateRowsResult .newBuilder ().setStatus (convertStatus (e )).build ());
361347 responseObserver .onCompleted ();
362348 return ;
363349 } catch (StatusRuntimeException e ) {
@@ -410,13 +396,7 @@ public void readRow(ReadRowRequest request, StreamObserver<RowResult> responseOb
410396 }
411397 } catch (ApiException e ) {
412398 responseObserver .onNext (
413- RowResult .newBuilder ()
414- .setStatus (
415- com .google .rpc .Status .newBuilder ()
416- .setCode (e .getStatusCode ().getCode ().ordinal ())
417- .setMessage (e .getMessage ())
418- .build ())
419- .build ());
399+ RowResult .newBuilder ().setStatus (convertStatus (e )).build ());
420400 responseObserver .onCompleted ();
421401 return ;
422402 } catch (StatusRuntimeException e ) {
@@ -461,13 +441,7 @@ public void readRows(ReadRowsRequest request, StreamObserver<RowsResult> respons
461441 resultBuilder .setStatus (com .google .rpc .Status .getDefaultInstance ()).build ());
462442 } catch (ApiException e ) {
463443 responseObserver .onNext (
464- RowsResult .newBuilder ()
465- .setStatus (
466- com .google .rpc .Status .newBuilder ()
467- .setCode (e .getStatusCode ().getCode ().ordinal ())
468- .setMessage (e .getMessage ())
469- .build ())
470- .build ());
444+ RowsResult .newBuilder ().setStatus (convertStatus (e )).build ());
471445 responseObserver .onCompleted ();
472446 return ;
473447 } catch (StatusRuntimeException e ) {
@@ -585,13 +559,7 @@ public void sampleRowKeys(
585559 keyOffsets = client .dataClient ().sampleRowKeys (tableId );
586560 } catch (ApiException e ) {
587561 responseObserver .onNext (
588- SampleRowKeysResult .newBuilder ()
589- .setStatus (
590- com .google .rpc .Status .newBuilder ()
591- .setCode (e .getStatusCode ().getCode ().ordinal ())
592- .setMessage (e .getMessage ())
593- .build ())
594- .build ());
562+ SampleRowKeysResult .newBuilder ().setStatus (convertStatus (e )).build ());
595563 responseObserver .onCompleted ();
596564 return ;
597565 } catch (StatusRuntimeException e ) {
@@ -631,13 +599,7 @@ public void checkAndMutateRow(
631599 matched = client .dataClient ().checkAndMutateRow (mutation );
632600 } catch (ApiException e ) {
633601 responseObserver .onNext (
634- CheckAndMutateRowResult .newBuilder ()
635- .setStatus (
636- com .google .rpc .Status .newBuilder ()
637- .setCode (e .getStatusCode ().getCode ().ordinal ())
638- .setMessage (e .getMessage ())
639- .build ())
640- .build ());
602+ CheckAndMutateRowResult .newBuilder ().setStatus (convertStatus (e )).build ());
641603 responseObserver .onCompleted ();
642604 return ;
643605 } catch (StatusRuntimeException e ) {
@@ -682,13 +644,7 @@ public void readModifyWriteRow(
682644 }
683645 } catch (ApiException e ) {
684646 responseObserver .onNext (
685- RowResult .newBuilder ()
686- .setStatus (
687- com .google .rpc .Status .newBuilder ()
688- .setCode (e .getStatusCode ().getCode ().ordinal ())
689- .setMessage (e .getMessage ())
690- .build ())
691- .build ());
647+ RowResult .newBuilder ().setStatus (convertStatus (e )).build ());
692648 responseObserver .onCompleted ();
693649 return ;
694650 } catch (StatusRuntimeException e ) {
@@ -745,13 +701,7 @@ public void executeQuery(
745701 return ;
746702 } catch (ApiException e ) {
747703 responseObserver .onNext (
748- ExecuteQueryResult .newBuilder ()
749- .setStatus (
750- com .google .rpc .Status .newBuilder ()
751- .setCode (e .getStatusCode ().getCode ().ordinal ())
752- .setMessage (e .getMessage ())
753- .build ())
754- .build ());
704+ ExecuteQueryResult .newBuilder ().setStatus (convertStatus (e )).build ());
755705 responseObserver .onCompleted ();
756706 return ;
757707 } catch (StatusRuntimeException e ) {
@@ -845,6 +795,18 @@ public ManagedChannelBuilder apply(ManagedChannelBuilder input) {
845795 .build ();
846796 }
847797
798+ // Cleanly forwards server errors through the test proxy. Internal client errors
799+ // are wrapped in an UNKNOWN status.
800+ private static com .google .rpc .Status convertStatus (ApiException e ) {
801+ com .google .rpc .Status status = StatusProto .fromThrowable (e );
802+ if (status != null ) {
803+ return status ;
804+ }
805+
806+ return com .google .rpc .Status .newBuilder ().setCode (e .getStatusCode ().getCode ().ordinal ()).setMessage (e .getMessage ())
807+ .build ();
808+ }
809+
848810 private CredentialsProvider getCredentialsProvider (String accessToken ) {
849811 if (accessToken .isEmpty ()) {
850812 return NoCredentialsProvider .create ();
0 commit comments