If you’re doing replication to multiple targets from a single source, then yeah, you probably want --no-sync-snap because otherwise you end up with sync snaps from foreign hosts, and no way to destroy them.
The alternative is to just create cron jobs or systemd tasks to destroy the foreign snapshots. If you’re doing pull replication from source A to targets B and C like this:
C<--A-->B
Then you’ll have sync snaps in two forms: @syncoid_B_datestamp
and @syncoid_C_datestamp
. They’ll wind up on all three hosts, as replication from C<–A picks up snapshots left on A by the B<–A replication, and vice versa.
This isn’t a problem on source host A, because target hosts B and C and each destroy their stale sync snapshots on host A. But it’s a problem for B and C, because neither has a connection to the other, so neither will prune copies of its sync snaps on the other.
However, you can do something like this (this is a quick one-off, NOT a suggested full production script):
for snap in `zfs list -t snap | grep syncoid_C | awk '{print $1}' | xargs -I% zfs destroy %`
When run on target host B, the above command would find and destroy all of B’s sync snaps, which is safe enough since C does not have a direct replication relationship with B. If you want to get fancier, you could cause your cleanup scripts on B and C to only look for foreign sync snaps older than [ period of time you’d like to keep them ].
Please remember, again, this is a simplified example NOT a complete recommended script. It MIGHT be sufficient as-is on SOME people’s systems, but there are holes in it such as “what happens if you’ve got a dataset with spaces in the name”, which that very simple example command would absolutely cough up a hairball and die on.