From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Date: Thu, 30 Aug 2018 15:38:07 +0300 From: Vladimir Davydov Subject: Re: [tarantool-patches] [PATCH 2/2] On ctl event trigger Message-ID: <20180830123807.w2p4fiwcld2v3yun@esperanza> References: <7d9ccb894ef2915181454db39ead93497f9ff9aa.1535472838.git.georgy@tarantool.org> MIME-Version: 1.0 Content-Type: text/plain; charset=us-ascii Content-Disposition: inline In-Reply-To: <7d9ccb894ef2915181454db39ead93497f9ff9aa.1535472838.git.georgy@tarantool.org> To: Georgy Kirichenko Cc: tarantool-patches@freelists.org List-ID: On Tue, Aug 28, 2018 at 07:19:13PM +0300, Georgy Kirichenko wrote: > Introduce a ctl event trigger fired in cases of a bootstrap/recovery status > changes, a space create/alter/drop action, an applier state change and > shutdown. Trigger could be set with box.ctl_event even before the first > box.cfg invocation to control recovery and bootstrap behavior. > > Event constants accessible via box.ctl_event.const() > There are events: > - RECOVERY > - SPACE > - SHUTDOWN > - APPLIER > > A recovery event might have a status: > * RECOVERY_SNAPSHOT_START > * RECOVERY_SNAPSHOT_DONE > * RECOVERY_HOT_STANDBY_START > * RECOVERY_HOT_STANDBY_DONE > * RECOVERY_XLOGS_DONE > * RECOVERY_BOOTSTRAP_START > * RECOVERY_BOOTSTRAP_DONE > * RECOVERY_INITIAL_JOIN_START > * RECOVERY_INITIAL_JOIN_DONE > * RECOVERY_FINAL_JOIN_DONE > > A space event consists of space identifier and action: > * SPACE_CREATE > * SPACE_ALTER > * SPACE_DELETE > > An applier event contains peer uuid and state: > * APPLIER_OFF > * APPLIER_CONNECT > * APPLIER_CONNECTED > * APPLIER_AUTH > * APPLIER_READY > * APPLIER_INITIAL_JOIN > * APPLIER_FINAL_JOIN > * APPLIER_JOINED > * APPLIER_SYNC > * APPLIER_FOLLOW > * APPLIER_STOPPED > * APPLIER_DISCONNECTED > * APPLIER_LOADING I can't review this patch properly, because ctl_event.[hc] are missing, but I've a few notes about the API. First, I don't understand why you need two kinds of constants. I mean SPACE and SPACE_CREATE, or RECOVERY and RECOVERY_SNAPSHOT_START. IMO there should be just one set of constants. Second, IMO the event trigger should be installed with box.ctl.on_event (not box.ctl_event.on_ctl_event), and constants should be defined in box.ctl.event (not box.ctl_event.const()). Third, let's start with fewer events, only ones that we need to right now (e.g. for replication conflict resolution with before_replace). We can add other events later, when we need to.