Skip to content

BigTable / Fetcher updates - use closeAsync, setTimeouts, allow bulkRead / readRows choice #630

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 9 commits into from
Apr 16, 2025

Conversation

piyush-zlai
Copy link
Contributor

@piyush-zlai piyush-zlai commented Apr 11, 2025

Summary

Checklist

  • Added Unit Tests
  • Covered by existing CI
  • Integration tested
  • Documentation update

Summary by CodeRabbit

  • New Features

    • Introduced bulk read support and refined time series data filtering to enhance data retrieval performance and accuracy.
    • Improved client retry mechanisms for more robust operations under varying conditions.
  • Refactor

    • Streamlined the handling of combined responses and updated latency metric reporting for clearer performance insights.
    • Centralized configuration access for environment variables and settings.
  • Tests

    • Expanded property-based testing across multiple configurations to ensure consistent and reliable functionality.

Copy link

coderabbitai bot commented Apr 11, 2025

Walkthrough

The pull request enhances the GCP integration by introducing configurable options and additional methods in the BigTableKVStoreImpl. The multiGet functionality now conditionally uses bulk or standard row reads based on a new configuration parameter. New helper methods have been added for query filtering and setting retry settings in GcpApiImpl, with corresponding updates in tests using property-based approaches. Additionally, Fetcher has been refactored to simplify combined response mapping and improve latency metric logging.

Changes

File(s) Change Summary
cloud_gcp/.../BigTableKVStoreImpl.scala - Added conf parameter and useBulkReadRows flag.
- Added bulkReadRowsMultiGet, readRowsMultiGet, setQueryTimeSeriesFilters, readAsyncBatches, and googleFutureToScalaFuture.
- Replaced direct ApiFuture conversions with utility method.
- Enhanced error handling and metrics.
cloud_gcp/.../GcpApiImpl.scala - Refactored config access with getOptional/getOrElseThrow.
- Added setClientRetrySettings to configure Bigtable retry policies.
- Passed conf to BigTableKVStoreImpl constructor.
- Added constants for config keys and defaults.
cloud_gcp/.../BigTableKVStoreTest.scala - Added createConfigurations for parameterized tests.
- Wrapped existing tests to run with bulk read enabled/disabled.
- Updated mocks for batcher closeAsync.
online/.../Fetcher.scala - Simplified combined internal/external response mapping.
- Renamed per-response latency metric.
- Added overall latency metric outside response loop.

Sequence Diagram(s)

sequenceDiagram
    participant Client
    participant KVStore
    Client->>KVStore: multiGet(requests)
    alt useBulkReadRows true
        KVStore->>KVStore: bulkReadRowsMultiGet(requestsByDataset)
    else
        KVStore->>KVStore: readRowsMultiGet(requestsByDataset)
    end
    KVStore-->>Client: responses
Loading
sequenceDiagram
    participant Client
    participant GcpApiImpl
    participant ConfigHelper
    participant KVStore
    Client->>GcpApiImpl: Initialize service with conf
    GcpApiImpl->>ConfigHelper: getOptional/getOrElseThrow
    ConfigHelper-->>GcpApiImpl: Config values
    GcpApiImpl->>GcpApiImpl: setClientRetrySettings(builder, conf)
    GcpApiImpl->>KVStore: new BigTableKVStoreImpl(dataClient, adminClient, bqClient, conf)
Loading

Possibly related PRs

Suggested reviewers

  • tchow-zlai
  • david-zlai

Poem

Bulk reads dance with filters bright,
Configured retries set just right.
Tests unfold in varied light,
Metrics gleam, fetch flows tight.
Code refined, a coder’s delight! 🚀✨

Warning

Review ran into problems

🔥 Problems

GitHub Actions and Pipeline Checks: Resource not accessible by integration - https://docs.github.com/rest/actions/workflow-runs#list-workflow-runs-for-a-repository.

Please grant the required permissions to the CodeRabbit GitHub App under the organization or repository settings.


📜 Recent review details

Configuration used: CodeRabbit UI
Review profile: CHILL
Plan: Pro (Legacy)

