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
repair: high latency of RBNO bootstrap #15505
Comments
Before integration with task manager the state of one shard repair was kept in repair_info. repair_info object was destroyed immediately after shard repair was finished. In an integration process repair_info's fields were moved to shard_repair_task_impl as the two served the similar purposes. Though, shard_repair_task_impl isn't immediately destoyed, but is kept in task manager for task_ttl seconds after it's complete. Thus, some of repair_info's fields have their lifetime prolonged, which makes the repair state change delayed. Release shard_repair_task_impl resources immediately after shard repair is finished. Fixes: scylladb#15505.
Before integration with task manager the state of one shard repair was kept in repair_info. repair_info object was destroyed immediately after shard repair was finished. In an integration process repair_info's fields were moved to shard_repair_task_impl as the two served the similar purposes. Though, shard_repair_task_impl isn't immediately destoyed, but is kept in task manager for task_ttl seconds after it's complete. Thus, some of repair_info's fields have their lifetime prolonged, which makes the repair state change delayed. Release shard_repair_task_impl resources immediately after shard repair is finished. Fixes: scylladb#15505.
Before integration with task manager the state of one shard repair was kept in repair_info. repair_info object was destroyed immediately after shard repair was finished. In an integration process repair_info's fields were moved to shard_repair_task_impl as the two served the similar purposes. Though, shard_repair_task_impl isn't immediately destoyed, but is kept in task manager for task_ttl seconds after it's complete. Thus, some of repair_info's fields have their lifetime prolonged, which makes the repair state change delayed. Release shard_repair_task_impl resources immediately after shard repair is finished. Fixes: scylladb#15505.
Before integration with task manager the state of one shard repair was kept in repair_info. repair_info object was destroyed immediately after shard repair was finished. In an integration process repair_info's fields were moved to shard_repair_task_impl as the two served the similar purposes. Though, shard_repair_task_impl isn't immediately destoyed, but is kept in task manager for task_ttl seconds after it's complete. Thus, some of repair_info's fields have their lifetime prolonged, which makes the repair state change delayed. Release shard_repair_task_impl resources immediately after shard repair is finished. Fixes: scylladb#15505.
@Deexie does this merit a backport, or does it only impact tests? in any case I think the code is new enough that 5.2 doesn't have the problem. |
It impacts users as well. And 5.2 contains |
There are many conflicts, @Deexie please prepare a backport PR. |
The change for that modifies what's added in #15005 and related issue #14966 is not backported. Of course I can skip that part (and in this case that would be really easy). But the thing is that the changes are pretty related and #14966 seems to be much more harmful than this one. @denesb what do you think about opening a joint backport PR to |
Yes please. |
Before integration with task manager the state of one shard repair was kept in repair_info. repair_info object was destroyed immediately after shard repair was finished. In an integration process repair_info's fields were moved to shard_repair_task_impl as the two served the similar purposes. Though, shard_repair_task_impl isn't immediately destoyed, but is kept in task manager for task_ttl seconds after it's complete. Thus, some of repair_info's fields have their lifetime prolonged, which makes the repair state change delayed. Release shard_repair_task_impl resources immediately after shard repair is finished. Fixes: scylladb#15505. (cherry picked from commit 0474e15)
It is not clear to me what is the problem according the the description above. What "state changing" are you referring to? I first thought it was about cql read / write latency. |
|
Before integration with task manager the state of one shard repair was kept in repair_info. repair_info object was destroyed immediately after shard repair was finished. In an integration process repair_info's fields were moved to shard_repair_task_impl as the two served the similar purposes. Though, shard_repair_task_impl isn't immediately destoyed, but is kept in task manager for task_ttl seconds after it's complete. Thus, some of repair_info's fields have their lifetime prolonged, which makes the repair state change delayed. Release shard_repair_task_impl resources immediately after shard repair is finished. Fixes: scylladb#15505. (cherry picked from commit 0474e15)
Yes, it helps to release the effective_replication_map_ptr earlier. But do you see any actual problem, e.g., taking longer to finish repair, user facing higher read / write cql latency? You mentioned in the opening message:
Not releasing effective_replication_map_ptr should not have any impact on when the bootstrap should be considered as finished. |
Before integration with task manager the state of one shard repair was kept in repair_info. repair_info object was destroyed immediately after shard repair was finished. In an integration process repair_info's fields were moved to shard_repair_task_impl as the two served the similar purposes. Though, shard_repair_task_impl isn't immediately destoyed, but is kept in task manager for task_ttl seconds after it's complete. Thus, some of repair_info's fields have their lifetime prolonged, which makes the repair state change delayed. Release shard_repair_task_impl resources immediately after shard repair is finished. Fixes: #15505. (cherry picked from commit 0474e15) Closes #15875
Yes, I saw the problem while writing a test in test/topology. It was a test related to task manager so I set I didn't really check the actual path, rather focused on symptoms. So I do not know how exactly alive erm causes ManagerClient::server_add to hang, but I can find it if that's important. |
Backport to 5.2 is via #15875 - what else remains here? |
Sometimes when a new node is bootstrapped with RBNO enabled,
the state change indicating bootstrap finish is delayed. Thus, tests
wait idly until a server is added, even though the logs show that
the bootstrap's already finished.
The text was updated successfully, but these errors were encountered: