summaryrefslogtreecommitdiff
path: root/playbooks
diff options
context:
space:
mode:
authorTobias Henkel <tobias.henkel@bmw.de>2017-10-25 14:23:31 +0200
committerTobias Henkel <tobias.henkel@bmw.de>2017-10-27 07:59:32 +0200
commite771b6eeeccade5930ebdc2174e3b4e854f7afde (patch)
treeb4fe5ab097b7f49ab34deefde3ca24b28f5c4199 /playbooks
parent6949c24c5902b383f2f1e74ec63df16133827ee1 (diff)
downloadzuul-e771b6eeeccade5930ebdc2174e3b4e854f7afde.tar.gz
Do late decoding of log stream buffer
The log stream is read in chunked blocks. When having multi byte unicode characters in the log stream it can happen that this character is split into different buffers. This can break the decode step with an exception [1]. This can be fixed by treating the buffer as binary and decoding the final lines. Further we must expect that the data also contains binary data. In order to cope with this further harden the final decoding by adding 'backslashreplace'. This will replace every occurrence of an undecodable character by an appropriate escape sequence. This way we can retain all the information (even binary) without being unable to decode the stream. [1]: Log output Ansible output: b'Exception in thread Thread-10:' Ansible output: b'Traceback (most recent call last):' Ansible output: b' File "/usr/lib/python3.5/threading.py", line 914, in _bootstrap_inner' Ansible output: b' self.run()' Ansible output: b' File "/usr/lib/python3.5/threading.py", line 862, in run' Ansible output: b' self._target(*self._args, **self._kwargs)' Ansible output: b' File "/var/lib/zuul/ansible/zuul/ansible/callback/zuul_stream.py", line 140, in _read_log' Ansible output: b' more = s.recv(4096).decode("utf-8")' Ansible output: b"UnicodeDecodeError: 'utf-8' codec can't decode bytes in position 4094-4095: unexpected end of data" Ansible output: b'' Change-Id: I568ede2a2a4a64fd3a98480cebcbc2e86c54a2cf
Diffstat (limited to 'playbooks')
-rw-r--r--playbooks/zuul-stream/fixtures/test-stream.yaml3
-rw-r--r--playbooks/zuul-stream/functional.yaml5
2 files changed, 8 insertions, 0 deletions
diff --git a/playbooks/zuul-stream/fixtures/test-stream.yaml b/playbooks/zuul-stream/fixtures/test-stream.yaml
index fd28757ec..c4946e845 100644
--- a/playbooks/zuul-stream/fixtures/test-stream.yaml
+++ b/playbooks/zuul-stream/fixtures/test-stream.yaml
@@ -46,3 +46,6 @@
args:
chdir: /itemloop/somewhere/that/does/not/exist
failed_when: false
+
+ - name: Print binary data
+ command: echo -e '\x80abc'
diff --git a/playbooks/zuul-stream/functional.yaml b/playbooks/zuul-stream/functional.yaml
index 6b67b0526..779a10278 100644
--- a/playbooks/zuul-stream/functional.yaml
+++ b/playbooks/zuul-stream/functional.yaml
@@ -58,3 +58,8 @@
shell: |
egrep "^.+\| node1 \| OSError.+\/failure-itemloop\/" job-output.txt
egrep "^.+\| node2 \| OSError.+\/failure-itemloop\/" job-output.txt
+
+ - name: Validate output - binary data
+ shell: |
+ egrep "^.*\| node1 \| \\\\x80abc" job-output.txt
+ egrep "^.*\| node2 \| \\\\x80abc" job-output.txt