Re: Index Helper for beagle++ hangs occasionally
- From: Max Wiehle <max wiehle gmail com>
- To: dashboard hackers <dashboard-hackers gnome org>
- Subject: Re: Index Helper for beagle++ hangs occasionally
- Date: Sat, 08 Dec 2007 16:33:20 +0100
Hi dBera,
Looks like you hit it.
Am Samstag, den 08.12.2007, 10:02 -0500 schrieb D Bera:
> Hi Max,
>
> > We are using external programms to do some of the metadata extraction
> > for us. The communication works via stdin and stdout - i.e. we start the
> > programm from within the IndexHelper and then read and parse its stdout.
> > Now from time to time IndexHelper will stop reading even though more
> > lines are available on stdin. It sits in a
> > while((line = StreamReader.ReadLine()) != null)
> > loop and does nothing.
> > The whole thing happens during the flush. All flushed filenames are
> > handed to the external filter via its stdIn and then the metadata is
> > read from its stdout.
>
> So you mean there is an external-filter like scenario here ? In
> IndexHelper, it calls this external application, which reads its input
> and outputs some data on its stdout and then IndexHelper reads that
> output data (via a pipe ? setting stdout of the child external
> application ? reads stdout of the external application as our
> external-filter does it - just by reading the stdout of the external
> application ?).
Right now i am creating a new Process and setting it's StartInfo with
RedirectStandartOut = true;
RedirectStandartIn = true;
Then i use
StreamReader ProcOut = p.StandartOut;
StreamWriter ProcIn = p.StandartIn;
with the Process.
I use these for all indexables in a flush so i don't have to restart the
process again and again. So i can't use
ProcOut.ReadToEnd();
ProcOut.Close();
Instead i write a line with info about the next indexable and then read
ProcOut until it prints "EOM" - end of metadata. Write the next line and
so on.
> Make sure that the stderr of the external application is closed.
> Otherwise, the external application might be printing some information
> to its stderr, which will block stdout for a long time. Check our
> pdf/mplayer etc external app based filters.
I was trying to read the external stdout and print the external stderr
to my stderr for debugging purposes. Now i moved that to writing stderr
of the external process to a seperate logfile instead. Seems to fix the
issue.
> > Looks like BEAGLE_EXERCISE_THE_DOG was not set but i still wonder why it
> > would sleep for 20 minutes especialy since the machiene was not under
> > heavy load.
>
> If its all happening in IndexHelper then EXERCISE_THE_DOG will not
> affect anything. EXERCISE_THE_DOG controls beagled (the scheduler) and
> not indexhelper.
I thought it would keep the IndexHelper from beeing niced to a certain
level - however i was able to reproduce the problem with
EXERCISE_THE_DOG set.
Thanks a lot... Tried to find the reason for a good amount of time.
Max
[
Date Prev][
Date Next] [
Thread Prev][
Thread Next]
[
Thread Index]
[
Date Index]
[
Author Index]