Newer
Older
noctua / src / main / java / com / cube / replication / SimpleReplicationStrategy.java
@agalyaramadoss agalyaramadoss on 13 Feb 1 KB first commit
package com.cube.replication;

import com.cube.cluster.ClusterNode;
import java.util.ArrayList;
import java.util.List;

/**
 * Simple replication strategy that places replicas on consecutive nodes.
 * Good for single-datacenter deployments.
 */
public class SimpleReplicationStrategy implements ReplicationStrategy {
    
    @Override
    public List<ClusterNode> getReplicaNodes(String key, int replicationFactor, List<ClusterNode> availableNodes) {
        List<ClusterNode> replicas = new ArrayList<>();
        
        if (availableNodes.isEmpty()) {
            return replicas;
        }
        
        // Use consistent hashing to determine primary node
        int startIndex = getStartIndex(key, availableNodes.size());
        
        // Select consecutive nodes
        for (int i = 0; i < replicationFactor && i < availableNodes.size(); i++) {
            int nodeIndex = (startIndex + i) % availableNodes.size();
            ClusterNode node = availableNodes.get(nodeIndex);
            
            // Only add alive nodes
            if (node.isAlive()) {
                replicas.add(node);
            }
        }
        
        return replicas;
    }
    
    /**
     * Calculate start index using consistent hashing
     */
    private int getStartIndex(String key, int nodeCount) {
        // Simple hash function
        int hash = key.hashCode();
        // Ensure positive and within range
        return Math.abs(hash) % nodeCount;
    }
    
    @Override
    public String getName() {
        return "SimpleStrategy";
    }
}