📥 Commits

Reviewing files that changed from the base of the PR and between 4ab71bc and 3435b45.

📒 Files selected for processing (4)
  • cloud_gcp/src/main/scala/ai/chronon/integrations/cloud_gcp/BigTableKVStoreImpl.scala (11 hunks)
  • cloud_gcp/src/main/scala/ai/chronon/integrations/cloud_gcp/GcpApiImpl.scala (6 hunks)
  • cloud_gcp/src/test/scala/ai/chronon/integrations/cloud_gcp/BigTableKVStoreTest.scala (7 hunks)
  • online/src/main/scala/ai/chronon/online/fetcher/Fetcher.scala (3 hunks)
🚧 Files skipped from review as they are similar to previous changes (1)
  • online/src/main/scala/ai/chronon/online/fetcher/Fetcher.scala
🧰 Additional context used
🧠 Learnings (1)
cloud_gcp/src/main/scala/ai/chronon/integrations/cloud_gcp/BigTableKVStoreImpl.scala (1)
Learnt from: chewy-zlai
PR: zipline-ai/chronon#47
File: online/src/main/scala/ai/chronon/online/MetadataStore.scala:232-0
Timestamp: 2024-10-17T00:12:09.763Z
Learning: In the `KVStore` trait located at `online/src/main/scala/ai/chronon/online/KVStore.scala`, there are two `create` methods: `def create(dataset: String): Unit` and `def create(dataset: String, props: Map[String, Any]): Unit`. The version with `props` ignores the `props` parameter, and the simpler version without `props` is appropriate when `props` are not needed.
🧬 Code Graph Analysis (1)
cloud_gcp/src/main/scala/ai/chronon/integrations/cloud_gcp/BigTableKVStoreImpl.scala (3)
cloud_gcp/src/main/scala/ai/chronon/integrations/cloud_gcp/GcpApiImpl.scala (2)
  • GcpApiImpl (26-195)
  • GcpApiImpl (197-246)
online/src/main/scala/ai/chronon/online/Api.scala (5)
  • KVStore (34-51)
  • create (60-60)
  • get (110-118)
  • TimedValue (42-42)
  • GetResponse (43-45)
cloud_gcp/src/main/scala/ai/chronon/integrations/cloud_gcp/ApiFutureUtils.scala (2)
  • ApiFutureUtils (12-40)
  • toCompletableFuture (14-39)
⏰ Context from checks skipped due to timeout of 90000ms (21)
  • GitHub Check: cloud_aws_tests
  • GitHub Check: service_tests
  • GitHub Check: cloud_aws_tests
  • GitHub Check: service_commons_tests
  • GitHub Check: service_tests
  • GitHub Check: hub_tests
  • GitHub Check: hub_tests
  • GitHub Check: cloud_gcp_tests
  • GitHub Check: cloud_gcp_tests
  • GitHub Check: online_tests
  • GitHub Check: online_tests
  • GitHub Check: api_tests
  • GitHub Check: flink_tests
  • GitHub Check: flink_tests
  • GitHub Check: aggregator_tests
  • GitHub Check: api_tests
  • GitHub Check: aggregator_tests
  • GitHub Check: orchestration_tests
  • GitHub Check: scala_compile_fmt_fix
  • GitHub Check: orchestration_tests
  • GitHub Check: enforce_triggered_workflows
🔇 Additional comments (42)
cloud_gcp/src/test/scala/ai/chronon/integrations/cloud_gcp/BigTableKVStoreTest.scala (19)

5-5: New UseBulkReadRows import added for parameterized testing.

The import supports the new configuration parameter testing pattern implemented below.


26-26: Added TableDrivenPropertyChecks support for parameterized testing.

Now using ScalaTest's property-based testing to verify both bulk read implementations.


53-53: Extended class with TableDrivenPropertyChecks trait.

Enables testing with different configurations using forAll tables.


106-135: Refactored test to use parameterized testing pattern.

Test now runs with both bulk read configurations, improving test coverage.


139-173: Applied parameterized testing to blob data updates.

