Skip to content
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

Handle splitting-related retries on YB level instead of returning back to client app/driver #5854

Closed
ttyusupov opened this issue Sep 28, 2020 · 0 comments
Assignees
Labels
area/docdb YugabyteDB core features kind/enhancement This is an enhancement of an existing feature

Comments

@ttyusupov
Copy link
Contributor

No description provided.

@ttyusupov ttyusupov created this issue from a note in Tablet splitting (To do) Sep 28, 2020
@ttyusupov ttyusupov moved this from To do to In progress in Tablet splitting Dec 27, 2020
@ttyusupov ttyusupov self-assigned this Apr 2, 2021
@ttyusupov ttyusupov moved this from In progress to Review in Tablet splitting Apr 12, 2021
ttyusupov added a commit that referenced this issue Apr 14, 2021
Summary:
Implements handling tablet-splitting related errors at YBSession level instead of propagating them up to the client app.

- Added its own `ErrorCollector` instance to the `Batcher`
- Once `Batcher` flush is done, `YBSession` checks if we had any errors, and if all errors are retriable at the session level, creates another `Batcher` for retrying failed operations. If there is at least one non-retriable error, all errors are moved (using `std::move` on `unique_ptr`) into `YBSession::error_collector_`.
- Added `yb::client:: IsRetryableClientError()` and `yb::client::ShouldSessionRetryError()` functions.
- The whole batch will be aborted if tablet resolution failed at least for 1 op to keep the guarantee of operations order for the same row.

Operations failed with errors retriable at session-level are retried until we either succeed or get at least one non-retriable error (which includes a timeout error due to deadline).

Also fixed memory management issue with heap-use-after-free in redis service.

Test Plan:
```
./bin/yb-ctl --rf=1 create --num_shards_per_tserver=1 --ysql_num_shards_per_tserver=1 --master_flags '"tablet_split_size_threshold_bytes=300000"' --tserver_flags "db_write_buffer_size=100000"
java -jar ~/code/yb-sample-apps/target/yb-sample-apps.jar --workload SqlSecondaryIndex --nodes 127.0.0.1:5433 --num_threads_read 2 --num_threads_write 2 --num_unique_keys 1000000000 --nouuid --drop_table_name SqlSecondaryIndex
```

Reviewers: bogdan, mbautin, sergei, rsami

Reviewed By: mbautin, sergei

Differential Revision: https://phabricator.dev.yugabyte.com/D10972
@ttyusupov ttyusupov moved this from Review to Done in Tablet splitting Apr 14, 2021
@ttyusupov ttyusupov added area/docdb YugabyteDB core features kind/enhancement This is an enhancement of an existing feature labels Apr 14, 2021
YintongMa pushed a commit to YintongMa/yugabyte-db that referenced this issue May 26, 2021
…level

Summary:
Implements handling tablet-splitting related errors at YBSession level instead of propagating them up to the client app.

- Added its own `ErrorCollector` instance to the `Batcher`
- Once `Batcher` flush is done, `YBSession` checks if we had any errors, and if all errors are retriable at the session level, creates another `Batcher` for retrying failed operations. If there is at least one non-retriable error, all errors are moved (using `std::move` on `unique_ptr`) into `YBSession::error_collector_`.
- Added `yb::client:: IsRetryableClientError()` and `yb::client::ShouldSessionRetryError()` functions.
- The whole batch will be aborted if tablet resolution failed at least for 1 op to keep the guarantee of operations order for the same row.

Operations failed with errors retriable at session-level are retried until we either succeed or get at least one non-retriable error (which includes a timeout error due to deadline).

Also fixed memory management issue with heap-use-after-free in redis service.

Test Plan:
```
./bin/yb-ctl --rf=1 create --num_shards_per_tserver=1 --ysql_num_shards_per_tserver=1 --master_flags '"tablet_split_size_threshold_bytes=300000"' --tserver_flags "db_write_buffer_size=100000"
java -jar ~/code/yb-sample-apps/target/yb-sample-apps.jar --workload SqlSecondaryIndex --nodes 127.0.0.1:5433 --num_threads_read 2 --num_threads_write 2 --num_unique_keys 1000000000 --nouuid --drop_table_name SqlSecondaryIndex
```

Reviewers: bogdan, mbautin, sergei, rsami

Reviewed By: mbautin, sergei

Differential Revision: https://phabricator.dev.yugabyte.com/D10972
ddorian added a commit to ddorian/yugabyte-db that referenced this issue Jul 26, 2021
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
area/docdb YugabyteDB core features kind/enhancement This is an enhancement of an existing feature
Projects
Development

No branches or pull requests

1 participant