Add a newline when writing the server state file

Before restarting haproxy, the amphora-agent dumps the state of the
servers in a file, so when haproxy reloads, it can recover the operating
state of its backends' members.
But with haproxy 2.4 (in Centos 9 Stream), it fails with a "corrupted
global server state file" error when reading this file. It seems that
most recent haproxy releases have a more strict validation of the format
of the file and ensure that it is terminated with a newline.

This commit adds a newline to the file (all the responses to haproxy
queries are stripped in the amphora-agent). It fixes the issue on Centos
9 Stream (and turns off a warning on Ubuntu).

Story: 2010442
Task: 46873

Change-Id: I00e327e1d94e46aa13a38120df9865ec34eaa593
This commit is contained in:
Gregory Thiemonge 2022-11-17 17:56:03 +01:00
parent 529f8e2f52
commit e0d217665b
3 changed files with 9 additions and 2 deletions

View File

@ -160,7 +160,7 @@ class HAProxyQuery(object):
result = self._query('show servers state')
# No need for binary mode, the _query converts bytes to ascii.
with open(state_file_path, 'w', encoding='utf-8') as fh:
fh.write(result)
fh.write(result + "\n")
return True
except Exception as e:
# Catch any exception - may be socket issue, or write permission

View File

@ -158,7 +158,7 @@ class QueryTestCase(base.TestCase):
self.q.save_state(filename)
mock_fh.write.assert_called_once_with('DATA')
mock_fh.write.assert_called_once_with('DATA\n')
def test_save_state_error(self):
"""save_state() should swallow exceptions"""

View File

@ -0,0 +1,7 @@
---
fixes:
- |
Fixed a "corrupted global server state file" error in Centos 9 Stream when
reloading the state of the servers after restarting haproxy.
It also fixed the recovering of the operational state of the servers in
haproxy after its restart.