To be able to read a complete CF, I have forked your project gossie and added RangeGet to the query interface and implementation.
I was hoping you could add this to your branch again, so others can benefit the feature.
It consists of one commit and one file that changed.
added RangeGet mehod to Query. the method accepts a gossie.Range and …
…a boolean to indicate if the startkey(given in range) should be excluded from the result.
Cassandra provides no such method, and the way you are using RangeGet is the correct one for a RP cluster. The Cassandra Thrift API is not designed for streaming-like methods and doesn't provide them. The usual way to do full-table processing in Cassandra is to setup a Hadoop cluster parallel to your Cassandra cluster. Cassandra provides specific Hadoop APIs for this. That's usually much more efficient than using RangeGet via Thrift. In production I only use RangeGet for very small tables, everything else is indexed in some way and there is no need to scan a full table.
As for your channel proposal I would like to not implement it for now. I usually shy away from channels in Gossie since Go already provides excellent multiplexed goroutine execution based on I/O waits. Gossie just by virtue of using (via the Thrift libs) Go sockets is already concurrent and asynchronous if you launch multiple goroutines to talk to it (it's designed to work like this, including sharing the Pool objects). If an application wants to add another layer on top of it using channels (for idiomatic purposes like you mention, or for doing parallel I/O waits with both Gossie and other sources of I/O at the same time) they can do it very easily in their side.
Nice to see your interest in Gossie, keep up the good work!
I guess this can be closed :)
Merge pull request #1 from hailocab/m
Implemented Map marshaling and unmarshaling