We will have a consistent state when a CHECKPOINT_END record
is received. After the first CHECKPOINT_END record is received,
we will buffer all records until the next CHECKPOINT_END record
is received. So if the checkpoint() callback returns XGR_CHECKPOINT_FAILOVER,
we only can do failover if ctx->restore.buffer_all_records is
true.
Signed-off-by: Wen Congyang <wency@cn.fujitsu.com>
Acked-by: Ian Campbell <ian.campbell@citrix.com>
Reviewed-by: Andrew Cooper <andrew.cooper3@citrix.com>
break;
case XGR_CHECKPOINT_FAILOVER:
- rc = BROKEN_CHANNEL;
+ if ( ctx->restore.buffer_all_records )
+ rc = BROKEN_CHANNEL;
+ else
+ /* We don't have a consistent state */
+ rc = -1;
goto err;
default: /* Other fatal error */