Return-Path: X-Original-To: archive-asf-public-internal@cust-asf2.ponee.io Delivered-To: archive-asf-public-internal@cust-asf2.ponee.io Received: from cust-asf.ponee.io (cust-asf.ponee.io [163.172.22.183]) by cust-asf2.ponee.io (Postfix) with ESMTP id 0822D200CEF for ; Mon, 4 Sep 2017 15:13:56 +0200 (CEST) Received: by cust-asf.ponee.io (Postfix) id 06A13164D1F; Mon, 4 Sep 2017 13:13:56 +0000 (UTC) Delivered-To: archive-asf-public@cust-asf.ponee.io Received: from mail.apache.org (hermes.apache.org [140.211.11.3]) by cust-asf.ponee.io (Postfix) with SMTP id CB888164D1D for ; Mon, 4 Sep 2017 15:13:54 +0200 (CEST) Received: (qmail 85958 invoked by uid 500); 4 Sep 2017 13:13:53 -0000 Mailing-List: contact dev-help@ignite.apache.org; run by ezmlm Precedence: bulk List-Help: List-Unsubscribe: List-Post: List-Id: Reply-To: dev@ignite.apache.org Delivered-To: mailing list dev@ignite.apache.org Received: (qmail 85936 invoked by uid 99); 4 Sep 2017 13:13:53 -0000 Received: from pnap-us-west-generic-nat.apache.org (HELO spamd4-us-west.apache.org) (209.188.14.142) by apache.org (qpsmtpd/0.29) with ESMTP; Mon, 04 Sep 2017 13:13:53 +0000 Received: from localhost (localhost [127.0.0.1]) by spamd4-us-west.apache.org (ASF Mail Server at spamd4-us-west.apache.org) with ESMTP id E7A9AC26BE for ; Mon, 4 Sep 2017 13:13:52 +0000 (UTC) X-Virus-Scanned: Debian amavisd-new at spamd4-us-west.apache.org X-Spam-Flag: NO X-Spam-Score: 3.379 X-Spam-Level: *** X-Spam-Status: No, score=3.379 tagged_above=-999 required=6.31 tests=[DKIM_SIGNED=0.1, DKIM_VALID=-0.1, DKIM_VALID_AU=-0.1, FREEMAIL_REPLY=1, HTML_MESSAGE=2, RCVD_IN_DNSWL_NONE=-0.0001, RCVD_IN_MSPIKE_H3=-0.01, RCVD_IN_MSPIKE_WL=-0.01, RCVD_IN_SORBS_SPAM=0.5, SPF_PASS=-0.001] autolearn=disabled Authentication-Results: spamd4-us-west.apache.org (amavisd-new); dkim=pass (2048-bit key) header.d=gmail.com Received: from mx1-lw-eu.apache.org ([10.40.0.8]) by localhost (spamd4-us-west.apache.org [10.40.0.11]) (amavisd-new, port 10024) with ESMTP id CnrWzjMBj3ig for ; Mon, 4 Sep 2017 13:13:43 +0000 (UTC) Received: from mail-wm0-f47.google.com (mail-wm0-f47.google.com [74.125.82.47]) by mx1-lw-eu.apache.org (ASF Mail Server at mx1-lw-eu.apache.org) with ESMTPS id 401F45F1EE for ; Mon, 4 Sep 2017 13:13:43 +0000 (UTC) Received: by mail-wm0-f47.google.com with SMTP id f145so4500308wme.0 for ; Mon, 04 Sep 2017 06:13:43 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20161025; h=mime-version:in-reply-to:references:from:date:message-id:subject:to; bh=Ygv0HvrVj2egNtjGPPajPyId+n0uNrn92ufC6fVDcTk=; b=LNvaIzjSCmnDhpJNyNr3BEX73XduCv2NUbVejSJbUpZsAKH3YMyWvZHAt0dUehR3vB WoP/e+wLHgOpMlwwa0WikBr2Jy+33OQ/oCm3G0HPn22MmcTvvmjIU7d5L1Dd+/tUnWa0 kyYbYK/xQ+mrhDYQZlIZzRVRfK3jD1FmJ1uyqSJiLDDtWIXgKQv0oO+qSvsvxrO67UVK DEtiwuF5ymxfSaRbbEYKxh0XiTIzUORKZXKqMki8CsmP5chVNK7pTPLIvMM6FPPcpNCN 5POqeWfAnJTXb1++5rZ2LsfM5R4qrfYZ9HmCjh8SIm0zZ9mDTyFKLORCTkEmy8mj/WB3 HKbg== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20161025; h=x-gm-message-state:mime-version:in-reply-to:references:from:date :message-id:subject:to; bh=Ygv0HvrVj2egNtjGPPajPyId+n0uNrn92ufC6fVDcTk=; b=LegvesRLusSKfkZ12RSTW6GIryNEAByFqKTNGEmLd5LvA3oukMlr7Y4HFvKv2WThRE 7Vbj8+izoLwxkXabaraz9snaDlCOC7+xFfRx4RXsbF1vd1JEWF1t85syT5P+bkj95Wfn RolU9pvb6I5GeZ1LmY91AXhSd77JJSMPaI3imnpW02s9B06JMJGuPsfhHWHgJ5K1zG/f WlBsKToeoJXv0KavsdmlJk0GvA4bzyM8Xvlqd4zu/oVsza6wXUZwJBxWa3o6x8EApA9K ShRp4orIOgMm8WhpHZAT4kj+ge7gJiXM7Q6tABaluDCsw/cThG2c5cXwb19Z2G5oZ8Wp cO9Q== X-Gm-Message-State: AHPjjUg+JFznIcSHX/yxgDio42siNqax3oEYmWq9xUW+9iZTF2fM8vUS oLCNFHoXD0U7PkrlAm2FqDYoWGWp4g== X-Google-Smtp-Source: ADKCNb5iBMVgA1lVIKBOVCoTJFq1zEk++CrS9XwCeJgmUh+I7vcJ4BSDCptKOVp0u6T4cgIpygzIuleS+jykXm62NTo= X-Received: by 10.80.146.2 with SMTP id i2mr530857eda.30.1504530822457; Mon, 04 Sep 2017 06:13:42 -0700 (PDT) MIME-Version: 1.0 Received: by 10.80.175.133 with HTTP; Mon, 4 Sep 2017 06:13:01 -0700 (PDT) In-Reply-To: References: <3B2BD029-1490-4A8C-94F5-EF54FB291E99@apache.org> <1503076731467-21066.post@n4.nabble.com> From: Sergey Chugunov Date: Mon, 4 Sep 2017 16:13:01 +0300 Message-ID: Subject: Re: Cluster auto activation design proposal To: dev@ignite.apache.org Content-Type: multipart/alternative; boundary="f403045c19b239ee7005585ce166" archived-at: Mon, 04 Sep 2017 13:13:56 -0000 --f403045c19b239ee7005585ce166 Content-Type: text/plain; charset="UTF-8" Dmitriy, I like the idea of ClusterActivator interface. From user perspective it provides the same functionality as the setter but in more clear and intuitive way. Also it gives us a good place to put all the documentation about the feature. Any other opinions? On Fri, Sep 1, 2017 at 2:35 PM, Dmitriy Setrakyan wrote: > How about this: > > > > *interface ClusterActivator {* > > * boolean activate(Collection nodes);**}* > > > Out of the box, we can provide this implementation of the activation > filter: > > > > > > *ClusterInitialActiveSet implements ClusterActivator { * > > * InigeInitialActiveSet(String... addresses);**}* > > > Then user configuration can look as follows: > > *IgniteConfiguration.setActivationFilter(new > > ClusterInitialActiveSet("1.2.3.4", "4.3.2.1", etc));* > > > Thoughts? > > D. > > On Fri, Sep 1, 2017 at 1:47 PM, Sergey Chugunov > > wrote: > > > 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 < > dsetrakyan@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.chugunov@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 > > > > > 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.chugunov@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 > > > > > > 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 < > > > > > dsetrakyan@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.chugunov@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 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 < > > > > > > > dsetrakyan@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.chugunov@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().setBaselin > > eTopology(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 < > > > > > > > > > dsetrakyan@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 < > > > > > > > > > > admitriev@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 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. > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > --f403045c19b239ee7005585ce166--