Skip to content

Support Oracle Connect Descriptors for Load Balancing & Failover in state.oracledatabase #3794

Closed
@rochabr

Description

@rochabr

🚀 Feature Request:

Component: state.oracledatabase
Driver: go-ora (used internally)


✨ Request

We’d like to request support for full Oracle Net connect descriptors in the connectionString field of the state.oracledatabase component. This includes descriptors like:

(DESCRIPTION = 
  (CONNECT_TIMEOUT=90)(RETRY_COUNT=20)(RETRY_DELAY=3)(TRANSPORT_CONNECT_TIMEOUT=3)(FAILOVER=ON)
  (ADDRESS_LIST = 
    (LOAD_BALANCE = ON)
    (ADDRESS = (PROTOCOL = TCP)(HOST=db1.example.com)(PORT=1521))
    (ADDRESS = (PROTOCOL = TCP)(HOST=db2.example.com)(PORT=1521))
  )
  (CONNECT_DATA = 
    (SERVICE_NAME=MY_SERVICE)
  )
)

Another example of the same descriptor:

(DESCRIPTION=(CONNECT_TIMEOUT=30)(RETRY_COUNT=20)(RETRY_DELAY=3)(FAILOVER=ON)(LOAD_BALANCE=OFF)(ADDRESS_LIST=(LOAD_BALANCE=ON)(ADDRESS=(PROTOCOL=TCP)(HOST=db1.customer.net)(PORT=1521)))(ADDRESS_LIST=(LOAD_BALANCE=ON)(ADDRESS=(PROTOCOL=TCP)(HOST=db2.customer.net)(PORT=1521)))(CONNECT_DATA=(SERVICE_NAME=xyz_1234_ac_dbaas)))

and

oracle://xxx:yyyy@(DESCRIPTION=(ADDRESS=(PROTOCOL=TCP)(HOST=172.16.1.22)(PORT=1521))(CONNECT_DATA=(SERVER=DEDICATED)(SERVICE_NAME=ORCLCDB)))

✅ Why This Matters

The ability to use Oracle's connect descriptors enables:

  • Client-side load balancing between multiple Oracle database nodes
  • Automatic failover if one node becomes unavailable
  • Advanced timeout and retry configurations to ensure resilience
  • Better reliability for enterprise users who operate Oracle RAC or multi-node environments
  • Simplified HA (high availability) setups without external proxies

🔍 Current Behavior

As of Dapr v1.15:

  • Connection strings using descriptor syntax (e.g., @(...)) are not supported
  • Attempts to use them result in invalid URL escape or missing port in address errors
  • Dapr currently expects the connection string to follow the simplified oracle://user:pass@host:port/service format

🧱 Driver Support

The go-ora driver used by this component does support complex descriptors, including:

  • LOAD_BALANCE
  • FAILOVER
  • CONNECT_TIMEOUT, RETRY_DELAY, RETRY_COUNT, etc.

This makes the implementation more feasible on the component side, likely requiring adjustments to parsing logic rather than upstream changes.


🛠 Suggested Solution

Allow raw connect descriptors as a separate metadata field (e.g., connectDescriptor) or ensure the existing connectionString value is passed as-is to go-ora without URL parsing that breaks descriptor formats.


📣 Who Needs This

This is especially important for:

  • Customers operating in mission-critical, multi-node Oracle environments
  • Use cases where latency, high availability, and retry behavior are tightly controlled
  • Real-time processing workloads that rely on state reads/writes during sequential workflows

Metadata

Metadata

Assignees

Labels

Type

No type

Projects

Status

Done

Relationships

None yet

Development

No branches or pull requests

Issue actions