You are viewing a plain text version of this content. The canonical link for it is here.
Posted to dev@river.apache.org by Peter Firmstone <ji...@zeus.net.au> on 2009/11/09 02:09:08 UTC

Re: [jira] Commented: (RIVER-324) Under certain circumstances, the ServiceDiscoveryManager internal LookupCache implementation can incorrectly process attribute change events before the lookup snapshot is processed.

Good work Brian.

Thanks,

Peter.

Brian Murphy (JIRA) wrote:
>     [ https://issues.apache.org/jira/browse/RIVER-324?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=12774823#action_12774823 ] 
>
> Brian Murphy commented on RIVER-324:
> ------------------------------------
>
> Changeset 833922: contains the proposed fix reflected
> in the attached patch file, and described in this issue's
> description.
>
> Verification: ran all ServiceDiscoveryManager tests and 
> observed no errors or problems.
>
> btm-08-Nov-2009
>
>
>
>   
>> Under certain circumstances, the ServiceDiscoveryManager internal LookupCache implementation can incorrectly  process attribute change events before the lookup  snapshot is processed.
>> ---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
>>
>>                 Key: RIVER-324
>>                 URL: https://issues.apache.org/jira/browse/RIVER-324
>>             Project: River
>>          Issue Type: Bug
>>          Components: net_jini_lookup
>>    Affects Versions: AR1
>>            Reporter: Brian Murphy
>>            Assignee: Brian Murphy
>>            Priority: Minor
>>             Fix For: AR2
>>
>>         Attachments: river-324.patch
>>
>>
>> When an attribute change event is received from the
>> lookup service between the time the cache registers
>> the event listener and the initial LookupTask takes
>> the snapshot of the associated service state, the 
>> change event can get processed first, which can 
>> result in incorrect attribute state.
>> This bug has been observed in a currently deployed
>> system, generally at startup when the services of
>> the system are changing their attributes from an
>> initial, 'unknown' state, to a discovered state 
>> that is shared among those services. What has been
>> observed is a sequence like the following:
>> 1. event registration is sent to the lookup service
>> 2. snapshot is requested (LookupTask is queued)
>> 3. the lookup service sends back in the requested
>>    snapshot, the initial state the service registered
>>    for itself
>> 4. the service sends an attribute modification 
>>    request to the lookup service, which sends an
>>    attribute change event to the cache
>> 5. before the cache's LookupTask processes the 
>>    snapshot from the lookup service, the event
>>    arrives and the event processing thread of the
>>    cache processes the event containing the latest
>>    state of the service's attributes.
>> 6. the cache then processes the snapshot, replacing
>>    the latest, most up-to-date attribute state with
>>    the original, initial state reflected in the
>>    snapshot.
>> 7. the cache now has an incorrect view of the
>>    service's state.
>> Bob Scheifler has implemented a simple fix; which
>> is (quoting Bob), "to have the LookupTask execute 
>> the tasks it creates directly, rather than queueing
>> them." That is, force any pending snapshot processing
>> tasks to be executed before the event processing
>> tasks.
>> Note that with the proposed fix, if more than
>> one lookup service is running, it is possible for
>> an attribute to "regress" as the lookup services
>> do not receive a given attribute change at exactly
>> the same time, but the inconsistency will eventually 
>> correct itself as the cache receives each attribute
>> change event, and so should not be a permanent 
>> condition.
>>     
>
>