[cups.general] Debugging the filter chain?

William Pietri william at scissor.com
Wed Oct 20 09:19:34 PDT 2010


Thanks for the reply, Johannes.

On 10/20/2010 01:04 AM, Johannes Meixner wrote:
> Hello,
>
> On Oct 19 17:26 William Pietri wrote (shortened):
>    
>> Since I'm pretty ignorant of CUPS, I don't know how much sense these
>> suggestions make, but if I could wave a magic wand, these would have been
>> nice:
>>
>>   1. In debug logging, printing the full arguments of all filters called.
>>      
> See "man 7 filter" and "man 7 backend":
> All filters and the backend are called with the same command line
> arguments which are logged as "argv[0]"..."argv[6]" and with the
> same environment variables which are logged as "envp[0]"...
>    

Ah yes. I saw that in the output, but didn't realize the connection. 
Perhaps all of that could be preceded by some line that makes it clear 
it goes with the filters? E.g.:

    Starting 5 filters and 1 backend with the following arguments:


>>   2. In regular logging, calling out sending a zero-byte payload to the
>>      printer as an error.
>>   3. The ability to get a little information on what's getting passed
>>      between filters, so that I can tell where the failure is. E.g.,
>>      logging how many bytes each filter takes in and puts out.
>>   4. Getting dumps of the contents at each stage in the filter chain,
>>      so I could inspect things.
>>      
> What the cupsd does when it runs the filters is that it forks
> for each filter and for the backend a separated process where
> - only the first filter gets its input as file named via argv[6]
> - all others get the input via stdin via pipe from the predecessor
> - only the backend sends its output directly to its recipient (printer)
> - all others provide the output via stdout to a pipe to the successor
> - all their stderr go to the cupsd which forwards it to the log
>
> Therefore it is not possible for the cupsd to inspect the data
> which is forwarded via pipes from one filter to the next
> (or to the backend) so that the cupsd cannot log how many bytes
> each filter takes in and puts out or even dump the contents.
> This would require that also all data of all filters is sent
> via the cupsd which results probably a huge loss of performance
> (a few bytes stderr but megabytes up to gigabytes of payload).
>    

Ok. That makes sense. I'd still appreciate having the "Sending data file 
(0 bytes)" bit called out as an error rather than a debug message, 
unless there's some case where a zero-byte lpd payload makes sense; that 
would have gotten me on track sooner.

And although those other items clearly don't make sense in general, 
could they make sense as part of some debug mode? Had I been stuck for 
long, I would have started inserting fake filters to nab the data. I 
don't know how often people end up having to debug the filter chain, so 
maybe my use case isn't important enough to worry about. But if it is, a 
config option like dump_all_filter_steps might be handy.

Either way, it's not a big deal for me; I just am trying to contribute 
what I little I can: feedback.

William





More information about the cups mailing list