Cassandra: Streaming error occurred java.io.IOException: CF <> was dropped during streaming

Apache Cassandra logo
Probléma: Van egy relatív sok (1 TB+) adatot tartalmazó Cassandra klasztered, legalább egy DataCenterrel. Hozzáadsz egy új DataCentert, amibe szinkronizálni szeretnéd a meglévő adatokat. Ennek megfelelően módosítod a keyspace-ek replication factorát (vagy ha jobban tetszik, a kulcsterek replikációs tényezőjét). Kiadod a nodetool rebuild -dc <forrás_dc> parancsot, de az adatok szinkronizálása néhány 100 GB után megszakad. Többedik rebuild kiadására sem javul jelentősen a helyzet, sokadik próbálkozásra sem sikerül megközelíteni a forrás DataCenterben lévő adatmennyiséget.

A hiba biztosan reprodukálható: Datastax Enterprise (DSE) 4.8.9 (EOL) -- Apache Cassandra 2.1 (EOL), amennyiben a forrás DataCenterben kb. 1 TB körüli adatmennyiség van.

A logokban ilyen üzeneteket találsz:

INFO  [STREAM-INIT-/10.1.14.252:58838] 2019-02-13 12:09:24,830  StreamResultFuture.java:110 - [Stream #1b118d10-2fb2-11e9-8c71-0f5c96cdd291 ID#0] Creating new streaming plan for Bulk Load
INFO  [STREAM-INIT-/10.1.14.252:58838] 2019-02-13 12:09:24,856  StreamResultFuture.java:117 - [Stream #1b118d10-2fb2-11e9-8c71-0f5c96cdd291, ID#0] Received streaming plan for Bulk Load
INFO  [STREAM-INIT-/10.1.14.252:58850] 2019-02-13 12:09:24,864  StreamResultFuture.java:117 - [Stream #1b118d10-2fb2-11e9-8c71-0f5c96cdd291, ID#0] Received streaming plan for Bulk Load
INFO  [STREAM-IN-/10.1.14.252] 2019-02-13 12:09:24,872  StreamResultFuture.java:167 - [Stream #1b118d10-2fb2-11e9-8c71-0f5c96cdd291 ID#0] Prepare completed. Receiving 11 files(911502728 bytes), sending 0 files(0 bytes)
ERROR [STREAM-IN-/10.1.14.252] 2019-02-13 12:09:27,399  StreamSession.java:512 - [Stream #1b118d10-2fb2-11e9-8c71-0f5c96cdd291] Streaming error occurred
java.io.IOException: CF 7019cb61-2be3-11e9-abac-bfef77d85373 was dropped during streaming
        at org.apache.cassandra.streaming.compress.CompressedStreamReader.read(CompressedStreamReader.java:77) ~[cassandra-all-2.1.15.1403.jar:2.1.15.1403]
        at org.apache.cassandra.streaming.messages.IncomingFileMessage$1.deserialize(IncomingFileMessage.java:48) ~[cassandra-all-2.1.15.1403.jar:2.1.15.1403]
        at org.apache.cassandra.streaming.messages.IncomingFileMessage$1.deserialize(IncomingFileMessage.java:38) ~[cassandra-all-2.1.15.1403.jar:2.1.15.1403]
        at org.apache.cassandra.streaming.messages.StreamMessage.deserialize(StreamMessage.java:56) ~[cassandra-all-2.1.15.1403.jar:2.1.15.1403]
        at org.apache.cassandra.streaming.ConnectionHandler$IncomingMessageHandler.run(ConnectionHandler.java:276) ~[cassandra-all-2.1.15.1403.jar:2.1.15.1403]
        at java.lang.Thread.run(Thread.java:745) [na:1.8.0_91]
INFO  [STREAM-IN-/10.1.14.252] 2019-02-13 12:09:27,399  StreamResultFuture.java:181 - [Stream #1b118d10-2fb2-11e9-8c71-0f5c96cdd291] Session with /10.1.14.252 is complete
WARN  [STREAM-IN-/10.1.14.252] 2019-02-13 12:09:27,399  StreamResultFuture.java:208 - [Stream #1b118d10-2fb2-11e9-8c71-0f5c96cdd291] Stream failed
INFO  [StreamReceiveTask:808] 2019-02-13 12:09:50,050  StreamResultFuture.java:181 - [Stream #85956c70-2fb1-11e9-aafb-99876dcbe5b0] Session with /10.1.7.239 is complete
INFO  [StreamReceiveTask:808] 2019-02-13 12:09:50,050  StreamResultFuture.java:213 - [Stream #85956c70-2fb1-11e9-aafb-99876dcbe5b0] All sessions completed

Megoldás: A cassandra.yaml konfigurációs fájlt egészítsd ki a szinkronizálás idejére az alábbi opciókkal, majd indítsd újra az összes Cassandrát. Mind a szinkronizáció forrásánál, mind pedig a céljánál.

streaming_socket_timeout_in_ms: 86400000
commitlog_segment_size_in_mb: 512