zuora_connect 1.5.313 → 1.5.314

Sign up to get free protection for your applications and to get access to all the features.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA1:
3
- metadata.gz: c7fa631da95562ffbed414ffc8b15c7ca7caf757
4
- data.tar.gz: c7defc8fb255e7719fa74cc64d679a761be9ce29
3
+ metadata.gz: d0cf0420609a3c81b7024dd3903606536b411213
4
+ data.tar.gz: cd2ace3b4722dfd1dcd354555f097462014392f4
5
5
  SHA512:
6
- metadata.gz: 57bba8bae751a23da6bb36a2f2e53837434a3450cebf1ec2900b5b1d0162fc6d4fff30206465718f1dd096fad1ed618cd1f20cd38996922a5c099d256fb79d48
7
- data.tar.gz: 0790067b06387204f4921d044cc72899f80590c138607eed111cbcce74f9c463e1490c3aeaeecdb69fd2119cc868c9fba9b1d6d65d34dd4ec4a2791d6c89cfaf
6
+ metadata.gz: 7b9a0c804973326def2ea1c754866a26dfa579647a363e1cad92d5bc832eb989d74140df5e3ec0a5b9f0eabdef3ce0f4e4445e6ce0c206fe250def9c71bb3e16
7
+ data.tar.gz: 77e84f038f3a121ff7fb2e9a63883a1c2dd26eb838527eaf2df30fac0053773f1828a21670e1c4190a4f54cbe3d80ef7ea720a1d27bf94eec27ef25b47e72d64
@@ -33,7 +33,7 @@ module ZuoraConnect
33
33
  Thread.current[:appinstance] = self
34
34
  end
35
35
 
36
- def new_session(session: self.data_lookup, username: self.access_token, password: self.refresh_token)
36
+ def new_session(session: self.data_lookup, username: self.access_token, password: self.refresh_token, holding_pattern: false)
37
37
  @api_version = "v2"
38
38
  @username = username
39
39
  @password = password
@@ -63,18 +63,22 @@ module ZuoraConnect
63
63
 
64
64
  if session.empty?
65
65
  Rails.logger.info("[#{self.id}] REFRESHING - Session Empty")
66
+ raise ZuoraConnect::Exceptions::HoldingPattern if holding_pattern && !self.mark_for_refresh
66
67
  self.refresh(session)
67
68
 
68
69
  elsif (self.id != session["appInstance"].to_i)
69
70
  Rails.logger.info("[#{self.id}] REFRESHING - AppInstance ID(#{self.id}) does not match session id(#{session["appInstance"].to_i})")
71
+ raise ZuoraConnect::Exceptions::HoldingPattern if holding_pattern && !self.mark_for_refresh
70
72
  self.refresh(session)
71
73
 
72
74
  elsif session["#{self.id}::task_data"].blank?
73
75
  Rails.logger.info("[#{self.id}] REFRESHING - Task Data Blank")
76
+ raise ZuoraConnect::Exceptions::HoldingPattern if holding_pattern && !self.mark_for_refresh
74
77
  self.refresh(session)
75
78
 
76
79
  elsif session["#{self.id}::last_refresh"].blank?
77
80
  Rails.logger.info("[#{self.id}] REFRESHING - No Time on Cookie")
81
+ raise ZuoraConnect::Exceptions::HoldingPattern if holding_pattern && !self.mark_for_refresh
78
82
  self.refresh(session)
79
83
 
80
84
  # If the cache is expired and we can aquire a refresh lock
@@ -83,7 +87,7 @@ module ZuoraConnect
83
87
  self.refresh(session)
84
88
  else
85
89
  if time_expire < 0
86
- Rails.logger.info(["[#{self.id}] REBUILDING - Expired by #{time_expire} seconds", self.marked_for_refresh? ? " cache updating as of #{self.refreshed_at} seconds ago" : nil].compact.join(','))
90
+ Rails.logger.info(["[#{self.id}] REBUILDING - Expired by #{time_expire} seconds", self.marked_for_refresh? ? " cache updating as of #{self.reset_mark_refreshed_at} seconds ago" : nil].compact.join(','))
87
91
  else
88
92
  Rails.logger.info("[#{self.id}] REBUILDING - Expires in #{time_expire} seconds")
89
93
  end
@@ -98,6 +102,13 @@ module ZuoraConnect
98
102
  Time.zone = self.timezone
99
103
  Thread.current[:appinstance] = self
100
104
  return self
105
+ rescue ZuoraConnect::Exceptions::HoldingPattern => ex
106
+ while self.marked_for_refresh?
107
+ Rails.logger.info("[#{self.id}] Holding - Expires in #{self.reset_mark_expires_at}")
108
+ sleep(5)
109
+ end
110
+ self.reload_attributes([:refresh_token, :oauth_expires_at, :access_token])
111
+ retry
101
112
  end
102
113
 
103
114
  def refresh(session = nil)
@@ -110,25 +121,30 @@ module ZuoraConnect
110
121
  Rails.logger.info("[#{self.id}] REFRESH TASK - Connect Task Info Request Time #{response_time.round(2).to_s}")
111
122
  if response.code == 200
112
123
  build_task(JSON.parse(response.body), session)
113
-
114
124
  @last_refresh = Time.now.to_i
115
125
  self.cache_app_instance
126
+ self.reset_mark_for_refresh
116
127
  else
128
+ Rails.logger.fatal("[#{self.id}] REFRESH TASK - Failed Code #{response.code}")
117
129
  raise ZuoraConnect::Exceptions::ConnectCommunicationError.new("Error Communicating with Connect", response.body, response.code)
118
130
  end
119
131
  rescue Net::ReadTimeout, Net::OpenTimeout, Errno::EPIPE, Errno::ECONNRESET, Errno::ECONNREFUSED, SocketError
120
132
  if (refresh_count += 1) < 3
133
+ Rails.logger.info("[#{self.id}] REFRESH TASK - Timeout Retrying(#{refresh_count})")
121
134
  retry
122
135
  else
136
+ Rails.logger.fatal("[#{self.id}] REFRESH TASK - Timeout Failed #{refresh_count}x")
123
137
  raise
124
138
  end
125
139
  rescue ZuoraConnect::Exceptions::ConnectCommunicationError => ex
126
140
  if (refresh_count += 1) < 3
141
+ Rails.logger.info("[#{self.id}] REFRESH TASK - Failed Retrying(#{refresh_count})")
127
142
  if ex.code == 401
128
143
  self.refresh_oauth
129
144
  end
130
145
  retry
131
146
  else
147
+ Rails.logger.fatal("[#{self.id}] REFRESH TASK - Failed #{refresh_count}x")
132
148
  raise
133
149
  end
134
150
  end
@@ -236,15 +252,21 @@ module ZuoraConnect
236
252
  end
237
253
  rescue Net::ReadTimeout, Net::OpenTimeout, Errno::EPIPE, Errno::ECONNRESET, Errno::ECONNREFUSED, SocketError => ex
238
254
  if (refresh_oauth_count += 1) < 3
255
+ Rails.logger.info("[#{self.id}] REFRESH OAUTH - Timeout Retrying(#{refresh_oauth_count})")
239
256
  retry
240
257
  else
258
+ Rails.logger.fatal("[#{self.id}] REFRESH OAUTH - Timeout Failed #{refresh_oauth_count}x")
241
259
  raise
242
260
  end
243
261
  rescue ZuoraConnect::Exceptions::ConnectCommunicationError => ex
262
+ sleep(5)
263
+ self.reload_attributes([:refresh_token, :oauth_expires_at, :access_token]) #Reload only the refresh token for retry
264
+
265
+ #After reload, if nolonger expired return
266
+ return if !self.oauth_expired?
267
+
244
268
  if (refresh_oauth_count += 1) < 3
245
269
  Rails.logger.info("[#{self.id}] REFRESH OAUTH - Failed Retrying(#{refresh_oauth_count})")
246
- sleep(5)
247
- self.reload_attributes([:refresh_token]) #Refload only the refresh token for retry
248
270
  retry
249
271
  else
250
272
  Rails.logger.fatal("[#{self.id}] REFRESH OAUTH - Failed #{refresh_oauth_count}x")
@@ -262,10 +284,14 @@ module ZuoraConnect
262
284
  Redis.current.del("AppInstance:#{self.id}:Refreshing") if defined?(Redis.current)
263
285
  end
264
286
 
265
- def refreshed_at
287
+ def reset_mark_refreshed_at
266
288
  return defined?(Redis.current) ? REFRESH_TIMEOUT.to_i - Redis.current.ttl("AppInstance:#{self.id}:Refreshing") : 0
267
289
  end
268
290
 
291
+ def reset_mark_expires_at
292
+ return defined?(Redis.current) ? Redis.current.ttl("AppInstance:#{self.id}:Refreshing") : 0
293
+ end
294
+
269
295
  def mark_for_refresh
270
296
  return defined?(Redis.current) ? Redis.current.set("AppInstance:#{self.id}:Refreshing", true, {:nx => true, :ex => REFRESH_TIMEOUT.to_i}) : true
271
297
  end
@@ -292,6 +318,7 @@ module ZuoraConnect
292
318
  if defined?(Redis.current)
293
319
  #Task data must be present and the last refresh cannot be old. We dont want to overwite new cache data with old
294
320
  if self.task_data.present? && (self.last_refresh.to_i > INSTANCE_REFRESH_WINDOW.ago.to_i)
321
+ Rails.logger.info("[#{self.id}] Caching AppInstance")
295
322
  Redis.current.setex("AppInstance:#{self.id}", INSTANCE_REDIS_CACHE_PERIOD.to_i, encrypt_data(data: self.save_data))
296
323
  end
297
324
  Redis.current.del("Deleted:#{self.id}")
@@ -1,5 +1,7 @@
1
1
  module ZuoraConnect
2
2
  module Exceptions
3
+
4
+ class HoldingPattern < StandardError; end
3
5
  class Error < StandardError; end
4
6
  class AuthorizationNotPerformed < Error; end
5
7
 
@@ -1,4 +1,4 @@
1
1
  module ZuoraConnect
2
- VERSION = "1.5.313"
2
+ VERSION = "1.5.314"
3
3
  end
4
4
 
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: zuora_connect
3
3
  version: !ruby/object:Gem::Version
4
- version: 1.5.313
4
+ version: 1.5.314
5
5
  platform: ruby
6
6
  authors:
7
7
  - Connect Team
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2018-03-05 00:00:00.000000000 Z
11
+ date: 2018-03-09 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: apartment