Fix Updates being forwarded even when not processable or causing no change (#17699)
* Fix Updates being forwarded even when not processable or causing no change * Refactor and ensure status edit is strictly newer than last known edit
This commit is contained in:
		
							parent
							
								
									46ad7fea9d
								
							
						
					
					
						commit
						d3aa9cf774
					
				
					 1 changed files with 12 additions and 0 deletions
				
			
		|  | @ -15,6 +15,8 @@ class ActivityPub::ProcessStatusUpdateService < BaseService | |||
|     # Only native types can be updated at the moment | ||||
|     return if !expected_type? || already_updated_more_recently? | ||||
| 
 | ||||
|     last_edit_date = status.edited_at.presence || status.created_at | ||||
| 
 | ||||
|     # Only allow processing one create/update per status at a time | ||||
|     RedisLock.acquire(lock_options) do |lock| | ||||
|       if lock.acquired? | ||||
|  | @ -37,6 +39,8 @@ class ActivityPub::ProcessStatusUpdateService < BaseService | |||
|         raise Mastodon::RaceConditionError | ||||
|       end | ||||
|     end | ||||
| 
 | ||||
|     forward_activity! if significant_changes? && @status_parser.edited_at.present? && @status_parser.edited_at > last_edit_date | ||||
|   end | ||||
| 
 | ||||
|   private | ||||
|  | @ -263,4 +267,12 @@ class ActivityPub::ProcessStatusUpdateService < BaseService | |||
|     PollExpirationNotifyWorker.remove_from_scheduled(poll.id) if @previous_expires_at.present? && @previous_expires_at > poll.expires_at | ||||
|     PollExpirationNotifyWorker.perform_at(poll.expires_at + 5.minutes, poll.id) | ||||
|   end | ||||
| 
 | ||||
|   def forward_activity! | ||||
|     forwarder.forward! if forwarder.forwardable? | ||||
|   end | ||||
| 
 | ||||
|   def forwarder | ||||
|     @forwarder ||= ActivityPub::Forwarder.new(@account, @json, @status) | ||||
|   end | ||||
| end | ||||
|  |  | |||
		Loading…
	
		Reference in a new issue