Hi Chris, Oh, great. My plan was only adding async methods to LEventStore. If you can work for other parts, I will update my pull request to just describing about the default global ExecutionContext and wait for your work. On Tue, Oct 16, 2018 at 4:01 PM Chris Wewerka <chris.wewe...@gmail.com> wrote: > > Hi Naoki, > > thanks, that looks good. Will you continue with the other stores / storage > types and also introduce async methods to the Algo.predict/predictBase and > then the QueryServer? Just asking because I started yesterday to have a look > around in the Query Server/ Algo. area > > Cheers > Chris > > On Tue, 16 Oct 2018 at 03:43, Naoki Takezoe <take...@gmail.com> wrote: >> >> Hi Chris, >> >> Does this pull request work for you? >> https://github.com/apache/predictionio/pull/482 >> On Sat, Oct 13, 2018 at 1:11 AM Naoki Takezoe <take...@gmail.com> wrote: >> > >> > I think the point is that LEventStore doesn't have asynchronous >> > methods. We should add methods which return Future to LEventStore and >> > modify current blocking methods to take ExecutionContext. I created >> > JIRA ticket for that: >> > https://jira.apache.org/jira/browse/PIO-182 >> > >> > On the other hand, it makes sense to describe in the documentation. At >> > least, we should describe that LEventStore uses the default global >> > ExecutionContext and how to configure it if we keep existing blocking >> > methods. >> > >> > 2018年10月12日(金) 16:06 Chris Wewerka <chris.wewe...@gmail.com>: >> > > >> > > Hi Donald, >> > > >> > > thanks for your answer and the hint to base off from Naoki's Akka Http >> > > thread. Saw the PR and had the same idea already, as it does not make >> > > sense to base off the old spray code. I worked with spray a couple of >> > > years ago and back then it already had full support for Scala Futures / >> > > Fully async programming. If I get the time I will start with a fork >> > > going off Naoki's Akka HTTP branch. >> > > >> > > Please have a look at my second mail also, as the usage of the bounded >> > > "standard" Scala Execution context has a dramatic impact of how the >> > > machines resources are leveraged. On our small "All in one" machine we >> > > didn't see much CPU / Load until yesterday when I set the mentioned >> > > params to allow much higher thread counts in the standard Scala >> > > Execution context. We have proven this in our small production >> > > environment and it has an huge impact. In fact the Query Server acted >> > > like a water dam, not letting enough requests in the system to use all >> > > of it's resources. You might consider adding this to the documentation, >> > > until I hopefully come up with a PR for full async engine. >> > > >> > > Cheers >> > > Chris >> > > >> > > On Fri, 12 Oct 2018 at 02:18, Donald Szeto <don...@apache.org> wrote: >> > >> >> > >> Hi Chris, >> > >> >> > >> It is indeed a good idea to create asynchronous versions of the engine >> > >> server! Naoki has recently completed the migration from spray to Akka >> > >> HTTP so you may want to base off from that instead. Let us know if we >> > >> can help in any way. >> > >> >> > >> I do not recall the exact reason anymore, but engine server was created >> > >> almost 5 years ago, and I don’t remember whether spray could take >> > >> futures natively as responses like Akka HTTP could now. Nowadays there >> > >> shouldn’t be any reason to not provide asynchronous flavors of these >> > >> APIs. >> > >> >> > >> Regards, >> > >> Donald >> > >> >> > >> On Thu, Oct 11, 2018 at 3:20 PM Naoki Takezoe <take...@gmail.com> wrote: >> > >>> >> > >>> Hi Chris, >> > >>> >> > >>> I think current LEventStore's blocking methods should take >> > >>> ExecutionContext as an implicit parameter and Future version of >> > >>> methods should be provided. I don't know why they aren't. Is there >> > >>> anyone who knows reason for the current LEventStore API? >> > >>> >> > >>> At the moment, you can consider to use LEvent directly to access >> > >>> Future version of methods as a workaround. >> > >>> >> > >>> 2018年10月11日(木) 23:05 Chris Wewerka <chris.wewe...@gmail.com>: >> > >>> >> > >>> > >> > >>> > Thanks George, good to hear that! >> > >>> > >> > >>> > Today I did a test by raising the bar for the max allowed threads in >> > >>> > the "standard" >> > >>> > >> > >>> > scala.concurrent.ExecutionContext.Implicits.global >> > >>> > >> > >>> > I did this before calling "pio deploy" by adding >> > >>> > >> > >>> > export JAVA_OPTS="$JAVA_OPTS >> > >>> > -Dscala.concurrent.context.numThreads=1000 >> > >>> > -Dscala.concurrent.context.maxThreads=1000" >> > >>> > >> > >>> > Now we do see much more CPU usage by elasticsearch. So it seems that >> > >>> > the QueryServer by using the standard thread pool bounded to the >> > >>> > available processors acted like a dam. >> > >>> > >> > >>> > By setting the above values we now have sth. like a traditional Java >> > >>> > JEE or Spring application which blocks thread because of synchronous >> > >>> > calls and creates new threads if there is demand (requests) for it. >> > >>> > >> > >>> > So this is far from being a good solution. Going full async/reactive >> > >>> > is still the way to go in my opinion. >> > >>> > >> > >>> > Cheers >> > >>> > Chris >> > >>> > >> > >>> > On Thu, 11 Oct 2018 at 14:07, George Yarish >> > >>> > <gyar...@griddynamics.com> wrote: >> > >>> >> >> > >>> >> >> > >>> >> Hi Chris, >> > >>> >> >> > >>> >> I'm not a contributor of the predictionio. But want to mention we >> > >>> >> also quite interested in that changes in my company. >> > >>> >> We often develop some custom pio engines, and it doesn't look right >> > >>> >> to me to use Await.result with non-blocking api. >> > >>> >> Totally agree with your point. >> > >>> >> Thanks for the question! >> > >>> >> >> > >>> >> George >> > >>> >> > >>> >> > >>> >> > >>> -- >> > >>> Naoki Takezoe >> > >> > >> > >> > -- >> > Naoki Takezoe >> >> >> >> -- >> Naoki Takezoe
-- Naoki Takezoe