IMO the blocking vs wait time should be an attribute of the flow and not individual component. Perhaps each source/sink/channel should make it configurable (with consistent default) so that it it can be tweaked per the use case. The common attributes like timeout, capacity can be standard configurations that each component should support wherever possible.
@Brock, I will try to include the relevant conclusions of this discussion in the dev guide. thanks Prasad On Mon, Feb 27, 2012 at 7:35 AM, Peter Newcomb <[email protected]>wrote: > Juhani, FWIW I agree with most of what you described, based on my reading > and use of the codebase. Brock, I agree that these things are not yet > adequately documented--especially in terms of Javadocs for the main > interfaces: Source, Channel, and Sink. Also, there is enough variation > among the various implementations of these interfaces to lead to ambiguous > interpretation. > > One thing I wanted to comment on specifically is Juhani's statement about > channel capacity: > > > Channels: > > - Only memory channels have a capacity, but when that is exceeded > > ChannelException seems a clearcut reaction > > Before your recent refactoring of MemoryChannel, put() would block > indefinitely if the queue was at capacity--are you suggesting that this was > incorrect behavior that should not be allowed? Or just that any such > blocking should have a finite duration (similar to take() keep-alive), and > throw ChannelException upon timeout? > > Also, other channels may well have implicit capacities, for instance > available space in a database or filesystem partition, though I agree that > ChannelException would be appropriate in those cases. > > -peter >
