Cassandraのロック機能

  • ReentrantReadWriteLockクラスを使ったロック
    • 読み込みロックは複数のスレッドが取得できる
    • 書き込みロックは1つのスレッドのみが取得できる
    • 読み込みロックの取得中は、他のスレッドは書き込みロックを取得できない
    • 書き込みロックの取得中は、他のスレッドは読み込みロックを取得できない
  • 読み込みロック
    • commitLog,MemTableにRowMutationを書き込む処理
    • Memtable上の値の読み込み処理(SSTableの読み込みはlock free)
  • 書き込みロック
    • 古いMemTableの swap処理
    • ノードTokenの追加や更新管理

MemTable書き込み時にWriteLockを取得しなくていいのだろうか。