Skip to content

feat: Add C bindings for DynamoDB LazyLoad source#576

Merged
beekld merged 4 commits into
mainfrom
beeklimt/SDK-2629/dynamodb-lazyload-c-binding
Jul 24, 2026
Merged

feat: Add C bindings for DynamoDB LazyLoad source#576
beekld merged 4 commits into
mainfrom
beeklimt/SDK-2629/dynamodb-lazyload-c-binding

Conversation

@beekld

@beekld beekld commented Jul 1, 2026

Copy link
Copy Markdown
Contributor

Summary

Introduces DynamoDB C bindings. Before this PR, none of the DynamoDB integration was reachable from C -- neither LazyLoad source nor Big Segments store. This PR covers the LazyLoad source and the shared DynamoDBClientOptions surface; the Big Segments store follow-on will reuse the options builder introduced here.

New public surface:

  • LDServerDynamoDBClientOptionsBuilder opaque handle for AWS DynamoDB client configuration.
  • LDServerDynamoDBClientOptionsBuilder_New / _Free, and setters for _Region, _Endpoint, _AccessKeyId, _SecretAccessKey, _SessionToken.
  • LDServerLazyLoadDynamoDBSource opaque handle.
  • struct LDServerLazyLoadDynamoDBResult with source and error_message fields, plus LDSERVER_LAZYLOAD_DYNAMODBSOURCE_ERROR_MESSAGE_SIZE.
  • LDServerLazyLoadDynamoDBSource_New(table_name, prefix, options, out_result) factory and LDServerLazyLoadDynamoDBSource_Free(source).

Tests:

  • Unit tests for the options builder (create, set every field, free).
  • Unit tests for successful source creation with and without the options builder (NULL means "AWS SDK default provider chain").
  • End-to-end test against DynamoDB Local: creates a table, writes flags through the existing PrefixedDynamoDBClient fixture, wires the source through the C API, and verifies LDServerSDK_AllFlagsState reads the flags back. Mirrors the Redis LazyLoad e2e.

Design decisions worth flagging: the source type name uses config-section-first word order (LazyLoad + DynamoDB + Source) to match the existing Redis LazyLoad binding LDServerLazyLoadRedisSource. The client options type is named LDServerDynamoDBClientOptionsBuilder (with Builder suffix) even though the C++ side is a plain struct rather than a builder -- the C surface is builder-like from the caller's perspective (_New + setters + consumed by a factory), which matches the sibling LDServerHttpPropertiesTlsBuilder precedent in the same shape.

Stacked on #574 (Redis Big Segments store). Please review that PR first.


Note

Low Risk
New public C surface and thin wrappers over existing DynamoDB integration; credential validation and error handling follow established Redis LazyLoad binding patterns.

Overview
Exposes the existing C++ DynamoDB Lazy Load data source to C callers, which previously could not wire DynamoDB into the server SDK at all.

Adds LDServerDynamoDBClientOptionsBuilder (region, endpoint, and AWS credential setters; optional fields fall back to the AWS default provider chain) and LDServerLazyLoadDynamoDBSource_New / _Free, with LDServerLazyLoadDynamoDBResult carrying either a source handle or a fixed-size error_message. The options builder is consumed by the source factory when non-NULL, matching the intended reuse for future Big Segments bindings. Implementation delegates to DynamoDBDataSource::Create.

Tests cover the options builder, successful creation with and without options, rejection of partial credentials, and an e2e path through LDServerConfigBuilder_DataSystem_LazyLoad and LDServerSDK_AllFlagsState against DynamoDB Local.

Reviewed by Cursor Bugbot for commit 54d16d8. Bugbot is set up for automated code reviews on this repo. Configure here.

