@@ -3070,7 +3070,75 @@ var spanner = new Spanner(env);
30703070 } ) ;
30713071 } ) ;
30723072
3073- it ( 'should retry an aborted transaction' , function ( done ) {
3073+ it ( 'should retry an aborted txn when reading fails' , function ( done ) {
3074+ var query = `SELECT * FROM ${ table . name } ` ;
3075+ var attempts = 0 ;
3076+
3077+ var expectedRow = {
3078+ Key : 'k888' ,
3079+ NumberValue : null ,
3080+ StringValue : 'abc'
3081+ } ;
3082+
3083+ database . runTransaction ( function ( err , transaction ) {
3084+ assert . ifError ( err ) ;
3085+
3086+ transaction . run ( query , function ( err ) {
3087+ assert . ifError ( err ) ;
3088+
3089+ var action = attempts ++ === 0 ? runOtherTransaction : wrap ;
3090+
3091+ action ( function ( err ) {
3092+ assert . ifError ( err ) ;
3093+
3094+ transaction . run ( query , function ( err , rows ) {
3095+ assert . ifError ( err ) ;
3096+
3097+ transaction . insert ( table . name , {
3098+ Key : generateName ( 'key' ) ,
3099+ StringValue : generateName ( 'val' )
3100+ } ) ;
3101+
3102+ transaction . commit ( function ( err ) {
3103+ assert . ifError ( err ) ;
3104+
3105+ var lastRow = rows . pop ( ) . toJSON ( ) ;
3106+
3107+ assert . deepEqual ( lastRow , expectedRow ) ;
3108+ assert . strictEqual ( attempts , 2 ) ;
3109+
3110+ done ( ) ;
3111+ } ) ;
3112+ } ) ;
3113+ } ) ;
3114+ } ) ;
3115+ } ) ;
3116+
3117+ function runOtherTransaction ( callback ) {
3118+ database . runTransaction ( function ( err , transaction ) {
3119+ if ( err ) {
3120+ callback ( err ) ;
3121+ return ;
3122+ }
3123+
3124+ transaction . run ( query , function ( err ) {
3125+ if ( err ) {
3126+ callback ( err ) ;
3127+ return ;
3128+ }
3129+
3130+ transaction . insert ( table . name , expectedRow ) ;
3131+ transaction . commit ( callback ) ;
3132+ } ) ;
3133+ } ) ;
3134+ }
3135+
3136+ function wrap ( callback ) {
3137+ setImmediate ( callback ) ;
3138+ }
3139+ } ) ;
3140+
3141+ it ( 'should retry an aborted txn when commit fails' , function ( done ) {
30743142 var query = `SELECT * FROM ${ table . name } ` ;
30753143 var attempts = 0 ;
30763144
0 commit comments