New upstream version 15.9.8+ds1

This commit is contained in:
Pirate Praveen 2023-05-12 17:06:39 +05:30
parent fc1cb7f6a6
commit 56d29916af
11 changed files with 56 additions and 10 deletions

View file

@ -124,6 +124,9 @@ trigger-omnibus-env:
echo "OMNIBUS_GITLAB_RUBY3_BUILD=${OMNIBUS_GITLAB_RUBY3_BUILD:-false}" >> $BUILD_ENV echo "OMNIBUS_GITLAB_RUBY3_BUILD=${OMNIBUS_GITLAB_RUBY3_BUILD:-false}" >> $BUILD_ENV
echo "OMNIBUS_GITLAB_CACHE_EDITION=${OMNIBUS_GITLAB_CACHE_EDITION:-GITLAB}" >> $BUILD_ENV echo "OMNIBUS_GITLAB_CACHE_EDITION=${OMNIBUS_GITLAB_CACHE_EDITION:-GITLAB}" >> $BUILD_ENV
echo "GITLAB_ASSETS_TAG=$(assets_image_tag)" >> $BUILD_ENV echo "GITLAB_ASSETS_TAG=$(assets_image_tag)" >> $BUILD_ENV
echo "EE=$([[ $FOSS_ONLY == '1' ]] && echo 'false' || echo 'true')" >> $BUILD_ENV
target_branch_name="${CI_MERGE_REQUEST_TARGET_BRANCH_NAME:-${CI_COMMIT_REF_NAME}}"
echo "TRIGGER_BRANCH=$([[ "${target_branch_name}" =~ ^[0-9-]+-stable(-ee)?$ ]] && echo ${target_branch_name%-ee} || echo 'master')" >> $BUILD_ENV
echo "Built environment file for omnibus build:" echo "Built environment file for omnibus build:"
cat $BUILD_ENV cat $BUILD_ENV
artifacts: artifacts:
@ -155,9 +158,10 @@ trigger-omnibus:
CACHE_EDITION: $OMNIBUS_GITLAB_CACHE_EDITION CACHE_EDITION: $OMNIBUS_GITLAB_CACHE_EDITION
SKIP_QA_DOCKER: "true" SKIP_QA_DOCKER: "true"
SKIP_QA_TEST: "true" SKIP_QA_TEST: "true"
ee: "true" ee: $EE
trigger: trigger:
project: gitlab-org/build/omnibus-gitlab-mirror project: gitlab-org/build/omnibus-gitlab-mirror
branch: $TRIGGER_BRANCH
strategy: depend strategy: depend
download-knapsack-report: download-knapsack-report:

View file

@ -2,6 +2,10 @@
documentation](doc/development/changelog.md) for instructions on adding your own documentation](doc/development/changelog.md) for instructions on adding your own
entry. entry.
## 15.9.8 (2023-05-10)
No changes.
## 15.9.7 (2023-05-03) ## 15.9.7 (2023-05-03)
### Security (1 change) ### Security (1 change)

View file

@ -1 +1 @@
15.9.7 15.9.8

View file

@ -1 +1 @@
15.9.7 15.9.8

View file

@ -1 +1 @@
15.9.7 15.9.8

View file

@ -1478,6 +1478,7 @@ class MergeRequest < ApplicationRecord
def fetch_ref! def fetch_ref!
target_project.repository.fetch_source_branch!(source_project.repository, source_branch, ref_path) target_project.repository.fetch_source_branch!(source_project.repository, source_branch, ref_path)
expire_ancestor_cache
end end
# Returns the current merge-ref HEAD commit. # Returns the current merge-ref HEAD commit.
@ -2037,6 +2038,10 @@ class MergeRequest < ApplicationRecord
self.draft = draft? self.draft = draft?
end end
def expire_ancestor_cache
project.repository.expire_ancestor_cache(target_branch_sha, diff_head_sha)
end
def missing_report_error(report_type) def missing_report_error(report_type)
{ status: :error, status_reason: "This merge request does not have #{report_type} reports" } { status: :error, status_reason: "This merge request does not have #{report_type} reports" }
end end

View file

