Class: RailsAi::Performance::RequestDeduplicator

Inherits:
Object
  • Object
show all
Defined in:
lib/rails_ai/performance.rb

Overview

Request deduplication

Instance Method Summary collapse

Constructor Details

#initializeRequestDeduplicator

Returns a new instance of RequestDeduplicator.



134
135
136
137
# File 'lib/rails_ai/performance.rb', line 134

def initialize
  @pending_requests = Concurrent::Hash.new
  @mutex = Mutex.new
end

Instance Method Details

#deduplicate(key, &block) ⇒ Object



139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
# File 'lib/rails_ai/performance.rb', line 139

def deduplicate(key, &block)
  @mutex.synchronize do
    if @pending_requests[key]
      # Wait for existing request
      @pending_requests[key].value
    else
      # Start new request
      future = Concurrent::Future.execute(&block)
      @pending_requests[key] = future
      
      begin
        future.value
      ensure
        @pending_requests.delete(key)
      end
    end
  end
end