Sergey,

Is it assumed that the baseline topology can be updated in runtime? Like, 
initially I had a cluster of 10 nodes but in a couple of weeks it was expanded 
to 15 nodes. How the baseline topology should be updated in this way? Will it 
happen automatically?

—
Denis

> On Aug 1, 2017, at 7:51 AM, Sergey Chugunov <sergey.chugu...@gmail.com> wrote:
> 
> Hello Ignite developers,
> 
> I would like to start a discussion about design of important improvement
> enabling automatic activation of cluster with durable store turned on [1].
> Also it will help us to solve an issue with data divergence (e.g. this may
> happen when half of the cluster goes down and updates are applied to
> another half, and than online and offline parts of the cluster switch).
> 
> The idea is to introduce a *BaselineTopology *concept. Simplifying it is
> just a collection of nodes that are expected to be in the cluster.
> 
> User establishes BaselineTopology (BT) on a cluster of desired
> configuration (I mean here number of nodes in the first place), after that
> this topology is persisted.
> 
> Once established BT represents a "frozen state" of topology which means
> that affinity function uses it instead of actual topology. As a result no
> rebalancing can happen until BT is reestablished.
> 
> Having BT established it is easy to implement automatic activation: when
> nodes of starting cluster join it one by one, a special listener may
> trigger cluster activation when composition of nodes matches with the one
> described by BaselineTopology.
> 
> API for BaselineTopology manipulation may look like this:
> 
> *Ignite::activation::establishBaselineTopology();*
> *Ignite::activation::establishBaselineTopology(BaselineTopology bltTop);*
> 
> Both methods will establish BT and activate cluster once it is established.
> 
> The first one allows user to establish BT using current topology. If any
> changes happen to the topology during establishing process, user will be
> notified and allowed to proceed or abort the procedure.
> 
> Second method allows to use some monitoring'n'management tools like
> WebConsole where user can prepare a list of nodes, using them create a BT
> and send to the cluster a command to finally establish it.
> 
> From high level BaselineTopology entity contains only collection of nodes:
> 
> *BaselineTopology {*
> *  Collection<TopologyNode> nodes;*
> *}*
> 
> *TopologyNode* here contains information about node - its consistent id and
> set of user attributes used to calculate affinity function.
> 
> In order to support data divergence prevention some kind of versioning must
> be added to BT entity to refuse joining new node but we can clarify it
> later.
> 
> Please provide your feedback/thoughts and ask any questions about suggested
> improvement.
> 
> Thanks,
> Sergey.
> 
> [1] https://issues.apache.org/jira/browse/IGNITE-5851

Reply via email to