Class: Upkeep::DAG::SubscriptionShape::Trace
- Inherits:
-
Object
- Object
- Upkeep::DAG::SubscriptionShape::Trace
- Defined in:
- lib/upkeep/dag/subscription_shape.rb
Instance Method Summary collapse
- #covers?(graph) ⇒ Boolean
-
#initialize(graph_version:) ⇒ Trace
constructor
A new instance of Trace.
- #invalidate! ⇒ Object
- #record_dependency(owner_id, dependency, graph_version:) ⇒ Object
- #record_frame(frame_id, metadata, parent_id:, graph_version:) ⇒ Object
- #subscription_shape(request_signature: nil) ⇒ Object
- #synchronized_with?(graph) ⇒ Boolean
Constructor Details
#initialize(graph_version:) ⇒ Trace
Returns a new instance of Trace.
162 163 164 165 166 167 168 169 170 171 172 |
# File 'lib/upkeep/dag/subscription_shape.rb', line 162 def initialize(graph_version:) @graph_version = graph_version @seen_frame_ids = {} @seen_dependency_keys = {} @seen_dependency_owner_ids_by_key = Hash.new { |owners, dependency_key| owners[dependency_key] = {} } @seen_contains_edges = {} @digest = Digest::SHA256.new @digest.update("subscription-shape-trace") @invalid = false @recorded = false end |
Instance Method Details
#covers?(graph) ⇒ Boolean
215 216 217 |
# File 'lib/upkeep/dag/subscription_shape.rb', line 215 def covers?(graph) synchronized_with?(graph) && (recorded? || graph_shape_empty?(graph)) end |
#invalidate! ⇒ Object
178 179 180 |
# File 'lib/upkeep/dag/subscription_shape.rb', line 178 def invalidate! @invalid = true end |
#record_dependency(owner_id, dependency, graph_version:) ⇒ Object
198 199 200 201 202 203 204 205 206 207 208 209 210 211 212 213 |
# File 'lib/upkeep/dag/subscription_shape.rb', line 198 def record_dependency(owner_id, dependency, graph_version:) return if @invalid dependency_cache_key = dependency.cache_key unless @seen_dependency_keys.key?(dependency_cache_key) @seen_dependency_keys[dependency_cache_key] = true dependency_payload = SubscriptionShape.shape_value(dependency.to_h) record_digest_term(:dependency, SubscriptionShape.canonical_term(:dependency, dependency_cache_key, dependency_payload)) end unless @seen_dependency_owner_ids_by_key[dependency_cache_key].key?(owner_id) @seen_dependency_owner_ids_by_key[dependency_cache_key][owner_id] = true record_digest_term(:dependency_owner, SubscriptionShape.canonical_term(:dependency_owner, dependency_cache_key, owner_id)) end @recorded = true @graph_version = graph_version end |
#record_frame(frame_id, metadata, parent_id:, graph_version:) ⇒ Object
182 183 184 185 186 187 188 189 190 191 192 193 194 195 196 |
# File 'lib/upkeep/dag/subscription_shape.rb', line 182 def record_frame(frame_id, , parent_id:, graph_version:) return if @invalid unless @seen_frame_ids.key?(frame_id) @seen_frame_ids[frame_id] = true record_digest_term(:frame, SubscriptionShape.frame_term(frame_id, )) end edge_key = [parent_id, frame_id] unless @seen_contains_edges.key?(edge_key) @seen_contains_edges[edge_key] = true record_digest_term(:contains, SubscriptionShape.contains_term(parent_id, frame_id)) end @recorded = true @graph_version = graph_version end |
#subscription_shape(request_signature: nil) ⇒ Object
219 220 221 |
# File 'lib/upkeep/dag/subscription_shape.rb', line 219 def subscription_shape(request_signature: nil) SubscriptionShape.from_trace_digest(@digest.hexdigest, request_signature: request_signature) end |
#synchronized_with?(graph) ⇒ Boolean
174 175 176 |
# File 'lib/upkeep/dag/subscription_shape.rb', line 174 def synchronized_with?(graph) !@invalid && @graph_version == graph.version end |