René's URL Explorer Experiment


Title: SK-3002: Configurable timeout & retries (Java v3 SDK) by Devesh-Skyflow · Pull Request #366 · skyflowapi/skyflow-java · GitHub

Open Graph Title: SK-3002: Configurable timeout & retries (Java v3 SDK) by Devesh-Skyflow · Pull Request #366 · skyflowapi/skyflow-java

X Title: SK-3002: Configurable timeout & retries (Java v3 SDK) by Devesh-Skyflow · Pull Request #366 · skyflowapi/skyflow-java

Description: Summary Makes HTTP timeout and retries configurable in the Java v3 SDK (CUST-4311 / SK-3002), and fixes a regression where the injected shared OkHttpClient silently dropped the call timeout and retries. Problem v3 exposed no way to configure timeout or retries. VaultClient injects its own OkHttpClient (for auth + connection pool), which put ClientOptions.build() on the custom-client branch → callTimeout = 0 (unbounded) and no retries. A stuck call blocked the thread indefinitely → thread-pool exhaustion → unresponsive service. Changes SkyflowRetryInterceptor — hand-written OkHttp interceptor replicating Fern's algorithm (exponential backoff + proportional jitter, factor 0.2 fixed / not exposed). Retries on 408 / 429 / 5xx. Public flat API (no nested builders): Client-wide defaults: Skyflow.builder().timeout(sec).maxRetries(n).initialRetryDelayMillis(ms).maxRetryDelayMillis(ms) Per-vault overrides: VaultConfig setters Precedence (per field): per-vault → client-wide → SDK default (mirrors credentials resolution) VaultClient.updateExecutorInHTTP — applies callTimeout + attaches the interceptor on the shared client (never calls apiClientBuilder.timeout() to avoid the connect/write/read clobber). Defaults: timeout 60s, maxRetries 3, initialRetryDelayMillis 500, maxRetryDelayMillis 2000 (worst-case backoff ≲ 3.85s, well inside the 60s ceiling). Sample: TimeoutAndRetryConfigExample. Scope Phase 1 = call timeout + retries. connectTimeout / readTimeout / writeTimeout are deferred to a future phase (Fern can't express them at any version; they'll go on the same shared client). Naming Adopts Fern's vocabulary/types (maxRetries, initialRetryDelayMillis, maxRetryDelayMillis) so a future swap to Fern's generated interceptor is a drop-in. Default values differ from Fern (tighter, per team decision). Why our own interceptor (not Fern's) The shared client (needed for auth + connection pool) disables Fern's auto-attached RetryInterceptor, and the currently-vendored Fern class hardcodes its backoff (can't honor the delay knobs). A TODO(CUST-4311) marks it for replacement once a Fern version exposing the delay knobs is vendored. Tests SkyflowRetryInterceptorTests (6) — retry count, stop-on-success, 408/429/5xx triggers, non-retryable passthrough, zero-retries. VaultClientHttpConfigTests (6) — callTimeout applied to the shared client, precedence, bounded-not-zero regression guard, VaultConfig field round-trip. All 12 pass; affected existing tests (connection pool, singleton, SkyflowTests, VaultConfigTests) pass. ⚠️ Pre-existing: VaultClientTests#testSetBearerTokenWithEnvCredentials fails on Java 21 (PowerMock/byte-buddy cannot instrument JDK security classes) — reproduced on base v3, unrelated to this change. 🤖 Generated with Claude Code

Open Graph Description: Summary Makes HTTP timeout and retries configurable in the Java v3 SDK (CUST-4311 / SK-3002), and fixes a regression where the injected shared OkHttpClient silently dropped the call timeout and ret...

X Description: Summary Makes HTTP timeout and retries configurable in the Java v3 SDK (CUST-4311 / SK-3002), and fixes a regression where the injected shared OkHttpClient silently dropped the call timeout and ret...

Opengraph URL: https://github.com/skyflowapi/skyflow-java/pull/366

X: @github

direct link

Domain: github.com

