Changing compression to zstd problem

I have a sharded cluster deployed using 1.11.0 operator and mongodb 4.4.12. I updated the deployment to use zstd as the block and journal compressor, but as the operator first tried to restart one of the cfg replset pods, it was failing to come up. I would see errors like this:

{"s":"E","c":"STORAGE","id":22435,"ctx":"initandlisten","message":"WiredTiger error","attr":{"error":0,"message":"[1667262608:404551][1:0x7f9b27215040], txn-recover: zstd error: ZSTD_decompress: Unknown frame descriptor"}
{"s":"E","c":"STORAGE","id":22435,"ctx":"initandlisten","message":"WiredTiger error","attr":{"error":-31802,"message":"[1667262608:404568][1:0x7f9b27215040], txn-recover: __wt_txn_recover, 1086: Recovery failed: WT_ERROR: non-specific WiredTiger error"}
{"s":"F","c":"-","id":23090,"ctx":"initandlisten","message":"\n\n***aborting after fassert() failure\n\n"

It will then give up and die, causing the pod to crash loop. I can change the deployment back to snappy and it comes back.

The error sounds like its trying to decompress data on startup with zstd instead of the original format, snappy. Is there a process to switch from using snappy to zstd?

1 Like

Hello, the compression algorithm cannot be changed on the fly with existing data. You will need to re-create the replica set members on a rolling fashion and let each one do initial sync from the remaining nodes.

1 Like