HBASE-26768, there is another case replication in RegionReplicationSink would be suspend:
For RegionReplicationSink, when there is a replication error , RegionReplicationSink invokes MemStoreFlusher#requestFlush to request a flush, and after receiving the FlushAction#START_FLUSH or FlushAction#CANNOT_FLUSH flush marker, it would resume the replication. But when MemStoreFlusher flushing, it invokes following method HRegion.flushcache with the writeFlushRequestWalMarker set to false:
When writeFlushRequestWalMarker is set to false, HRegion.flushcache does not write the FlushAction#CANNOT_FLUSH flush marker to WAL when the memstore is empty, just as following HRegion.writeFlushRequestMarkerToWAL illustrated:
so when there is a replication error when the memstore is empty(eg. replicating the FlushAction#START_FLUSH or FlushAction#COMMIT_FLUSH ), the replication may suspend until next memstore flush,even though later there are user writes and it could replicate normally.
I simulate this problem in the PR , and for writeFlushRequestWalMarker paramter, it is introduced by
HBASE-11580 and just only determines whether or not writing the FlushAction#CANNOT_FLUSH flush marker to WAL when the memstore is empty, so I think for simplicity, we could set it to true always for MemStoreFlusher.