* Matthew Toseland <toad at amphibian.dyndns.org> [2009-02-04 23:13:57]:

> On Wednesday 04 February 2009 20:06, Florent Daigni?re wrote:
> > * Daniel Cheng <j16sdiz+freenet at gmail.com> [2009-02-04 23:35:04]:
> > 
> > > On Wed, Feb 4, 2009 at 7:41 PM, Florent Daigniere
> > > <nextgens at freenetproject.org> wrote:
> > > > Daniel Cheng wrote:
> > > >> On Wed, Feb 4, 2009 at 12:45 AM,  <nextgens at freenetproject.org> 
> > > >> wrote:
> > > >>> Author: nextgens
> > > >>> Date: 2009-02-03 16:45:44 +0000 (Tue, 03 Feb 2009)
> > > >>> New Revision: 25492
> > > >>>
> > > >>> Modified:
> > > >>>   trunk/freenet/src/freenet/client/async/ClientRequestScheduler.java
> > > >>> Log:
> > > >>> Use the executor and not the ticker there
> > > >>>
> > > >>> Modified: 
> trunk/freenet/src/freenet/client/async/ClientRequestScheduler.java
> > > >>> ===================================================================
> > > >>> --- 
> > > >>> trunk/freenet/src/freenet/client/async/ClientRequestScheduler.java  
> 2009-02-03 16:24:45 UTC (rev 25491)
> > > >>> +++ 
> > > >>> trunk/freenet/src/freenet/client/async/ClientRequestScheduler.java  
> 2009-02-03 16:45:44 UTC (rev 25492)
> > > >>> @@ -662,18 +662,18 @@
> > > >>>                Runnable r = new Runnable() {
> > > >>>                        public void run() {
> > > >>>                                if(logMINOR) 
> Logger.minor(this, "Running "+gets.length+" callbacks off-thread 
> for "+block.getKey());
> > > >>> -                               for(int i=0;i<gets.length;i++) {
> > > >>> +                               for(SendableGet get : gets) {
> > > >>>                                        try {
> > > >>> -                                               if(logMINOR) 
> Logger.minor(this, "Calling callback for "+gets[i]+" for "+key);
> > > >>> -                                               gets[i].onGotKey(key, 
> block, ClientRequestScheduler.this);
> > > >>> +                                               if(logMINOR) 
> Logger.minor(this, "Calling callback for "+get+" for "+key);
> > > >>> +                                               get.onGotKey(key, 
> block, ClientRequestScheduler.this);
> > > >>>                                        } catch (Throwable t) {
> > > >>> -                                               
> Logger.error(this, "Caught "+t+" running callback "+gets[i]+" for "+key, t);
> > > >>> +                                               
> Logger.error(this, "Caught "+t+" running callback "+get+" for "+key, t);
> > > >>>                                        }
> > > >>>                                }
> > > >>>                                if(logMINOR) 
> Logger.minor(this, "Finished running callbacks");
> > > >>>                        }
> > > >>>                };
> > > >>> -               node.getTicker().queueTimedJob(r, 0); // FIXME 
> > > >>> ideally 
> these would be completed on a single thread; when we have 1.5, use a 
> dedicated non-parallel Executor
> > > >>> +               node.executor.execute(r, "Callbacks for "+name);
> > > >>
> > > >> The FIXME still applies:   node.executor spawn a new thread for every
> > > >> request. the original comment call for a "non-parallel" executor.
> > > >
> > > > There is a patch in the pipes to make it happen; There is no reason why
> > > > not to use Executor anymore... All we need is a NativeThread factory.
> > > 
> > > I tried to do this some time before but didn't commit it.
> > > 
> > > That's because the NativeThread priority must be specified on create.
> > > That means we need one java.util.concurrent.Executor for each priority.
> > > I can't find a (clean) way to keep the number of thread in thread limit.
> > 
> > We can keep the Ticker interface, don't expose the Executors... and add
> > a counter.
> 
> I don't follow, what are you trying to achieve here? We don't have a hard 
> limit, we can't have a hard limit ...

Yeah, sure; it's not the point. But we need a counter because it is used
by load-balancing iirc

> > 
> > Btw, what's the reason why the callbacks have to be executed serially?
> 
> To reduce the load resulting from a key being found. Of course, persistent 
> requests (on the database branch) do need to be called serially anyway.

I'm not sure I understand the logic here; but well, so be it.
-------------- next part --------------
A non-text attachment was scrubbed...
Name: signature.asc
Type: application/pgp-signature
Size: 197 bytes
Desc: Digital signature
URL: 
<https://emu.freenetproject.org/pipermail/devl/attachments/20090207/b87c39c5/attachment.pgp>

Reply via email to