react-profiling0
react-import-mapreact,react-dom,react-dom/client,react-dom/profiling,react-is,react-reconciler,react/compiler-runtime,react/jsx-dev-runtime,react/jsx-runtime,scheduler@d5750093facf
route-pattern/:user_id/:repository/pull/:id/files(.:format)
route-controllerpull_requests
route-actionfiles
fetch-noncev2:87e05f49-2d02-f0f8-694e-3a50d0208b13
current-catalog-service-hashae870bc5e265a340912cde392f23dad3671a0a881730ffdadd82f2f57d81641b
request-id80CC:347FE6:82F8E0:AB98C1:6AF840CA
html-safe-nonce8f537e8091403d8b9f5f2cac9b760dc0c89d919282940313288459cd695e3bbc
visitor-payloadeyJyZWZlcnJlciI6IiIsInJlcXVlc3RfaWQiOiI4MENDOjM0N0ZFNjo4MkY4RTA6QUI5OEMxOjZBRjg0MENBIiwidmlzaXRvcl9pZCI6IjExNDc0MzQyNjkwNjkwMzM2NzQiLCJyZWdpb25fZWRnZSI6ImlhZCIsInJlZ2lvbl9yZW5kZXIiOiJpYWQifQ==
visitor-hmac158808cb8f580c1d3dcf076b41d60fd44b3e408bf3d70bec01125772340975eb
hovercard-subject-tagpull_request:4098673022
github-keyboard-shortcutsrepository,pull-request-list,pull-request-conversation,pull-request-files-changed,copilot
google-site-verificationApib7-x98H0j5cPqHWwSMm6dNU4GmODRoqxLiDzdx9I
octolytics-urlhttps://collector.github.com/github/collect
analytics-location///pull_requests/show/files
fb:app_id1401488693436528
apple-itunes-appapp-id=1477376905, app-argument=https://github.com/skyflowapi/skyflow-java/pull/366/files
twitter:imagehttps://avatars.githubusercontent.com/u/177972614?s=400&v=4
twitter:cardsummary_large_image
og:imagehttps://avatars.githubusercontent.com/u/177972614?s=400&v=4
og:image:altSummary Makes HTTP timeout and retries configurable in the Java v3 SDK (CUST-4311 / SK-3002), and fixes a regression where the injected shared OkHttpClient silently dropped the call timeout and ret...
og:site_nameGitHub
og:typeobject
hostnamegithub.com
expected-hostnamegithub.com
None5713ecd83001b2f55c3509fb7a292bf7d66d0f167c7ae87a9f7eaec5a52bf8db
turbo-cache-controlno-preview
diff-viewunified
go-importgithub.com/skyflowapi/skyflow-java git https://github.com/skyflowapi/skyflow-java.git
octolytics-dimension-user_id72233674
octolytics-dimension-user_loginskyflowapi
octolytics-dimension-repository_id418781098
octolytics-dimension-repository_nwoskyflowapi/skyflow-java
octolytics-dimension-repository_publictrue
octolytics-dimension-repository_is_forkfalse
octolytics-dimension-repository_network_root_id418781098
octolytics-dimension-repository_network_root_nwoskyflowapi/skyflow-java
turbo-body-classeslogged-out env-production page-responsive full-width
disable-turbotrue
browser-stats-urlhttps://api.github.com/_private/browser/stats
browser-errors-urlhttps://api.github.com/_private/browser/errors
release653be32ff5c755082a4db662491bfbbcfc9112c1
ui-targetfull
theme-color#1e2327
color-schemelight dark

Links:

