Azure / Azure/azure-sdk-for-java

Add internal maxLifeTime with jitter for HTTP connections in azure-cosmos (Netty)

Open
#48,251 0 comments 0 reactions 1 assignee Claimed by @jeet1995 View on GitHub
Client Cosmos cosmos:v4-item
Dominant language
Java
Stars
2.6k
Forks
2.2k
Avg merge
2d 8h
Merged PRs (30d)
178

Description

## Summary

Add internal support for configuring a `maxLifeTime` (maximum connection lifetime) with per-connection jitter for HTTP connections used by the Azure Cosmos DB SDK (`azure-cosmos`) via the Netty HTTP client. This will be an internal implementation detail, not exposed as a public API.

## Problem

Currently, there is no way to set a maximum lifetime for HTTP connections in the Cosmos DB client. Long-lived connections can cause issues in scenarios such as:

- **Load balancing**: Connections that persist indefinitely may not redistribute across backend instances after scaling events or rebalancing, leading to uneven load distribution.
- **DNS changes**: When backend IP addresses change (e.g., due to failover, migration, or infrastructure updates), existing connections continue to use stale DNS resolutions, potentially routing traffic to unavailable or incorrect endpoints.

## Why not use Reactor Netty's built-in maxLifeTime?

Reactor Netty's `ConnectionProvider.Builder.maxLifeTime()` applies a uniform max lifetime to all connections. This can cause a "thundering herd" problem where many connections created around the same time all expire simultaneously, leading to a spike in new connection creation and potential service disruption.

## Proposed Solution

Implement a custom `maxLifeTime` mechanism that applies a per-connection lifetime limit **with jitter**. Each connection will have a slightly randomized max lifetime (e.g., base lifetime ± some random offset), ensuring that connections expire gradually over time rather than all at once.

This will **not** be exposed as a public configuration option at this time.

## Affected Packages

- `azure-cosmos`

Contributor guide

Open the contributing guide

Assessment

This issue has not been assessed yet.

Get new issues in your inbox

A short digest of beginner-friendly GitHub issues.