summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorRémy Coutable <remy@rymai.me>2016-06-10 13:08:22 +0000
committerTomasz Maczukin <tomasz@maczukin.pl>2016-06-14 22:20:57 +0200
commit767d3223fc9ce1513274ce6fc3ab7eb3d7c7349c (patch)
treea6ab984976463261148ff9586c3db5a368029ed5
parentb6f28a177ede2fcd0ab746efee770a2c7a6f62ae (diff)
downloadgitlab-ce-767d3223fc9ce1513274ce6fc3ab7eb3d7c7349c.tar.gz
Merge branch 'fix/incremental-trace-update-api' into 'master'
Fix UTF-8 handling in incremental trace update API ## What does this MR do? This MR fixes invalid UTF-8 handling in incremental trace update API (used by GitLab Runner). ## Why was this MR needed? Current version is using `.length` method to determine current trace size where Runner is using the trace size in bytes. Also this byte size is used in headers and file operations to agree the trace part to send. This is a problem when build trace contains any multi-byte UTF-8 characters. This MR is fixing this situation so all parts are using the same size in bytes. ### Runner -> API communication before fix: ``` Checking for builds... received runner=_token_ gitlab-ci-multi-runner 1.3.0~beta.26.gcfd63b9 (cfd63b9) build=25 runner=_token_ Using Docker executor with image debian:jessie ... build=25 runner=_token_ Pulling docker image debian:jessie ... build=25 runner=_token_ 25 Submitting build to coordinator... ok runner=_token_ 25 Appending trace to coordinator... ok RemoteRange=0-158 RemoteState=running ResponseMessage=202 Accepted ResponseStatusCode=202 SentRange=0-158 runner=_token_ 25 Appending trace to coordinator... ok RemoteRange=0-491 RemoteState=running ResponseMessage=202 Accepted ResponseStatusCode=202 SentRange=158-505 runner=_token_ WARNING: 25 Appending trace to coordinator... range missmatch RemoteRange=0-491 RemoteState= ResponseMessage=416 Requested Range Not Satisfiable ResponseStatusCode=416 SentRange=505-584 runner=_token_ WARNING: 25 Resending trace patch due to range missmatch runner=_token_ 25 Appending trace to coordinator... ok RemoteRange=0-556 RemoteState=running ResponseMessage=202 Accepted ResponseStatusCode=202 SentRange=491-584 runner=_token_ WARNING: 25 Appending trace to coordinator... range missmatch RemoteRange=0-556 RemoteState= ResponseMessage=416 Requested Range Not Satisfiable ResponseStatusCode=416 SentRange=584-663 runner=_token_ WARNING: 25 Resending trace patch due to range missmatch runner=_token_ 25 Appending trace to coordinator... ok RemoteRange=0-621 RemoteState=running ResponseMessage=202 Accepted ResponseStatusCode=202 SentRange=556-663 runner=_token_ Build succeeded build=25 runner=_token_ WARNING: 25 Appending trace to coordinator... range missmatch RemoteRange=0-621 RemoteState= ResponseMessage=416 Requested Range Not Satisfiable ResponseStatusCode=416 SentRange=663-797 runner=_token_ WARNING: 25 Resending trace patch due to range missmatch runner=_token_ 25 Appending trace to coordinator... ok RemoteRange=0-741 RemoteState=running ResponseMessage=202 Accepted ResponseStatusCode=202 SentRange=621-797 runner=_token_ 25 Submitting build to coordinator... ok runner=_token_ ``` ### Runner -> API communication after fix: ``` Checking for builds... received runner=_token_ gitlab-ci-multi-runner 1.3.0~beta.26.gcfd63b9 (cfd63b9) build=26 runner=_token_ Using Docker executor with image debian:jessie ... build=26 runner=_token_ Pulling docker image debian:jessie ... build=26 runner=_token_ 26 Submitting build to coordinator... ok runner=_token_ 26 Appending trace to coordinator... ok RemoteRange=0-158 RemoteState=running ResponseMessage=202 Accepted ResponseStatusCode=202 SentRange=0-158 runner=_token_ 26 Appending trace to coordinator... ok RemoteRange=0-505 RemoteState=running ResponseMessage=202 Accepted ResponseStatusCode=202 SentRange=158-505 runner=_token_ 26 Appending trace to coordinator... ok RemoteRange=0-584 RemoteState=running ResponseMessage=202 Accepted ResponseStatusCode=202 SentRange=505-584 runner=_token_ 26 Appending trace to coordinator... ok RemoteRange=0-663 RemoteState=running ResponseMessage=202 Accepted ResponseStatusCode=202 SentRange=584-663 runner=_token_ Build succeeded build=26 runner=_token_ 26 Submitting build to coordinator... ok runner=_token_ ``` See merge request !4541
-rw-r--r--CHANGELOG1
-rw-r--r--app/models/ci/build.rb4
2 files changed, 3 insertions, 2 deletions
diff --git a/CHANGELOG b/CHANGELOG
index 4c751d137e8..134aaffbe0e 100644
--- a/CHANGELOG
+++ b/CHANGELOG
@@ -6,6 +6,7 @@ v 8.8.5
- Disable Webhooks before proceeding with the GitHub import
- Fix importer for GitHub comments on diff
- Adjust the SAML control flow to allow LDAP identities to be added to an existing SAML user
+ - Fix incremental trace upload API when using multi-byte UTF-8 chars in trace
v 8.8.4
- Fix LDAP-based login for users with 2FA enabled. !4493
diff --git a/app/models/ci/build.rb b/app/models/ci/build.rb
index ff7dd44c526..1a3c0bc14cc 100644
--- a/app/models/ci/build.rb
+++ b/app/models/ci/build.rb
@@ -194,7 +194,7 @@ module Ci
def trace_length
if raw_trace
- raw_trace.length
+ raw_trace.bytesize
else
0
end
@@ -216,7 +216,7 @@ module Ci
recreate_trace_dir
File.truncate(path_to_trace, offset) if File.exist?(path_to_trace)
- File.open(path_to_trace, 'a') do |f|
+ File.open(path_to_trace, 'ab') do |f|
f.write(trace_part)
end
end