Commit 4f398c1b authored by Luke Duncalfe's avatar Luke Duncalfe

Make hashed storage required for Design Management

As hashed storage is the default storage type since v10.0, and we
encourage people to migrate to hashed storage, design management now
has a hard requirement for hashed storage in order for us to handle
moving the design repository when the project repository moves on disk.

https://gitlab.com/gitlab-org/gitlab/issues/13428
parent b633727c
......@@ -33,6 +33,10 @@ to be enabled:
project level, navigate to your project's **Settings > General**, expand **Visibility, project features, permissions**
and enable **Git Large File Storage**.
Design Management requires that projects are using
[hashed storage](../../../administration/repository_storage_types.html#hashed-storage)
(the default storage type since v10.0).
## Limitations
- Files uploaded must have a file extension of either `png`, `jpg`, `jpeg`, `gif`, `bmp`, `tiff` or `ico`.
......
......@@ -630,13 +630,18 @@ module EE
super.presence || build_feature_usage
end
# LFS and hashed repository storage are required for using Design Management.
def design_management_enabled?
# LFS is required for using Design Management
#
# Checking both feature availability on the license, as well as the feature
# flag, because we don't want to enable design_management by default on
# on prem installs yet.
lfs_enabled? &&
# We will allow the hashed storage requirement to be disabled for
# a few releases until we are able to understand the impact of the
# hashed storage requirement for existing design management projects.
# See https://gitlab.com/gitlab-org/gitlab/issues/13428#note_238729038
(hashed_storage?(:repository) || ::Feature.disabled?(:design_management_require_hashed_storage, self, default_enabled: true)) &&
# Check both feature availability on the license, as well as the feature
# flag, because we don't want to enable design_management by default on
# on prem installs yet.
# See https://gitlab.com/gitlab-org/gitlab/issues/13709
feature_available?(:design_management) &&
::Feature.enabled?(:design_management_flag, self, default_enabled: true)
end
......
---
title: Hashed storage is now a requirement for Design Management
merge_request: 19259
author:
type: changed
......@@ -1900,27 +1900,29 @@ describe Project do
end
end
describe "#design_management_enabled?" do
describe '#design_management_enabled?' do
let(:project) { build(:project) }
where(
feature_enabled: [false, true],
license_enabled: [false, true],
lfs_enabled: [false, true]
)
where(:feature_enabled, :license_enabled, :lfs_enabled, :hashed_storage_enabled, :hash_storage_required, :expectation) do
false | false | false | false | false | false
true | false | false | false | false | false
true | true | false | false | false | false
true | true | true | false | false | true
true | true | true | false | true | false
true | true | true | true | false | true
true | true | true | true | true | true
end
with_them do
before do
stub_licensed_features(design_management: license_enabled)
stub_feature_flags(design_management_flag: feature_enabled)
stub_feature_flags(design_management_flag: feature_enabled, design_management_require_hashed_storage: hash_storage_required)
expect(project).to receive(:lfs_enabled?).and_return(lfs_enabled)
allow(project).to receive(:hashed_storage?).with(:repository).and_return(hashed_storage_enabled)
end
# Design management is only available if all dependencies are enabled
let(:expected) { feature_enabled && license_enabled && lfs_enabled }
it "knows if design management is available" do
expect(project.design_management_enabled?).to be(expected)
it do
expect(project.design_management_enabled?).to be(expectation)
end
end
end
......
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