@ -996,7 +996,7 @@ class Repository
def ancestor?(ancestor_id, descendant_id) def ancestor?(ancestor_id, descendant_id)
return false if ancestor_id.nil? || descendant_id.nil? return false if ancestor_id.nil? || descendant_id.nil?
cache_key = "ancestor:#{ancestor_id}:#{descendant_id}" cache_key = ancestor_cache_key(ancestor_id, descendant_id)
request_store_cache.fetch(cache_key) do request_store_cache.fetch(cache_key) do
cache.fetch(cache_key) do cache.fetch(cache_key) do
raw_repository.ancestor?(ancestor_id, descendant_id) raw_repository.ancestor?(ancestor_id, descendant_id)
@ -1004,6 +1004,12 @@ class Repository
end end
end end
def expire_ancestor_cache(ancestor_id, descendant_id)
cache_key = ancestor_cache_key(ancestor_id, descendant_id)
request_store_cache.expire(cache_key)
cache.expire(cache_key)
end
def clone_as_mirror(url, http_authorization_header: "", resolved_address: "") def clone_as_mirror(url, http_authorization_header: "", resolved_address: "")
import_repository(url, http_authorization_header: http_authorization_header, mirror: true, resolved_address: resolved_address) import_repository(url, http_authorization_header: http_authorization_header, mirror: true, resolved_address: resolved_address)
end end
@ -1224,6 +1230,10 @@ class Repository
private private
def ancestor_cache_key(ancestor_id, descendant_id)
"ancestor:#{ancestor_id}:#{descendant_id}"
end
# TODO Genericize finder, later split this on finders by Ref or Oid # TODO Genericize finder, later split this on finders by Ref or Oid
# https://gitlab.com/gitlab-org/gitlab/issues/19877 # https://gitlab.com/gitlab-org/gitlab/issues/19877
def find_commit(oid_or_ref) def find_commit(oid_or_ref)

View file

@ -4239,10 +4239,14 @@ RSpec.describe MergeRequest, factory_default: :keep, feature_category: :code_rev
subject { create(:merge_request, source_project: project) } subject { create(:merge_request, source_project: project) }
it 'fetches the ref correctly' do it 'fetches the ref and expires the ancestor cache' do
expect { subject.target_project.repository.delete_refs(subject.ref_path) }.not_to raise_error expect { subject.target_project.repository.delete_refs(subject.ref_path) }.not_to raise_error
expect(project.repository).to receive(:expire_ancestor_cache).with(subject.target_branch_sha, subject.diff_head_sha).and_call_original
expect(subject).to receive(:expire_ancestor_cache).and_call_original
subject.fetch_ref! subject.fetch_ref!
expect(subject.target_project.repository.ref_exists?(subject.ref_path)).to be_truthy expect(subject.target_project.repository.ref_exists?(subject.ref_path)).to be_truthy
end end
end end
@ -4253,7 +4257,8 @@ RSpec.describe MergeRequest, factory_default: :keep, feature_category: :code_rev
# We use build instead of create to test that an IID is allocated # We use build instead of create to test that an IID is allocated
subject { build(:merge_request, source_project: project) } subject { build(:merge_request, source_project: project) }
it 'fetches the ref correctly' do it 'fetches the ref and expires the ancestor cache' do
expect(subject).to receive(:expire_ancestor_cache).and_call_original
expect(subject.iid).to be_nil expect(subject.iid).to be_nil
expect { subject.eager_fetch_ref! }.to change { subject.iid.to_i }.by(1) expect { subject.eager_fetch_ref! }.to change { subject.iid.to_i }.by(1)

View file

@ -3078,6 +3078,18 @@ RSpec.describe Repository, feature_category: :source_code_management do
2.times { repository.ancestor?(commit.id, ancestor.id) } 2.times { repository.ancestor?(commit.id, ancestor.id) }
end end
it 'calls out to Gitaly again after expiration' do
expect(repository.raw_repository).to receive(:ancestor?).once
repository.ancestor?(commit.id, ancestor.id)
repository.expire_ancestor_cache(commit.id, ancestor.id)
expect(repository.raw_repository).to receive(:ancestor?).once
2.times { repository.ancestor?(commit.id, ancestor.id) }
end
it 'returns the value from the request store' do it 'returns the value from the request store' do
repository.__send__(:request_store_cache).write(cache_key, "it's apparent") repository.__send__(:request_store_cache).write(cache_key, "it's apparent")

View file

@ -172,7 +172,12 @@ RSpec.describe DraftNotes::PublishService do
end end
end end
it 'does not requests a lot from Gitaly', :request_store do it 'does not request a lot from Gitaly', :request_store, :clean_gitlab_redis_cache do
merge_request
position
Gitlab::GitalyClient.reset_counts
# NOTE: This should be reduced as we work on reducing Gitaly calls. # NOTE: This should be reduced as we work on reducing Gitaly calls.
# Gitaly requests shouldn't go above this threshold as much as possible # Gitaly requests shouldn't go above this threshold as much as possible
# as it may add more to the Gitaly N+1 issue we are experiencing. # as it may add more to the Gitaly N+1 issue we are experiencing.

View file

@ -34,8 +34,9 @@ RSpec.describe MergeRequests::ReloadDiffsService, :use_clean_rails_memory_store_
context 'cache clearing' do context 'cache clearing' do
it 'clears the cache for older diffs on the merge request' do it 'clears the cache for older diffs on the merge request' do
expect_any_instance_of(Redis).to receive(:del).once.and_call_original expect_next_instance_of(Gitlab::Diff::FileCollection::MergeRequestDiff) do |instance|
expect(Rails.cache).to receive(:delete).once.and_call_original expect(instance).to receive(:clear_cache).and_call_original
end
subject.execute subject.execute
end end