Consistent pattern application ensures both implementations handle updates correctly.


303-303: Added mock for closeAsync() to support bulk read testing.

Mock now handles the asynchronous closing of the batcher in the multiget failures test.


317-336: Applied parameterized testing to time series query tests.

Ensures time series queries work correctly with both bulk read implementations.


340-359: Applied parameterized testing to multiple dataset time series queries.

Consistent testing pattern application for one-day queries.


363-382: Applied parameterized testing to same-day time series queries.

Ensures same-day queries work with both implementations.


386-408: Applied parameterized testing to queries spanning days without data.

Tests edge case of querying beyond available data with both implementations.


413-438: Applied parameterized testing to multiple key time series queries.

Ensures multi-key queries work correctly with both implementations.


443-473: Applied parameterized testing to streaming tile update tests.

Verifies latest value is returned correctly in both implementations.


477-506: Applied parameterized testing to streaming tiled queries.

Verifies multi-day tiled queries work with both implementations.


511-544: Applied parameterized testing to multi-key and multi-day tiled queries.

Comprehensive test for complex query scenarios with both implementations.


549-597: Applied parameterized testing to different batch end time queries.

Tests cross-dataset queries with different time ranges in both implementations.


602-631: Applied parameterized testing to one-day tiled queries.

Ensures single-day tiled queries work in both implementations.


636-665: Applied parameterized testing to same-day tiled queries.

Tests partial-day queries in both implementations.


669-701: Applied parameterized testing to queries for days without data.

Verifies edge case handling with both implementations.


751-757: Added configuration table creation method.

Creates test configurations with bulk read enabled and disabled for parameterized testing.

cloud_gcp/src/main/scala/ai/chronon/integrations/cloud_gcp/GcpApiImpl.scala (11)

13-13: Added RetrySettings import for configurable retry behavior.

Supports the new retry configuration capabilities.


21-21: Added java.time.Duration import for retry configuration.

Used for parsing and specifying durations in the retry settings.


28-29: Added explicit import for companion object constants.

Improves readability by making the source of constants clear.


48-54: Refactored to use helper methods for configuration retrieval.

Centralizes configuration access through getOrElseThrow and getOptional methods.


57-57: Updated to use GcpApiImpl constants.

Consistent usage of constants from companion object improves maintainability.


96-98: Added retry settings configuration.

Now explicitly configuring retry behavior for BigTable client operations.


107-107: Updated constructor call to pass configuration.

Passes configuration map to BigTableKVStoreImpl to support new features.


128-175: Added method to configure retry settings.

Comprehensive timeout and retry configuration for BigTable operations:

  • Configures initial RPC timeout
  • Sets timeout multiplier
  • Defines max RPC timeout
  • Sets total timeout duration
  • Configures max retry attempts
  • Applies settings to read, bulk read, and mutate operations

Default values ensure sensible behavior when not explicitly configured.


199-211: Added configuration constants to companion object.

Centralizes configuration keys in companion object for better maintainability.


213-217: Added default retry setting values.

Sensible defaults ensure proper operation when configuration isn't provided.


219-229: Added helper methods for configuration access.

Centralizes environment and configuration map lookup with proper fallback behavior.

cloud_gcp/src/main/scala/ai/chronon/integrations/cloud_gcp/BigTableKVStoreImpl.scala (12)

30-30: Updated import to include Query and BTTableId.

Support for new query-based methods in the implementation.


40-40: Added ArrayBuffer import for batch operations.

Required for collecting row keys in bulk operations.


73-74: Extended constructor with configuration parameter.

Added optional configuration map to support feature toggling.


93-93: Added bulk read toggle flag based on configuration.

Controls whether to use bulk read rows API for multiGet operations.


129-145: Updated multiGet to conditionally use bulk or standard reads.

Now chooses between bulk and standard read implementations based on configuration.


147-231: Added bulk read implementation for multiGet.

Efficiently batches reads using BigTable's bulk read API:

  • Groups requests by dataset
  • Applies appropriate filters based on request type
  • Tracks row key to request mapping
  • Processes results in batches
  • Handles errors appropriately

