+StarlingX-Discuss On 4/28/20 12:47 AM, An, Ran1 wrote:
Hi Cores:
There were some concerns on patch https://review.opendev.org/#/c/717211/, and we had a discussion on last Non-Openstack meeting few days ago.
By further investigation, there are 4 solutions below. W*e'd like to prefer option3 , if no other objection , we will implement option3*.
I am not sure I understand how option 1 and option 3 are different both are modifying upstream projects and require the StarlingX community to maintain a patched version (ie technical debt). Is there an option that modifies the logmgmt code directly instead of changing the daemon code? Sau!
*Background:*
Logmgmt uses “daemon.runner. DaemonRunner()” from package python-daemon <http://pypi.python.org/pypi/python-daemon/> to create/recreate/kill a daemon process in which it run log-rotate and control system logs size.
However, python-daemon has a “unbuffered I/O related error” in python3.x [1], which require us do some changes to upgrade logmgmt to python3.
*Solutions:*
Option 1: fix the bug of python-daemon by adding patch when we build the python3-daemon rpm. (implement in patch-717211/ <https://review.opendev.org/#/c/717211/>)
* add patch to fix the bug of python-daemon in python3 * build python3-daemon rpm from python-daemon srpm
Option 2: rewrite the entrance function of logmgmt (start_polling()) following examples provides by PEP 3143 <https://www.python.org/dev/peps/pep-3143/>
* using “daemon.Context()” instead of “daemon.runner.DaemonRunner() in entrance function of logmgmt. * implement a runner class “MyDaemonRunner()” in logmgmt * build python3-daemon rpm from python-daemon srpm
Limitation: the implementation of daemon service required to write is very similar with “daemon.runner”.
Option 3: import python-daemon-3k [2] python3 condition.
* use "python-daemon-3k" instead of "python-daemon" when the env is python3 * add patch to fix the bug of python-daemon in python3 (refer to pull request #1 from takuti/fix-unbuffered-error <https://github.com/jbvsmo/python-daemon/commit/91567c9e68a1e02d3e9a811eaf9ab49961d9d63c>) * build python3-daemon rpm from python-daemon-3k release <https://github.com/jbvsmo/python-daemon/archive/1.5.8.tar.gz>
Option 4: implement a daemon class "MyDaemon" and rewrite the logmgmt codes with "MyDaemon"
* implement a daemon class "MyDaemon" (refer to https://www.workaround.cz/howto-make-code-daemon-python-3) * rewrite the logmgmt codes with "MyDaemon"
*Comparation: *
Option
Pkg provides daemon class
Require build python3-daemon.rpm
maintain offline patch
Stars of github
Changes
Option1
python-daemon <http://pypi.python.org/pypi/python-daemon/>
Yes
yes
916
little
Option2
python-daemon <http://pypi.python.org/pypi/python-daemon/>
Yes
916
Medium
Option3
python-daemon-3K <https://pypi.org/project/python-daemon-3K>
Yes
yes
14
little
Option4
write “MyDaemon” based on basic python libs
No
No
0
huge
[1] https://pagure.io/python-daemon/issue/5; https://pagure.io/python-daemon/issue/8; https://pagure.io/python-daemon/issue/36;
[2] https://pypi.org/project/python-daemon-3K/; we had assessed 4 projects that implement the python daemon following the PEP 3143 and “python-daemon-3k” is the most proper for logmgmt.