Doyung, I think it's a good idea to provide a common interface for DeferCache and FutureCache. This will reduce redundancy. +1
Jo On Sat, May 28, 2016 at 3:07 PM ASF GitHub Bot (JIRA) <[email protected]> wrote: > > [ > https://issues.apache.org/jira/browse/S2GRAPH-82?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=15305200#comment-15305200 > ] > > ASF GitHub Bot commented on S2GRAPH-82: > --------------------------------------- > > GitHub user SteamShon opened a pull request: > > https://github.com/apache/incubator-s2graph/pull/54 > > [S2GRAPH-82] Merge DeferCache and FutureCache. > > This is work done by @daewon. I am just trying to merge. > > This PR is merge two classes FutureCache/DeferCache into one using > type class. > > You can merge this pull request into a Git repository by running: > > $ git pull https://github.com/SteamShon/incubator-s2graph S2GRAPH-82 > > Alternatively you can review and apply these changes as the patch at: > > https://github.com/apache/incubator-s2graph/pull/54.patch > > To close this pull request, make a commit to your master/trunk branch > with (at least) the following in the commit message: > > This closes #54 > > ---- > commit 4e08d43911d9e8e19c605c018e2240633d019bde > Author: daewon <[email protected]> > Date: 2016-04-19T09:00:21Z > > [S2GRAPH-82] Merge DeferCache and FutureCache. > > ---- > > > > Merge DeferCache and FutureCache. > > --------------------------------- > > > > Key: S2GRAPH-82 > > URL: https://issues.apache.org/jira/browse/S2GRAPH-82 > > Project: S2Graph > > Issue Type: Improvement > > Reporter: DOYUNG YOON > > Assignee: Daewon Jeong > > Original Estimate: 168h > > Remaining Estimate: 168h > > > > Currently, under org.apache.s2graph.core.utils package, {{DeferCache}} > and {{FutureCache}} has exactly same behavior except for their Types on > Value to store. > > It would be better if we can merge these two class. The problem is that > there is no common interface between asynchbase's {{Deferr}} and scala's > {{Future}}. > > I was talk with [~daewon] and here is what we are suggesting, use type > class. > > {noformat} > > trait CanDefer[A, M[_], C[_]] { > > def promise: M[A] > > def future(defer: M[A]): C[A] > > def success(defer: M[A], value: A): Unit > > def onSuccess[U](defer: C[A])(pf: PartialFunction[A, U])(implicit ec: > ExecutionContext) > > } > > {noformat} > > and change DeferCache interface as follow. > > {noformat} > > * M[_] : container type that will be stored in local cache. ex) Promise, > Defer. > > * C[_]: container type that will be returned to client of this class. > Ex) Future, Defer. > > * A: actual element type that will be stored in M[_] and C[_]. > > class DeferCache[A, M[_], C[_]](config: Config)(implicit ec: > ExecutionContext, canDefer: CanDefer[A, M, C]) > > {noformat} > > First, define some type class CanDefer that has all common interfaces > used in current DeferCache/FutureCache implementation. > > Secondly, provide implicit value for both of Defer and Future. > > Third, change implimentation to use common type class. > > This is what we have sofar, but any better idea would be appreciated. > > > > -- > This message was sent by Atlassian JIRA > (v6.3.4#6332) >