@beekld
beekld force-pushed the beeklimt/SDK-2628/redis-big-segments-c-binding branch from 2ce9c92 to e06f24a Compare July 1, 2026 19:06
@beekld
beekld force-pushed the beeklimt/SDK-2629/dynamodb-lazyload-c-binding branch from b4c4558 to 00c3ce9 Compare July 1, 2026 19:09
@beekld
beekld force-pushed the beeklimt/SDK-2628/redis-big-segments-c-binding branch from e06f24a to c0acca8 Compare July 1, 2026 23:45
@beekld
beekld force-pushed the beeklimt/SDK-2629/dynamodb-lazyload-c-binding branch from 00c3ce9 to d4251b7 Compare July 1, 2026 23:46
@beekld
beekld marked this pull request as ready for review July 2, 2026 00:09
@beekld
beekld requested a review from a team as a code owner July 2, 2026 00:09
/**
* @brief Sets the AWS access key ID for the DynamoDB client.
*
* When none of AccessKeyId, SecretAccessKey, or SessionToken are set, the

Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

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

Does it need to be specifies that if AccessKeyId is specified, then SecretAccessKey must be specified?

Copy link
Copy Markdown
Contributor Author

Choose a reason for hiding this comment

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

Yes, done.

Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

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

Do we need error condition tests?

Copy link
Copy Markdown
Contributor Author

Choose a reason for hiding this comment

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

Added.

Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

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

I think we need stdbool.

Copy link
Copy Markdown
Contributor Author

Choose a reason for hiding this comment

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

Done.

@beekld
beekld force-pushed the beeklimt/SDK-2628/redis-big-segments-c-binding branch from ede2c19 to d72a78b Compare July 24, 2026 20:33
@beekld
beekld force-pushed the beeklimt/SDK-2629/dynamodb-lazyload-c-binding branch from 8f196b4 to 54d16d8 Compare July 24, 2026 20:53
Base automatically changed from beeklimt/SDK-2628/redis-big-segments-c-binding to main July 24, 2026 21:21
@beekld
beekld merged commit 65efc69 into main Jul 24, 2026
6 checks passed
@beekld
beekld deleted the beeklimt/SDK-2629/dynamodb-lazyload-c-binding branch July 24, 2026 21:23
@github-actions github-actions Bot mentioned this pull request Jul 24, 2026
beekld added a commit that referenced this pull request Jul 24, 2026
## Summary

Adds a C binding for `DynamoDBBigSegmentStore` so C callers can wire the
existing DynamoDB Big Segments integration into the SDK's Big Segments
config.

New public surface:

- `LDServerBigSegmentsDynamoDBStore` opaque handle.
- `struct LDServerBigSegmentsDynamoDBResult` with `store` and
`error_message` fields.
- `LDSERVER_BIGSEGMENTS_DYNAMODBSTORE_ERROR_MESSAGE_SIZE` macro.
- `LDServerBigSegmentsDynamoDBStore_New(table_name, prefix, options,
out_result)` factory.
- `LDServerBigSegmentsDynamoDBStore_Free(store)`.

Tests:

- Unit tests for successful creation with and without the options
builder (NULL means "AWS SDK default provider chain").
- End-to-end test against DynamoDB Local: primes a sync timestamp via
`PrefixedDynamoDBClient::PutBigSegmentSyncTime`, wires the store through
the C API, and verifies the SDK reports the store available via the Big
Segment status listener.

The type name uses config-section-first word order (`BigSegments` +
`DynamoDB` + `Store`), matching the sibling Redis Big Segments binding
`LDServerBigSegmentsRedisStore` (#574) and the sibling DynamoDB LazyLoad
binding `LDServerLazyLoadDynamoDBSource` (#576). The `options` parameter
reuses the `LDServerDynamoDBClientOptionsBuilder` introduced in #576.

Stacked on #576 (DynamoDB LazyLoad source). Please review that PR first.

<!-- CURSOR_SUMMARY -->
---

> [!NOTE]
> **Low Risk**
> New C API surface and tests only; behavior delegates to existing
`DynamoDBBigSegmentStore::Create` with no changes to core evaluation or
auth paths.
> 
> **Overview**
> Exposes the existing **DynamoDB Big Segments** integration to C
callers via a new public header and thin C++ shim, aligned with
`LDServerBigSegmentsRedisStore` and the DynamoDB LazyLoad C API.
> 
> **`LDServerBigSegmentsDynamoDBStore_New`** takes table name, prefix,
and optional `LDServerDynamoDBClientOptionsBuilder` (NULL uses the AWS
default provider chain; non-NULL builder is consumed on entry). Results
land in **`LDServerBigSegmentsDynamoDBResult`** (`store` + fixed-size
`error_message`). **`LDServerBigSegmentsDynamoDBStore_Free`** is for
callers who do not hand ownership to **`LDServerBigSegmentsBuilder`**.
> 
> The dynamodb-source library build now compiles
**`bindings/dynamodb/dynamodb_big_segment_store.cpp`**. C binding tests
cover creation with/without options, partial-credentials rejection, and
a DynamoDB Local E2E path that wires the store into the SDK and asserts
Big Segment store status becomes available. Comment typos
(**Explicitely** → **Explicitly**) are fixed in related Redis/DynamoDB
binding files.
> 
> <sup>Reviewed by [Cursor Bugbot](https://cursor.com/bugbot) for commit
8978c77. Bugbot is set up for automated
code reviews on this repo. Configure
[here](https://www.cursor.com/dashboard/bugbot).</sup>
<!-- /CURSOR_SUMMARY -->
beekld pushed a commit that referenced this pull request Jul 24, 2026
🤖 I have created a release *beep* *boop*
---


<details><summary>launchdarkly-cpp-client: 3.11.3</summary>

##
[3.11.3](launchdarkly-cpp-client-v3.11.2...launchdarkly-cpp-client-v3.11.3)
(2026-07-24)


### Dependencies

* The following workspace dependencies were updated
  * dependencies
    * @launchdarkly/cpp-internal bumped from 0.14.0 to 0.14.1
</details>

<details><summary>launchdarkly-cpp-internal: 0.14.1</summary>

##
[0.14.1](launchdarkly-cpp-internal-v0.14.0...launchdarkly-cpp-internal-v0.14.1)
(2026-07-24)


### Bug Fixes

* Redact anonymous context attributes in server-side custom events
([#583](#583))
([55f7eaf](55f7eaf))
</details>

<details><summary>launchdarkly-cpp-server: 3.13.0</summary>

##
[3.13.0](launchdarkly-cpp-server-v3.12.0...launchdarkly-cpp-server-v3.13.0)
(2026-07-24)


### Features

* Add C bindings for Big Segments
([#573](#573))
([948878e](948878e))


### Dependencies

* The following workspace dependencies were updated
  * dependencies
    * @launchdarkly/cpp-internal bumped from 0.14.0 to 0.14.1
</details>

<details><summary>launchdarkly-cpp-server-dynamodb-source:
0.3.0</summary>

##
[0.3.0](launchdarkly-cpp-server-dynamodb-source-v0.2.1...launchdarkly-cpp-server-dynamodb-source-v0.3.0)
(2026-07-24)


### Features

* Add C bindings for DynamoDB Big Segments store
([#579](#579))
([fc6c075](fc6c075))
* Add C bindings for DynamoDB LazyLoad source
([#576](#576))
([65efc69](65efc69))


### Dependencies

* The following workspace dependencies were updated
  * dependencies
    * @launchdarkly/cpp-server bumped from 3.12.0 to 3.13.0
</details>

<details><summary>launchdarkly-cpp-server-otel: 0.1.4</summary>

##
[0.1.4](launchdarkly-cpp-server-otel-v0.1.3...launchdarkly-cpp-server-otel-v0.1.4)
(2026-07-24)


### Dependencies

* The following workspace dependencies were updated
  * dependencies
    * @launchdarkly/cpp-server bumped from 3.12.0 to 3.13.0
</details>

<details><summary>launchdarkly-cpp-server-redis-source: 2.4.0</summary>

##
[2.4.0](launchdarkly-cpp-server-redis-source-v2.3.1...launchdarkly-cpp-server-redis-source-v2.4.0)
(2026-07-24)


### Features

* Add C bindings for DynamoDB Big Segments store
([#579](#579))
([fc6c075](fc6c075))
* Add C bindings for DynamoDB LazyLoad source
([#576](#576))
([65efc69](65efc69))
* Add C bindings for Redis Big Segments store
([#574](#574))
([52a1898](52a1898))


### Dependencies

* The following workspace dependencies were updated
  * dependencies
    * @launchdarkly/cpp-server bumped from 3.12.0 to 3.13.0
</details>

---
This PR was generated with [Release
Please](https://github.com/googleapis/release-please). See
[documentation](https://github.com/googleapis/release-please#release-please).

<!-- CURSOR_SUMMARY -->
---

> [!NOTE]
> **Low Risk**
> Mechanical release-only edits; the notable behavioral change
(custom-event redaction) ships via internal 0.14.1 but is not modified
in this PR’s diff.
> 
> **Overview**
> Release Please **version bump** across the C++ monorepo: updates
`.release-please-manifest.json`, `package.json` workspace deps, CMake
`VERSION`, embedded `kVersion` strings, version tests, and **CHANGELOG**
entries for the packages being published.
> 
> **Server SDK 3.13.0** documents **C bindings for Big Segments**
([#573]). **Internal 0.14.1** documents a **privacy fix** that **redacts
anonymous context attributes in server-side custom events** ([#583]).
**DynamoDB source 0.3.0** and **Redis source 2.4.0** document new **C
bindings** for Big Segments stores and DynamoDB LazyLoad; **client
3.11.3** and **otel 0.1.4** are dependency-aligned releases on
**internal 0.14.1** / **server 3.13.0**.
> 
> There is **no application logic in this diff**—only release metadata
reflecting changes already on `main`.
> 
> <sup>Reviewed by [Cursor Bugbot](https://cursor.com/bugbot) for commit
05b4327. Bugbot is set up for automated
code reviews on this repo. Configure
[here](https://www.cursor.com/dashboard/bugbot).</sup>
<!-- /CURSOR_SUMMARY -->

Co-authored-by: github-actions[bot] <41898282+github-actions[bot]@users.noreply.github.com>
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.

2 participants