Looks like DataShard currently replies with a very generic error:
if (!IsStateNewReadAllowed()) {
replyWithError(
Ydb::StatusIds::OVERLOADED,
TStringBuilder() << "Shard " << TabletID() << " is splitting/merging"
<< " (node# " << SelfId().NodeId() << " state# " << DatashardStateName(State) << ")");
return;
}
Which causes ReadActor (LookupActor?) to keep retrying with an expotential backoff without resolving new partitioning. I've seen this causing 3+ seconds latency (due to expotential backoff) until it finally requests the new shard.