Skip to contenthttps://github.com/skyflowapi/skyflow-java/pull/366/files#start-of-content
https://github.com/
Sign inhttps://github.com/login?return_to=https%3A%2F%2Fgithub.com%2Fskyflowapi%2Fskyflow-java%2Fpull%2F366%2Ffiles
GitHubRepository hosting, code review, and collaborationhttps://github.com/platform
CopilotAI coding agent for tasks, projects, and automated workhttps://github.com/features/copilot
ActionsCI/CD and automationhttps://github.com/features/actions
Code QualityQuality analysis, fixes, and enforcementhttps://github.com/features/code-quality
CodespacesCloud development environmentshttps://github.com/features/codespaces
Code SecurityVulnerability detection and remediationhttps://github.com/security/advanced-security/code-security
Secret ProtectionSecret scanning and leak preventionhttps://github.com/security/advanced-security/secret-protection
All Featureshttps://github.com/features
Documentationhttps://docs.github.com/en
Traininghttps://learn.github.com/skills
Certificationshttps://learn.github.com/credentials
Build with Copilothttps://github.com/features/ai
Customize Copilothttps://docs.github.com/en/copilot/how-tos/copilot-on-github/customize-copilot/customize-copilot-overview
Integrationshttps://github.com/marketplace
Trending reposhttps://github.com/trending
GitHub Sponsorshttps://github.com/open-source/sponsors
Developer articleshttps://github.com/resources/articles
ChangelogYour source for the latest features, improvements, and fixes across GitHub products, all in one place.https://github.blog/changelog/
Enterpriseshttps://github.com/enterprise
Teamhttps://github.com/team
Startupshttps://github.com/enterprise/startups
Nonprofitshttps://github.com/solutions/industry/nonprofits
Healthcarehttps://github.com/solutions/industry/healthcare
Financial serviceshttps://github.com/solutions/industry/financial-services
Manufacturinghttps://github.com/solutions/industry/manufacturing
Governmenthttps://github.com/solutions/industry/government
See all industrieshttps://github.com/solutions/industry
Why GitHubhttps://github.com/why-github
Customer Storieshttps://github.com/customer-stories
Business insightshttps://github.com/solutions/executive-insights
Trust Centerhttps://github.com/trust-center
GitHub Advanced SecurityEnterprise-grade code securityhttps://github.com/security/advanced-security
Copilot for businessEnterprise-grade AI featureshttps://github.com/features/copilot/copilot-business
Premium SupportEnterprise-grade 24/7 supporthttps://github.com/enterprise/premium-support
Documentationhttps://docs.github.com/en
Resource centerhttps://github.com/resources
Bloghttps://github.blog/
Events & webinarshttps://github.com/resources/events
Community Forumhttps://github.com/orgs/community/discussions
Customer Storieshttps://github.com/customer-stories
Integrationshttps://github.com/marketplace
Customer supporthttps://help.github.com/
Traininghttps://learn.github.com/skills
GitHub Statushttps://www.githubstatus.com/
Abouthttps://github.com/about
Partnershttps://github.com/partners
Changeloghttps://github.blog/changelog/
GitHub UniverseThe event for developers, by developers — talks, workshops, and what’s next for GitHub.https://githubuniverse.com/
Pricinghttps://github.com/pricing
Sign inhttps://github.com/login?return_to=https%3A%2F%2Fgithub.com%2Fskyflowapi%2Fskyflow-java%2Fpull%2F366%2Ffiles
Sign uphttps://github.com/signup?ref_cta=Sign+up&ref_loc=header+logged+out&ref_page=%2F%3Cuser-name%3E%2F%3Crepo-name%3E%2Fpull_requests%2Fshow%2Ffiles&source=header-repo&source_repo=skyflowapi%2Fskyflow-java
Reloadhttps://github.com/skyflowapi/skyflow-java/pull/366/files
Reloadhttps://github.com/skyflowapi/skyflow-java/pull/366/files
Reloadhttps://github.com/skyflowapi/skyflow-java/pull/366/files
skyflowapihttps://github.com/skyflowapi
skyflow-javahttps://github.com/skyflowapi/skyflow-java
Codehttps://github.com/skyflowapi/skyflow-java
Issues2 (2)https://github.com/skyflowapi/skyflow-java/issues
Pull requests35 (35)https://github.com/skyflowapi/skyflow-java/pulls
Actionshttps://github.com/skyflowapi/skyflow-java/actions
Projectshttps://github.com/skyflowapi/skyflow-java/projects
Security and qualityhttps://github.com/skyflowapi/skyflow-java/security
Insightshttps://github.com/skyflowapi/skyflow-java/pulse
Sign up for GitHub https://github.com/signup?return_to=%2Fskyflowapi%2Fskyflow-java%2Fissues%2Fnew%2Fchoose
terms of servicehttps://docs.github.com/terms
privacy statementhttps://docs.github.com/privacy
Sign inhttps://github.com/login?return_to=%2Fskyflowapi%2Fskyflow-java%2Fissues%2Fnew%2Fchoose
Devesh-Skyflowhttps://github.com/Devesh-Skyflow
v3-release/26.7.15https://github.com/skyflowapi/skyflow-java/tree/v3-release/26.7.15
devesh/SK3002-configurable-retry-and-timeouthttps://github.com/skyflowapi/skyflow-java/tree/devesh/SK3002-configurable-retry-and-timeout
Conversation 0 https://github.com/skyflowapi/skyflow-java/pull/366
Commits 7 https://github.com/skyflowapi/skyflow-java/pull/366/commits
Checks 4 https://github.com/skyflowapi/skyflow-java/pull/366/checks
Files changed https://github.com/skyflowapi/skyflow-java/pull/366/files
Please reload this pagehttps://github.com/skyflowapi/skyflow-java/pull/366/files
SK-3002: Configurable timeout & retries (Java v3 SDK) https://github.com/skyflowapi/skyflow-java/pull/366/files#top
Show all changes 7 commits https://github.com/skyflowapi/skyflow-java/pull/366/files
f7f7c01 SK-3002 add SkyflowRetryInterceptor (configurable retry count + backoff) Devesh-Skyflow Jul 21, 2026 https://github.com/skyflowapi/skyflow-java/pull/366/commits/f7f7c013b117977a0e5dd6b96431f8732dcd25bf
a78e251 SK-3002 expose configurable timeout + retries (client & vault level) Devesh-Skyflow Jul 21, 2026 https://github.com/skyflowapi/skyflow-java/pull/366/commits/a78e251807050af6265c01deccce6732ed997253
97de149 SK-3002 tests for configurable timeout + retries Devesh-Skyflow Jul 21, 2026 https://github.com/skyflowapi/skyflow-java/pull/366/commits/97de149a96041ae9d0ef02e3c129b4a2d4f49b41
9b54980 SK-3002 add sample for configurable timeout + retries Devesh-Skyflow Jul 21, 2026 https://github.com/skyflowapi/skyflow-java/pull/366/commits/9b54980673fd5544bac9bf67eba77cd8afe4f706
1a318b6 SK-3002 add MockWebServer integration test (live timeout + retry proof) Devesh-Skyflow Jul 21, 2026 https://github.com/skyflowapi/skyflow-java/pull/366/commits/1a318b6639dcb2af7f668edf2ddbaebbde69138c
6676ba1 SK-3002 remove MockWebServer test (breaks CI on PowerMock + Java 21) Devesh-Skyflow Jul 21, 2026 https://github.com/skyflowapi/skyflow-java/pull/366/commits/6676ba1c9f228225838540f89fc5255a48ebbfa5
923a4bf SK-3002 raise coverage for new timeout/retry code Devesh-Skyflow Jul 21, 2026 https://github.com/skyflowapi/skyflow-java/pull/366/commits/923a4bf8d185a2b35295d23f9ac9b9d996c0db90
Clear filters https://github.com/skyflowapi/skyflow-java/pull/366/files
Please reload this pagehttps://github.com/skyflowapi/skyflow-java/pull/366/files
Please reload this pagehttps://github.com/skyflowapi/skyflow-java/pull/366/files
TimeoutAndRetryConfigExample.java https://github.com/skyflowapi/skyflow-java/pull/366/files#diff-aab59fcec5866fe914c7c17a0dc8666d59e693a109cdfeb274a90957c6efa026
Skyflow.java https://github.com/skyflowapi/skyflow-java/pull/366/files#diff-0f222307a9866f04b80fd89a34074385acaf22ebcaa49d5f87bcc7ca3502b5e4
VaultClient.java https://github.com/skyflowapi/skyflow-java/pull/366/files#diff-634bad393cd1e96a40f2ae48bc8529fd27f6f44510795e5ad0faa6180749b2fd
VaultConfig.java https://github.com/skyflowapi/skyflow-java/pull/366/files#diff-9a09cb605a2cfc6d8372ed077021346dfe35043cb34290fecbd0a38bc6545208
SkyflowRetryInterceptor.java https://github.com/skyflowapi/skyflow-java/pull/366/files#diff-d5940d6027e4bab1b94be04a9a3d7b6d1a20215810a2fe6fbd9e70b855209cbe
SkyflowClientBuilderHttpConfigTests.java https://github.com/skyflowapi/skyflow-java/pull/366/files#diff-05486d6b820bfc964333c86e7715512afb6cef62a13d4e6b79026ca563ece424
VaultClientHttpConfigTests.java https://github.com/skyflowapi/skyflow-java/pull/366/files#diff-9e9a3ffea50f1a6973aecf304fc5d1bde9dca32a23ddc5bc281886db67866689
SkyflowRetryInterceptorTests.java https://github.com/skyflowapi/skyflow-java/pull/366/files#diff-c3f9b98177d966feac84df4aa6a2a90a6161189d37b267eabd4a49c76192b555
samples/src/main/java/com/example/vault/TimeoutAndRetryConfigExample.javahttps://github.com/skyflowapi/skyflow-java/pull/366/files#diff-aab59fcec5866fe914c7c17a0dc8666d59e693a109cdfeb274a90957c6efa026
View file https://github.com/skyflowapi/skyflow-java/blob/923a4bf8d185a2b35295d23f9ac9b9d996c0db90/samples/src/main/java/com/example/vault/TimeoutAndRetryConfigExample.java
Open in desktop https://desktop.github.com
https://github.co/hiddenchars
https://github.com/skyflowapi/skyflow-java/pull/366/{{ revealButtonHref }}
v3/src/main/java/com/skyflow/Skyflow.javahttps://github.com/skyflowapi/skyflow-java/pull/366/files#diff-0f222307a9866f04b80fd89a34074385acaf22ebcaa49d5f87bcc7ca3502b5e4
View file https://github.com/skyflowapi/skyflow-java/blob/923a4bf8d185a2b35295d23f9ac9b9d996c0db90/v3/src/main/java/com/skyflow/Skyflow.java
Open in desktop https://desktop.github.com
https://github.co/hiddenchars
https://github.com/skyflowapi/skyflow-java/pull/366/{{ revealButtonHref }}
https://github.com/skyflowapi/skyflow-java/pull/366/files#diff-0f222307a9866f04b80fd89a34074385acaf22ebcaa49d5f87bcc7ca3502b5e4
https://github.com/skyflowapi/skyflow-java/pull/366/files#diff-0f222307a9866f04b80fd89a34074385acaf22ebcaa49d5f87bcc7ca3502b5e4
https://github.com/skyflowapi/skyflow-java/pull/366/files#diff-0f222307a9866f04b80fd89a34074385acaf22ebcaa49d5f87bcc7ca3502b5e4
https://github.com/skyflowapi/skyflow-java/pull/366/files#diff-0f222307a9866f04b80fd89a34074385acaf22ebcaa49d5f87bcc7ca3502b5e4
v3/src/main/java/com/skyflow/VaultClient.javahttps://github.com/skyflowapi/skyflow-java/pull/366/files#diff-634bad393cd1e96a40f2ae48bc8529fd27f6f44510795e5ad0faa6180749b2fd
View file https://github.com/skyflowapi/skyflow-java/blob/923a4bf8d185a2b35295d23f9ac9b9d996c0db90/v3/src/main/java/com/skyflow/VaultClient.java
Open in desktop https://desktop.github.com
https://github.co/hiddenchars
https://github.com/skyflowapi/skyflow-java/pull/366/{{ revealButtonHref }}
https://github.com/skyflowapi/skyflow-java/pull/366/files#diff-634bad393cd1e96a40f2ae48bc8529fd27f6f44510795e5ad0faa6180749b2fd
https://github.com/skyflowapi/skyflow-java/pull/366/files#diff-634bad393cd1e96a40f2ae48bc8529fd27f6f44510795e5ad0faa6180749b2fd
https://github.com/skyflowapi/skyflow-java/pull/366/files#diff-634bad393cd1e96a40f2ae48bc8529fd27f6f44510795e5ad0faa6180749b2fd
https://github.com/skyflowapi/skyflow-java/pull/366/files#diff-634bad393cd1e96a40f2ae48bc8529fd27f6f44510795e5ad0faa6180749b2fd
https://github.com/skyflowapi/skyflow-java/pull/366/files#diff-634bad393cd1e96a40f2ae48bc8529fd27f6f44510795e5ad0faa6180749b2fd
https://github.com/skyflowapi/skyflow-java/pull/366/files#diff-634bad393cd1e96a40f2ae48bc8529fd27f6f44510795e5ad0faa6180749b2fd
https://github.com/skyflowapi/skyflow-java/pull/366/files#diff-634bad393cd1e96a40f2ae48bc8529fd27f6f44510795e5ad0faa6180749b2fd
v3/src/main/java/com/skyflow/config/VaultConfig.javahttps://github.com/skyflowapi/skyflow-java/pull/366/files#diff-9a09cb605a2cfc6d8372ed077021346dfe35043cb34290fecbd0a38bc6545208
View file https://github.com/skyflowapi/skyflow-java/blob/923a4bf8d185a2b35295d23f9ac9b9d996c0db90/v3/src/main/java/com/skyflow/config/VaultConfig.java
Open in desktop https://desktop.github.com
https://github.co/hiddenchars
https://github.com/skyflowapi/skyflow-java/pull/366/{{ revealButtonHref }}
https://github.com/skyflowapi/skyflow-java/pull/366/files#diff-9a09cb605a2cfc6d8372ed077021346dfe35043cb34290fecbd0a38bc6545208
https://github.com/skyflowapi/skyflow-java/pull/366/files#diff-9a09cb605a2cfc6d8372ed077021346dfe35043cb34290fecbd0a38bc6545208
https://github.com/skyflowapi/skyflow-java/pull/366/files#diff-9a09cb605a2cfc6d8372ed077021346dfe35043cb34290fecbd0a38bc6545208
https://github.com/skyflowapi/skyflow-java/pull/366/files#diff-9a09cb605a2cfc6d8372ed077021346dfe35043cb34290fecbd0a38bc6545208
v3/src/main/java/com/skyflow/utils/SkyflowRetryInterceptor.javahttps://github.com/skyflowapi/skyflow-java/pull/366/files#diff-d5940d6027e4bab1b94be04a9a3d7b6d1a20215810a2fe6fbd9e70b855209cbe
View file https://github.com/skyflowapi/skyflow-java/blob/923a4bf8d185a2b35295d23f9ac9b9d996c0db90/v3/src/main/java/com/skyflow/utils/SkyflowRetryInterceptor.java
Open in desktop https://desktop.github.com
https://github.co/hiddenchars
https://github.com/skyflowapi/skyflow-java/pull/366/{{ revealButtonHref }}
Please reload this pagehttps://github.com/skyflowapi/skyflow-java/pull/366/files
Please reload this pagehttps://github.com/skyflowapi/skyflow-java/pull/366/files
https://github.com
Termshttps://docs.github.com/site-policy/github-terms/github-terms-of-service
Privacyhttps://docs.github.com/site-policy/privacy-policies/github-privacy-statement
Securityhttps://github.com/security
Statushttps://www.githubstatus.com/
Communityhttps://github.community/
Docshttps://docs.github.com/
Contacthttps://support.github.com?tags=dotcom-footer

Viewport: width=device-width


URLs of crawlers that visited me.