[Starlingx-discuss] FW: [starlingx-discuss][python3] four solutions for "Add python3-daemon required by logmgmt"

Saul Wold sgw at linux.intel.com
Tue Apr 28 13:44:35 UTC 2020


+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.
> 



More information about the Starlingx-discuss mailing list