Suppose there are two databases, $D_1$ and $D_2$.  Let's further assume $D_1$ is always up and $D_2$ can be down sometimes. When it goes up again, it has to restart.$D_1$ is filled by say a dozen other systems with event messages.  Those messages have IDs and might be updated or deleted. $D_2$ needs to be in sync with $D_1$, which is realized by:on restart, pull all data from $D_1$.  During this pull $D_1$ is locked, thus all senders to $D_1$ need to wait.otherwise $D_1$ always informs $D_2$ of updates by sending all updates. (During fetching, the data is locked of course.)Now the question: what kind of blocking behaviour can we expect from $D_1$ and $D_2$?In particular I find the following corner case interesting and instructive:$D_1$ currently has a long list of events and the sender systems send a lot of new events/updates. $D_2$ just went down, goes up now and needs to fetch events from $D_1$, thus blocking the whole chain.
Uni-directional synchronization and locking issues
distributed systems;database theory