infopark_cloud_connector 6.8.0.444.171626367 → 6.8.0.480.261594408
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -1,8 +1,17 @@
|
|
1
|
+
module RailsConnector
|
1
2
|
class ContentService
|
2
3
|
DEFAULT_PROTOCOL = 'https'.freeze
|
3
4
|
SOCKET_ERRORS = [EOFError, IOError, Errno::ECONNABORTED, Errno::ECONNRESET,
|
4
5
|
Errno::EPIPE, Errno::EINVAL].freeze
|
5
6
|
|
7
|
+
class RateLimitExceeded < StandardError
|
8
|
+
def initialize(retry_after)
|
9
|
+
@retry_after = retry_after
|
10
|
+
end
|
11
|
+
|
12
|
+
attr_reader :retry_after
|
13
|
+
end
|
14
|
+
|
6
15
|
def self.query(path, payload)
|
7
16
|
retry_once_on_socket_error do
|
8
17
|
ConnectionManager.ensure_started(uri)
|
@@ -23,6 +32,9 @@ class ContentService
|
|
23
32
|
ConnectionManager.ensure_finished
|
24
33
|
retried = true
|
25
34
|
retry
|
35
|
+
rescue RateLimitExceeded => e
|
36
|
+
sleep (e.retry_after || 0.8).to_f
|
37
|
+
retry
|
26
38
|
end
|
27
39
|
end
|
28
40
|
|
@@ -36,6 +48,8 @@ class ContentService
|
|
36
48
|
def handle_response(response)
|
37
49
|
if response.code.first == '2'
|
38
50
|
MultiJson.load(response.body)
|
51
|
+
elsif response.code == "429"
|
52
|
+
raise RateLimitExceeded.new(response["Retry-After"])
|
39
53
|
else
|
40
54
|
raise "Server responded with status code #{response.code}"
|
41
55
|
end
|
@@ -113,3 +127,4 @@ class ContentService
|
|
113
127
|
end
|
114
128
|
end
|
115
129
|
end
|
130
|
+
end
|
@@ -2,6 +2,50 @@ require 'rest_client'
|
|
2
2
|
|
3
3
|
module RailsConnector
|
4
4
|
|
5
|
+
class ContentServiceObjQueries
|
6
|
+
def initialize(queries)
|
7
|
+
@queries = queries
|
8
|
+
@open_queries = queries.dup
|
9
|
+
@results = {}
|
10
|
+
end
|
11
|
+
|
12
|
+
def open_queries
|
13
|
+
@open_queries[0..99]
|
14
|
+
end
|
15
|
+
|
16
|
+
def handle_response(response)
|
17
|
+
objs = {}
|
18
|
+
response["objs"].each do |obj|
|
19
|
+
objs[obj["_id"].first] = obj
|
20
|
+
end
|
21
|
+
|
22
|
+
queries_to_delete = []
|
23
|
+
response["results"].each_with_index do |response, i|
|
24
|
+
query = @open_queries[i]
|
25
|
+
if response["continuation_handle"]
|
26
|
+
query[:continuation_handle] = response["continuation_handle"]
|
27
|
+
else
|
28
|
+
queries_to_delete << i
|
29
|
+
end
|
30
|
+
result = (@results[query.__id__] ||= [])
|
31
|
+
response["refs"].each do |obj_ref|
|
32
|
+
id = obj_ref["id"]
|
33
|
+
# TODO fetch missing ObjData from Service
|
34
|
+
result << (objs[id] or raise "Data for Obj with id #{id} missing!")
|
35
|
+
end
|
36
|
+
end
|
37
|
+
queries_to_delete.reverse_each {|i| @open_queries.delete_at(i) }
|
38
|
+
end
|
39
|
+
|
40
|
+
def results
|
41
|
+
@queries.map {|query| @results[query.__id__] || [] }
|
42
|
+
end
|
43
|
+
|
44
|
+
def finished?
|
45
|
+
open_queries.empty?
|
46
|
+
end
|
47
|
+
end
|
48
|
+
|
5
49
|
# connects the cloud connector to the connector service
|
6
50
|
class ServiceCmsBackend < CmsBackend
|
7
51
|
CACHE_PREFIX = 'v1'
|
@@ -97,28 +141,16 @@ module RailsConnector
|
|
97
141
|
"cms_load.rails_connector", :name => "Obj Load", :index => index, :keys => keys
|
98
142
|
) do
|
99
143
|
@query_counter += 1
|
100
|
-
|
101
|
-
|
102
|
-
|
103
|
-
|
104
|
-
|
105
|
-
|
106
|
-
|
107
|
-
|
108
|
-
|
109
|
-
objs = {}
|
110
|
-
raw_data["objs"].each do |obj|
|
111
|
-
objs[obj["_id"].first] = obj
|
112
|
-
end
|
113
|
-
|
114
|
-
raw_data["results"].map do |query|
|
115
|
-
query["refs"].map do |obj_ref|
|
116
|
-
id = obj_ref["id"]
|
117
|
-
|
118
|
-
# TODO fetch missing ObjData from Service
|
119
|
-
objs[id] or raise "Data for Obj with id #{id} missing!"
|
120
|
-
end
|
144
|
+
queries = ContentServiceObjQueries.new(keys.map {|key| {:type => index, :param => key} })
|
145
|
+
until queries.finished?
|
146
|
+
queries.handle_response(ContentService.query(
|
147
|
+
"objs/query",
|
148
|
+
:queries => queries.open_queries,
|
149
|
+
:workspace_id => workspace_data.id,
|
150
|
+
:revision_id => workspace_data.revision_id
|
151
|
+
))
|
121
152
|
end
|
153
|
+
queries.results
|
122
154
|
end
|
123
155
|
end
|
124
156
|
|
metadata
CHANGED
@@ -1,15 +1,15 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: infopark_cloud_connector
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
hash:
|
4
|
+
hash: 523189551
|
5
5
|
prerelease:
|
6
6
|
segments:
|
7
7
|
- 6
|
8
8
|
- 8
|
9
9
|
- 0
|
10
|
-
-
|
11
|
-
-
|
12
|
-
version: 6.8.0.
|
10
|
+
- 480
|
11
|
+
- 261594408
|
12
|
+
version: 6.8.0.480.261594408
|
13
13
|
platform: ruby
|
14
14
|
authors:
|
15
15
|
- Infopark AG
|
@@ -17,7 +17,7 @@ autorequire:
|
|
17
17
|
bindir: bin
|
18
18
|
cert_chain: []
|
19
19
|
|
20
|
-
date: 2012-12-
|
20
|
+
date: 2012-12-12 00:00:00 +01:00
|
21
21
|
default_executable:
|
22
22
|
dependencies:
|
23
23
|
- !ruby/object:Gem::Dependency
|
@@ -57,14 +57,14 @@ dependencies:
|
|
57
57
|
requirements:
|
58
58
|
- - "="
|
59
59
|
- !ruby/object:Gem::Version
|
60
|
-
hash:
|
60
|
+
hash: 523189551
|
61
61
|
segments:
|
62
62
|
- 6
|
63
63
|
- 8
|
64
64
|
- 0
|
65
|
-
-
|
66
|
-
-
|
67
|
-
version: 6.8.0.
|
65
|
+
- 480
|
66
|
+
- 261594408
|
67
|
+
version: 6.8.0.480.261594408
|
68
68
|
version_requirements: *id003
|
69
69
|
name: kvom
|
70
70
|
prerelease: false
|