ScyllaDB Open Source Release 3.0.4

The ScyllaDB team announces the release of ScyllaDB Open Source 3.0.4, a bugfix release of the ScyllaDB 3.0 stable branch. ScyllaDB 3.0.4, like all past and future 3.x.y releases, is backward compatible and supports rolling upgrades.

The major fix in this release is for a rare race condition between a schema update (adding or removing a column) and an initiated compaction, which may cause the compaction to write values to the wrong columns. The short time window where this may occur is just after compaction was initiated but before it starts writing to storage. Should the race condition occur, there may be a crash or validation/run-time error on the driver side. #4304

Related links:

Other issues solved in this release:

  • commit log: On rare cases, when two chunks of the commit log or hinted handoff are written simultaneously, they might overlap, cause one to write on the header of the other, resulting in a “commitlog files are corrupted: Checksum error in segment chunk at XXXX” message. #4231
  • Materialized Views: a mistake in flow control algorithm result with ScyllaDB fail to apply back pressure to the client #4143
  • ScyllaDB Driver: Using ScyllaDB shard aware drivers may cause unbalanced connections, where one shard has tens of thousands of connections, while the others do not, resulting in a temporary slow down #4269
  • MC FIle format: large promoted indexes might require large allocations and cause performance problems or fail with bad_alloc. This release does not fix the problem completely but makes it less severe. #4217
  • MC Format: in some cases, writing an uncompressed mc sstable in debug mode fails with EINVAL due to unaligned DMA address #4262
  • CQL: ScyllaDB does not support insertion of null data through JSON inserts #4256. For example:
    INSERT INTO mytable JSON '{
        "myid" : "id2",
        "mytext" : "text234",
        "mytext1" : "text235",
        "mytext2" : null
    }';
  • Housekeeping: scylla-housekeeping for servers with python version older than 3.6, reporting “TypeError: the JSON object must be str, not 'bytes'#4239
  • Streaming: rebuilding a node may cause long reactor stalls on large clusters #3639
  • Bootstrap: A bootstrapping node doesn’t wait for a schema before joining the ring, which may result in the node failing to bootstrap, with the error “storage_proxy - Failed to apply mutation”. In particular, this error manifests when user-defined type is used. #4196
  • Authentication: possible access to uninitialized memory in password_authenticator #4168
  • fragmented_temporary_buffer::read_exactly() allocates huge amounts of memory on premature end-of-stream, result with bad_alloc when reading from CQL, if the connection is closed in the middle of a frame, and other places #4233
  • CQLSh now use TLSv1.2 by default