The implementation aligns with the existing pattern while adding bulk capability.


233-256: Added helper method for asynchronous batch reads.

Properly manages batch lifecycle:

  • Creates and populates the batcher
  • Calls closeAsync() to flush pending operations
  • Converts Google futures to Scala futures
  • Ensures proper ordering of operations

258-338: Added standard read implementation for multiGet.

Alternative implementation using standard read rows API:

  • Creates queries with appropriate filters
  • Handles time series and non-time series requests
  • Maps results back to original requests
  • Includes error handling and metrics

Follows same pattern as bulk read for consistency.


369-395: Extracted query filter configuration into separate method.

Refactored common time series filter logic into a reusable method.


430-430: Updated future conversion using utility method.

Using centralized future conversion for consistency.


496-496: Updated future conversion using utility method.

Using centralized future conversion for consistency.


659-662: Added utility method for Google to Scala future conversion.

Centralizes conversion logic to avoid duplication and ensure consistency.


🪧 Tips

Chat

There are 3 ways to chat with CodeRabbit:

  • Review comments: Directly reply to a review comment made by CodeRabbit. Example:
    • I pushed a fix in commit <commit_id>, please review it.
    • Generate unit testing code for this file.
    • Open a follow-up GitHub issue for this discussion.
  • Files and specific lines of code (under the "Files changed" tab): Tag @coderabbitai in a new review comment at the desired location with your query. Examples:
    • @coderabbitai generate unit testing code for this file.
    • @coderabbitai modularize this function.
  • PR comments: Tag @coderabbitai in a new PR comment to ask questions about the PR branch. For the best results, please provide a very specific query, as very limited context is provided in this mode. Examples:
    • @coderabbitai gather interesting stats about this repository and render them as a table. Additionally, render a pie chart showing the language distribution in the codebase.
    • @coderabbitai read src/utils.ts and generate unit testing code.
    • @coderabbitai read the files in the src/scheduler package and generate a class diagram using mermaid and a README in the markdown format.
    • @coderabbitai help me debug CodeRabbit configuration file.

Note: Be mindful of the bot's finite context window. It's strongly recommended to break down tasks such as reading entire modules into smaller chunks. For a focused discussion, use review comments to chat about specific files and their changes, instead of using the PR comments.

CodeRabbit Commands (Invoked using PR comments)

  • @coderabbitai pause to pause the reviews on a PR.
  • @coderabbitai resume to resume the paused reviews.
  • @coderabbitai review to trigger an incremental review. This is useful when automatic reviews are disabled for the repository.
  • @coderabbitai full review to do a full review from scratch and review all the files again.
  • @coderabbitai summary to regenerate the summary of the PR.
  • @coderabbitai resolve resolve all the CodeRabbit review comments.
  • @coderabbitai configuration to show the current CodeRabbit configuration for the repository.
  • @coderabbitai help to get help.

Other keywords and placeholders

  • Add @coderabbitai ignore anywhere in the PR description to prevent this PR from being reviewed.
  • Add @coderabbitai summary to generate the high-level summary at a specific location in the PR description.
  • Add @coderabbitai anywhere in the PR title to generate the title automatically.

CodeRabbit Configuration File (.coderabbit.yaml)

  • You can programmatically configure CodeRabbit by adding a .coderabbit.yaml file to the root of your repository.
  • Please see the configuration documentation for more information.
  • If your editor has YAML language server enabled, you can add the path at the top of this file to enable auto-completion and validation: # yaml-language-server: $schema=https://coderabbit.ai/integrations/schema.v2.json

Documentation and Community

  • Visit our Documentation for detailed information on how to use CodeRabbit.
  • Join our Discord Community to get help, request features, and share feedback.
  • Follow us on X/Twitter for updates and announcements.

Copy link

@coderabbitai coderabbitai bot left a comment

Choose a reason for hiding this comment

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

Actionable comments posted: 0

🧹 Nitpick comments (1)
cloud_gcp/src/main/scala/ai/chronon/integrations/cloud_gcp/BigTableKVStoreImpl.scala (1)

