Add a circuit breaker for ActivityPub deliveries (#7053)
This commit is contained in:
		
							
								
								
									
										2
									
								
								Gemfile
									
									
									
									
									
								
							
							
						
						
									
										2
									
								
								Gemfile
									
									
									
									
									
								
							| @ -35,6 +35,7 @@ gem 'devise-two-factor', '~> 3.0' | ||||
| group :pam_authentication, optional: true do | ||||
|   gem 'devise_pam_authenticatable2', '~> 9.0' | ||||
| end | ||||
|  | ||||
| gem 'net-ldap', '~> 0.10' | ||||
| gem 'omniauth-cas', '~> 1.1' | ||||
| gem 'omniauth-saml', '~> 1.10' | ||||
| @ -79,6 +80,7 @@ gem 'sidekiq-bulk', '~>0.1.1' | ||||
| gem 'simple-navigation', '~> 4.0' | ||||
| gem 'simple_form', '~> 3.4' | ||||
| gem 'sprockets-rails', '~> 3.2', require: 'sprockets/railtie' | ||||
| gem 'stoplight', '~> 2.1.3' | ||||
| gem 'strong_migrations' | ||||
| gem 'tty-command' | ||||
| gem 'tty-prompt' | ||||
|  | ||||
| @ -550,6 +550,7 @@ GEM | ||||
|       net-scp (>= 1.1.2) | ||||
|       net-ssh (>= 2.8.0) | ||||
|     statsd-ruby (1.2.1) | ||||
|     stoplight (2.1.3) | ||||
|     streamio-ffmpeg (3.0.2) | ||||
|       multi_json (~> 1.8) | ||||
|     strong_migrations (0.1.9) | ||||
| @ -716,6 +717,7 @@ DEPENDENCIES | ||||
|   simple_form (~> 3.4) | ||||
|   simplecov (~> 0.14) | ||||
|   sprockets-rails (~> 3.2) | ||||
|   stoplight (~> 2.1.3) | ||||
|   streamio-ffmpeg (~> 3.0) | ||||
|   strong_migrations | ||||
|   tty-command | ||||
|  | ||||
| @ -12,9 +12,7 @@ class ActivityPub::DeliveryWorker | ||||
|     @source_account = Account.find(source_account_id) | ||||
|     @inbox_url      = inbox_url | ||||
|  | ||||
|     perform_request do |response| | ||||
|       raise Mastodon::UnexpectedResponseError, response unless response_successful? response | ||||
|     end | ||||
|     perform_request | ||||
|  | ||||
|     failure_tracker.track_success! | ||||
|   rescue => e | ||||
| @ -30,8 +28,14 @@ class ActivityPub::DeliveryWorker | ||||
|     request.add_headers(HEADERS) | ||||
|   end | ||||
|  | ||||
|   def perform_request(&block) | ||||
|     build_request.perform(&block) | ||||
|   def perform_request | ||||
|     light = Stoplight(@inbox_url) do | ||||
|       build_request.perform do |response| | ||||
|         raise Mastodon::UnexpectedResponseError, response unless response_successful?(response) | ||||
|       end | ||||
|     end | ||||
|  | ||||
|     light.run | ||||
|   end | ||||
|  | ||||
|   def response_successful?(response) | ||||
|  | ||||
							
								
								
									
										3
									
								
								config/initializers/stoplight.rb
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										3
									
								
								config/initializers/stoplight.rb
									
									
									
									
									
										Normal file
									
								
							| @ -0,0 +1,3 @@ | ||||
| require 'stoplight' | ||||
|  | ||||
| Stoplight::Light.default_data_store = Stoplight::DataStore::Redis.new(Redis.current) | ||||
		Reference in New Issue
	
	Block a user