diff mbox series

hashserv: Fix read-only mode

Message ID 20231002115641.1717054-1-karim.benhoucine@landisgyr.com
State New
Headers show
Series hashserv: Fix read-only mode | expand

Commit Message

Karim Ben Houcine Oct. 2, 2023, 11:56 a.m. UTC
TCP read-only hash equivalence server is not working: the connection is prematurely closed without even notifying the value of the unihash.
Expected behaviour is:
    1. the client sends a ‘report’ message indicating the 'taskhash', 'method', 'outhash' and a proposed value of 'unihash'.
    2.the server sends back the 'taskhash', 'method' and actual value of 'unihash' to use.
The problem is that in read-only mode, the server rejects 'report' messages (connexion is closed).
hashserv.tests.TestHashEquivalenceUnixServer.test_ro_server test modified accordingly

Signed-off-by: Karim Ben Houcine <karim.benhoucine@landisgyr.com>
---
 bitbake/lib/hashserv/server.py | 14 +++++++-------
 bitbake/lib/hashserv/tests.py  |  4 +---
 2 files changed, 8 insertions(+), 10 deletions(-)

Comments

Alexandre Belloni Oct. 2, 2023, 6:46 p.m. UTC | #1
Hello,

This doesn't apply on bitbake master, can you rebase and fix?

On 02/10/2023 13:56:41+0200, Ben Houcine, Karim wrote:
> TCP read-only hash equivalence server is not working: the connection is prematurely closed without even notifying the value of the unihash.
> Expected behaviour is:
>     1. the client sends a ‘report’ message indicating the 'taskhash', 'method', 'outhash' and a proposed value of 'unihash'.
>     2.the server sends back the 'taskhash', 'method' and actual value of 'unihash' to use.
> The problem is that in read-only mode, the server rejects 'report' messages (connexion is closed).
> hashserv.tests.TestHashEquivalenceUnixServer.test_ro_server test modified accordingly
> 
> Signed-off-by: Karim Ben Houcine <karim.benhoucine@landisgyr.com>
> ---
>  bitbake/lib/hashserv/server.py | 14 +++++++-------
>  bitbake/lib/hashserv/tests.py  |  4 +---
>  2 files changed, 8 insertions(+), 10 deletions(-)
> 
> diff --git a/bitbake/lib/hashserv/server.py b/bitbake/lib/hashserv/server.py
> index 56d76f1f81..a12937e25f 100644
> --- a/bitbake/lib/hashserv/server.py
> +++ b/bitbake/lib/hashserv/server.py
> @@ -181,7 +181,7 @@ class ServerClient(bb.asyncrpc.AsyncServerConnection):
>          })
>  
>          if read_only:
> -            self.handlers.update({    
> +            self.handlers.update({
>                  'report': self.handle_readonly_report,
>              })
>          else:
> @@ -469,7 +469,7 @@ class ServerClient(bb.asyncrpc.AsyncServerConnection):
>  
>              for k in ('owner', 'PN', 'PV', 'PR', 'task', 'outhash_siginfo'):
>                  if k in data:
> -                    outhash_data[k] = data[k] 
> +                    outhash_data[k] = data[k]
>  
>              # Check if outhash is known
>              cursor.execute(
> @@ -489,13 +489,13 @@ class ServerClient(bb.asyncrpc.AsyncServerConnection):
>                  }
>              )
>              row = cursor.fetchone()
> -            if row is not None: 
> +            if row is not None:
>                  # outhash is known => corrects unihash
> -                unihash = row['unihash'] 
> +                unihash = row['unihash']
>              else:
>                  # outhash is unknown => nothing to do
> -                unihash = outhash_data['taskhash'] 
> -            
> +                unihash = outhash_data['taskhash']
> +
>  
>              d = {
>                  'taskhash': data['taskhash'],
> @@ -504,7 +504,7 @@ class ServerClient(bb.asyncrpc.AsyncServerConnection):
>              }
>  
>          self.write_message(d)
> -        
> +
>  
>      async def handle_equivreport(self, data):
>          with closing(self.db.cursor()) as cursor:
> diff --git a/bitbake/lib/hashserv/tests.py b/bitbake/lib/hashserv/tests.py
> index 8d997c1ae4..5bf8809214 100644
> --- a/bitbake/lib/hashserv/tests.py
> +++ b/bitbake/lib/hashserv/tests.py
> @@ -312,13 +312,11 @@ class HashEquivalenceCommonTests(object):
>          # Check the hash via the read-only server
>          self.assertClientGetHash(ro_client, taskhash, unihash)
>  
> -        # Karim removed : # Ensure that reporting via the read-only server fails
> -        # Karim added : # Ensure that reporting via the read-only server doesn't modify the database
> +        # Ensure that reporting via the read-only server doesn't modify the database
>          taskhash2 = 'c665584ee6817aa99edfc77a44dd853828279370'
>          outhash2 = '3c979c3db45c569f51ab7626a4651074be3a9d11a84b1db076f5b14f7d39db44'
>          unihash2 = '90e9bc1d1f094c51824adca7f8ea79a048d68824'
>  
> -        # Karim removed : with self.assertRaises(ConnectionError):
>          ro_client.report_unihash(taskhash2, self.METHOD, outhash2, unihash2)
>  
>          # Ensure that the database was not modified
> -- 
> 2.25.1
> 

> 
> -=-=-=-=-=-=-=-=-=-=-=-
> Links: You receive all messages sent to this group.
> View/Reply Online (#15155): https://lists.openembedded.org/g/bitbake-devel/message/15155
> Mute This Topic: https://lists.openembedded.org/mt/101709922/3617179
> Group Owner: bitbake-devel+owner@lists.openembedded.org
> Unsubscribe: https://lists.openembedded.org/g/bitbake-devel/unsub [alexandre.belloni@bootlin.com]
> -=-=-=-=-=-=-=-=-=-=-=-
>
diff mbox series

Patch

diff --git a/bitbake/lib/hashserv/server.py b/bitbake/lib/hashserv/server.py
index 56d76f1f81..a12937e25f 100644
--- a/bitbake/lib/hashserv/server.py
+++ b/bitbake/lib/hashserv/server.py
@@ -181,7 +181,7 @@  class ServerClient(bb.asyncrpc.AsyncServerConnection):
         })
 
         if read_only:
