@@ -110,10 +110,27 @@ def find_by(reference: nil, request_id: nil, idempotency_key: nil, authorization
110110 )
111111 end
112112
113- readable_message (
114- remembered_message ( reference , idempotency_key , authorization_context :) ,
113+ instance = Instance . find_by (
114+ actor_type : reference . actor_type ,
115+ actor_id : reference . actor_id
116+ )
117+ return nil unless instance
118+
119+ message = Message . uncached { Message . find_by ( instance_id : instance . id , idempotency_key :) }
120+ return readable_message ( message , authorization_context :) if message
121+
122+ remembered = Array ( instance . completed_idempotency_keys )
123+ . find { |entry | entry [ "key" ] == idempotency_key }
124+ return nil unless remembered && remembered [ "arguments" ] . is_a? ( Hash )
125+ return nil unless authorized_to_invoke? (
126+ actor_type : reference . actor_type ,
127+ actor_id : reference . actor_id ,
128+ operation : remembered [ "operation" ] ,
129+ arguments : remembered [ "arguments" ] ,
115130 authorization_context :
116131 )
132+
133+ raise MessagePruned , idempotency_key
117134 end
118135
119136 # @rbs (Reference, ?authorization_context: untyped) -> StateSnapshot
@@ -186,31 +203,6 @@ def enqueue_sync(reference:, operation:, arguments:, idempotency_key:, timeout:)
186203 )
187204 end
188205
189- # @rbs (Reference, String, authorization_context: untyped) -> Message?
190- def remembered_message ( reference , idempotency_key , authorization_context :)
191- instance = Instance . find_by (
192- actor_type : reference . actor_type ,
193- actor_id : reference . actor_id
194- )
195- return nil unless instance
196-
197- message = Message . uncached { Message . find_by ( instance_id : instance . id , idempotency_key :) }
198- return message if message
199-
200- remembered = Array ( instance . completed_idempotency_keys )
201- . find { |entry | entry [ "key" ] == idempotency_key }
202- return nil unless remembered
203- return nil unless authorized_to_invoke? (
204- actor_type : reference . actor_type ,
205- actor_id : reference . actor_id ,
206- operation : remembered [ "operation" ] ,
207- arguments : { } ,
208- authorization_context :
209- )
210-
211- raise MessagePruned , idempotency_key
212- end
213-
214206 # @rbs (Message?, authorization_context: untyped) -> MessageReference?
215207 def readable_message ( message , authorization_context :)
216208 return nil unless message
0 commit comments