146-249: bulkReadRowsMultiGet.

Flush via closeAsync is good; consider partial failures if close fails.

📜 Review details

Configuration used: CodeRabbit UI
Review profile: CHILL
Plan: Pro (Legacy)

📥 Commits

Reviewing files that changed from the base of the PR and between 1f20f33 and 4ab71bc.

📒 Files selected for processing (4)
  • cloud_gcp/src/main/scala/ai/chronon/integrations/cloud_gcp/BigTableKVStoreImpl.scala (6 hunks)
  • cloud_gcp/src/main/scala/ai/chronon/integrations/cloud_gcp/GcpApiImpl.scala (6 hunks)
  • cloud_gcp/src/test/scala/ai/chronon/integrations/cloud_gcp/BigTableKVStoreTest.scala (7 hunks)
  • online/src/main/scala/ai/chronon/online/fetcher/Fetcher.scala (3 hunks)
🧰 Additional context used
🧬 Code Graph Analysis (2)
cloud_gcp/src/test/scala/ai/chronon/integrations/cloud_gcp/BigTableKVStoreTest.scala (1)
cloud_gcp/src/main/scala/ai/chronon/integrations/cloud_gcp/BigTableKVStoreImpl.scala (4)
  • create (94-94)
  • create (96-125)
  • multiPut (460-510)
  • multiGet (127-144)
cloud_gcp/src/main/scala/ai/chronon/integrations/cloud_gcp/BigTableKVStoreImpl.scala (2)
cloud_gcp/src/main/scala/ai/chronon/integrations/cloud_gcp/GcpApiImpl.scala (2)
  • GcpApiImpl (26-195)
  • GcpApiImpl (197-246)
cloud_gcp/src/main/scala/ai/chronon/integrations/cloud_gcp/ApiFutureUtils.scala (2)
  • ApiFutureUtils (12-40)
  • toCompletableFuture (14-39)
⏰ Context from checks skipped due to timeout of 90000ms (3)
  • GitHub Check: non_spark_tests
  • GitHub Check: non_spark_tests
  • GitHub Check: scala_compile_fmt_fix
🔇 Additional comments (37)
online/src/main/scala/ai/chronon/online/fetcher/Fetcher.scala (3)

147-147: Clean merging logic.

Straightforward approach to combine internal and external responses.


206-206: Metric rename is consistent.

Renaming clarifies the difference between request-level and overall latency.


216-216: New context usage.

Good practice to isolate metrics for join-fetching.

cloud_gcp/src/test/scala/ai/chronon/integrations/cloud_gcp/BigTableKVStoreTest.scala (21)

5-5: Added import for bulk read config.

Enables bulk read rows testing.


26-26: Table-driven tests support.

Good approach for multiple configurations.


106-135: Property-based test for blob data.

Solid coverage verifying serialization round trip.


139-173: Blob data update test.

Ensures correct overwrite behavior.


317-337: Time series range query test.

Validates range correctness.


341-359: Multiple dataset time series test.

Checks multi-dataset queries.


363-382: Single-day time series coverage.

Good narrow range check.


386-408: Time series test with no data.

Verifies handling of empty intervals.


413-438: Multiple keys in time series.

Ensures correctness across different keys.


443-472: Repeated streaming tile updates.

Covers overwriting on same tile.


477-507: Streaming tiled query (multiple days).

Checks expanded date range.


511-545: Multiple keys with streaming tiles.

Tests parallel streams properly.


549-598: Mixed batch end times.

Verifies queries with different intervals.


602-632: One day streaming tile query.

Simple interval coverage check.


636-666: Same-day streaming tile query.

Focus on partial-day coverage.


669-701: Streaming tiled query with no data.

Correctly handles empty partition.


704-717: Helper: writeGeneratedTimeSeriesData.

Straightforward utility for tests.


719-728: Helper: generateAndWriteTimeSeriesData.

Well-structured for multi-key scenario.


730-739: Blob value validation helper.

Ensures payload is intact.


741-749: Time series value validation helper.

Checks timestamps and payload correctness.


