id	summary	reporter	owner	description	type	status	priority	milestone	component	resolution	keywords	cc	branch	branch_author	launchpad_bug
1956	"""Tubes"": Create a composable, flow-control and back-pressure friendly way to arrange parsing, processing, and emitting data"	jknight	glyph	"The current producer/consumer API has a couple of problems:

 * It's impossible to get notifications of buffer size changes, which is important for certain kinds of timeout logic.  For example, if you buffer a bunch of output, and then time out if the peer is inactive (isn't reading any data), then you need to know not just when the buffer is empty but when some data is consumed.
 * The {{{streaming}}} flag doesn't really make sense.  It complicates the implementation of nested producers.  While it doesn't actually break anything, it's just a bug.  There's no reason to have it and it should be removed.
 * It's awkward to chain producers and consumers with each other (XXX: this problem needs better documentation, use case, example of awkward code).
 * IProtocol, ITransport, IProducer and IConsumer all have redundant ""here's some data"" / ""there will be no more data"" methods which are subtly different.  These should be unified so that the protocol consuming data from the transport and the transport consuming data from the protocol look the same.

We should design an API which does not have these problems.
"	enhancement	assigned	normal		core			glyph exarkun itamarst radix jknight oubiwann ashfall twistedmatrix.com@… tobias.oberstein@… Julian+Twisted@…	branches/tubes-1956-3	ashfall, glyph	
