From 190734a48c1030f2059035775589ee60f26bc7ca Mon Sep 17 00:00:00 2001 From: GitLab Bot Date: Tue, 25 Apr 2023 21:16:20 +0000 Subject: Add latest changes from gitlab-org/gitlab@master --- .../packages/npm/create_package_service.rb | 41 +++++++++++++++++++++- 1 file changed, 40 insertions(+), 1 deletion(-) (limited to 'app/services/packages') 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 -- cgit v1.2.3