Skip to content

Instrument Enterprise Users adoption

Bogdan Denkovych requested to merge Instrument-Enterprise-Users-Adoption into master

What does this MR do and why?

Related to #383140 (closed)

DB Migrations

bin/rails db:migrate
bogdanvlviv@lenovo:~/gitlab-development-kit/gitlab$ bin/rails db:migrate
main: == 20230228212427 AddIndexUserDetailsOnUserIdForEnterpriseUsersWithoutDate: migrating
main: -- transaction_open?()
main:    -> 0.0000s
main: -- view_exists?(:postgres_partitions)
main:    -> 0.0330s
main: -- index_exists?(:user_details, :user_id, {:where=>"provisioned_by_group_id IS NOT NULL AND provisioned_by_group_at IS NULL", :name=>"index_user_details_on_user_id_for_enterprise_users_without_date", :algorithm=>:concurrently})
main:    -> 0.0072s
main: -- execute("SET statement_timeout TO 0")
main:    -> 0.0003s
main: -- add_index(:user_details, :user_id, {:where=>"provisioned_by_group_id IS NOT NULL AND provisioned_by_group_at IS NULL", :name=>"index_user_details_on_user_id_for_enterprise_users_without_date", :algorithm=>:concurrently})
main:    -> 0.0115s
main: -- execute("RESET statement_timeout")
main:    -> 0.0009s
main: == 20230228212427 AddIndexUserDetailsOnUserIdForEnterpriseUsersWithoutDate: migrated (0.0717s)

main: == 20230228212905 AddIndexUserDetailsOnUserIdForEnterpriseUsersWithDate: migrating
main: -- transaction_open?()
main:    -> 0.0000s
main: -- view_exists?(:postgres_partitions)
main:    -> 0.0012s
main: -- index_exists?(:user_details, :user_id, {:where=>"provisioned_by_group_id IS NOT NULL AND provisioned_by_group_at IS NOT NULL", :name=>"index_user_details_on_user_id_for_enterprise_users_with_date", :algorithm=>:concurrently})
main:    -> 0.0035s
main: -- add_index(:user_details, :user_id, {:where=>"provisioned_by_group_id IS NOT NULL AND provisioned_by_group_at IS NOT NULL", :name=>"index_user_details_on_user_id_for_enterprise_users_with_date", :algorithm=>:concurrently})
main:    -> 0.0011s
main: == 20230228212905 AddIndexUserDetailsOnUserIdForEnterpriseUsersWithDate: migrated (0.0173s)

ci: == 20230228212427 AddIndexUserDetailsOnUserIdForEnterpriseUsersWithoutDate: migrating
ci: -- transaction_open?()
ci:    -> 0.0000s
ci: -- view_exists?(:postgres_partitions)
ci:    -> 0.0012s
ci: -- index_exists?(:user_details, :user_id, {:where=>"provisioned_by_group_id IS NOT NULL AND provisioned_by_group_at IS NULL", :name=>"index_user_details_on_user_id_for_enterprise_users_without_date", :algorithm=>:concurrently})
ci:    -> 0.0069s
ci: -- execute("SET statement_timeout TO 0")
ci:    -> 0.0005s
ci: -- add_index(:user_details, :user_id, {:where=>"provisioned_by_group_id IS NOT NULL AND provisioned_by_group_at IS NULL", :name=>"index_user_details_on_user_id_for_enterprise_users_without_date", :algorithm=>:concurrently})
ci:    -> 0.0034s
ci: -- execute("RESET statement_timeout")
ci:    -> 0.0007s
ci: == 20230228212427 AddIndexUserDetailsOnUserIdForEnterpriseUsersWithoutDate: migrated (0.0311s)

ci: == 20230228212905 AddIndexUserDetailsOnUserIdForEnterpriseUsersWithDate: migrating
ci: -- transaction_open?()
ci:    -> 0.0000s
ci: -- view_exists?(:postgres_partitions)
ci:    -> 0.0012s
ci: -- index_exists?(:user_details, :user_id, {:where=>"provisioned_by_group_id IS NOT NULL AND provisioned_by_group_at IS NOT NULL", :name=>"index_user_details_on_user_id_for_enterprise_users_with_date", :algorithm=>:concurrently})
ci:    -> 0.0036s
ci: -- add_index(:user_details, :user_id, {:where=>"provisioned_by_group_id IS NOT NULL AND provisioned_by_group_at IS NOT NULL", :name=>"index_user_details_on_user_id_for_enterprise_users_with_date", :algorithm=>:concurrently})
ci:    -> 0.0012s
ci: == 20230228212905 AddIndexUserDetailsOnUserIdForEnterpriseUsersWithDate: migrated (0.0216s)
Rolback
bogdanvlviv@lenovo:~/gitlab-development-kit/gitlab$ bin/rails db:rollback
rails aborted!
You\'re using a multiple database application. To use `db:rollback` you must run the namespaced task with a VERSION. Available tasks are db:rollback:main and db:rollback:ci.

