You are viewing a plain text version of this content. The canonical link for it is here.
Posted to dev@sling.apache.org by "Stefan Egli (JIRA)" <ji...@apache.org> on 2015/04/30 17:12:06 UTC

[jira] [Comment Edited] (SLING-4685) Introduce generic discovery.commons.ViewStateManager sharable for impls

    [ https://issues.apache.org/jira/browse/SLING-4685?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=14521622#comment-14521622 ] 

Stefan Egli edited comment on SLING-4685 at 4/30/15 3:11 PM:
-------------------------------------------------------------

While I agree that the listener must always check if a view is current - when it receives the INIT event, at that very moment, the view must be current. 

The API in {{TopologyEvent.getOldView()}} says:
{quote}
This is null in case of <code>TOPOLOGY_INIT</code>
{quote}
so the old (ie not current) view must be null - while at the same time {{TopologyEvent.getNewView()}} says:
{quote}
Returns the view which is currently (i.e. newly) valid.
{quote}

So while the description of the INIT event might leave this aspect open, the getNew and getOldView methods clarify this enough IMO: an INIT can only contain a current view - thus *requires delay* (not exactly similar, but SLING-3750 also goes in this direction).

Re your point about
bq. CHANGED <- whenever the view has changed (the view could be "current" or "not-current" in case of isolated mode)).
I think that one goes similarly: CHANGED must *always* contain a new, valid view - that view cannot be 'not current' at time of the {{handleTopologyEvent}} call - that's the contract. That's not to say that as soon as the method quits, it cannot change to 'not current' - but at the invocation and duration of that method it must (and that was the intention of the API - that INIT and CHANGED are only sent once the view is stable).


was (Author: egli):
While I agree that the listener must always check if a view is current - when it receives the INIT event, at that very moment, the view must be current. 

The API in {{TopologyEvent.getOldView()}} says:
{quote}
This is null in case of <code>TOPOLOGY_INIT</code>
{quote}
so the old (ie not current) view cannot be null - while at the same time {{TopologyEvent.getNewView()}} says:
{quote}
Returns the view which is currently (i.e. newly) valid.
{quote}

So while the description of the INIT event might leave this aspect open, the getNew and getOldView methods clarify this enough IMO: an INIT can only contain a current view - thus *requires delay* (not exactly similar, but SLING-3750 also goes in this direction).

Re your point about
bq. CHANGED <- whenever the view has changed (the view could be "current" or "not-current" in case of isolated mode)).
I think that one goes similarly: CHANGED must *always* contain a new, valid view - that view cannot be 'not current' at time of the {{handleTopologyEvent}} call - that's the contract. That's not to say that as soon as the method quits, it cannot change to 'not current' - but at the invocation and duration of that method it must (and that was the intention of the API - that INIT and CHANGED are only sent once the view is stable).

> Introduce generic discovery.commons.ViewStateManager sharable for impls
> -----------------------------------------------------------------------
>
>                 Key: SLING-4685
>                 URL: https://issues.apache.org/jira/browse/SLING-4685
>             Project: Sling
>          Issue Type: Improvement
>          Components: Extensions
>            Reporter: Stefan Egli
>            Assignee: Stefan Egli
>             Fix For: Discovery Commons 1.0.0
>
>         Attachments: SLING-4685.patch
>
>
> With multiple discovery implementations existing/upcoming it starts to become valuable to share code that can be shared. And with the introduction of discovery.commons we have a nice place for this.
> As a first thing, I propose to introduce a discovery.commons.ViewStateManager (the name can be changed if wished of course): this one is capable of managing a number of TopologyChangeListeners, can be in deactivated/activated state and can react on {{handleChanging}} and {{handleNewView}} events and translates all of those to correct events that it sends to the registered listeners accordingly.
> This also takes into account the fact that the TOPOLOGY_INIT should be sent only when the first valid view is available - which is flagged to ViewStateManager via {{handleNewView}}.



--
This message was sent by Atlassian JIRA
(v6.3.4#6332)