751-757: createConfigurations function.

Neat table-driven approach for enabling/disabling bulk reads.

cloud_gcp/src/main/scala/ai/chronon/integrations/cloud_gcp/GcpApiImpl.scala (8)

13-13: New import for retry settings.

Helps configure Bigtable timeouts.


21-21: Added java.time.Duration.

Needed for custom retry durations.


28-28: Importing GcpApiImpl.

Clean internal reference.


29-29: Potential duplicate import?

Ensure no duplication is introduced.


97-98: Applying client settings.

Customized retry/timeouts improve resiliency.


107-107: Pass conf in constructor.

Consistent with new config usage.


128-175: setClientRetrySettings.

Good handling of environment-based retry config.


199-229: New config constants.

Centralizes environment keys for clarity.

cloud_gcp/src/main/scala/ai/chronon/integrations/cloud_gcp/BigTableKVStoreImpl.scala (5)

72-73: Extended constructor.

Allows usage of BigQuery and additional config.


92-93: useBulkReadRows from config.

Flexible switching between bulk and normal reads.


128-144: multiGet logic update.

Cleanly branches bulk vs read approach.


251-332: readRowsMultiGet.

Straight path for standard fetch.


363-390: Time series filters set.

Neat function for daily partitioning.

Comment on lines 202 to 209
val closeFuture = batcher.closeAsync()
val closeCompletableFuture = ApiFutureUtils.toCompletableFuture(closeFuture)
val closeScalaFuture = FutureConverters.toScala(closeCompletableFuture)

