Constance Eustace created CASSANDRA-15155:
---------------------------------------------

             Summary: Bootstrapping node finishes 'successfully' before schema 
synced, data not streamed
                 Key: CASSANDRA-15155
                 URL: https://issues.apache.org/jira/browse/CASSANDRA-15155
             Project: Cassandra
          Issue Type: Bug
            Reporter: Constance Eustace
         Attachments: debug.log.zip

Bootstrap of a new node to expand an existing cluster is completing the 
bootstrapping "successfully", joining the cluster as UN in nodetool status, but 
has no data and no active streams. Writes and reads start being served. 

Environment: AWS, IPV6, three datacenters, asia / europe / us
Version: 2.2.13

We have previously scaled the europe and us datacenters from 5 nodes to 25 
nodes (one node at a time) without incident.

Asia (tokyo) is a different story. We have seen multiple failure scenarios, but 
the most troubling is a string of attempted node bootstrappings where the 
bootstrap completes and the node joins the ring, but there is no data. 

We were able to expand Asia by four nodes by increasing ring delay to 100 
seconds, but that has not worked anymore. 

Attached Log: Our autoscaling + Ansible initial setup creates the node, but the 
ansible has not run yet, so the autostarted cassandra fails to load, but it has 
no security group yet so it did not communicate with any other node. That is 
the 15:15:XX series log messages at the very top.

Then 15:20:XX series messages begin after ansible has completed setup of the 
box, and the data dirs and commit log dirs have been scrubbed. 

This same process ran for EU and US expansions without incident. 

>From what I can tell of the log (DEBUG was enabled):

Ring information collection begins, so some sort of gossip/cluster 
communication is healthy:

INFO [main] 2019-06-12 15:20:05,468 StorageService.java:1142 - JOINING: waiting 
for ring information

But almost all of those checks output:

DEBUG [GossipStage:1] 2019-06-12 15:20:07,673 MigrationManager.java:96 - Not 
pulling schema because versions match or shouldPullSchemaFrom returned false

Which seems weird, as we shall see soon. After all the nodes have reported in a 
similar way, most not pulling because of the above message, and a couple that 
were interpreted as DOWN, it then does:

INFO [main] 2019-06-12 15:21:45,486 StorageService.java:1142 - JOINING: schema 
complete, ready to bootstrap
INFO [main] 2019-06-12 15:21:45,487 StorageService.java:1142 - JOINING: waiting 
for pending range calculation
INFO [main] 2019-06-12 15:21:45,487 StorageService.java:1142 - JOINING: 
calculation complete, ready to bootstrap

We then get a huge number of

org.apache.cassandra.db.UnknownColumnFamilyException: Couldn't find 
cfId=dd5d7fa0-1e50-11e9-a62d-0d41c97b2404

INFO [main] 2019-06-12 15:23:25,515 StorageService.java:1142 - JOINING: 
Starting to bootstrap...
INFO [main] 2019-06-12 15:23:25,525 StreamResultFuture.java:87 - [Stream 
#05af9ee0-8d26-11e9-85c1-bd5476090c54] Executing streaming plan for Bootstrap
INFO [main] 2019-06-12 15:23:25,526 StorageService.java:1199 - Bootstrap 
completed! for the tokens [-7314981925085449175, ...<tokens>... 
5499447097629838103]

Here are the log messages for MIgrationManager for schema gossiping:

DEBUG [main] 2019-06-12 15:20:05,423 MigrationManager.java:493 - Gossiping my 
schema version 59adb24e-f3cd-3e02-97f0-5b395827453f
DEBUG [MigrationStage:1] 2019-06-12 15:23:25,694 MigrationManager.java:493 - 
Gossiping my schema version 3d1a9d9e-1120-37ae-abe0-e064cd147a99
DEBUG [MigrationStage:1] 2019-06-12 15:23:25,775 MigrationManager.java:493 - 
Gossiping my schema version 0bf74f5a-4b39-3525-b217-e9ccf7a1b6cb
DEBUG [MigrationStage:1] 2019-06-12 15:23:25,905 MigrationManager.java:493 - 
Gossiping my schema version b145475a-02dc-370c-8af7-a9aba2d61362
DEBUG [InternalResponseStage:12] 2019-06-12 15:24:26,445 
MigrationManager.java:493 - Gossiping my schema version 
9c2ed14a-8db5-39b3-af48-6cdb5463c772

the schema version ending in -6cdb5463c772 is the proper version in the other 
nodes per gossipinfo. But as can be seen, the bootstrap completion message 
(15:23:25,526) is logged before four or five intermediate schema versions are 
created, which seem to be due to system_distributed and other keyspaces being 
created.

The Bootstrap completed! message comes from a Future in StorageService line 
1199 for cassandra 2.2.13 source:


{code:java}
ListenableFuture<StreamState> bootstrapStream = 
bootstrapper.bootstrap(streamStateStore, !replacing && useStrictConsistency); 
// handles token update Futures.addCallback(bootstrapStream, new 
FutureCallback<StreamState>() { @Override public void onSuccess(StreamState 
streamState) { isBootstrapMode = false; logger.info("Bootstrap completed! for 
the tokens {}", tokens); }
{code}

That future seems to complete a bit too quickly. Perhaps the schema did not 
synchronize quickly enough and therefore a list of migration/bootstrap tasks 
not created in time for the bootstrapper future to handle. We suspect the AWS 
asia datacenter networking/WAN links are very slow, or IPV6 is introducing 
other delays. 

But the code should not allow a bootstrap to silently/falsely complete 
"successfully". 

Smells like a race condition. 



--
This message was sent by Atlassian JIRA
(v7.6.3#76005)

---------------------------------------------------------------------
To unsubscribe, e-mail: [email protected]
For additional commands, e-mail: [email protected]

Reply via email to