* Daniel Cheng <j16sdiz+free...@gmail.com> [2009-02-04 23:35:04]:

> On Wed, Feb 4, 2009 at 7:41 PM, Florent Daigniere
> <nextg...@freenetproject.org> wrote:
> > Daniel Cheng wrote:
> >> On Wed, Feb 4, 2009 at 12:45 AM,  <nextg...@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.

Btw, what's the reason why the callbacks have to be executed serially?

Attachment: signature.asc
Description: Digital signature

_______________________________________________
Devl mailing list
Devl@freenetproject.org
http://emu.freenetproject.org/cgi-bin/mailman/listinfo/devl

Reply via email to