Commit bf5198ac authored by Kamil Trzcinski's avatar Kamil Trzcinski

Do not account public projects

parent d2078be3
...@@ -9,11 +9,7 @@ module Ci ...@@ -9,11 +9,7 @@ module Ci
builds = builds =
if current_runner.shared? if current_runner.shared?
if current_runner.limit_build_minutes? builds_for_shared_runner
builds_for_shared_runners_with_build_minutes_limit
else
builds_for_shared_runners
end
else else
builds_for_specific_runner builds_for_specific_runner
end end
...@@ -44,21 +40,29 @@ module Ci ...@@ -44,21 +40,29 @@ module Ci
joins('LEFT JOIN project_features ON ci_builds.gl_project_id = project_features.project_id'). joins('LEFT JOIN project_features ON ci_builds.gl_project_id = project_features.project_id').
where('project_features.builds_access_level IS NULL or project_features.builds_access_level > 0'). where('project_features.builds_access_level IS NULL or project_features.builds_access_level > 0').
# select projects which have allowed number of shared runner minutes or are public
where("projects.visibility_level_field=? OR (#{builds_check_limit.to_sql})",
Gitlab::VisibilityLevel.PUBLIC)
# Implement fair scheduling
# this returns builds that are ordered by number of running builds # this returns builds that are ordered by number of running builds
# we prefer projects that don't use shared runners at all # we prefer projects that don't use shared runners at all
joins("LEFT JOIN (#{running_builds_for_shared_runners.to_sql}) AS project_builds ON ci_builds.gl_project_id=project_builds.gl_project_id"). joins("LEFT JOIN (#{running_builds_for_shared_runners.to_sql}) AS project_builds ON ci_builds.gl_project_id=project_builds.gl_project_id").
order('COALESCE(project_builds.running_builds, 0) ASC', 'ci_builds.id ASC') order('COALESCE(project_builds.running_builds, 0) ASC', 'ci_builds.id ASC')
end end
def builds_for_shared_runners_with_build_minutes_limit def builds_check_limit
builds_for_shared_runner. Namespace.
# select projects with allowed number of shared runner minutes where("namespaces.project_id = ci_builds.gl_project_id").
joins('LEFT JOIN namespaces ON ci_builds.gl_project_id = namespaces.project_id'). includes(:namespace_metrics).
joins('LEFT JOIN namespace_metrics ON namespaces.id = namespace_metrics.namespace_id'). where('COALESCE(namespaces.shared_runner_minutes_limit, ?, 0) == 0 OR ' \
where('COALESCE(namespaces.shared_runner_minutes_limit, ?, 0) > 0 AND ' \
'COALESCE(namespace_metrics.shared_runner_minutes, 0) < COALESCE(namespaces.shared_runner_minutes_limit, ?, 0)', 'COALESCE(namespace_metrics.shared_runner_minutes, 0) < COALESCE(namespaces.shared_runner_minutes_limit, ?, 0)',
current_application_settings.shared_runners_minutes, application_shared_runners_minutes, application_shared_runners_minutes).
current_application_settings.shared_runners_minutes) select('1')
end
def application_shared_runners_minutes
current_application_settings.shared_runners_minutes
end end
def builds_for_specific_runner def builds_for_specific_runner
......
...@@ -2,11 +2,9 @@ class UpdateBuildMinutesService < BaseService ...@@ -2,11 +2,9 @@ class UpdateBuildMinutesService < BaseService
def execute(build) def execute(build)
return unless build.runner return unless build.runner
return unless build.runner.shared? return unless build.runner.shared?
return unless build.runner.limit_build_minutes?
return unless build.duration return unless build.duration
return unless build.project
project = build.project return if build.project.public?
return unless project
namespace = project.namespace namespace = project.namespace
return unless namespace return unless namespace
......
...@@ -18,13 +18,6 @@ ...@@ -18,13 +18,6 @@
.checkbox .checkbox
= f.check_box :locked = f.check_box :locked
%span.light When a runner is locked, it cannot be assigned to other projects %span.light When a runner is locked, it cannot be assigned to other projects
- if runner.shared?
.form-group
= label :limit_build_minutes, 'Limit build minutes', class: 'control-label'
.col-sm-10
.checkbox
= f.check_box :limit_build_minutes
%span.light When limiting is enabled, only namespaces with build minutes allowance will be picked.
.form-group .form-group
= label_tag :token, class: 'control-label' do = label_tag :token, class: 'control-label' do
Token Token
......
...@@ -9,6 +9,6 @@ class CreateTableNamespaceMetrics < ActiveRecord::Migration ...@@ -9,6 +9,6 @@ class CreateTableNamespaceMetrics < ActiveRecord::Migration
t.integer :shared_runners_minutes, default: 0, null: false t.integer :shared_runners_minutes, default: 0, null: false
end end
add_foreign_key :namespace_metrics, :projects, column: :namespace_id, on_delete: :cascade add_foreign_key :namespace_metrics, :namespaces, on_delete: :cascade
end end
end end
class AddLimitBuildMinutesToRunners < ActiveRecord::Migration
include Gitlab::Database::MigrationHelpers
DOWNTIME = false
def change
add_column :ci_runners, :limit_build_minutes, :boolean
end
end
...@@ -11,7 +11,7 @@ ...@@ -11,7 +11,7 @@
# #
# It's strongly recommended that you check this file into your version control system. # It's strongly recommended that you check this file into your version control system.
ActiveRecord::Schema.define(version: 20161202152035) do ActiveRecord::Schema.define(version: 20161202152039) do
# These are extensions that must be enabled in order to support this database # These are extensions that must be enabled in order to support this database
enable_extension "plpgsql" enable_extension "plpgsql"
...@@ -116,6 +116,7 @@ ActiveRecord::Schema.define(version: 20161202152035) do ...@@ -116,6 +116,7 @@ ActiveRecord::Schema.define(version: 20161202152035) do
t.string "sidekiq_throttling_queues" t.string "sidekiq_throttling_queues"
t.decimal "sidekiq_throttling_factor" t.decimal "sidekiq_throttling_factor"
t.boolean "html_emails_enabled", default: true t.boolean "html_emails_enabled", default: true
t.integer "shared_runners_minutes", default: 0, null: false
end end
create_table "approvals", force: :cascade do |t| create_table "approvals", force: :cascade do |t|
...@@ -818,6 +819,13 @@ ActiveRecord::Schema.define(version: 20161202152035) do ...@@ -818,6 +819,13 @@ ActiveRecord::Schema.define(version: 20161202152035) do
add_index "milestones", ["title"], name: "index_milestones_on_title", using: :btree add_index "milestones", ["title"], name: "index_milestones_on_title", using: :btree
add_index "milestones", ["title"], name: "index_milestones_on_title_trigram", using: :gin, opclasses: {"title"=>"gin_trgm_ops"} add_index "milestones", ["title"], name: "index_milestones_on_title_trigram", using: :gin, opclasses: {"title"=>"gin_trgm_ops"}
create_table "namespace_metrics", force: :cascade do |t|
t.integer "namespace_id", null: false
t.integer "shared_runners_minutes", default: 0, null: false
end
add_index "namespace_metrics", ["namespace_id"], name: "index_namespace_metrics_on_namespace_id", unique: true, using: :btree
create_table "namespaces", force: :cascade do |t| create_table "namespaces", force: :cascade do |t|
t.string "name", null: false t.string "name", null: false
t.string "path", null: false t.string "path", null: false
...@@ -841,6 +849,7 @@ ActiveRecord::Schema.define(version: 20161202152035) do ...@@ -841,6 +849,7 @@ ActiveRecord::Schema.define(version: 20161202152035) do
t.boolean "lfs_enabled" t.boolean "lfs_enabled"
t.integer "repository_size_limit" t.integer "repository_size_limit"
t.integer "parent_id" t.integer "parent_id"
t.integer "shared_runners_minutes_limit"
end end
add_index "namespaces", ["created_at"], name: "index_namespaces_on_created_at", using: :btree add_index "namespaces", ["created_at"], name: "index_namespaces_on_created_at", using: :btree
...@@ -1478,6 +1487,7 @@ ActiveRecord::Schema.define(version: 20161202152035) do ...@@ -1478,6 +1487,7 @@ ActiveRecord::Schema.define(version: 20161202152035) do
add_foreign_key "merge_request_metrics", "merge_requests", on_delete: :cascade add_foreign_key "merge_request_metrics", "merge_requests", on_delete: :cascade
add_foreign_key "merge_requests_closing_issues", "issues", on_delete: :cascade add_foreign_key "merge_requests_closing_issues", "issues", on_delete: :cascade
add_foreign_key "merge_requests_closing_issues", "merge_requests", on_delete: :cascade add_foreign_key "merge_requests_closing_issues", "merge_requests", on_delete: :cascade
add_foreign_key "namespace_metrics", "namespaces", on_delete: :cascade
add_foreign_key "path_locks", "projects" add_foreign_key "path_locks", "projects"
add_foreign_key "path_locks", "users" add_foreign_key "path_locks", "users"
add_foreign_key "personal_access_tokens", "users" add_foreign_key "personal_access_tokens", "users"
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment