Hi,

 

I am implementing distributed crawler engine using ignite in embedded mode.
Each crawler node have persistence enabled and assigned predefined
consistentId (dev-1, dev-2, dev-3, etc). Baseline topology (nodes which
store data) can change and configured using config file like this:

 

# Cluster settings

cluster {

    # Baseline topology (list of node ids which store data)

    baseline = [

        "dev-1",

        "dev-2",

        "dev-3"

    ]

}

 

Each crawler node startup implemented like this:

 

        // Start ignite

        ignite = Ignition.start(igniteConfig)

 

        // Activate

        ignite.cluster().active(true)

 

        // Validate baseline topology

        val baseline =
config.getStringAll(SpiderNodeOptions.CLUSTER_BASELINE).toSet()

        val curTopology = ignite.cluster().currentBaselineTopology()

        if (curTopology == null || baseline != curTopology.map {
it.consistentId().toString() }.toSet()) {

            // Wait for all new topology members to join

            log.info("Cluster baseline topology changed - waiting data nodes
to join...")

            while (true) {

                val nodes = mutableListOf<ClusterNode>()

                ignite.cluster().nodes().forEach {

                    if (baseline.contains(it.consistentId().toString()))

                        nodes.add(it)

                }

 

                if (nodes.size == baseline.size) {

                    log.info("Updated baseline topology of {} nodes",
value("baseline_size", nodes.size))

                    ignite.cluster().setBaselineTopology(nodes)

                    break

                }

                else

                    Thread.sleep(1000)

            }

        }

 

We can't set baseline topology before cluster activation so activate()
called first. Is it possible to set baseline topology without activating
cluster for first time ? Is it safe to activate node with the code above ?
It seems that we have misconfigured state in clean cluster between
activate() and waiting nodes to join when setBaseliteTopology not called
yet. The steps for upgrading topology will be 1) modify and commit config
files 2) shutdown all cluster members 3) update code 4) start each node one
by one. Is this the right way of reconfiguration ?

 

Thanks,

Michael

Reply via email to