DOYUNG YOON created S2GRAPH-82:
----------------------------------
Summary: 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
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)