Skip to content

Conversation

@samikshya-db
Copy link
Collaborator

Summary

This PR implements Phases 4-5 of the telemetry system for the Databricks SQL Go driver.

Stack: Part 1 of 2

  • This PR: PECOBLR-1143 (Phases 4-5)
  • Next: PECOBLR-1381-1382 (Phases 6-7)

Phase 4: Export Infrastructure ✅

New file: exporter.go (192 lines)

  • telemetryExporter with circuit breaker integration
  • ✅ HTTP POST to /api/2.0/telemetry-ext endpoint
  • ✅ Exponential backoff retry (100ms base, 3 retries max)
  • ✅ Tag filtering via shouldExportToDatabricks()
  • ✅ JSON serialization (telemetryPayload, exportedMetric)
  • ✅ Comprehensive error swallowing
  • ✅ Support for HTTP and HTTPS URLs

New file: exporter_test.go (448 lines)

  • ✅ 17 comprehensive tests with mock HTTP server
  • ✅ Success scenarios, retry logic, circuit breaker
  • ✅ Tag filtering, error swallowing, exponential backoff
  • ✅ Context cancellation, 4xx/5xx handling

Phase 5: Opt-In Configuration Integration ✅

Updated: config.go (+48 lines)

  • isTelemetryEnabled() with 5-level priority logic
  • ✅ Integration with featureFlagCache
  • ✅ Error handling with safe fallbacks

Updated: config_test.go (+230 lines)

  • ✅ 8 tests for all 5 priority levels
  • ✅ Server error scenarios, unreachable hosts

Priority Logic:

  1. forceEnableTelemetry=true → always enabled
  2. enableTelemetry=false → always disabled
  3. enableTelemetry=true + server feature flag check
  4. Server-side feature flag only (default)
  5. Default disabled (fail-safe)

Changes

Total: +976 insertions, -57 deletions


Testing

All 70+ tests passing ✅ (2.017s)

  • Circuit Breaker: 15 tests ✓
  • Config & Opt-In: 19 tests ✓
  • Exporter: 17 tests ✓
  • Feature Flags: 12 tests ✓
  • Manager: 9 tests ✓
  • Tags: 7 tests ✓

Related Issues

  • Implements: PECOBLR-1143 (Phases 4-5)
  • Enables: PECOBLR-1381 (Phase 6)
  • Enables: PECOBLR-1382 (Phase 7)

Checklist

  • Implements Phase 4 export infrastructure
  • Implements Phase 5 opt-in configuration
  • Comprehensive unit tests
  • All tests passing
  • DESIGN.md checklist updated
  • No breaking changes

…nd opt-in configuration

This commit implements the remaining components for PECOBLR-1143 (Phases 4-5):

Phase 4: Export Infrastructure
- Implement telemetryExporter with HTTP POST to /api/2.0/telemetry-ext
- Add retry logic with exponential backoff (100ms base, 3 retries)
- Integrate with circuit breaker for endpoint protection
- Implement tag filtering via shouldExportToDatabricks()
- Add error swallowing to ensure telemetry never impacts driver
- Support both http:// and https:// URLs for testing

Phase 5: Opt-In Configuration Integration
- Implement isTelemetryEnabled() with 5-level priority logic:
  1. forceEnableTelemetry=true - bypasses all server checks
  2. enableTelemetry=false - explicit opt-out
  3. enableTelemetry=true + server flag - user opt-in with server control
  4. Server flag only - default Databricks-controlled behavior
  5. Default disabled - fail-safe default
- Wire up with existing featureFlagCache for server flag checks
- Handle errors gracefully (default to disabled on failures)

Testing:
- Add 17 comprehensive unit tests for exporter (success, retries, circuit breaker, tag filtering, error swallowing, exponential backoff, context cancellation)
- Add 8 unit tests for isTelemetryEnabled (all 5 priority levels, error handling, server scenarios)
- All 70+ telemetry tests passing

Documentation:
- Update DESIGN.md checklist to mark Phases 3-5 as completed

This completes the core telemetry infrastructure for PECOBLR-1143.
Next phases (6-7) will add metric collection and driver integration.

Co-Authored-By: Claude Sonnet 4.5 <noreply@anthropic.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