Skip to content

Commit 06d3a6c

Browse files
committed
Memoize Aws::SNS::Clinet#new
1 parent 0a81ea7 commit 06d3a6c

File tree

4 files changed

+17
-13
lines changed

4 files changed

+17
-13
lines changed

app/controllers/barbeque/sns_subscriptions_controller.rb

Lines changed: 2 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,3 @@
1-
require 'aws-sdk-sns'
2-
31
class Barbeque::SnsSubscriptionsController < Barbeque::ApplicationController
42
def index
53
@sns_subscriptions = Barbeque::SNSSubscription.all
@@ -47,10 +45,10 @@ def destroy
4745

4846
def fetch_sns_topic_arns
4947
if Barbeque.config.sns_regions.empty?
50-
Aws::SNS::Client.new.list_topics.topics.map(&:topic_arn)
48+
Barbeque::SNSSubscriptionService.sns_client.list_topics.topics.map(&:topic_arn)
5149
else
5250
Barbeque.config.sns_regions.flat_map do |region|
53-
Aws::SNS::Client.new(region: region).list_topics.topics.map(&:topic_arn)
51+
Barbeque::SNSSubscriptionService.sns_client(region).list_topics.topics.map(&:topic_arn)
5452
end
5553
end
5654
end

app/services/barbeque/sns_subscription_service.rb

Lines changed: 13 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -6,6 +6,11 @@ def self.sqs_client
66
@sqs_client ||= Aws::SQS::Client.new
77
end
88

9+
def self.sns_client(region = nil)
10+
@sns_clients ||= {}
11+
@sns_clients[region] ||= Aws::SNS::Client.new(region: region)
12+
end
13+
914
# @param [Barbeque::SNSSubscription] sns_subscription
1015
# @return [Boolean] `true` if succeeded to subscribe
1116
def subscribe(sns_subscription)
@@ -38,7 +43,11 @@ def unsubscribe(sns_subscription)
3843
private
3944

4045
def sqs_client
41-
Barbeque::SNSSubscriptionService.sqs_client
46+
self.class.sqs_client
47+
end
48+
49+
def sns_client(region)
50+
self.class.sns_client(region)
4251
end
4352

4453
# @param [Barbeque::SNSSubscription] sns_subscription
@@ -90,8 +99,7 @@ def subscribe_topic!(sns_subscription)
9099
)
91100
queue_arn = sqs_attrs.attributes['QueueArn']
92101

93-
sns_client = Aws::SNS::Client.new(region: sns_subscription.region)
94-
sns_client.subscribe(
102+
sns_client(sns_subscription.region).subscribe(
95103
topic_arn: sns_subscription.topic_arn,
96104
protocol: 'sqs',
97105
endpoint: queue_arn
@@ -106,15 +114,13 @@ def unsubscribe_topic!(sns_subscription)
106114
)
107115
queue_arn = sqs_attrs.attributes['QueueArn']
108116

109-
sns_client = Aws::SNS::Client.new(region: sns_subscription.region)
110-
111-
subscriptions = sns_client.list_subscriptions_by_topic(
117+
subscriptions = sns_client(sns_subscription.region).list_subscriptions_by_topic(
112118
topic_arn: sns_subscription.topic_arn,
113119
)
114120
subscription_arn = subscriptions.subscriptions.find {|subscription| subscription.endpoint == queue_arn }.try!(:subscription_arn)
115121

116122
if subscription_arn
117-
sns_client.unsubscribe(
123+
sns_client(sns_subscription.region).unsubscribe(
118124
subscription_arn: subscription_arn,
119125
)
120126
end

spec/controllers/barbeque/job_definitions_controller_spec.rb

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -191,8 +191,8 @@
191191
let(:subscription_arn) { 'arn:aws:sns:ap-northeast-1:012345678912:barbeque-spec:01234567-89ab-cdef-0123-456789abcdef' }
192192

193193
before do
194+
allow(Barbeque::SNSSubscriptionService).to receive(:sns_client).with('ap-northeast-1').and_return(sns_client)
194195
allow(Barbeque::SNSSubscriptionService).to receive(:sqs_client).and_return(sqs_client)
195-
allow(Aws::SNS::Client).to receive(:new).with(region: 'ap-northeast-1').and_return(sns_client)
196196

197197
allow(sqs_client).to receive(:get_queue_attributes).
198198
with(queue_url: sns_subscription.job_queue.queue_url, attribute_names: ['QueueArn']).

spec/controllers/barbeque/sns_subscriptions_controller_spec.rb

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -5,7 +5,7 @@
55

66
before do
77
allow(Barbeque::SNSSubscriptionService).to receive(:sqs_client).and_return(sqs_client)
8-
allow(Aws::SNS::Client).to receive(:new).with(region: 'ap-northeast-1').and_return(sns_client)
8+
allow(Barbeque::SNSSubscriptionService).to receive(:sns_client).with('ap-northeast-1').and_return(sns_client)
99
end
1010

1111
describe '#create' do

0 commit comments

Comments
 (0)