// order matters - we need to ensure the close op is done as that triggers flushes of pending work which we
// need as part of the final Future[List[Row]]
val resultFuture: Future[util.List[Row]] = for {
_ <- closeScalaFuture // close the batcher (which flushes pending work)
Copy link
Contributor

Choose a reason for hiding this comment

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

according to the docs - we don't seem to need this close method, i notice that rivulet does it - but wonder what if we don't do it.

Copy link
Contributor Author

Choose a reason for hiding this comment

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

This triggers a flush of any outstanding batches - as part of batcher.add we are queueing up work which ideally for us gets sent immediately based on our batch size = 1 and initial delay being unset, but in case it is held on for a bit - we need the call to be flushed out which this method is doing for us.

Future.sequence(datasetFutures).map(_.flatten)
private def readRowsMultiGet(
requestsByDataset: Map[String, Seq[KVStore.GetRequest]]): Seq[Future[Seq[KVStore.GetResponse]]] = {
requestsByDataset.map { case (dataset, datasetRequests) =>
Copy link
Contributor

@nikhil-zlai nikhil-zlai Apr 11, 2025

Choose a reason for hiding this comment

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

nit: refactor out nested code as functions?

Copy link
Contributor Author

Choose a reason for hiding this comment

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

what do you have in mind here? pulling out the handling for the different table types or something else?

@piyush-zlai piyush-zlai force-pushed the piyush/bt_timeouts_closeasync branch from 4ab71bc to 3435b45 Compare April 16, 2025 14:37
@piyush-zlai piyush-zlai changed the title [wip] BigTable / Fetcher updates - use closeAsync, setTimeouts, allow bulkRead / readRows choice BigTable / Fetcher updates - use closeAsync, setTimeouts, allow bulkRead / readRows choice Apr 16, 2025
@piyush-zlai piyush-zlai requested a review from tchow-zlai April 16, 2025 14:37
@piyush-zlai piyush-zlai merged commit 3ae88a5 into main Apr 16, 2025
24 checks passed
@piyush-zlai piyush-zlai deleted the piyush/bt_timeouts_closeasync branch April 16, 2025 15:05
kumar-zlai pushed a commit that referenced this pull request Apr 25, 2025
…ead / readRows choice (#630)

## Summary

## Checklist
- [ ] Added Unit Tests
- [ ] Covered by existing CI
- [ ] Integration tested
- [ ] Documentation update



<!-- This is an auto-generated comment: release notes by coderabbit.ai
-->
## Summary by CodeRabbit

- **New Features**
- Introduced bulk read support and refined time series data filtering to
enhance data retrieval performance and accuracy.
- Improved client retry mechanisms for more robust operations under
varying conditions.

- **Refactor**
- Streamlined the handling of combined responses and updated latency
metric reporting for clearer performance insights.
- Centralized configuration access for environment variables and
settings.

- **Tests**
- Expanded property-based testing across multiple configurations to
ensure consistent and reliable functionality.
<!-- end of auto-generated comment: release notes by coderabbit.ai -->
kumar-zlai pushed a commit that referenced this pull request Apr 29, 2025
…ead / readRows choice (#630)

## Summary

## Checklist
- [ ] Added Unit Tests
- [ ] Covered by existing CI
- [ ] Integration tested
- [ ] Documentation update



<!-- This is an auto-generated comment: release notes by coderabbit.ai
-->
## Summary by CodeRabbit

- **New Features**
- Introduced bulk read support and refined time series data filtering to
enhance data retrieval performance and accuracy.
- Improved client retry mechanisms for more robust operations under
varying conditions.

- **Refactor**
- Streamlined the handling of combined responses and updated latency
metric reporting for clearer performance insights.
- Centralized configuration access for environment variables and
settings.

- **Tests**
- Expanded property-based testing across multiple configurations to
ensure consistent and reliable functionality.
<!-- end of auto-generated comment: release notes by coderabbit.ai -->
chewy-zlai pushed a commit that referenced this pull request May 15, 2025
…ead / readRows choice (#630)

## Summary

## Checklist
- [ ] Added Unit Tests
- [ ] Covered by existing CI
- [ ] Integration tested
- [ ] Documentation update



<!-- This is an auto-generated comment: release notes by coderabbit.ai
-->
## Summary by CodeRabbit

- **New Features**
- Introduced bulk read support and refined time series data filtering to
enhance data retrieval performance and accuracy.
- Improved client retry mechanisms for more robust operations under
varying conditions.

- **Refactor**
- Streamlined the handling of combined responses and updated latency
metric reporting for clearer performance insights.
- Centralized configuration access for environment variables and
settings.

- **Tests**
- Expanded property-based testing across multiple configurations to
ensure consistent and reliable functionality.
<!-- end of auto-generated comment: release notes by coderabbit.ai -->
chewy-zlai pushed a commit that referenced this pull request May 15, 2025
…ead / readRows choice (#630)

## Summary

## Checklist
- [ ] Added Unit Tests
- [ ] Covered by existing CI
- [ ] Integration tested
- [ ] Documentation update



<!-- This is an auto-generated comment: release notes by coderabbit.ai
-->
## Summary by CodeRabbit

- **New Features**
- Introduced bulk read support and refined time series data filtering to
enhance data retrieval performance and accuracy.
- Improved client retry mechanisms for more robust operations under
varying conditions.

- **Refactor**
- Streamlined the handling of combined responses and updated latency
metric reporting for clearer performance insights.
- Centralized configuration access for environment variables and
settings.

- **Tests**
- Expanded property-based testing across multiple configurations to
ensure consistent and reliable functionality.
<!-- end of auto-generated comment: release notes by coderabbit.ai -->
chewy-zlai pushed a commit that referenced this pull request May 16, 2025
…ead / readRows choice (#630)

## Summary

## Cheour clientslist
- [ ] Added Unit Tests
- [ ] Covered by existing CI
- [ ] Integration tested
- [ ] Documentation update



<!-- This is an auto-generated comment: release notes by coderabbit.ai
-->
## Summary by CodeRabbit

- **New Features**
- Introduced bulk read support and refined time series data filtering to
enhance data retrieval performance and accuracy.
- Improved client retry mechanisms for more robust operations under
varying conditions.

- **Refactor**
- Streamlined the handling of combined responses and updated latency
metric reporting for clearer performance insights.
- Centralized configuration access for environment variables and
settings.

- **Tests**
- Expanded property-based testing across multiple configurations to
ensure consistent and reliable functionality.
<!-- end of auto-generated comment: release notes by coderabbit.ai -->
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