[dunfell,1.46,v2] hashserv: specify loop for asyncio in python < 3.6

Message ID 20220121145142.763-1-jatedev@gmail.com
State Accepted, archived
Commit be6ecc160ac4a8d9715257b9b955363cecc081ea
Headers show
Series [dunfell,1.46,v2] hashserv: specify loop for asyncio in python < 3.6 | expand

Commit Message

Jate Sujjavanich Jan. 21, 2022, 2:51 p.m. UTC
[YOCTO #14697]

Detect python version 3.5 restoring loop argument where
it is still required. In 3.6 auto loop detection is available.

Bitbake 1.46 is used in dunfell which lists a minimum python version
of 3.5. Omitting this argument leads to a regression and hang during
"Initialising tasks" at 44%.

Signed-off-by: Jate Sujjavanich <jatedev@gmail.com>
---
 lib/hashserv/server.py | 23 +++++++++++++++++------
 1 file changed, 17 insertions(+), 6 deletions(-)

Comments

Steve Sakoman Jan. 21, 2022, 2:55 p.m. UTC | #1
Hi Jate,

Just want to confirm that the only difference between V1 and V2 is the
addition of the reference to the bug number?

Thanks,

Steve

On Fri, Jan 21, 2022 at 4:52 AM Jate Sujjavanich <jatedev@gmail.com> wrote:
>
> [YOCTO #14697]
>
> Detect python version 3.5 restoring loop argument where
> it is still required. In 3.6 auto loop detection is available.
>
> Bitbake 1.46 is used in dunfell which lists a minimum python version
> of 3.5. Omitting this argument leads to a regression and hang during
> "Initialising tasks" at 44%.
>
> Signed-off-by: Jate Sujjavanich <jatedev@gmail.com>
> ---
>  lib/hashserv/server.py | 23 +++++++++++++++++------
>  1 file changed, 17 insertions(+), 6 deletions(-)
>
> diff --git a/lib/hashserv/server.py b/lib/hashserv/server.py
> index 56f354bd..f38a22ad 100644
> --- a/lib/hashserv/server.py
> +++ b/lib/hashserv/server.py
> @@ -12,6 +12,7 @@ import math
>  import os
>  import signal
>  import socket
> +import sys
>  import time
>  from . import chunkify, DEFAULT_MAX_CHUNK
>
> @@ -419,9 +420,14 @@ class Server(object):
>          self._cleanup_socket = None
>
>      def start_tcp_server(self, host, port):
> -        self.server = self.loop.run_until_complete(
> -            asyncio.start_server(self.handle_client, host, port)
> -        )
> +        if sys.version_info[0] == 3 and sys.version_info[1] < 6:
> +            self.server = self.loop.run_until_complete(
> +                asyncio.start_server(self.handle_client, host, port, loop=self.loop)
> +            )
> +        else:
> +            self.server = self.loop.run_until_complete(
> +                asyncio.start_server(self.handle_client, host, port)
> +            )
>
>          for s in self.server.sockets:
>              logger.info('Listening on %r' % (s.getsockname(),))
> @@ -444,9 +450,14 @@ class Server(object):
>          try:
>              # Work around path length limits in AF_UNIX
>              os.chdir(os.path.dirname(path))
> -            self.server = self.loop.run_until_complete(
> -                asyncio.start_unix_server(self.handle_client, os.path.basename(path))
> -            )
> +            if sys.version_info[0] == 3 and sys.version_info[1] < 6:
> +                self.server = self.loop.run_until_complete(
> +                    asyncio.start_unix_server(self.handle_client, os.path.basename(path), loop=self.loop)
> +                )
> +            else:
> +                self.server = self.loop.run_until_complete(
> +                    asyncio.start_unix_server(self.handle_client, os.path.basename(path))
> +                )
>          finally:
>              os.chdir(cwd)
>
> --
> 2.25.1
>
Jate Sujjavanich Jan. 21, 2022, 4:05 p.m. UTC | #2
- Changed the version check on the minor (< 7 to <6) after testing python
3.6 with bitbake.
- Changed the comment to reflect this
- Added Bugzilla tracker


On Fri, Jan 21, 2022 at 9:55 AM Steve Sakoman <steve@sakoman.com> wrote:

> Hi Jate,
>
> Just want to confirm that the only difference between V1 and V2 is the
> addition of the reference to the bug number?
>
> Thanks,
>
> Steve
>
> On Fri, Jan 21, 2022 at 4:52 AM Jate Sujjavanich <jatedev@gmail.com>
> wrote:
> >
> > [YOCTO #14697]
> >
> > Detect python version 3.5 restoring loop argument where
> > it is still required. In 3.6 auto loop detection is available.
> >
> > Bitbake 1.46 is used in dunfell which lists a minimum python version
> > of 3.5. Omitting this argument leads to a regression and hang during
> > "Initialising tasks" at 44%.
> >
> > Signed-off-by: Jate Sujjavanich <jatedev@gmail.com>
> > ---
> >  lib/hashserv/server.py | 23 +++++++++++++++++------
> >  1 file changed, 17 insertions(+), 6 deletions(-)
> >
> > diff --git a/lib/hashserv/server.py b/lib/hashserv/server.py
> > index 56f354bd..f38a22ad 100644
> > --- a/lib/hashserv/server.py
> > +++ b/lib/hashserv/server.py
> > @@ -12,6 +12,7 @@ import math
> >  import os
> >  import signal
> >  import socket
> > +import sys
> >  import time
> >  from . import chunkify, DEFAULT_MAX_CHUNK
> >
> > @@ -419,9 +420,14 @@ class Server(object):
> >          self._cleanup_socket = None
> >
> >      def start_tcp_server(self, host, port):
> > -        self.server = self.loop.run_until_complete(
> > -            asyncio.start_server(self.handle_client, host, port)
> > -        )
> > +        if sys.version_info[0] == 3 and sys.version_info[1] < 6:
> > +            self.server = self.loop.run_until_complete(
> > +                asyncio.start_server(self.handle_client, host, port,
> loop=self.loop)
> > +            )
> > +        else:
> > +            self.server = self.loop.run_until_complete(
> > +                asyncio.start_server(self.handle_client, host, port)
> > +            )
> >
> >          for s in self.server.sockets:
> >              logger.info('Listening on %r' % (s.getsockname(),))
> > @@ -444,9 +450,14 @@ class Server(object):
> >          try:
> >              # Work around path length limits in AF_UNIX
> >              os.chdir(os.path.dirname(path))
> > -            self.server = self.loop.run_until_complete(
> > -                asyncio.start_unix_server(self.handle_client,
> os.path.basename(path))
> > -            )
> > +            if sys.version_info[0] == 3 and sys.version_info[1] < 6:
> > +                self.server = self.loop.run_until_complete(
> > +                    asyncio.start_unix_server(self.handle_client,
> os.path.basename(path), loop=self.loop)
> > +                )
> > +            else:
> > +                self.server = self.loop.run_until_complete(
> > +                    asyncio.start_unix_server(self.handle_client,
> os.path.basename(path))
> > +                )
> >          finally:
> >              os.chdir(cwd)
> >
> > --
> > 2.25.1
> >
>
Steve Sakoman Jan. 21, 2022, 4:31 p.m. UTC | #3
On Fri, Jan 21, 2022 at 6:05 AM Jate Sujjavanich <jatedev@gmail.com> wrote:
>
> - Changed the version check on the minor (< 7 to <6) after testing python 3.6 with bitbake.
> - Changed the comment to reflect this
> - Added Bugzilla tracker

Thanks!

Steve

> On Fri, Jan 21, 2022 at 9:55 AM Steve Sakoman <steve@sakoman.com> wrote:
>>
>> Hi Jate,
>>
>> Just want to confirm that the only difference between V1 and V2 is the
>> addition of the reference to the bug number?
>>
>> Thanks,
>>
>> Steve
>>
>> On Fri, Jan 21, 2022 at 4:52 AM Jate Sujjavanich <jatedev@gmail.com> wrote:
>> >
>> > [YOCTO #14697]
>> >
>> > Detect python version 3.5 restoring loop argument where
>> > it is still required. In 3.6 auto loop detection is available.
>> >
>> > Bitbake 1.46 is used in dunfell which lists a minimum python version
>> > of 3.5. Omitting this argument leads to a regression and hang during
>> > "Initialising tasks" at 44%.
>> >
>> > Signed-off-by: Jate Sujjavanich <jatedev@gmail.com>
>> > ---
>> >  lib/hashserv/server.py | 23 +++++++++++++++++------
>> >  1 file changed, 17 insertions(+), 6 deletions(-)
>> >
>> > diff --git a/lib/hashserv/server.py b/lib/hashserv/server.py
>> > index 56f354bd..f38a22ad 100644
>> > --- a/lib/hashserv/server.py
>> > +++ b/lib/hashserv/server.py
>> > @@ -12,6 +12,7 @@ import math
>> >  import os
>> >  import signal
>> >  import socket
>> > +import sys
>> >  import time
>> >  from . import chunkify, DEFAULT_MAX_CHUNK
>> >
>> > @@ -419,9 +420,14 @@ class Server(object):
>> >          self._cleanup_socket = None
>> >
>> >      def start_tcp_server(self, host, port):
>> > -        self.server = self.loop.run_until_complete(
>> > -            asyncio.start_server(self.handle_client, host, port)
>> > -        )
>> > +        if sys.version_info[0] == 3 and sys.version_info[1] < 6:
>> > +            self.server = self.loop.run_until_complete(
>> > +                asyncio.start_server(self.handle_client, host, port, loop=self.loop)
>> > +            )
>> > +        else:
>> > +            self.server = self.loop.run_until_complete(
>> > +                asyncio.start_server(self.handle_client, host, port)
>> > +            )
>> >
>> >          for s in self.server.sockets:
>> >              logger.info('Listening on %r' % (s.getsockname(),))
>> > @@ -444,9 +450,14 @@ class Server(object):
>> >          try:
>> >              # Work around path length limits in AF_UNIX
>> >              os.chdir(os.path.dirname(path))
>> > -            self.server = self.loop.run_until_complete(
>> > -                asyncio.start_unix_server(self.handle_client, os.path.basename(path))
>> > -            )
>> > +            if sys.version_info[0] == 3 and sys.version_info[1] < 6:
>> > +                self.server = self.loop.run_until_complete(
>> > +                    asyncio.start_unix_server(self.handle_client, os.path.basename(path), loop=self.loop)
>> > +                )
>> > +            else:
>> > +                self.server = self.loop.run_until_complete(
>> > +                    asyncio.start_unix_server(self.handle_client, os.path.basename(path))
>> > +                )
>> >          finally:
>> >              os.chdir(cwd)
>> >
>> > --
>> > 2.25.1
>> >

Patch

diff --git a/lib/hashserv/server.py b/lib/hashserv/server.py
index 56f354bd..f38a22ad 100644
--- a/lib/hashserv/server.py
+++ b/lib/hashserv/server.py
@@ -12,6 +12,7 @@  import math
 import os
 import signal
 import socket
+import sys
 import time
 from . import chunkify, DEFAULT_MAX_CHUNK
 
@@ -419,9 +420,14 @@  class Server(object):
         self._cleanup_socket = None
 
     def start_tcp_server(self, host, port):
-        self.server = self.loop.run_until_complete(
-            asyncio.start_server(self.handle_client, host, port)
-        )
+        if sys.version_info[0] == 3 and sys.version_info[1] < 6:
+            self.server = self.loop.run_until_complete(
+                asyncio.start_server(self.handle_client, host, port, loop=self.loop)
+            )
+        else:
+            self.server = self.loop.run_until_complete(
+                asyncio.start_server(self.handle_client, host, port)
+            )
 
         for s in self.server.sockets:
             logger.info('Listening on %r' % (s.getsockname(),))
@@ -444,9 +450,14 @@  class Server(object):
         try:
             # Work around path length limits in AF_UNIX
             os.chdir(os.path.dirname(path))
-            self.server = self.loop.run_until_complete(
-                asyncio.start_unix_server(self.handle_client, os.path.basename(path))
-            )
+            if sys.version_info[0] == 3 and sys.version_info[1] < 6:
+                self.server = self.loop.run_until_complete(
+                    asyncio.start_unix_server(self.handle_client, os.path.basename(path), loop=self.loop)
+                )
+            else:
+                self.server = self.loop.run_until_complete(
+                    asyncio.start_unix_server(self.handle_client, os.path.basename(path))
+                )
         finally:
             os.chdir(cwd)