bitfab 0.33.1 → 0.33.2

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: 42832c5915e35905df60dae19b3a619fbaa221940e540618897b569be3db9b05
4
- data.tar.gz: 833c23b94c2a6fa1194056775798d0a8e26ec52436489193f96884a993805f65
3
+ metadata.gz: f3dd02ac43d3ed65f11a6dcf52aa0d0d3a331fa428fb568a74147f5007fc9e22
4
+ data.tar.gz: 94b0cc1645fc42ce929a4fd1363de7ededc908f20dd411d3e7f8fd68d3bed0f8
5
5
  SHA512:
6
- metadata.gz: 8e42d4c2c6392450ba1fd8f7cc3dd7ce5c3f8362859474dac1ed8bb4289db9db1ed968f05d524a3aa4110809510334e88df62cc161eff66e7965147b5098695a
7
- data.tar.gz: b432abe485b5a331e750ef2203f2f9d6d8c16b5ff0d0804268218e0a82a3fcc2ea09104381aff75cc1bdb8d4fcb7a5e99708839b61cce8d449371331fa58f325
6
+ metadata.gz: b3a07fecf4731278963e8db381a0bfc6b4677d17bd2464f36f1d5ccfd455a8d3f066273502674158c3ac3b99a180f3017b0c5185f8e6ff3795c87b7fd2c612cb
7
+ data.tar.gz: 38e33c8a2dc6ab7e2e6a4c416bea15828a81724eb8ffe4b0fb440088e3b05fea53abaded2fa46bf2e852f7fd307cd5216d149b296b321a5399861861b08bd8d1
@@ -11,6 +11,9 @@ require_relative "warn_once"
11
11
 
12
12
  module Bitfab
13
13
  class HttpClient
14
+ REPLAY_DB_BRANCH_REQUEST_TIMEOUT_SECONDS = 300
15
+ private_constant :REPLAY_DB_BRANCH_REQUEST_TIMEOUT_SECONDS
16
+
14
17
  attr_reader :service_url
15
18
 
16
19
  def initialize(api_key:, service_url: nil, timeout: 120)
@@ -131,6 +134,7 @@ module Bitfab
131
134
  payload["codeChangeFiles"] = normalize_code_change_files(code_change_files) unless code_change_files.nil?
132
135
  payload["experimentGroupId"] = experiment_group_id unless experiment_group_id.nil?
133
136
  payload["includeDbBranchLease"] = true if include_db_branch_lease
137
+ payload["lazyDbBranchLease"] = true if include_db_branch_lease
134
138
  payload["datasetId"] = dataset_id unless dataset_id.nil?
135
139
  payload["graderIds"] = grader_ids unless grader_ids.nil?
136
140
  payload["dbBranchSettings"] = db_branch_settings unless db_branch_settings.nil?
@@ -143,7 +147,7 @@ module Bitfab
143
147
  # sits above the server's own ceiling so the server's error is the one
144
148
  # callers see. Net::HTTP would otherwise default to 60s here, which the
145
149
  # branch creation alone can outlast.
146
- timeout = include_db_branch_lease ? 300 : 30
150
+ timeout = include_db_branch_lease ? REPLAY_DB_BRANCH_REQUEST_TIMEOUT_SECONDS : 30
147
151
  request("/api/sdk/replay/start", payload, timeout:)
148
152
  end
149
153
 
@@ -194,6 +198,16 @@ module Bitfab
194
198
  request("/api/sdk/replay/releaseDbBranchLease", {"neonBranchId" => neon_branch_id}, timeout: 30)
195
199
  end
196
200
 
201
+ def resolve_db_branch_lease(test_run_id, trace_id, db_branch_settings = nil)
202
+ payload = {"testRunId" => test_run_id, "traceId" => trace_id}
203
+ payload["dbBranchSettings"] = db_branch_settings unless db_branch_settings.nil?
204
+ request(
205
+ "/api/sdk/replay/resolveDbBranchLease",
206
+ payload,
207
+ timeout: REPLAY_DB_BRANCH_REQUEST_TIMEOUT_SECONDS
208
+ )
209
+ end
210
+
197
211
  # Send an external trace (fire-and-forget in background thread).
198
212
  def send_external_trace(payload)
199
213
  merged = payload.merge("sdkVersion" => VERSION)
data/lib/bitfab/replay.rb CHANGED
@@ -200,6 +200,7 @@ module Bitfab
200
200
  end
201
201
  end
202
202
 
203
+ resolved_db_branch_settings = db_branch_settings(db_branch)
203
204
  replay_data = http_client.start_replay(
204
205
  trace_function_key,
205
206
  effective_limit,
@@ -211,7 +212,7 @@ module Bitfab
211
212
  include_db_branch_lease:,
212
213
  dataset_id:,
213
214
  grader_ids:,
214
- db_branch_settings: db_branch_settings(db_branch)
215
+ db_branch_settings: resolved_db_branch_settings
215
216
  )
216
217
  test_run_id = replay_data["testRunId"]
217
218
  test_run_url = replay_data["testRunUrl"]
@@ -219,7 +220,8 @@ module Bitfab
219
220
 
220
221
  result_items = if server_items.any?
