Welcome to mirror list, hosted at ThFree Co, Russian Federation.

gitlab.com/gitlab-org/gitlab-foss.git - Unnamed repository; edit this file 'description' to name the repository.
summaryrefslogtreecommitdiff
path: root/app
diff options
context:
space:
mode:
authorDylan Griffith <dyl.griffith@gmail.com>2018-02-23 01:08:12 +0300
committerDylan Griffith <dyl.griffith@gmail.com>2018-02-23 01:10:14 +0300
commit3b320d675fe058311d921e26cd89b2e703310b21 (patch)
treec8135b9041f238bc2d435fea26cf3c3dd6940cd8 /app
parent17e85dacdd73b51a173d1f4c5efea5e20ee8c55b (diff)
Simplify retrying for ClusterWaitForIngressIpAddressWorker and style changes
(#42643)
Diffstat (limited to 'app')
-rw-r--r--app/controllers/projects/clusters_controller.rb6
-rw-r--r--app/models/clusters/applications/ingress.rb6
-rw-r--r--app/models/clusters/concerns/application_core.rb2
-rw-r--r--app/services/clusters/applications/check_ingress_ip_address_service.rb27
-rw-r--r--app/workers/cluster_wait_for_ingress_ip_address_worker.rb16
5 files changed, 20 insertions, 37 deletions
diff --git a/app/controllers/projects/clusters_controller.rb b/app/controllers/projects/clusters_controller.rb
index c351caeeb7b..aeaba3a0acf 100644
--- a/app/controllers/projects/clusters_controller.rb
+++ b/app/controllers/projects/clusters_controller.rb
@@ -4,7 +4,7 @@ class Projects::ClustersController < Projects::ApplicationController
before_action :authorize_create_cluster!, only: [:new]
before_action :authorize_update_cluster!, only: [:update]
before_action :authorize_admin_cluster!, only: [:destroy]
- before_action :sync_application_details, only: [:status]
+ before_action :update_applications_status, only: [:status]
STATUS_POLLING_INTERVAL = 10_000
@@ -116,7 +116,7 @@ class Projects::ClustersController < Projects::ApplicationController
access_denied! unless can?(current_user, :admin_cluster, cluster)
end
- def sync_application_details
- @cluster.applications.each(&:sync_details)
+ def update_applications_status
+ @cluster.applications.each(&:schedule_status_update)
end
end
diff --git a/app/models/clusters/applications/ingress.rb b/app/models/clusters/applications/ingress.rb
index e36fe9019c2..57ced0f5c44 100644
--- a/app/models/clusters/applications/ingress.rb
+++ b/app/models/clusters/applications/ingress.rb
@@ -37,12 +37,12 @@ module Clusters
Gitlab::Kubernetes::Helm::InstallCommand.new(name, chart: chart, chart_values_file: chart_values_file)
end
- def sync_details
+ def schedule_status_update
return unless installed?
return if external_ip
- ClusterWaitForIngressIpAddressWorker.perform_in(
- ClusterWaitForIngressIpAddressWorker::INTERVAL, name, id, IP_ADDRESS_FETCH_RETRIES)
+ ClusterWaitForIngressIpAddressWorker.perform_async(
+ name, id, IP_ADDRESS_FETCH_RETRIES)
end
end
end
diff --git a/app/models/clusters/concerns/application_core.rb b/app/models/clusters/concerns/application_core.rb
index 44b0fca3d01..623b836c0ed 100644
--- a/app/models/clusters/concerns/application_core.rb
+++ b/app/models/clusters/concerns/application_core.rb
@@ -24,7 +24,7 @@ module Clusters
self.class.application_name
end
- def sync_details
+ def schedule_status_update
# Override if you need extra data synchronized
# from K8s after installation
end
diff --git a/app/services/clusters/applications/check_ingress_ip_address_service.rb b/app/services/clusters/applications/check_ingress_ip_address_service.rb
index 300b7ed522c..a98e05b25cb 100644
--- a/app/services/clusters/applications/check_ingress_ip_address_service.rb
+++ b/app/services/clusters/applications/check_ingress_ip_address_service.rb
@@ -1,24 +1,17 @@
module Clusters
module Applications
class CheckIngressIpAddressService < BaseHelmService
+ include Gitlab::Utils::StrongMemoize
+
Error = Class.new(StandardError)
LEASE_TIMEOUT = 3.seconds.to_i
def execute
- return true if app.external_ip
- return true unless try_obtain_lease
-
- service = get_service
+ return if app.external_ip
+ return unless try_obtain_lease
- if service.status.loadBalancer.ingress
- resolve_external_ip(service)
- else
- false
- end
-
- rescue KubeException => e
- raise Error, "#{e.class}: #{e.message}"
+ app.update!(external_ip: ingress_ip) if ingress_ip
end
private
@@ -29,12 +22,14 @@ module Clusters
.try_obtain
end
- def resolve_external_ip(service)
- app.update!(external_ip: service.status.loadBalancer.ingress[0].ip)
+ def ingress_ip
+ service.status.loadBalancer.ingress&.first&.ip
end
- def get_service
- kubeclient.get_service('ingress-nginx-ingress-controller', Gitlab::Kubernetes::Helm::NAMESPACE)
+ def service
+ strong_memoize(:ingress_service) do
+ kubeclient.get_service('ingress-nginx-ingress-controller', Gitlab::Kubernetes::Helm::NAMESPACE)
+ end
end
end
end
diff --git a/app/workers/cluster_wait_for_ingress_ip_address_worker.rb b/app/workers/cluster_wait_for_ingress_ip_address_worker.rb
index 0fbb9fb2526..72b3c8b49e0 100644
--- a/app/workers/cluster_wait_for_ingress_ip_address_worker.rb
+++ b/app/workers/cluster_wait_for_ingress_ip_address_worker.rb
@@ -3,23 +3,11 @@ class ClusterWaitForIngressIpAddressWorker
include ClusterQueue
include ClusterApplications
- INTERVAL = 10.seconds
+ INTERVAL = 30.seconds
def perform(app_name, app_id, retries_remaining)
find_application(app_name, app_id) do |app|
- result = Clusters::Applications::CheckIngressIpAddressService.new(app).execute
- retry_if_necessary(app_name, app_id, retries_remaining) unless result
- end
- rescue Clusters::Applications::CheckIngressIpAddressService::Error => e
- retry_if_necessary(app_name, app_id, retries_remaining)
- raise e
- end
-
- private
-
- def retry_if_necessary(app_name, app_id, retries_remaining)
- if retries_remaining > 0
- self.class.perform_in(INTERVAL, app_name, app_id, retries_remaining - 1)
+ Clusters::Applications::CheckIngressIpAddressService.new(app).execute
end
end
end