New upstream version 15.9.8+ds1
This commit is contained in:
parent
fc1cb7f6a6
commit
56d29916af
11 changed files with 56 additions and 10 deletions
|
@ -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:
|
||||||
|
|
|
@ -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)
|
||||||
|
|
|
@ -1 +1 @@
|
||||||
15.9.7
|
15.9.8
|
|
@ -1 +1 @@
|
||||||
15.9.7
|
15.9.8
|
2
VERSION
2
VERSION
|
@ -1 +1 @@
|
||||||
15.9.7
|
15.9.8
|
|
@ -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
|
||||||
|
|
|
@ -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)
|
||||||
|
|
|
@ -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)
|
||||||
|
|
|
@ -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")
|
||||||
|
|
||||||
|
|
|
@ -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.
|
||||||
|
|
|
@ -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
|
||||||
|
|
Loading…
Reference in a new issue