Le 03/03/2014 15:17, David C. Rankin a écrit :
Yes, I saw where you wrote that opening a
'single' remote file with a unique URL
does not generate additional tdeio_x slaves. I have confirmed that if I use
konqueror in type the complete URL:
sftp://somehost.tld/path/to/a/filename.ext
No stale tdeio_sftp processes are created. I have also, confirmed that the
tdeio_http processes are ultimately killed by something (presumably the failsafe
idle_timeout), but I don't think that behavior is correct.
It looks like tdeio_http is a special case with hardcoded longer
timeouts than the default ones.
The dirlist on remote hosts does look like it is part of the problem. It's like
TDE loses track of all the tdeio_x processes created to build the remote
'/path/to/some/' before getting to 'filename.ext'
To be more precise, TDE does not lose tracks of the tdeio process. The
tdeio scheduler is always aware of its slave threads.
The actual problem is that the tdeio scheduler never receives the "job
is finished" notification from some slaves.
So it considers this slave as being eternally busy and keeps spawning
new ones ...
The nominal scenario looks like:
1) an application requests an URL to the tdeio scheduler (e.g. konqueror
asks "directory listing for sftp://remotehost/")
2) the tdeio scheduler instantiates a "job"
3) the job looks for an idle "slave" that can do the job (e.g. correct
protocol), uses one if it exists, or else asks the scheduler to
instantiate a new slave.
4) the slave spawns a 3rd party process (ssh in my case) and waits for
text output. (note: stheome slaves do the job directly without spawning
a 3rd party process)
5) The 3rd party process does its job (remote directory listing for
example) and writes output to the slave.
6) After the command is complete, the slave ceases receiving data
because nothing is written anymore by the 3rd party process.
7) The slave sends "finished" to the job.
8) the job sends "finished" to the scheduler.
9) the scheduler deletes the job and puts the slave in the "idle slave
list" so that it can be reused by another job, or will be killed after
some minutes of idleness.
What happens with my "kdirlist" problem (and probably your imap problem
too), is that step 7 never occurs.
For an unknown reason, the slave, after having received the correct
data, never notifies the job that it has finished, then the job never
notifies the scheduler, then the scheduler think the slave is still
active and does not mark it as "idle" ... and here is our stale
tdeioslave ... (note: the slave eventually gets killed if the remote
host closes network connection for idleness ... but it looks like this
does not happen with ssh protocol)
I'm currently looking into the cache mechanism of the "kdirlist" job class.
I believe (to be confirmed) that when kdirlist uses its internal cache,
it still spawns a slave but does NOT uses it at all, since it already
has the data it is looking for in its cache.
Then it returns the cached data and ignores the spawned slave, which
sits there forever, waiting for a query from the job that never comes ...
Francois