diff mbox series

[v6,7/8] prserv: import simplification

Message ID 20240430171512.936371-8-michael.opdenacker@bootlin.com
State New
Headers show
Series prserv: add support for an "upstream" server | expand

Commit Message

Michael Opdenacker April 30, 2024, 5:15 p.m. UTC
From: Michael Opdenacker <michael.opdenacker@bootlin.com>

Simplify the importone() hook:
- to make it independent from the "history" mode which is
  client specific.
- remove the "history" parameter
- we want all values to be imported for binary
  reproducibility purposes.
- using the store_value() function (which warrants
  you don't save the same value twice and doesn't write
  when you're using a read-only server) is enough.

Signed-off-by: Michael Opdenacker <michael.opdenacker@bootlin.com>
Cc: Joshua Watt <JPEWhacker@gmail.com>
Cc: Tim Orling <ticotimo@gmail.com>
Cc: Thomas Petazzoni <thomas.petazzoni@bootlin.com>
---
 lib/prserv/client.py |  4 +--
 lib/prserv/db.py     | 64 +++-----------------------------------------
 lib/prserv/serv.py   |  3 +--
 3 files changed, 6 insertions(+), 65 deletions(-)
diff mbox series

Patch

diff --git a/lib/prserv/client.py b/lib/prserv/client.py
index 565c6f3872..9f5794c433 100644
--- a/lib/prserv/client.py
+++ b/lib/prserv/client.py
@@ -42,9 +42,9 @@  class PRAsyncClient(bb.asyncrpc.AsyncClient):
         if response:
             return response["value"]
 
-    async def importone(self, version, pkgarch, checksum, value, history=False):
+    async def importone(self, version, pkgarch, checksum, value):
         response = await self.invoke(
-            {"import-one": {"version": version, "pkgarch": pkgarch, "checksum": checksum, "value": value, "history": history}}
+            {"import-one": {"version": version, "pkgarch": pkgarch, "checksum": checksum, "value": value}}
         )
         if response:
             return response["value"]
diff --git a/lib/prserv/db.py b/lib/prserv/db.py
index 88ed8e2125..2da493ddf5 100644
--- a/lib/prserv/db.py
+++ b/lib/prserv/db.py
@@ -192,67 +192,9 @@  class PRTable(object):
             self.store_value(version, pkgarch, checksum, value)
         return value
 
-    def _import_hist(self, version, pkgarch, checksum, value):
-        if self.read_only:
-            return None
-
-        val = None
-        with closing(self.conn.cursor()) as cursor:
-            data = cursor.execute("SELECT value FROM %s WHERE version=? AND pkgarch=? AND checksum=?;" % self.table,
-                           (version, pkgarch, checksum))
-            row = data.fetchone()
-            if row is not None:
-                val=row[0]
-            else:
-                #no value found, try to insert
-                try:
-                    cursor.execute("INSERT INTO %s VALUES (?, ?, ?, ?);"  % (self.table),
-                               (version, pkgarch, checksum, value))
-                except sqlite3.IntegrityError as exc:
-                    logger.error(str(exc))
-
-                self.conn.commit()
-
-                data = cursor.execute("SELECT value FROM %s WHERE version=? AND pkgarch=? AND checksum=?;" % self.table,
-                           (version, pkgarch, checksum))
-                row = data.fetchone()
-                if row is not None:
-                    val = row[0]
-        return val
-
-    def _import_no_hist(self, version, pkgarch, checksum, value):
-        if self.read_only:
-            return None
-
-        with closing(self.conn.cursor()) as cursor:
-            try:
-                #try to insert
-                cursor.execute("INSERT INTO %s VALUES (?, ?, ?, ?);"  % (self.table),
-                               (version, pkgarch, checksum, value))
-            except sqlite3.IntegrityError as exc:
-                #already have the record, try to update
-                try:
-                    cursor.execute("UPDATE %s SET value=? WHERE version=? AND pkgarch=? AND checksum=? AND value<?"
-                                  % (self.table),
-                                   (value, version, pkgarch, checksum, value))
-                except sqlite3.IntegrityError as exc:
-                    logger.error(str(exc))
-
-                self.conn.commit()
-
-            data = cursor.execute("SELECT value FROM %s WHERE version=? AND pkgarch=? AND checksum=? AND value>=?;" % self.table,
-                            (version, pkgarch, checksum, value))
-            row=data.fetchone()
-            if row is not None:
-                return row[0]
-            else:
-                return None
-
-    def importone(self, version, pkgarch, checksum, value, history=False):
-        if history:
-            return self._import_hist(version, pkgarch, checksum, value)
-        else:
-            return self._import_no_hist(version, pkgarch, checksum, value)
+    def importone(self, version, pkgarch, checksum, value):
+        self.store_value(version, pkgarch, checksum, value)
+        return value
 
     def export(self, version, pkgarch, checksum, colinfo, history=False):
         metainfo = {}
diff --git a/lib/prserv/serv.py b/lib/prserv/serv.py
index fd673b1851..d3ee43dcb5 100644
--- a/lib/prserv/serv.py
+++ b/lib/prserv/serv.py
@@ -180,9 +180,8 @@  class PRServerClient(bb.asyncrpc.AsyncServerConnection):
             pkgarch = request["pkgarch"]
             checksum = request["checksum"]
             value = request["value"]
-            history = request["history"]
 
-            value = self.server.table.importone(version, pkgarch, checksum, value, history)
+            value = self.server.table.importone(version, pkgarch, checksum, value)
             if value is not None:
                 response = {"value": value}