-            self.handlers.update({    
+            self.handlers.update({
                 'report': self.handle_readonly_report,
             })
         else:
@@ -469,7 +469,7 @@  class ServerClient(bb.asyncrpc.AsyncServerConnection):
 
             for k in ('owner', 'PN', 'PV', 'PR', 'task', 'outhash_siginfo'):
                 if k in data:
-                    outhash_data[k] = data[k] 
+                    outhash_data[k] = data[k]
 
             # Check if outhash is known
             cursor.execute(
@@ -489,13 +489,13 @@  class ServerClient(bb.asyncrpc.AsyncServerConnection):
                 }
             )
             row = cursor.fetchone()
-            if row is not None: 
+            if row is not None:
                 # outhash is known => corrects unihash
-                unihash = row['unihash'] 
+                unihash = row['unihash']
             else:
                 # outhash is unknown => nothing to do
-                unihash = outhash_data['taskhash'] 
-            
+                unihash = outhash_data['taskhash']
+
 
             d = {
                 'taskhash': data['taskhash'],
@@ -504,7 +504,7 @@  class ServerClient(bb.asyncrpc.AsyncServerConnection):
             }
 
         self.write_message(d)
-        
+
 
     async def handle_equivreport(self, data):
         with closing(self.db.cursor()) as cursor:
diff --git a/bitbake/lib/hashserv/tests.py b/bitbake/lib/hashserv/tests.py
index 8d997c1ae4..5bf8809214 100644
--- a/bitbake/lib/hashserv/tests.py
+++ b/bitbake/lib/hashserv/tests.py
@@ -312,13 +312,11 @@  class HashEquivalenceCommonTests(object):
         # Check the hash via the read-only server
         self.assertClientGetHash(ro_client, taskhash, unihash)
 
-        # Karim removed : # Ensure that reporting via the read-only server fails
-        # Karim added : # Ensure that reporting via the read-only server doesn't modify the database
+        # Ensure that reporting via the read-only server doesn't modify the database
         taskhash2 = 'c665584ee6817aa99edfc77a44dd853828279370'
         outhash2 = '3c979c3db45c569f51ab7626a4651074be3a9d11a84b1db076f5b14f7d39db44'
         unihash2 = '90e9bc1d1f094c51824adca7f8ea79a048d68824'
 
-        # Karim removed : with self.assertRaises(ConnectionError):
         ro_client.report_unihash(taskhash2, self.METHOD, outhash2, unihash2)
 
         # Ensure that the database was not modified