Mikhail, I looked into PR [1] and left a couple of minor comments on GitHub. But actually a real thing where I do not have enough expertise is a notification firing strategy. From the first glance looks fine, but there might be concerns I missed.
[1] https://github.com/apache/ignite/pull/7057 ср, 4 дек. 2019 г. в 23:02, Mikhail Petrov <pmgheap....@gmail.com>: > > Ivan, Andrey, Nikolay, > > Thanks for your answers! > > Igniters, if there are no objections, could anyone take a look at > implementation [1] of described above event, please? > > [1] https://github.com/apache/ignite/pull/7057 > > Regards, > Mikhail. > > On 04.12.2019 21:54, Ivan Pavlukhin wrote: > > Mikhail, > > > > Yes I am fine with the approach. > > > > ср, 4 дек. 2019 г. в 20:30, Mikhail Petrov <pmgheap....@gmail.com>: > >> Ivan, > >> > >> Am I right, that current approach to solving this problem looks good for > >> you? > >> > >> Regards, > >> Mikhail. > >> > >> On 03.12.2019 15:12, Ivan Pavlukhin wrote: > >>> Mikhail, > >>> > >>> Yep, I see IgniteNodeValidationResult in new event in PR [1]. > >>> > >>>> Discovery events such as (join/left/failed) are connected with a > >>>> topology version change. In my case that not happens and may be > >>>> misleading. That's why the new event type was chosen. > >>> I did not mean that one of those events should be used. I meant that > >>> it sounds natural to me to have an additional "unsuccessful node join" > >>> event (like is done in PR[1]). > >>> > >>> https://github.com/apache/ignite/pull/7057/files > >>> > >>> вт, 3 дек. 2019 г. в 14:32, Mikhail Petrov <pmgheap....@gmail.com>: > >>>> Nikolay, Ivan, > >>>> > >>>> I understood the possible problem. It seems that it can be solved using > >>>> EventStorageSpi which starts before DiscoveryManager. > >>>> > >>>> As for me, ClusterNode is enough. It contains all info about joining > >>>> node including its attributes. > >>>> > >>>> Discovery events such as (join/left/failed) are connected with a > >>>> topology version change. In my case that not happens and may be > >>>> misleading. That's why the new event type was chosen. > >>>> > >>>> The cause of the failure is also presented in the event. > >>>> > >>>> Regards, > >>>> Mikhail. > >>>> > >>>> On 03.12.2019 13:19, Николай Ижиков wrote: > >>>>> Exception(s) from component(s) that don’t want node joined. > >>>>> > >>>>>> 3 дек. 2019 г., в 12:39, Ivan Pavlukhin <vololo...@gmail.com> > >>>>>> написал(а): > >>>>>> > >>>>>> How that reason will look like? Actually, I mostly thinking about > >>>>>> general API here. What I would like to avoid is exposing something not > >>>>>> general but needed only for a particular extension (plugin). > >>>>>> > >>>>>> вт, 3 дек. 2019 г. в 12:31, Николай Ижиков <nizhi...@apache.org>: > >>>>>>> I think we also should provide the reason why join failed. > >>>>>>> > >>>>>>>> 3 дек. 2019 г., в 12:22, Ivan Pavlukhin <vololo...@gmail.com> > >>>>>>>> написал(а): > >>>>>>>> > >>>>>>>> Mikhail, > >>>>>>>> > >>>>>>>> So, I suppose there should be ordering guarantees that listener is > >>>>>>>> registered before first validation failure can occur. Hope > >>>>>>>> GridComponent#onKernalStart is the right place. Is it enough to pass > >>>>>>>> only problematic node id (or ClusterNode) with an event? Actually > >>>>>>>> such > >>>>>>>> event seems to fit naturally node join/left/failed events. > >>>>>>>> > >>>>>>>> вт, 3 дек. 2019 г. в 10:38, Mikhail Petrov <pmgheap....@gmail.com>: > >>>>>>>>> Hi Ivan. > >>>>>>>>> > >>>>>>>>> No other lifecycle events are needed in my case. > >>>>>>>>> > >>>>>>>>> We can register a listener in the security component's > >>>>>>>>> GridComponent#onKernalStart method and listen locally to every > >>>>>>>>> failed > >>>>>>>>> joining attempt. Am I missing something? > >>>>>>>>> > >>>>>>>>> Regards, > >>>>>>>>> Mikhail. > >>>>>>>>> > >>>>>>>>> On 03.12.2019 8:48, Ivan Pavlukhin wrote: > >>>>>>>>>> Mikhail, > >>>>>>>>>> > >>>>>>>>>> Do you need some ordering guarantees among node lifecycle events > >>>>>>>>>> and > >>>>>>>>>> listener notifications. For example, I can imagine that it is good > >>>>>>>>>> to > >>>>>>>>>> notify security component about every node failed validation. How > >>>>>>>>>> can > >>>>>>>>>> we achieve it with events (I assume dynamic listener registration)? > >>>>>>>>>> > >>>>>>>>>> пн, 2 дек. 2019 г. в 18:09, Mikhail Petrov <pmgheap....@gmail.com>: > >>>>>>>>>>> Hi, Andrey. > >>>>>>>>>>> > >>>>>>>>>>> It doesn't influence on authentication or authorization process. > >>>>>>>>>>> There > >>>>>>>>>>> is a security requirement that demands to notify some outer > >>>>>>>>>>> security > >>>>>>>>>>> subsystems in a specific way when joining node validation failed > >>>>>>>>>>> in any > >>>>>>>>>>> Ignite component (e.g. GridCacheProcessor) not only in > >>>>>>>>>>> IgniteSecurityProcessor. So PluginProvider#validateNewNode is not > >>>>>>>>>>> acceptable for me. > >>>>>>>>>>> > >>>>>>>>>>> Regards, > >>>>>>>>>>> Mikhail. > >>>>>>>>>>> > >>>>>>>>>>> On 02.12.2019 16:35, Andrey Gura wrote: > >>>>>>>>>>>> Mikhail, > >>>>>>>>>>>> > >>>>>>>>>>>> I don't understand how node validation on join affects security. > >>>>>>>>>>>> But > >>>>>>>>>>>> it seems that you can use > >>>>>>>>>>>> PluginProvider#validateNewNode(org.apache.ignite.cluster.ClusterNode, > >>>>>>>>>>>> java.io.Serializable) method. Does it fit for your needs? > >>>>>>>>>>>> > >>>>>>>>>>>> On Mon, Dec 2, 2019 at 12:54 PM Mikhail Petrov > >>>>>>>>>>>> <pmgheap....@gmail.com> wrote: > >>>>>>>>>>>>> Hi, Ivan. > >>>>>>>>>>>>> > >>>>>>>>>>>>> > >>>>>>>>>>>>> Unfortunately, we came to no decision yet. As I mentioned above > >>>>>>>>>>>>> this > >>>>>>>>>>>>> event is disabled by default and no node will receive this > >>>>>>>>>>>>> event without > >>>>>>>>>>>>> an explicit subscription. In my case, that event is assumed to > >>>>>>>>>>>>> be used > >>>>>>>>>>>>> on node locally to share joining node info between security and > >>>>>>>>>>>>> discovery components. I have no idea how to solve this problem > >>>>>>>>>>>>> without > >>>>>>>>>>>>> publishing a new event too. But I'm concerned about the > >>>>>>>>>>>>> acceptance of > >>>>>>>>>>>>> that solution. Maybe it can be solved some other way? I will > >>>>>>>>>>>>> appreciate > >>>>>>>>>>>>> any suggestion or review PR [1] with event implementation. > >>>>>>>>>>>>> > >>>>>>>>>>>>> > >>>>>>>>>>>>> [1] https://github.com/apache/ignite/pull/7057 > >>>>>>>>>>>>> > >>>>>>>>>>>>> > >>>>>>>>>>>>> Regards, > >>>>>>>>>>>>> > >>>>>>>>>>>>> Mikhail. > >>>>>>>>>>>>> > >>>>>>>>>>>>> On 02.12.2019 10:38, Ivan Pavlukhin wrote: > >>>>>>>>>>>>>> Mikhail, Andrey, > >>>>>>>>>>>>>> > >>>>>>>>>>>>>> Have you come to a common decision here? As for me, it sounds > >>>>>>>>>>>>>> useful > >>>>>>>>>>>>>> to expose node join failure details somehow. The thing to > >>>>>>>>>>>>>> decide on is > >>>>>>>>>>>>>> a mechanism to expose it. Unfortunately, immediately have no > >>>>>>>>>>>>>> idea > >>>>>>>>>>>>>> better than using events. > >>>>>>>>>>>>>> > >>>>>>>>>>>>>>> What is purpose of the special cluster wide event? Node is > >>>>>>>>>>>>>>> not joined > >>>>>>>>>>>>>>> to the topology. Why topology nodes should know something > >>>>>>>>>>>>>>> about this > >>>>>>>>>>>>>>> node? > >>>>>>>>>>>>>> Was this question answered? I suppose that at least > >>>>>>>>>>>>>> coordinator will > >>>>>>>>>>>>>> receive the event, will not it? > >>>>>>>>>>>>>> > >>>>>>>>>>>>>> чт, 28 нояб. 2019 г. в 10:10, Mikhail Petrov > >>>>>>>>>>>>>> <pmgheap....@gmail.com>: > >>>>>>>>>>>>>>> Hi, Ivan. > >>>>>>>>>>>>>>> > >>>>>>>>>>>>>>> I'm sorry that the discussion was moved in private channel. > >>>>>>>>>>>>>>> The problem > >>>>>>>>>>>>>>> I'm trying to solve is described below in the thread. The > >>>>>>>>>>>>>>> security > >>>>>>>>>>>>>>> plugin in my case stores and analyzesinfo about a node that > >>>>>>>>>>>>>>> failed to join. > >>>>>>>>>>>>>>> > >>>>>>>>>>>>>>> > >>>>>>>>>>>>>>> Regards, > >>>>>>>>>>>>>>> > >>>>>>>>>>>>>>> Mikhail. > >>>>>>>>>>>>>>> > >>>>>>>>>>>>>>> > >>>>>>>>>>>>>>> > >>>>>>>>>>>>>>> -------- Forwarded Message -------- > >>>>>>>>>>>>>>> Subject: Re: Joining node validation failure event. > >>>>>>>>>>>>>>> Date: Thu, 21 Nov 2019 21:43:33 +0300 > >>>>>>>>>>>>>>> From: Mikhail Petrov <pmgheap....@gmail.com> > >>>>>>>>>>>>>>> To: Andrey Gura <ag...@apache.org> > >>>>>>>>>>>>>>> > >>>>>>>>>>>>>>> > >>>>>>>>>>>>>>> > >>>>>>>>>>>>>>> Hi, Andrey. > >>>>>>>>>>>>>>> > >>>>>>>>>>>>>>> In my task security plugin running on the coordinator must > >>>>>>>>>>>>>>> locally > >>>>>>>>>>>>>>> handle the situation when some node is trying to join the > >>>>>>>>>>>>>>> topology with > >>>>>>>>>>>>>>> the invalid configuration. I can't handle the response on a > >>>>>>>>>>>>>>> node that > >>>>>>>>>>>>>>> failed to connect because it's untrusted. > >>>>>>>>>>>>>>> > >>>>>>>>>>>>>>> Actually I'm only concerned about one validation -- when all > >>>>>>>>>>>>>>> Ignite > >>>>>>>>>>>>>>> components validate new node. > >>>>>>>>>>>>>>> > >>>>>>>>>>>>>>> In my case plugin must be able to obtain general and security > >>>>>>>>>>>>>>> subject > >>>>>>>>>>>>>>> information from joining TcpDiscoveryNode attributes. But I > >>>>>>>>>>>>>>> have no idea > >>>>>>>>>>>>>>> how to share information between the security and discovery > >>>>>>>>>>>>>>> components > >>>>>>>>>>>>>>> without recording event and listening it locally. > >>>>>>>>>>>>>>> > >>>>>>>>>>>>>>> This event is assumed to be disable by default and in my case > >>>>>>>>>>>>>>> used only > >>>>>>>>>>>>>>> on local node so it's not look like "cluster wide event". > >>>>>>>>>>>>>>> > >>>>>>>>>>>>>>> Also I propose to record this event in dedicated utilityPool > >>>>>>>>>>>>>>> so it can't > >>>>>>>>>>>>>>> stuck discovery thread. > >>>>>>>>>>>>>>> > >>>>>>>>>>>>>>> I will appreciate any thoughts on this problem. > >>>>>>>>>>>>>>> > >>>>>>>>>>>>>>> Regards, > >>>>>>>>>>>>>>> Mikhail. > >>>>>>>>>>>>>>> > >>>>>>>>>>>>>>> On 21.11.2019 19:40, Andrey Gura wrote: > >>>>>>>>>>>>>>>> Mikhail, > >>>>>>>>>>>>>>>> > >>>>>>>>>>>>>>>> It is still not enough details to me. What is expected > >>>>>>>>>>>>>>>> behavior if the > >>>>>>>>>>>>>>>> plugin? > >>>>>>>>>>>>>>>> > >>>>>>>>>>>>>>>> There are a different validations during node join. Many of > >>>>>>>>>>>>>>>> them > >>>>>>>>>>>>>>>> placed in RingMessageWorker#processJoinRequestMessage > >>>>>>>>>>>>>>>> method. If > >>>>>>>>>>>>>>>> validation will fail then corresponding message will be sent > >>>>>>>>>>>>>>>> to the > >>>>>>>>>>>>>>>> joining node (including TcpDiscoveryAuthFailedMessage) and > >>>>>>>>>>>>>>>> node will > >>>>>>>>>>>>>>>> not joined to topology. > >>>>>>>>>>>>>>>> > >>>>>>>>>>>>>>>> What is purpose of the special cluster wide event? Node is > >>>>>>>>>>>>>>>> not joined > >>>>>>>>>>>>>>>> to the topology. Why topology nodes should know something > >>>>>>>>>>>>>>>> about this > >>>>>>>>>>>>>>>> node? > >>>>>>>>>>>>>>>> > >>>>>>>>>>>>>>>> On Thu, Nov 21, 2019 at 9:54 AM Mikhail Petrov > >>>>>>>>>>>>>>>> <pmgheap....@gmail.com> > >>>>>>>>>>>>>>>> wrote: > >>>>>>>>>>>>>>>>> Hi, Andrey. > >>>>>>>>>>>>>>>>> > >>>>>>>>>>>>>>>>> I take part in the development of a custom security plugin > >>>>>>>>>>>>>>>>> for Apache > >>>>>>>>>>>>>>>>> Ignite. There is an information security requirement for > >>>>>>>>>>>>>>>>> which node > >>>>>>>>>>>>>>>>> joining failures due to invalid configuration must be > >>>>>>>>>>>>>>>>> handled by the > >>>>>>>>>>>>>>>>> plugin. > >>>>>>>>>>>>>>>>> > >>>>>>>>>>>>>>>>> This is where my case comes from. Are there any objections > >>>>>>>>>>>>>>>>> to the > >>>>>>>>>>>>>>>>> proposed approach? > >>>>>>>>>>>>>>>>> > >>>>>>>>>>>>>>>>> Regards, > >>>>>>>>>>>>>>>>> Mikhail. > >>>>>>>>>>>>>>>>> > >>>>>>>>>>>>>>>>> On 20.11.2019 19:38, Andrey Gura wrote: > >>>>>>>>>>>>>>>>>> Hi, Mikhail! > >>>>>>>>>>>>>>>>>> > >>>>>>>>>>>>>>>>>> Could you please describe the case for this new event? > >>>>>>>>>>>>>>>>>> > >>>>>>>>>>>>>>>>>> On Wed, Nov 20, 2019 at 12:45 PM Mikhail Petrov > >>>>>>>>>>>>>>>>>> <pmgheap....@gmail.com> wrote: > >>>>>>>>>>>>>>>>>>> Hello, Igniters. > >>>>>>>>>>>>>>>>>>> > >>>>>>>>>>>>>>>>>>> There is a case which requires to handle joining node > >>>>>>>>>>>>>>>>>>> validation > >>>>>>>>>>>>>>>>>>> failure > >>>>>>>>>>>>>>>>>>> in Ignite components and obtain information of the node > >>>>>>>>>>>>>>>>>>> that tried to > >>>>>>>>>>>>>>>>>>> join and the reason for the failure. Now, as I see, there > >>>>>>>>>>>>>>>>>>> is no way to > >>>>>>>>>>>>>>>>>>> do it. I propose to implement a new event -- > >>>>>>>>>>>>>>>>>>> NodeValidationFailedEvent > >>>>>>>>>>>>>>>>>>> -- and record it in case the validation fails. I have > >>>>>>>>>>>>>>>>>>> created Tiket [1] > >>>>>>>>>>>>>>>>>>> and PR [2], which shows an example of implementation. > >>>>>>>>>>>>>>>>>>> Could anyone take > >>>>>>>>>>>>>>>>>>> a look at it, please? > >>>>>>>>>>>>>>>>>>> > >>>>>>>>>>>>>>>>>>> [1] https://issues.apache.org/jira/browse/IGNITE-12380 > >>>>>>>>>>>>>>>>>>> > >>>>>>>>>>>>>>>>>>> [2] https://github.com/apache/ignite/pull/7057 > >>>>>>>>>>>>>>>>>>> > >>>>>>>> -- > >>>>>>>> Best regards, > >>>>>>>> Ivan Pavlukhin > >>>>>> -- > >>>>>> Best regards, > >>>>>> Ivan Pavlukhin > >>> > > > > -- Best regards, Ivan Pavlukhin