221
222
  process_items(http_client, server_items, receiver, method_name, test_run_id, max_concurrency, mock.to_s,
222
- adapt_inputs, include_db_branch_lease, on_progress:, mock_overrides: resolved_overrides)
223
+ adapt_inputs, include_db_branch_lease, resolved_db_branch_settings, on_progress:,
224
+ mock_overrides: resolved_overrides)
223
225
  else
224
226
  []
225
227
  end
@@ -528,7 +530,8 @@ module Bitfab
528
530
 
529
531
  # Process all replay items, optionally in parallel using threads.
530
532
  def process_items(http_client, server_items, receiver, method_name, test_run_id, max_concurrency, mock_strategy,
531
- adapt_inputs = nil, include_db_branch_lease = false, on_progress: nil, mock_overrides: [])
533
+ adapt_inputs = nil, include_db_branch_lease = false, db_branch_settings = nil, on_progress: nil,
534
+ mock_overrides: [])
532
535
  concurrency = max_concurrency || server_items.length
533
536
 
534
537
  # Reports running totals once per item as it settles. In the parallel
@@ -584,7 +587,7 @@ module Bitfab
584
587
  if concurrency <= 1
585
588
  server_items.map do |item|
586
589
  result = process_single_item(http_client, item, receiver, method_name, test_run_id, mock_strategy,
587
- adapt_inputs, include_db_branch_lease, mock_overrides:)
590
+ adapt_inputs, include_db_branch_lease, db_branch_settings, mock_overrides:)
588
591
  report.call(result, original_trace_id_of(item), original_span_id_of(item), test_run_id)
589
592
  result
590
593
  end
@@ -601,7 +604,7 @@ module Bitfab
601
604
  break unless item
602
605
 
603
606
  result = process_single_item(http_client, item, receiver, method_name, test_run_id, mock_strategy,
604
- adapt_inputs, include_db_branch_lease, mock_overrides:)
607
+ adapt_inputs, include_db_branch_lease, db_branch_settings, mock_overrides:)
605
608
  results_mutex.synchronize { results[idx] = result }
606
609
  report.call(result, original_trace_id_of(item), original_span_id_of(item), test_run_id)
607
610
  end
@@ -620,7 +623,7 @@ module Bitfab
620
623
  # than propagated, so one bad trace never aborts the whole replay run
621
624
  # (mirrors the TypeScript and Python SDKs' per-item rescue).
622
625
  def process_single_item(http_client, server_item, receiver, method_name, test_run_id, mock_strategy,
623
- adapt_inputs = nil, include_db_branch_lease = false, mock_overrides: [])
626
+ adapt_inputs = nil, include_db_branch_lease = false, db_branch_settings = nil, mock_overrides: [])
624
627
  metrics = extract_server_item_metrics(server_item)
625
628
  # The ORIGINAL (historical) trace/span this item replays. Canonical
626
629
  # keys are originalTraceId/originalSpanId; older servers send them under
@@ -638,6 +641,13 @@ module Bitfab
638
641
  # for a branch, so running their method against live data would produce a
639
642
  # result that looks valid and is not. Fail the item instead, loudly.
640
643
  lease_error = include_db_branch_lease ? server_item["dbBranchLeaseError"] : nil
644
+ db_snapshot_ref = server_item["dbSnapshotRef"]
645
+ if include_db_branch_lease && lease.nil? && lease_error.nil?
646
+ resolved = http_client.resolve_db_branch_lease(test_run_id, original_trace_id, db_branch_settings)
647
+ lease = resolved["lease"]
648
+ lease_error = resolved["leaseError"]
649
+ db_snapshot_ref = resolved["dbSnapshotRef"] || db_snapshot_ref
650
+ end
641
651
  if lease_error
642
652
  raise "Replay requested a database branch for trace #{original_trace_id} but it " \
643
653
  "could not be resolved (#{lease_error["code"]}): #{lease_error["message"]}. " \
@@ -709,7 +719,7 @@ module Bitfab
709
719
  adapt_ctx:,
710
720
  db_branch_lease: lease,
711
721
  source_bitfab_trace_id: original_trace_id,
712
- db_snapshot_ref: server_item["dbSnapshotRef"]
722
+ db_snapshot_ref:
713
723
  )
714
724
  rescue => e
715
725
  warn "Bitfab: replay item for span #{original_span_id} failed before execution: #{e.message}"
@@ -727,7 +737,7 @@ module Bitfab
727
737
  # Deprecated aliases for original_trace_id/original_span_id.
728
738
  source_trace_id: original_trace_id,
729
739
  source_span_id: original_span_id,
730
- db_snapshot_ref: server_item["dbSnapshotRef"]
740
+ db_snapshot_ref:
731
741
  }
732
742
  ensure
733
743
  release_db_branch_lease(http_client, lease) if lease
@@ -1,5 +1,5 @@
1
1
  # frozen_string_literal: true
2
2
 
3
3
  module Bitfab
4
- VERSION = "0.33.1"
4
+ VERSION = "0.33.2"
5
5
  end
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: bitfab
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.33.1
4
+ version: 0.33.2
5
5
  platform: ruby
6
6
  authors:
7
7
  - Harvest Team