Skip to content

Navigation Menu

Sign in
Appearance settings

Search code, repositories, users, issues, pull requests...

Provide feedback

We read every piece of feedback, and take your input very seriously.

Saved searches

Use saved searches to filter your results more quickly

Sign up
Appearance settings

Automatic retry with exponential backoff #58

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

Open
Alan-M-Thomaz wants to merge 8 commits into decision-labs:master
base: master
Choose a base branch
Loading
from Alan-M-Thomaz:master

Conversation

Copy link

@Alan-M-Thomaz Alan-M-Thomaz commented Mar 29, 2019

Implemented it using the recently added gem Faraday, when it is status 5xx or 200 and any of the results form body is error:Unavaible, it will retry the whole request, with an exponential interval.
passed on simple rspec test with webmock stubs.
I'm not sure if those interval params where good the exponential backoff.

Also updated group notification url to fcm url. #56

ToDo

Implement a Retry faraday middleware that allow editing the body of the request before resend it, so when it is 200 + error:unavaible, we can resend it only for the registration_ids that failed, instead to sending for all.

Copy link
Author

oh, i just screw the other http errors, i will be fixing it

Copy link
Contributor

kashif commented Apr 1, 2019

cool thanks... let me know when you are ready to review

Copy link
Author

it's fixed, just removed the error raise middleware, it was causing more problems than helping, refactored to use just retryable_statuses.

Copy link
Collaborator

@Roy-Mao Roy-Mao left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

just two minor suggestions..

Think it would be better if we put all the error handling into a different module or class, I will fork the repo and make a PR regarding this issue.

def send_notification(registration_ids, options = {})
post_body = build_post_body(registration_ids, options)


Copy link
Collaborator

@Roy-Mao Roy-Mao Apr 7, 2019

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

👇here why not just using execute_notifications(post_body) instead

lib/fcm.rb Outdated

for_uri(GROUP_NOTIFICATION_BASE_URI, extra_headers) do |connection|
response = connection.post('/gcm/notification', post_body.to_json)
for_uri(BASE_URI, extra_headers) do |connection|
Copy link
Collaborator

@Roy-Mao Roy-Mao Apr 7, 2019

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

@Alan-M-Thomaz

since there are four places where we need to call /fcm/notification

  • create_notification_key(post)
  • add_registration_ids(post)
  • remove_registration_ids(post)
  • recover_notification_key(get)

maybe it would be better if we refactor this api call into a separate private method, like what execute_notification method does..

def update_group_messaging_setting(body)
 for_uri(BASE_URI, extra_headers) do |connection|
 response = connection.post('/fcm/notification', body.to_json)
 build_response(response)
 end
end

Copy link
Author

@Alan-M-Thomaz Alan-M-Thomaz Apr 15, 2019

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

done, except for recover_notification_key, because it's a get request

Roy-Mao reacted with rocket emoji
Copy link

Hi - great work on the PR. Is there a plan to get this merged soon? We're using the gem and are trying to work out if we can wait for this PR or if we need to create our own fork. Thanks!

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Reviewers

@Roy-Mao Roy-Mao Roy-Mao requested changes

Assignees

No one assigned

Labels

None yet

Projects

None yet

Milestone

No milestone

Development

Successfully merging this pull request may close these issues.

AltStyle によって変換されたページ (->オリジナル) /