-
Notifications
You must be signed in to change notification settings - Fork 60
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
Recovery optimization for persistent channels #4
Comments
Wrong reference from commit. |
@bantonsson: this might interest you as well |
Obsolete with deprecation of persistent channels in Akka 2.3.4. |
jypma
pushed a commit
to jypma/akka-persistence-cassandra
that referenced
this issue
Jan 20, 2016
* The "Column family ID mismatch" exception seems to happen when two different sessions create the keyspace at the "same" time and then they create the same tables. The exception is thrown when creating the tables. * This may happen when write and read-side journals are started at the same time * Changed the retry logic to retry not only the connect and the keyspace creation, but the whole initialization including creation of tables * Removed keyspace-autocreate-retries config, connect-retries is enough * Changed connect-retry-delay to 1s * Create of metadata table also from read journal * Also placed the execute of creation of keyspace and tables in synchronized block to reduce the risk of "Column family ID mismatch" This is not important for correctness, but improves the "experience" because the error logging and retries are avoided when running on single machine (dev)
jypma
pushed a commit
to jypma/akka-persistence-cassandra
that referenced
this issue
Jan 20, 2016
retry keyspace and table creation, krasserm#4
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Durable queues on top of Cassandra are known as anti-pattern. The issues related to reading a large number of tombstones can be addressed by introducing optimizations on persistent channel level and on journal level.
Possible optimizations on persistent channel level are (copied from a code comment in
PersistentChannel.scala
):One optimization on journal level is to delete entire rows if all columns have been marked as deleted (i.e. have a tombstone). A prerequisite is to have row splitting which is already implemented by #1.
Furthermore, reads form the journal with no lower bound (i.e. starting from sequence number
1
) are only done during recovery. All other reads (done byView
orPersistentChannel
) have a lower bound which are fast. Assuming infrequent persistent channel recoveries, Cassandra can be configured in a way that tombstone garbage collection is likely to occur between recoveries.The text was updated successfully, but these errors were encountered: