Skip to content

Commit d70ab2a

Browse files
author
gdgate
authored
Merge pull request #1763 from dangdinh/TMA-1700
BUGFIX: TMA-1700 Failed Provisioning Brick created clients without ETL Reviewed-by: https://github.com/sangtm
2 parents d514f48 + 1c92619 commit d70ab2a

1 file changed

Lines changed: 31 additions & 10 deletions

File tree

lib/gooddata/lcm/actions/provision_clients.rb

Lines changed: 31 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -48,7 +48,8 @@ def call(params)
4848
domain_name = params.organization || params.domain
4949
fail "Either organisation or domain has to be specified in params" unless domain_name
5050
domain = client.domain(domain_name) || fail("Invalid domain name specified - #{domain_name}")
51-
51+
error_message = nil
52+
invalid_client_ids = []
5253
begin
5354
results = params.segments.map do |segment|
5455
segment_object = domain.segments(segment.segment_id, data_product)
@@ -57,33 +58,53 @@ def call(params)
5758
end
5859

5960
unless tmp.empty?
60-
synchronize_projects << {
61+
synchronize_project = {
6162
segment_id: segment.segment_id,
6263
from: segment.development_pid,
6364
to: tmp.map do |entry|
6465
unless entry[:project_uri]
65-
raise "Provisioning project for client id #{entry[:id]} has error: #{entry[:error]}"
66+
error_message = "There was error during provisioning clients: #{entry[:error]}" unless error_message
67+
invalid_client_ids << entry[:id]
68+
next
6669
end
6770
{
6871
pid: entry[:project_uri].split('/').last,
6972
client_id: entry[:id]
7073
}
71-
end
74+
end.compact
7275
}
7376
end
77+
78+
synchronize_projects << synchronize_project unless synchronize_project[:to].empty?
79+
80+
if error_message
81+
params.gdc_logger.debug "#{error_message}. Purge all invalid clients now ..."
82+
deleted_client_ids = []
83+
84+
segment_object.clients.map do |segment_client|
85+
project = segment_client.project
86+
if (project.nil? || project.deleted?)
87+
client_id = segment_client.client_id
88+
if invalid_client_ids.include?(client_id)
89+
segment_client.delete
90+
deleted_client_ids << client_id
91+
end
92+
end
93+
end
94+
95+
params.gdc_logger.debug "Deleted clients: #{deleted_client_ids.join(', ')}"
96+
raise error_message unless error_message['TooManyProjectsCreatedException'] || error_message['Max number registered projects']
97+
break tmp
98+
end
7499

75100
tmp
76101
end
77102
rescue => e
78-
params.gdc_logger.error "Problem occurs when provisioning clients. Purge all invalid clients now ..."
79-
res = LCM2.run_action PurgeClients, params
80-
params.gdc_logger.debug "Purge clients result: #{res}"
81-
deleted_client_ids = res[:results].select { |r| r[:status] == 'purged' }.map { |r| r[:client_id] }
82-
params.gdc_logger.error "Deleted clients: #{deleted_client_ids.join(', ')}"
103+
params.gdc_logger.error "Problem occurs when provisioning clients."
83104
raise e
84105
end
85106

86-
results.flatten!
107+
results.flatten! if results
87108

88109
# Return results
89110
{

0 commit comments

Comments
 (0)