Welcome to mirror list, hosted at ThFree Co, Russian Federation.

gitlab.com/gitlab-org/gitlab-foss.git - Unnamed repository; edit this file 'description' to name the repository.
summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorGitLab Bot <gitlab-bot@gitlab.com>2023-04-26 00:16:20 +0300
committerGitLab Bot <gitlab-bot@gitlab.com>2023-04-26 00:16:20 +0300
commit190734a48c1030f2059035775589ee60f26bc7ca (patch)
tree59766e0eea48c75f169098bc7142194d8960f209 /app/services/packages
parent1e3f5ab634699e9d50779f05d2ae8dfc8a3ab9b3 (diff)
Add latest changes from gitlab-org/gitlab@master
Diffstat (limited to 'app/services/packages')
-rw-r--r--app/services/packages/npm/create_package_service.rb41
1 files changed, 40 insertions, 1 deletions
diff --git a/app/services/packages/npm/create_package_service.rb b/app/services/packages/npm/create_package_service.rb
index 33a7736dc95..b5a0a22a24e 100644
--- a/app/services/packages/npm/create_package_service.rb
+++ b/app/services/packages/npm/create_package_service.rb
@@ -35,11 +35,21 @@ module Packages
::Packages::CreateDependencyService.new(package, package_dependencies).execute
::Packages::Npm::CreateTagService.new(package, dist_tag).execute
- package.create_npm_metadatum!(package_json: package_json)
+ create_npm_metadatum!(package)
package
end
+ def create_npm_metadatum!(package)
+ package.create_npm_metadatum!(package_json: package_json)
+ rescue ActiveRecord::RecordInvalid => e
+ if package.npm_metadatum && package.npm_metadatum.errors.added?(:package_json, 'structure is too large')
+ Gitlab::ErrorTracking.track_exception(e, field_sizes: field_sizes_for_error_tracking)
+ end
+
+ raise
+ end
+
def current_package_exists?
project.packages
.npm
@@ -125,6 +135,35 @@ module Packages
def lease_timeout
DEFAULT_LEASE_TIMEOUT
end
+
+ def field_sizes
+ strong_memoize(:field_sizes) do
+ package_json.transform_values do |value|
+ value.to_s.size
+ end
+ end
+ end
+
+ def filtered_field_sizes
+ strong_memoize(:filtered_field_sizes) do
+ field_sizes.select do |_, size|
+ size >= ::Packages::Npm::Metadatum::MIN_PACKAGE_JSON_FIELD_SIZE_FOR_ERROR_TRACKING
+ end
+ end
+ end
+
+ def largest_fields
+ strong_memoize(:largest_fields) do
+ field_sizes
+ .sort_by { |a| a[1] }
+ .reverse[0..::Packages::Npm::Metadatum::NUM_FIELDS_FOR_ERROR_TRACKING - 1]
+ .to_h
+ end
+ end
+
+ def field_sizes_for_error_tracking
+ filtered_field_sizes.empty? ? largest_fields : filtered_field_sizes
+ end
end
end
end