16. Attn Tinkerers! Abstracted initialization of transport. Handy if you’re experimenting with transports/RPC Just extend AbstractCassandraDaemon and make sure that class is started up via bin/cassandra.
22. JMX MBeans Tooling supplied by Mbeans Anything that does measureable/configurable work is tooled Thread pools Compaction Hinted handoff Streaming Storage Commit log
23. StorageService initServer() -> joinTokenRing() Starts gossip Starts MessagingService Negotiates bootstrap Many ring operations live here. Repository of ring topology TokenMetadata (quasi-singleton via SS.tokenMetadata_) Partitioner instance is also here
24. MessagingService Verb handlers live here (initialized from SS). Main event handlers, haven’t changed much. Socket listener 2 threads per ring node Message gateway emitted from MessageProducerimpls MS.sendRR() MS.sendOneWay() MS.receive() Messages are versioned now (0.8) IncomingTCPConnection
25. StorageProxy Top level of all read/write operations Called from o.a.c.thrift.CassandraServer Write path changed because of counters Notion of WritePerformer Eventually to Table and ColumnFamilyStore Further, to SSTable and related classes.
26. StageManager Fancy java ThreadPoolExecutor SEDA: http://www.eecs.harvard.edu/~mdw/papers/seda-sosp01.pdf consumes callables from a queue. Manages concurrency. Hasn’t changed much.
27. Adding API Methods Define method+structures in IDL interface/cassandra.thrift Regenerate files ant gen-thrift-java gen-thrift-py Implement stubs: o.a.c.thrift.CassandraServer Create a system test tests/system/test_thrift_server.py
30. Reading StorageProxy local READ stage executes a LocalReadRunnable True read vs digest Table, ColumnFamilyStore CFS.getTopLevelColumns Make QueryFilter Query Memtables Query SSTables Coalesce in iterators
31. Reading StorageProxy remote read command Response handler Send to remote nodes Read repair happens in SP.fetchRows().
32. Writing CS.doInsert() Marshalling, creates RMs StorageProxy local/remote branch SP.sendToHintedEndpoints() RowMutation one Key per (several CFs) ColumnFamily Collection of column modifications
36. Challenges To have an in-depth understanding of everything. Hard for hobbyist/part-timers Outside of Datastax, little support for full-timers Still changing fast Keeping up