OK, then we're on the same page, just wanted to verify. Re the design doc wrt interceptors, contact Radim Cheers
On 20/03/15 10:18, Galder Zamarreño wrote: > >> On 14 Mar 2015, at 09:39, Bela Ban <b...@redhat.com> wrote: >> >> Hi Galder, >> >> apologies for the long reply ! > > Haha, it's still sorter than my proposal, so not too bad :) > >> imo the value of Java 8 is: >> >> #1 Reduction of implementation code (streams and internal iteration) >> >> #2 Making some of the APIs simpler, e.g. distributed executors, map-reduce >> >> #3 Reactive programming, e.g. interceptor chain (discussed in Berlin), >> non-blocking behavior; the goal being to reduce the number of threads >> required. > > I've heard a lot about ^, looking forward to seeing design doc. > > I was discussing Java 8 API with others while you were having this discussion. > >> However, changing the entire Cache API is going too far atm. Now that >> we've finally provided a Cache/JSR107 API, people are familiar with it >> and I would not change it, at least not right now. > > You are missing essence of the proposal: > > There's no unique way in which people want to access a Cache. Some people > want to use ConcurrentMap, others want to use JSR-107 Cache API, others > might want to use Infinispan 7 Cache API, others just want to store data and > run map/reduce jobs... > > I'm not suggesting that we change the entire Cache API. What I'm suggesting > is this: Java 8 allows us the vast majority of caching use cases to be > distilled into a reduced, flexible API, which can be the foundation for the > facade's that we offer. > > IOW, we're not forcing anyone to use the new Cache API. If you want, you can, > but the vast majority of users will use APIs they know (JSR-107, > java.util.concurrent). > > It's about choice, not about having a new main API. IOW, use whatever API you > want, but if youw want flexibility, we have something for you that will allow > you to build more interesting data structures on top of this functional cache > API. > >> If we're able to use reactive programming (e.g. your eval() function) >> *under the cover*, then all the better. >> >> If your proposal is about providing FunctionalCache and implementing >> Cache and JSR 107 Cache with it, then you have my +1. But IMO >> FunctionalCache should not be the main API. > > ^ You're getting main point but you are wrongly believing that I want > Functional Cache to be the main API. > > Functional Cache will offer the basis to provide whatever API you want, but > it should never be the first choice for users to use. > > IMO, the users of Functional Cache would be advanced users that say, want to > build a distributed queue on top of Infinispan. > > There should not be a main API going forward, but choice: JSR-107 API, > java.util.concurrent...,etc > >> Compare FunctionalCache.eval() to ioctl() for a moment: of course, every >> access to a file system can be implemented via ioctl(), but people like >> the simplicity of write(), read(), stat() etc. >> >> So providing eval() *only* shifts the burden of implementation to the >> user. But I agree that perhaps it's a good thing to expose >> FunctionalCache so power users (e.g. Sanne :-)) can use it directly to >> implement functionality not provided by Cache. > > +1000, that's precisely the vision I have, but again Functional Cache is not > forced on them. > >> Being able to switch to Java 8 doesn't imply we have to use all of its >> new features. > > Totally. > >> >> Let me address your proposal step by step. >> >> >> >> "What's wrong with the Infinispan Cache API?" >> -------------------------------------- >> - Nothing ! >> - I can't follow your argument as to why Cache is bad. This is the >> premise to your proposal and it needs to be very clear ! >> - JSR 107 came up with a similar API. So if we have to change Cache, >> then I'd +1 a change to JSR 107 as main API >> - I don't see why it's difficult to add new operations: distributed >> queues should be a separate API anyway, and not extend Cache ! We should >> use CacheManager to get a new DistributedQueue, as we do to get a new >> Cache... > > ^ Right, I think all this section needs to be rewritten to avoid confusion. > >> >> >> "How does Java 8 improve on this?" >> ------------------------------ >> - Passing serialized lambdas around sounds awfully familiar: it's the >> old 'agent-based programming' paradigm fashionable before the turn of >> the millenium. Instead of invoking RPCs which carry data on P, code >> (also carrying data) is shipped to P and executed there and the result >> sent back to the invoker. (Disclaimer: I wrote such a system myself with >> GOMScript... :-(). >> I'm not saying this is bad, but we have to make sure that >> (a) Infinispan benefits from this either in code reduction / >> maintainability / code simplification >> (b) performance doesn't decrease > > ^ +1, performance at least for the most critical operations, e.g. put/get, > needs to be at least on par. > >> >> >> >> "Proposal" >> --------- >> - Returning a CompletableFuture is a good idea: +1 >> - I think this is where the main value of your proposal lies: being able >> to chain functions (lambdas) together, that are invoked turn-by-turn, >> possibly by different threads, without a caller having to block >> - The F.invoke(G).andThenInvoke(H).andThenInvoke(I) pattern (where F is >> a future and G,H,I are lambdas) is very valuable to implement >> non-blocking behavior: whenever a function (lambda) has to block, it >> registers a function with the blocking resource that's called upon >> unblocking and the thread terminates and is added back to the thread pool >> - Blocking can be waiting to read from the file system or network, or >> trying to acquire a lock etc >> - As was discussed in Berlin, the interceptor chain could be rewritten >> using CompletableFutures (or sth similar). > > ^ Yeah, there's a lot of value to be added in this area. > > I was very pleased to hear about the CompletableFuture based interceptor > chain discussion because I thought it'd fit perfectly with the direction of > the functional cache API. > >> >> >> Summary >> -------- >> >> I'd not make FunctionalCache the main API and I'd definitely not >> deprecate Cache. > > Ok, maybe we won't deprecate Infinispan Cache but we'll definitely won't add > anything extra there. It's way too ovebloated IMO. > >> >> +1 on providing FunctionalCache as a (parent) interface to Cache, so >> power users can use FunctionalCache if needed. >> >> +1 on implementing Cache and JSR 107 Cache with FunctionalCache. >> >> This should only be done if: >> - Performance remains at least as good as it is now [mandatory] >> - Maintainability increases [nice] >> - Code reduction [nice] >> >> My 5 cents > > +1 to all those. > > Thanks Bela for the feedback! > >> >> >> On 13/03/15 09:10, Galder Zamarreño wrote: >>> Hi all, >>> >>> We're starting to work on some prototypes for the Java 8 API coming up in >>> Infinispan 8. >>> >>> I've written a design wiki for a replacement of our main embedded Cache >>> interface that takes advantage of Java 8 improvements: >>> https://github.com/infinispan/infinispan/wiki/Java-8-API-proposal >>> >>> It'd be great to hear your thoughts. >>> >>> Proposals for Java 8 versions for cache manager, remote cache and other >>> external APIs are yet TBD. >>> >>> Regards, >>> -- >>> Galder Zamarreño >>> gal...@redhat.com >> >> -- >> Bela Ban, JGroups lead (http://www.jgroups.org) >> _______________________________________________ >> infinispan-dev mailing list >> infinispan-dev@lists.jboss.org >> https://lists.jboss.org/mailman/listinfo/infinispan-dev > > > -- > Galder Zamarreño > gal...@redhat.com > > > > > > _______________________________________________ > infinispan-dev mailing list > infinispan-dev@lists.jboss.org > https://lists.jboss.org/mailman/listinfo/infinispan-dev > -- Bela Ban, JGroups lead (http://www.jgroups.org) _______________________________________________ infinispan-dev mailing list infinispan-dev@lists.jboss.org https://lists.jboss.org/mailman/listinfo/infinispan-dev