summaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
authorZheng Chao <[email protected]>2022-11-28 20:15:15 +0800
committerZheng Chao <[email protected]>2022-11-28 20:15:15 +0800
commitbe7f7bda4fa675ed52a5a0b673b69004a04e0188 (patch)
treea30ba33584da181ee316e9502d5524c9fdc7a54d /src
parent7622a2949a8d73bbdb476f03ff8fcc50cf29709f (diff)
When cluster leader changes slot table, log changed slots.
Diffstat (limited to 'src')
-rw-r--r--src/swarmkv_keyspace.c27
1 files changed, 24 insertions, 3 deletions
diff --git a/src/swarmkv_keyspace.c b/src/swarmkv_keyspace.c
index 7dd9a11..874c9e5 100644
--- a/src/swarmkv_keyspace.c
+++ b/src/swarmkv_keyspace.c
@@ -991,7 +991,7 @@ void handle_failed_nodes(struct swarmkv_keyspace *ks, node_t *health_nodes, size
//See https://www.consul.io/docs/agent/options.html#kv_max_value_size.
int slots_rebalanced_per_node=slots_number_effect_by_failed_node/n_node;
int health_node_offset=0;
-
+
for(i=0; i<KEYSPACE_SLOT_NUM; i++)
{
old_owner=&(slots_copy[i].owner);
@@ -1005,7 +1005,6 @@ void handle_failed_nodes(struct swarmkv_keyspace *ks, node_t *health_nodes, size
//slot owner has left the cluster.
if(j==n_node)
{
-
if(k==slots_rebalanced_per_node && health_node_offset<n_node-1)
{
k=0;
@@ -1013,12 +1012,34 @@ void handle_failed_nodes(struct swarmkv_keyspace *ks, node_t *health_nodes, size
}
new_owner=health_nodes+health_node_offset;
node_copy(old_owner, new_owner);
- log_info(ks->logger, "leader %s changes slot %zu owner from %s to %s.", ks->self.addr, i, old_owner->addr, new_owner->addr);
k++;
}
}
+ int changed_slot_start=-1, changed_slot_end=-1;
+ node_t tmp_new_node, tmp_old_node;
if(slots_number_effect_by_failed_node)
{
+ for(i=0; i<KEYSPACE_SLOT_NUM; i++)
+ {
+ if(0!=node_compare(&ks->slot_rts[i].slot.owner, &slots_copy[i].owner))
+ {
+ if(changed_slot_start<0)
+ {
+ node_copy(&tmp_old_node, &ks->slot_rts[i].slot.owner);
+ changed_slot_start=i;
+ }
+ changed_slot_end=i;
+ node_copy(&tmp_new_node, &slots_copy[i].owner);
+ }
+ else if(changed_slot_end>0)
+ {
+ log_info(ks->logger, MODULE_SWARMKV_KEYSPACE,
+ "leader %s changes slot %d-%d owner from %s to %s.",
+ ks->self.addr, changed_slot_start, changed_slot_end,
+ tmp_old_node.addr, tmp_new_node.addr);
+ changed_slot_start=changed_slot_end=-1;
+ }
+ }
propagate_slot_table_async(ks, slots_copy, KEYSPACE_SLOT_NUM);
}
free(slots_copy);