> Some 'feature' for future implementation, maybe? imho truncation working as a meta data operation is the correct approach. It's generally used in testing and development. It deletes the data and removes the SSTables, giving you a clean state.
A CF level tombstone would mean that reads had to examine every SSTable to see if they had columns with a higher timestamp. And the data would not be removed intil gc_grace_seconds had passed. > It seems odd if you expect the same behaviour of "delete from usertable" (in > SQL, not yet in CQL, I presume), especially because the truncate is synced > over all nodes before it returns to client, so a truncate may rightfully > discard its handoffs, right? It is analogous to http://en.wikipedia.org/wiki/Truncate_(SQL) A CF level tomstone would be analogous to "delete * from foo" > I wonder though that you don't know YCSB, what do you use to do performance > testing? wrote your own or use another tool? In the latter I would like to > know what you use :) If I want to stress test a normal sized cluster I use the java stress tool included in the source distribution. Previously where I had to benchmark a system for a proof of concept and capacity planning. I cobbled together a system with python, redis and flat files to replay real life requests using multiple clients. That allowed us to adjust the read / write mix and the adjust the rate. Cheers ----------------- Aaron Morton Freelance Developer @aaronmorton http://www.thelastpickle.com On 7/05/2012, at 11:51 PM, Peter Dijkshoorn wrote: > Check, I understand. Thanks! > > The cluster certainly was overloaded and I did not realize that truncate does > not tombstone or have a timestamp. Some 'feature' for future implementation, > maybe? > It seems odd if you expect the same behaviour of "delete from usertable" (in > SQL, not yet in CQL, I presume), especially because the truncate is synced > over all nodes before it returns to client, so a truncate may rightfully > discard its handoffs, right? > btw, it was very hard to replicate this behaviour, seems to be a rare > occurrence... > > I wonder though that you don't know YCSB, what do you use to do performance > testing? wrote your own or use another tool? In the latter I would like to > know what you use :) > > Ciao > > > Peter Dijkshoorn > Adyen - Payments Made Easy > www.adyen.com > > Visiting address: Mail Address: > Simon Carmiggeltstraat 6-50 P.O. Box 10095 > 1011 DJ Amsterdam 1001 EB Amsterdam > The Netherlands The Netherlands > > Office +31.20.240.1240 > Email peter.dijksho...@adyen.com > > On 05/07/2012 12:59 PM, aaron morton wrote: >> >> I don't know the YCSB code, but one theory would be… >> >> 1) The cluster is overloaded by the test. >> 2) A write at CL ALL fails because a node does not respond in time. >> 3) The coordinator stores the hint and returns failure to the client. >> 4) The client gets an UnavailableException and retries the operation. >> >> Did the nodes show any dropped messages ? Either in nodetool tpstats or in >> the logs? >> >> Truncate is meta data operation, unlike deleting columns or rows. When a >> column is deleted a Tombstone column is written, when row is deleted >> information is associated with the key, in the context of the CF. Truncate >> snapshots and then deletes the SSTables on disk, it does not write to the >> SSTables. So it is possible for a write to be stored with a lower timestamp >> than the truncate, because truncate does not have a timestamp. >> >> cheers >> >> ----------------- >> Aaron Morton >> Freelance Developer >> @aaronmorton >> http://www.thelastpickle.com >> >> On 4/05/2012, at 1:28 AM, Peter Dijkshoorn wrote: >> >>> Hi guys, >>> >>> I got a weird thingy popping up twice today, I run a test where I insert >>> a milion records via YCSB and edited it to allow me to adjust the >>> consistency level: the write operations are done with ConsistencyLevel.ALL. >>> This is send to a 4 (virtual) node cluster with a keyspace 'test' set up >>> with replication factor 3. >>> Now I expect that because of the ConsistencyLevel.ALL there is no hinted >>> handoff active, since writes are to be accepted by all nodes before the >>> operation returns to the client. The client gets only OK back, none fails. >>> After the test I run a truncate, and a count which reveals still active >>> records, time does not matter, I have to re-invoke the truncate to >>> remove the records. >>> >>> [cqlsh 2.0.0 | Cassandra 1.0.8 | CQL spec 2.0.0 | Thrift protocol 19.20.0] >>> cqlsh> use test; >>> cqlsh:test> truncate usertable; >>> cqlsh:test> select count(*) from usertable ; >>> count >>> ------- >>> 3 >>> >>> >>> On the cassandra output (-f) I can see that there is some handoff-ing >>> active, which I did not expect. >>> >>> Has anyone an idea why the handoff is active while issuing opperations >>> with ConsistencyLevel.ALL? >>> Why is the truncate not correctly put in sync and allows subsequent >>> handoff's delivered of records originally set before the truncate? >>> >>> Thanks if you can clarify these thing, I did not expect this at all. >>> >>> Cheers, >>> >>> Peter >>> >>> -- >>> Peter Dijkshoorn >>> Adyen - Payments Made Easy >>> www.adyen.com >>> >>> Visiting address: Mail Address: >>> Simon Carmiggeltstraat 6-50 P.O. Box 10095 >>> 1011 DJ Amsterdam 1001 EB Amsterdam >>> The Netherlands The Netherlands >>> >>> Office +31.20.240.1240 >>> Email peter.dijksho...@adyen.com >>> >>