summaryrefslogtreecommitdiff
path: root/app/services/ci/append_build_trace_service.rb
diff options
context:
space:
mode:
Diffstat (limited to 'app/services/ci/append_build_trace_service.rb')
-rw-r--r--app/services/ci/append_build_trace_service.rb13
1 files changed, 13 insertions, 0 deletions
diff --git a/app/services/ci/append_build_trace_service.rb b/app/services/ci/append_build_trace_service.rb
index 602f8c5030d..8200f9790ee 100644
--- a/app/services/ci/append_build_trace_service.rb
+++ b/app/services/ci/append_build_trace_service.rb
@@ -24,6 +24,12 @@ module Ci
body_start = content_range[0].to_i
body_end = body_start + body_data.bytesize
+ if trace_size_exceeded?(body_end)
+ build.drop(:trace_size_exceeded)
+
+ return Result.new(status: 403)
+ end
+
stream_size = build.trace.append(body_data, body_start)
unless stream_size == body_end
@@ -37,6 +43,8 @@ module Ci
private
+ delegate :project, to: :build
+
def stream_range
params.fetch(:content_range)
end
@@ -61,5 +69,10 @@ module Ci
::Gitlab::ErrorTracking
.log_exception(TraceRangeError.new, extra)
end
+
+ def trace_size_exceeded?(size)
+ Feature.enabled?(:ci_jobs_trace_size_limit, project, default_enabled: :yaml) &&
+ project.actual_limits.exceeded?(:ci_jobs_trace_size_limit, size / 1.megabyte)
+ end
end
end