Cluster: redis-trib, more info about open slots error.
Cluster: update configEpoch after manually messing with slots.
Cluster: ignore slot config changes if we are importing it.
Cluster: don't update slave's master if we don't know it.

There is no way we can update the slave's node->slaveof pointer if we
don't know the master (no node with such an ID in our tables).
redis-trib: log event after we have reference to 'master'.
Cluster: redis-trib fix: cover new case of open slot.

The case is the trivial one a single node claiming the slot as
migrating, without nodes claiming it as importing.
Cluster: remove debugging xputs from redis-trib.
Cluster: conditions to clear "migrating" on slot for SETSLOT ... NODE changed.

If the slot is manually assigned to another node, clear the migrating
status regardless of the fact it was previously assigned to us or not,
as long as we no longer have keys for this slot.

This avoid a race during slots migration that may leave the slot in
migrating status in the source node, since it received an update message
from the destination node that is already claiming the slot.

This way we are sure that redis-trib at the end of the slot migration is
always able to close the slot correctly.
Cluster: fsync at every SETSLOT command puts too pressure on disks.

During slots migration redis-trib can send a number of SETSLOT commands.
Fsyncing every time is a bit too much in production as verified
empirically.

To make sure configs are fsynced on all nodes after a resharding
redis-trib may send something like CLUSTER CONFSYNC.

In this case fsyncs were not providing too much value since anyway
processes can crash in the middle of the resharding of an hash slot, and
redis-trib should be able to recover from this condition anyway.
Cluster: on resharding upgrade version of receiving node.

The node receiving the hash slot needs to have a version that wins over
the other versions in order to force the ownership of the slot.

However the current code is far from perfect since a failover can happen
during the manual resharding. The fix is a work in progress but the
bottom line is that the new version must either be voted as usually,
set by redis-trib manually after it makes sure can't be used by other
nodes, or reserved configEpochs could be used for manual operations (for
example odd versions could be never used by slaves and are always used
by CLUSTER SETSLOT NODE).
Cluster: always increment the configEpoch in SETNODE after import.

Removed a stale conditional preventing the configEpoch from incrementing
after the import in certain conditions. Since the master got a new slot
it should always claim a new configuration.
Cluster: clusterSetStartupEpoch() made more generally useful.

The actual goal of the function was to get the max configEpoch found in
the cluster, so make it general by removing the assignment of the max
epoch to currentEpoch that is useful only at startup.
Cluster: configEpoch assignment in SETNODE improved.

Avoid to trash a configEpoch for every slot migrated if this node has
already the max configEpoch across the cluster.

Still work to do in this area but this avoids both ending with a very
high configEpoch without any reason and to flood the system with fsyncs.
Cluster: redis-trib fix: handling of another trivial case.
Cluster: UPDATE messages are the norm and verbose.

Logging them at WARNING level was of little utility and of sure disturb.
Cluster: clusterDelNode(): remove node from master's slaves.