Dmitriy,

The idea is interesting however I cannot come up with a clear use case
which can be widely adopted.
I would give users a simple API at first to cover 80% of their needs and
then collect some feedback and start thinking about adding new
functionality.

Makes sense?

Sergey.

On Thu, Aug 31, 2017 at 3:55 AM, Dmitriy Setrakyan <dsetrak...@apache.org>
wrote:

> Hm... Can we also ask user to optionally provide a predicate which will
> receive a collection of nodes started so far and return true if the
> activation should happen? Will it be useful?
>
> On Wed, Aug 30, 2017 at 6:28 PM, Sergey Chugunov <
> sergey.chugu...@gmail.com>
> wrote:
>
> > Nick,
> >
> > As I summed up in this thread above, calling setter for initial
> activation
> > nodes is not the only option:
> >
> >    1. user starts up new cluster of desired number of nodes and activates
> >    it using existing API.
> >    BLT is created with all nodes presented in the cluster at the moment
> of
> >    activation, no API is needed;
> >
> >    2. user prepares BLT using web-console or visor CMD tools and sets it
> to
> >    the cluster. New API setter is needed:
> >    Ignite.activation().setInitialActivationNodes(Collection<ClusterNode>
> >    nodes);
> >
> >    3. user provides via static configuration a list of nodes that are
> >    expected to be in the cluster.
> >    User starts nodes one by one; when all preconfigured nodes are started
> >    cluster is activated and BLT is created.
> >    As list of nodes may be huge it is provided via separate file to avoid
> >    flooding main configuration.
> >
> > So the option you proposed is already in the list.
> >
> > As for idea of activating cluster based only on number of nodes may be
> > risky.
> > E.g. if user starts up with data stored on disk and unexpected node joins
> > the topology.
> > Cluster will get activated with N-1 nodes where all the data is presented
> > and one node completely empty. Data loss may happen in such scenario.
> >
> > Thanks,
> > Sergey.
> >
> >
> > On Wed, Aug 30, 2017 at 4:23 PM, Nick Pordash <nickpord...@gmail.com>
> > wrote:
> >
> > > How is a user expected to produce a collection of ClusterNode prior to
> > all
> > > of the expected nodes joining? Users don't create instances of this, so
> > as
> > > far as I can tell it would have to be retrieved from IgniteCluster.
> > > However, would doing that and calling the proposed method be really any
> > > different than calling Ignite.activate and using the current set of
> > server
> > > nodes as that collection?
> > >
> > > From a user's perspective is it really necessary that specific nodes
> need
> > > to be identified vs saying that they expect N server nodes to be in the
> > > cluster for auto activation?
> > >
> > > -Nick
> > >
> > > On Wed, Aug 30, 2017, 1:23 AM Sergey Chugunov <
> sergey.chugu...@gmail.com
> > >
> > > wrote:
> > >
> > > > Dmitriy,
> > > >
> > > > Now I see your point and I think you're right.
> > > >
> > > > We can give end-user a simple setter like
> > > > Ignite::activation::setInitialActivationNodes(
> Collection<ClusterNode>
> > > > nodes) to provide collection of nodes that grid must reach to
> activate
> > > > automatically.
> > > >
> > > > And then using the collection we'll create BaselineTopology
> abstraction
> > > > internally.
> > > >
> > > > As a result user won't be exposed to our internal abstractions and
> will
> > > > work with intuitive concept of collection of nodes.
> > > >
> > > > Thanks,
> > > > Sergey.
> > > >
> > > >
> > > > On Mon, Aug 28, 2017 at 4:39 PM, Dmitriy Setrakyan <
> > > dsetrak...@apache.org>
> > > > wrote:
> > > >
> > > > > Sergey, the interface you are suggesting is internal, not external.
> > Why
> > > > > should user ever see it or care about it?
> > > > >
> > > > > D.
> > > > >
> > > > > On Mon, Aug 28, 2017 at 3:18 PM, Sergey Chugunov <
> > > > > sergey.chugu...@gmail.com>
> > > > > wrote:
> > > > >
> > > > > > Dmitriy,
> > > > > >
> > > > > > It was my misunderstanding, I believe that setter is not enough
> and
> > > we
> > > > > need
> > > > > > a full-fledged entity.
> > > > > >
> > > > > > We should also be able to check if BLTs are compatible. Interface
> > > looks
> > > > > > like this and use case for this functionality is described below.
> > > > > >
> > > > > > interface BaselineTopology {
> > > > > >    Collection<ClusterNode> nodes();
> > > > > >    boolean isCompatibleWith(BaselineTopology blt);
> > > > > > }
> > > > > >
> > > > > > Let's consider the following scenario:
> > > > > >
> > > > > >    1. We have a grid with N nodes: it is up, active and has data
> in
> > > it.
> > > > > ->
> > > > > >    BLT #1 created.
> > > > > >    2. We shutdown the grid. Then divide it into two parts:
> > Part1_grid
> > > > and
> > > > > >    Part2_grid.
> > > > > >    3. We start and activate Part1_grid . Topology has changed ->
> > > BLT#2
> > > > > >    created.
> > > > > >    After that we shutdown that Part1_grid.
> > > > > >    4. We start and activate Part2_grid. Topology also has changed
> > ->
> > > > > BLT#3
> > > > > >    created.
> > > > > >    5. Then we start Part1_grid and it's nodes try to join
> > Part2_grid.
> > > > > >
> > > > > >
> > > > > > If join is successful we have an undefined state of the resulting
> > > grid:
> > > > > > values for the same key may (and will) differ between grid parts.
> > > > > >
> > > > > > So to prevent this we should keep nodes with BLT#2 from joining
> the
> > > > grid
> > > > > > with BLT#3. And we should fail nodes with an error message.
> > > > > >
> > > > > > Thanks,
> > > > > > Sergey.
> > > > > >
> > > > > >
> > > > > >
> > > > > >
> > > > > > On Wed, Aug 23, 2017 at 5:47 AM, Dmitriy Setrakyan <
> > > > > dsetrak...@apache.org>
> > > > > > wrote:
> > > > > >
> > > > > > > Sergey, I am still confused. What is the BaselineTopology
> > interface
> > > > in
> > > > > > your
> > > > > > > example? I thought that you agreed with me that we simply need
> a
> > > > setter
> > > > > > for
> > > > > > > activation nodes, no?
> > > > > > >
> > > > > > > D.
> > > > > > >
> > > > > > > On Tue, Aug 22, 2017 at 4:47 AM, Sergey Chugunov <
> > > > > > > sergey.chugu...@gmail.com>
> > > > > > > wrote:
> > > > > > >
> > > > > > > > Dmitriy,
> > > > > > > >
> > > > > > > > As I understand you use the term "minimalActivationNodes" as
> a
> > > > > synonym
> > > > > > > for
> > > > > > > > BaselineTopology concept.
> > > > > > > > In that case I agree with you that we can replace both
> > > "establish*"
> > > > > > > methods
> > > > > > > > with a simple setter method (see below in summary).
> > > > > > > >
> > > > > > > > Summing up the whole discussion I see the functionality as
> > > > following:
> > > > > > > >
> > > > > > > > New concept BaselineTopology is introduced. The main features
> > it
> > > > > > enables
> > > > > > > > are:
> > > > > > > >
> > > > > > > >    1. automatic activation of cluster;
> > > > > > > >
> > > > > > > >    2. easy management of cluster topology changes (planned
> > nodes
> > > > > > > >    maintenance, adding new nodes etc);
> > > > > > > >
> > > > > > > >    3. eliminating of rebalancing traffic on short-term node
> > > > failures.
> > > > > > > >
> > > > > > > >
> > > > > > > > Use cases to create BLT:
> > > > > > > >
> > > > > > > >    1. user starts up new cluster of desired number of nodes
> and
> > > > > > activates
> > > > > > > >    it using existing API. BLT is created with all nodes
> > presented
> > > > in
> > > > > > the
> > > > > > > >    cluster at the moment of activation, no API is needed;
> > > > > > > >
> > > > > > > >    2. user prepares BLT using web-console or visor CMD tools
> > and
> > > > sets
> > > > > > it
> > > > > > > to
> > > > > > > >    the cluster. New API setter is needed:
> > > > > > > >    Ignite.activation().setBaselineTopology(BaselineTopology
> > > blt);
> > > > > > > >
> > > > > > > >    3. user provides via static configuration a list of nodes
> > that
> > > > are
> > > > > > > >    expected to be in the cluster.
> > > > > > > >    User starts nodes one by one; when all preconfigured nodes
> > are
> > > > > > started
> > > > > > > >    cluster is activated and BLT is created.
> > > > > > > >    As list of nodes may be huge it is provided via separate
> > file
> > > to
> > > > > > avoid
> > > > > > > >    flooding main configuration.
> > > > > > > >
> > > > > > > >
> > > > > > > > Igniters, does this description match with your understanding
> > of
> > > > > > > > functionality? If it does I'll create a set of tickets and
> > start
> > > > > > working
> > > > > > > on
> > > > > > > > implementation.
> > > > > > > >
> > > > > > > > Thanks,
> > > > > > > > Sergey.
> > > > > > > >
> > > > > > > >
> > > > > > > > On Sat, Aug 19, 2017 at 5:41 PM, Dmitriy Setrakyan <
> > > > > > > dsetrak...@apache.org>
> > > > > > > > wrote:
> > > > > > > >
> > > > > > > > > I still do not see why anyone would explicitly call these 2
> > > > > methods:
> > > > > > > > >
> > > > > > > > > *Ignite::activation::establishBaselineTopology();*
> > > > > > > > > *Ignite::activation::establishBaselineTopology(
> > > BaselineTopology
> > > > > > > > bltTop);*
> > > > > > > > >
> > > > > > > > > For example, if a web console, or some other admin process,
> > > want
> > > > to
> > > > > > > > > automatically set currently started nodes as the baseline
> > > > topology,
> > > > > > > > > shouldn't they just call a setter for
> minimalActivationNodes?
> > > > > > > > >
> > > > > > > > > D.
> > > > > > > > >
> > > > > > > > > On Fri, Aug 18, 2017 at 10:18 AM, Alexey Dmitriev <
> > > > > > > > admitr...@gridgain.com>
> > > > > > > > > wrote:
> > > > > > > > >
> > > > > > > > > > API is proposed in the head of the thread by Sergey, as I
> > > > > > understood:
> > > > > > > > > > ______________________________________________________
> > > > > > > > > >
> > > > > > > > > > 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.
> > > > > > > > > > ____________________________________________
> > > > > > > > > >
> > > > > > > > > >
> > > > > > > > > >
> > > > > > > > > > --
> > > > > > > > > > View this message in context: http://apache-ignite-
> > > > > > > > > > developers.2346864.n4.nabble.
> com/Cluster-auto-activation-
> > > > > > > > > > design-proposal-tp20295p21066.html
> > > > > > > > > > Sent from the Apache Ignite Developers mailing list
> archive
> > > at
> > > > > > > > > Nabble.com.
> > > > > > > > > >
> > > > > > > > >
> > > > > > > >
> > > > > > >
> > > > > >
> > > > >
> > > >
> > >
> >
>

Reply via email to