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:
Diffstat (limited to 'lib/gitlab/ci/trace.rb')
-rw-r--r--lib/gitlab/ci/trace.rb39
1 files changed, 24 insertions, 15 deletions
diff --git a/lib/gitlab/ci/trace.rb b/lib/gitlab/ci/trace.rb
index f76aacc2d19..348e5472cb4 100644
--- a/lib/gitlab/ci/trace.rb
+++ b/lib/gitlab/ci/trace.rb
@@ -79,22 +79,13 @@ module Gitlab
job.trace_chunks.any? || current_path.present? || old_trace.present?
end
- def read
- stream = Gitlab::Ci::Trace::Stream.new do
- if trace_artifact
- trace_artifact.open
- elsif job.trace_chunks.any?
- Gitlab::Ci::Trace::ChunkedIO.new(job)
- elsif current_path
- File.open(current_path, "rb")
- elsif old_trace
- StringIO.new(old_trace)
- end
- end
+ def read(should_retry: true, &block)
+ read_stream(&block)
+ rescue Errno::ENOENT
+ raise unless should_retry
- yield stream
- ensure
- stream&.close
+ job.reset
+ read_stream(&block)
end
def write(mode, &blk)
@@ -141,6 +132,24 @@ module Gitlab
private
+ def read_stream
+ stream = Gitlab::Ci::Trace::Stream.new do
+ if trace_artifact
+ trace_artifact.open
+ elsif job.trace_chunks.any?
+ Gitlab::Ci::Trace::ChunkedIO.new(job)
+ elsif current_path
+ File.open(current_path, "rb")
+ elsif old_trace
+ StringIO.new(old_trace)
+ end
+ end
+
+ yield stream
+ ensure
+ stream&.close
+ end
+
def unsafe_write!(mode, &blk)
stream = Gitlab::Ci::Trace::Stream.new do
if trace_artifact