Tasks: TOP => db:rollback
(See full trace by running task with --trace)
bogdanvlviv@lenovo:~/gitlab-development-kit/gitlab$ bin/rails db:rollback:ci
ci: == 20230228212905 AddIndexUserDetailsOnUserIdForEnterpriseUsersWithDate: reverting
ci: -- transaction_open?()
ci:    -> 0.0000s
ci: -- view_exists?(:postgres_partitions)
ci:    -> 0.0291s
ci: -- indexes(:user_details)
ci:    -> 0.0052s
ci: -- execute("SET statement_timeout TO 0")
ci:    -> 0.0004s
ci: -- remove_index(:user_details, {:algorithm=>:concurrently, :name=>"index_user_details_on_user_id_for_enterprise_users_with_date"})
ci:    -> 0.0017s
ci: -- execute("RESET statement_timeout")
ci:    -> 0.0006s
ci: == 20230228212905 AddIndexUserDetailsOnUserIdForEnterpriseUsersWithDate: reverted (0.0596s)

bogdanvlviv@lenovo:~/gitlab-development-kit/gitlab$ bin/rails db:rollback:main
main: == 20230228212905 AddIndexUserDetailsOnUserIdForEnterpriseUsersWithDate: reverting
main: -- transaction_open?()
main:    -> 0.0000s
main: -- view_exists?(:postgres_partitions)
main:    -> 0.0504s
main: -- indexes(:user_details)
main:    -> 0.0101s
main: -- execute("SET statement_timeout TO 0")
main:    -> 0.0007s
main: -- remove_index(:user_details, {:algorithm=>:concurrently, :name=>"index_user_details_on_user_id_for_enterprise_users_with_date"})
main:    -> 0.0112s
main: -- execute("RESET statement_timeout")
main:    -> 0.0012s
main: == 20230228212905 AddIndexUserDetailsOnUserIdForEnterpriseUsersWithDate: reverted (0.1012s)

bogdanvlviv@lenovo:~/gitlab-development-kit/gitlab$ bin/rails db:rollback:ci
ci: == 20230228212427 AddIndexUserDetailsOnUserIdForEnterpriseUsersWithoutDate: reverting
ci: -- transaction_open?()
ci:    -> 0.0000s
ci: -- view_exists?(:postgres_partitions)
ci:    -> 0.0371s
ci: -- indexes(:user_details)
ci:    -> 0.0084s
ci: -- execute("SET statement_timeout TO 0")
ci:    -> 0.0006s
ci: -- remove_index(:user_details, {:algorithm=>:concurrently, :name=>"index_user_details_on_user_id_for_enterprise_users_without_date"})
ci:    -> 0.0024s
ci: -- execute("RESET statement_timeout")
ci:    -> 0.0007s
ci: == 20230228212427 AddIndexUserDetailsOnUserIdForEnterpriseUsersWithoutDate: reverted (0.0785s)

bogdanvlviv@lenovo:~/gitlab-development-kit/gitlab$ bin/rails db:rollback:main
main: == 20230228212427 AddIndexUserDetailsOnUserIdForEnterpriseUsersWithoutDate: reverting
main: -- transaction_open?()
main:    -> 0.0000s
main: -- view_exists?(:postgres_partitions)
main:    -> 0.1065s
main: -- indexes(:user_details)
main:    -> 0.0170s
main: -- execute("SET statement_timeout TO 0")
main:    -> 0.0016s
main: -- remove_index(:user_details, {:algorithm=>:concurrently, :name=>"index_user_details_on_user_id_for_enterprise_users_without_date"})
main:    -> 0.0050s
main: -- execute("RESET statement_timeout")
main:    -> 0.0017s
main: == 20230228212427 AddIndexUserDetailsOnUserIdForEnterpriseUsersWithoutDate: reverted (0.1820s)

DB Query Plans

CREATE INDEX index_user_details_on_user_id_for_enterprise_users_with_date ON user_details USING btree (user_id) WHERE ((provisioned_by_group_id IS NOT NULL) AND (provisioned_by_group_at IS NOT NULL));
CREATE INDEX index_user_details_on_user_id_for_enterprise_users_without_date ON user_details USING btree (user_id) WHERE ((provisioned_by_group_id IS NOT NULL) AND (provisioned_by_group_at IS NULL));

UserDetail.enterprise_created_via_saml_or_scim

SELECT COUNT("user_details"."user_id") FROM "user_details" WHERE "user_details"."provisioned_by_group_id" IS NOT NULL AND "user_details"."provisioned_by_group_at" IS NULL

https://console.postgres.ai/gitlab/gitlab-production-tunnel-pg12/sessions/15850/commands/54886

UserDetail.enterprise_based_on_domain_verification

SELECT COUNT("user_details"."user_id") FROM "user_details" WHERE "user_details"."provisioned_by_group_id" IS NOT NULL AND "user_details"."provisioned_by_group_at" IS NOT NULL

https://console.postgres.ai/gitlab/gitlab-production-tunnel-pg12/sessions/15850/commands/54888

MR acceptance checklist

This checklist encourages us to confirm any changes have been analyzed to reduce risks in quality, performance, reliability, security, and maintainability.

Edited by Bogdan Denkovych

Merge request reports