ignite-issues mailing list archives

Site index · List index
Message view « Date » · « Thread »
Top « Date » · « Thread »
From "Alexey Goncharuk (JIRA)" <j...@apache.org>
Subject [jira] [Comment Edited] (IGNITE-946) Need to expose versioned cache entry to public API
Date Mon, 10 Aug 2015 21:24:45 GMT

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

Alexey Goncharuk edited comment on IGNITE-946 at 8/10/15 9:24 PM:
------------------------------------------------------------------

In general, I do not like the current {{VersionedEntryEx}} interface. I think it should have
only one method {{IgniteVersion version()}}, and {{IgniteVersion}} should have only {{updateTime}}.
Other methods, such as {{topologyVersion}} or let alone {{order}} are meaningless for a user.
Moreover, it is hard to implement the most straightforward use-case - check whether the version
of a cache entry has changed in between the user calls. In order to do this one has to compare
the results of all four methods.
 
The way I see it should work is represented in a snippet below:
{code}
IgniteVersion ver1 = entry.version();

// Optimistically assume that no updates will happen and do some business-logic based on entry
value.
...

refreshedEntry = getEntry(key);

IgniteVersion ver2 = refreshedEntry.version()

if (!ver1.equals(ver2)) {
    // Entry has been concurrently updated.
}
{code}

Needless to say that an instance of versioned entry has to be immutable, so that {{value()}}
method will always be reflected by a correct {{version()}}.


was (Author: agoncharuk):
In general, I do not like the current {{VersionedEntryEx}} interface. I think it should have
only one method {{IgniteVersion version()}}, and {{IgniteVersion}} should have only {{updateTime}}.
Other methods, such as {{topologyVersion}} or let alone {{order}} are meaningless for a user.
Moreover, it is hard to implement the most straightforward use-case - check whether the version
of a cache entry has changed in between the user calls. In order to do this one has to compare
the results of all four methods.
 
The way I see it should work is represented in a snippet below:
{code}

IgniteVersion ver1 = entry.version();

// Optimistically assume that no updates will happen and do some business-logic based on entry
value.
...

IgniteVersion ver2 = entry.version()

if (!ver1.equals(ver2)) {
    // Entry has been concurrently updated.
}
{code}

Needless to say that an instance of versioned entry has to be immutable, so that {{value()}}
method will always be reflected by a correct {{version()}}.

> Need to expose versioned cache entry to public API
> --------------------------------------------------
>
>                 Key: IGNITE-946
>                 URL: https://issues.apache.org/jira/browse/IGNITE-946
>             Project: Ignite
>          Issue Type: Bug
>          Components: cache
>    Affects Versions: sprint-4
>            Reporter: Valentin Kulichenko
>            Assignee: Denis Magda
>            Priority: Critical
>              Labels: Usability
>             Fix For: ignite-1.4
>
>         Attachments: ignite-946-2.patch, ignite-946-3.patch, ignite-946.patch
>
>
> Currently we have versioned entry, but it's not available on public API, but knowing
version can be useful in some cases. Need to make it accessible via {{unwrap}} method.



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

Mime
View raw message