From b8a275d3e46a4204505ed5a4b7a9b3a6d49c9b4f Mon Sep 17 00:00:00 2001 From: Shinya Maeda Date: Fri, 5 Jan 2018 00:53:50 +0900 Subject: Use bulk_insert instead of AR create --- ...rnetes_service_to_new_clusters_architectures.rb | 57 +++++++++++++++++----- 1 file changed, 45 insertions(+), 12 deletions(-) diff --git a/db/post_migrate/20171124104327_migrate_kubernetes_service_to_new_clusters_architectures.rb b/db/post_migrate/20171124104327_migrate_kubernetes_service_to_new_clusters_architectures.rb index 32f8ef3ff02..f2455a3d8b0 100644 --- a/db/post_migrate/20171124104327_migrate_kubernetes_service_to_new_clusters_architectures.rb +++ b/db/post_migrate/20171124104327_migrate_kubernetes_service_to_new_clusters_architectures.rb @@ -94,24 +94,57 @@ class MigrateKubernetesServiceToNewClustersArchitectures < ActiveRecord::Migrati def up MigrateKubernetesServiceToNewClustersArchitectures::Service - .unmanaged_kubernetes_service.find_each(batch_size: 1) do |kubernetes_service| - MigrateKubernetesServiceToNewClustersArchitectures::Cluster.create( - enabled: kubernetes_service.active, - user_id: nil, # KubernetesService doesn't have - name: DEFAULT_KUBERNETES_SERVICE_CLUSTER_NAME, - provider_type: MigrateKubernetesServiceToNewClustersArchitectures::Cluster.provider_types[:user], - platform_type: MigrateKubernetesServiceToNewClustersArchitectures::Cluster.platform_types[:kubernetes], - projects: [kubernetes_service.project.becomes(MigrateKubernetesServiceToNewClustersArchitectures::Project)], - environment_scope: find_dedicated_environement_scope(kubernetes_service.project), - platform_kubernetes_attributes: { + .unmanaged_kubernetes_service.each_batch(of: 100) do |kubernetes_services| + + rows_for_clusters = kubernetes_services.map do |kubernetes_service| + { + enabled: kubernetes_service.active, + user_id: nil, # KubernetesService doesn't have + name: DEFAULT_KUBERNETES_SERVICE_CLUSTER_NAME, + provider_type: MigrateKubernetesServiceToNewClustersArchitectures::Cluster.provider_types[:user], + platform_type: MigrateKubernetesServiceToNewClustersArchitectures::Cluster.platform_types[:kubernetes], + environment_scope: find_dedicated_environement_scope(kubernetes_service.project), + created_at: Gitlab::Database.sanitize_timestamp(kubernetes_service.created_at), + updated_at: Gitlab::Database.sanitize_timestamp(kubernetes_service.updated_at) + } + end + + inserted_cluster_ids = Gitlab::Database.bulk_insert('clusters', rows_for_clusters, return_ids: true) + + rows_for_cluster_platforms_kubernetes = kubernetes_services.each_with_index.map do |kubernetes_service, i| + + # Create PlatformsKubernetes instance for generating an encrypted token + platforms_kubernetes = + MigrateKubernetesServiceToNewClustersArchitectures::PlatformsKubernetes + .new(token: kubernetes_service.token) + + { + cluster_id: inserted_cluster_ids[i], api_url: kubernetes_service.api_url, ca_cert: kubernetes_service.ca_pem, namespace: kubernetes_service.namespace, username: nil, # KubernetesService doesn't have encrypted_password: nil, # KubernetesService doesn't have encrypted_password_iv: nil, # KubernetesService doesn't have - token: kubernetes_service.token # encrypted_token and encrypted_token_iv - } ) + encrypted_token: platforms_kubernetes.encrypted_token, # encrypted_token and encrypted_token_iv + encrypted_token_iv: platforms_kubernetes.encrypted_token_iv, # encrypted_token and encrypted_token_iv + created_at: Gitlab::Database.sanitize_timestamp(kubernetes_service.created_at), + updated_at: Gitlab::Database.sanitize_timestamp(kubernetes_service.updated_at) + } + end + + Gitlab::Database.bulk_insert('cluster_platforms_kubernetes', rows_for_cluster_platforms_kubernetes) + + rows_for_cluster_projects = kubernetes_services.each_with_index.map do |kubernetes_service, i| + { + cluster_id: inserted_cluster_ids[i], + project_id: kubernetes_service.project_id, + created_at: Gitlab::Database.sanitize_timestamp(kubernetes_service.created_at), + updated_at: Gitlab::Database.sanitize_timestamp(kubernetes_service.updated_at) + } + end + + Gitlab::Database.bulk_insert('cluster_projects', rows_for_cluster_projects) end MigrateKubernetesServiceToNewClustersArchitectures::Service.kubernetes_service_without_template.update_all(active: false) -- cgit v1.2.1