Skip to content

[MSUE-231] - Removes batch retry when network request blocked by firewall #160

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

Merged
merged 1 commit into from
May 1, 2025

Conversation

apolwork
Copy link
Contributor

@apolwork apolwork commented Apr 23, 2025

Purpose

Issue

When network limits access to Sift API service, Sift framework generates excessive amount of network traffic.
Such traffic is generated as result retry policy that does not detect blocked requests. This leads to the situation when we have a mix of requests which contains retry requests and requests for newly generated requests

Example of such behaviour:
Screenshot 2025-04-28 at 13 06 12

Task <19BFED3B-73A0-49E2-941A-85CC1A04FACE>.<32> HTTP load failed, 681/0 bytes (error code: -1005 [4:-4])
Task <19BFED3B-73A0-49E2-941A-85CC1A04FACE>.<32> finished with error [-1005] Error Domain=NSURLErrorDomain Code=-1005 "The network connection was lost." UserInfo={_kCFStreamErrorCodeKey=-4, NSUnderlyingError=0x600000cd1710 {Error Domain=kCFErrorDomainCFNetwork Code=-1005 "(null)" UserInfo={NSErrorPeerAddressKey=<CFData 0x60000212c9b0 [0x7ff84002f250]>{length = 16, capacity = 16, bytes = 0x100223827f0000010000000000000000}, _kCFStreamErrorCodeKey=-4, _kCFStreamErrorDomainKey=4}}, _NSURLErrorFailingURLSessionTaskErrorKey=LocalUploadTask <19BFED3B-73A0-49E2-941A-85CC1A04FACE>.<32>, _NSURLErrorRelatedURLSessionTaskErrorKey=(
    "LocalUploadTask <19BFED3B-73A0-49E2-941A-85CC1A04FACE>.<32>"
), NSLocalizedDescription=The network connection was lost., NSErrorFailingURLStringKey=https://api3.siftscience.com/v3/accounts/YOUR_ACCOUNT_ID/mobile_events, NSErrorFailingURLKey=https://api3.siftscience.com/v3/accounts/YOUR_ACCOUNT_ID/mobile_events, _kCFStreamErrorDomainKey=4}
Task <BE7D37EB-7BB2-45EE-935E-EC534107251F>.<33> HTTP load failed, 681/0 bytes (error code: -1005 [4:-4])
Task <BE7D37EB-7BB2-45EE-935E-EC534107251F>.<33> finished with error [-1005] Error Domain=NSURLErrorDomain Code=-1005 "The network connection was lost." UserInfo={_kCFStreamErrorCodeKey=-4, NSUnderlyingError=0x600000ceb150 {Error Domain=kCFErrorDomainCFNetwork Code=-1005 "(null)" UserInfo={NSErrorPeerAddressKey=<CFData 0x600002140190 [0x7ff84002f250]>{length = 16, capacity = 16, bytes = 0x100223827f0000010000000000000000}, _kCFStreamErrorCodeKey=-4, _kCFStreamErrorDomainKey=4}}, _NSURLErrorFailingURLSessionTaskErrorKey=LocalUploadTask <BE7D37EB-7BB2-45EE-935E-EC534107251F>.<33>, _NSURLErrorRelatedURLSessionTaskErrorKey=(
    "LocalUploadTask <BE7D37EB-7BB2-45EE-935E-EC534107251F>.<33>"
), NSLocalizedDescription=The network connection was lost., NSErrorFailingURLStringKey=https://api3.siftscience.com/v3/accounts/YOUR_ACCOUNT_ID/mobile_events, NSErrorFailingURLKey=https://api3.siftscience.com/v3/accounts/YOUR_ACCOUNT_ID/mobile_events, _kCFStreamErrorDomainKey=4}
Task <08F277C9-9896-4E28-83B6-3C5910586EF1>.<34> HTTP load failed, 681/0 bytes (error code: -1005 [4:-4])
Task <08F277C9-9896-4E28-83B6-3C5910586EF1>.<34> finished with error [-1005] Error Domain=NSURLErrorDomain Code=-1005 "The network connection was lost." UserInfo={_kCFStreamErrorCodeKey=-4, NSUnderlyingError=0x600000cc1da0 {Error Domain=kCFErrorDomainCFNetwork Code=-1005 "(null)" UserInfo={NSErrorPeerAddressKey=<CFData 0x60000213be80 [0x7ff84002f250]>{length = 16, capacity = 16, bytes = 0x100223827f0000010000000000000000}, _kCFStreamErrorCodeKey=-4, _kCFStreamErrorDomainKey=4}}, _NSURLErrorFailingURLSessionTaskErrorKey=LocalUploadTask <08F277C9-9896-4E28-83B6-3C5910586EF1>.<34>, _NSURLErrorRelatedURLSessionTaskErrorKey=(
    "LocalUploadTask <08F277C9-9896-4E28-83B6-3C5910586EF1>.<34>"
), NSLocalizedDescription=The network connection was lost., NSErrorFailingURLStringKey=https://api3.siftscience.com/v3/accounts/YOUR_ACCOUNT_ID/mobile_events, NSErrorFailingURLKey=https://api3.siftscience.com/v3/accounts/YOUR_ACCOUNT_ID/mobile_events, _kCFStreamErrorDomainKey=4}
Task <BB08EE69-4260-4040-BE0B-DCE52640A52D>.<35> HTTP load failed, 681/0 bytes (error code: -1005 [4:-4])
Task <BB08EE69-4260-4040-BE0B-DCE52640A52D>.<35> finished with error [-1005] Error Domain=NSURLErrorDomain Code=-1005 "The network connection was lost." UserInfo={_kCFStreamErrorCodeKey=-4, NSUnderlyingError=0x600000cc32a0 {Error Domain=kCFErrorDomainCFNetwork Code=-1005 "(null)" UserInfo={NSErrorPeerAddressKey=<CFData 0x60000215df90 [0x7ff84002f250]>{length = 16, capacity = 16, bytes = 0x100223827f0000010000000000000000}, _kCFStreamErrorCodeKey=-4, _kCFStreamErrorDomainKey=4}}, _NSURLErrorFailingURLSessionTaskErrorKey=LocalUploadTask <BB08EE69-4260-4040-BE0B-DCE52640A52D>.<35>, _NSURLErrorRelatedURLSessionTaskErrorKey=(
    "LocalUploadTask <BB08EE69-4260-4040-BE0B-DCE52640A52D>.<35>"
), NSLocalizedDescription=The network connection was lost., NSErrorFailingURLStringKey=https://api3.siftscience.com/v3/accounts/YOUR_ACCOUNT_ID/mobile_events, NSErrorFailingURLKey=https://api3.siftscience.com/v3/accounts/YOUR_ACCOUNT_ID/mobile_events, _kCFStreamErrorDomainKey=4}

Solution

Based on observation there is a specific set of error that could indicate that network requests are blocked and drop retries when they are detected.

Summary

  • Uploader drop a batch when requests is blocked by firewall.
  • Adds logic for detecting errors blocked by firewall
  • Updates SFStubHttpProtocol to simulate different network errors for requests

Testing

Block access to API endpoint.
SiftUploader should send only one request per batch when network is blocked

Checklist

  • The change was thoroughly tested manually
  • The change was covered with unit tests
  • The change was tested with the integration example
  • Necessary changes were made in the integration example (if applicable)
  • New functionality is reflected in README (if applicable)

@viaskal-sift viaskal-sift changed the title Removes batch retry when network request blocked by firewall [MSUE-231] - Removes batch retry when network request blocked by firewall Apr 25, 2025
Copy link
Contributor

@iprysiazhnyi-sift iprysiazhnyi-sift left a comment

Choose a reason for hiding this comment

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

lgtm

@echumak-sift echumak-sift merged commit 015664e into SiftScience:master May 1, 2025
@echumak-sift echumak-sift mentioned this pull request May 1, 2025
5 tasks
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

Successfully merging this pull request may close these issues.

3 participants