-
Notifications
You must be signed in to change notification settings - Fork 996
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 retry for redis io flow #274
Conversation
Hi @khorshuheng. Thanks for your PR. I'm waiting for a gojek member to verify that this patch is reasonable to test. If it is, they should reply with Once the patch is verified, the new status will be reflected by the I understand the commands that are listed here. Instructions for interacting with me using PR comments are available here. If you have questions or suggestions related to my behavior, please file an issue against the kubernetes/test-infra repository. |
/ok-to-test |
/test test-golang-sdk |
protos/feast/core/Store.proto
Outdated
@@ -110,6 +110,8 @@ message Store { | |||
message RedisConfig { | |||
string host = 1; | |||
int32 port = 2; | |||
int32 backoff_ms = 3; |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Suggest some comments to the new proto fields.
int32 backoff_ms = 3; | |
// Optional. The number of milliseconds to wait before retrying failed Redis connection. | |
// By default, Feast uses exponential backoff policy and "backoff_ms" sets the initial wait duration. | |
int32 backoff_ms = 3; | |
// Optional. Maximum total number of retries for connecting to Redis. Default to zero retries. | |
int32 max_retries = 4; |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Just nitpick, the initial backoff duration could be renamed as follow
int32 initial_backoff_ms = 3;
So that the generated code will be clearer
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
@davidheryanto @pradithya Thanks for the suggestion, i have implemented the change as suggested.
Looks great! |
Thanks! There are a few things which needs to be discussed before the implementation:
FailedRedisMessage
|
We currently write deadletters to BQ using the WriteFailedElementToBigQuery PTransform, we can extend it to other types of sinks (kafka, file, etc) later. As for the failed element message, just key/value bytes together with the error message and timestamp would be great! |
1db929d
to
51c5ec2
Compare
f44241b
to
a97fdc2
Compare
I have implemented this. Though, as discussed earlier, the bytes value are currently represented as string, due to the BigQuery schema. |
/lgtm |
/approve |
[APPROVALNOTIFIER] This PR is APPROVED This pull-request has been approved by: khorshuheng, woop The full list of commands accepted by this bot can be found here. The pull request process is described here
Needs approval from an approver in each of these files:
Approvers can indicate their approval by writing |
/retest |
@khorshuheng Happy to merge this in if we can resolve the conflicts. |
a97fdc2
to
b8c3b30
Compare
/retest |
/lgtm |
Currently, the Redis write to the serving store does not handle transient connection failures, which results in data loss. This PR augment the pipeline to retry the connection up to a certain maximum limit. The limit and backoff time are configurable via RedisConfig.