($INBOX_DIR/description missing)
 help / color / mirror / Atom feed
From: michael.opdenacker@bootlin.com
To: bitbake-devel@lists.openembedded.org
Cc: Michael Opdenacker <michael.opdenacker@bootlin.com>,
	Joshua Watt <JPEWhacker@gmail.com>,
	Tim Orling <ticotimo@gmail.com>,
	Thomas Petazzoni <thomas.petazzoni@bootlin.com>
Subject: [PATCH v7 7/8] prserv: import simplification
Date: Sat, 11 May 2024 16:31:34 +0530	[thread overview]
Message-ID: <20240511110135.1887578-8-michael.opdenacker@bootlin.com> (raw)
In-Reply-To: <20240511110135.1887578-1-michael.opdenacker@bootlin.com>

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 --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 3992056f88..e175886308 100644
--- a/lib/prserv/serv.py
+++ b/lib/prserv/serv.py
@@ -179,9 +179,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}
 
-- 
2.34.1



  parent reply	other threads:[~2024-05-11 11:03 UTC|newest]

Thread overview: 9+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2024-05-11 11:01 [PATCH v7 0/8] prserv: add support for an "upstream" server michael.opdenacker
2024-05-11 11:01 ` [PATCH v7 1/8] prserv: declare "max_package_pr" client hook michael.opdenacker
2024-05-11 11:01 ` [PATCH v7 2/8] prserv: move code from __init__ to bitbake-prserv michael.opdenacker
2024-05-11 11:01 ` [PATCH v7 3/8] prserv: add "upstream" server support michael.opdenacker
2024-05-11 11:01 ` [PATCH v7 4/8] prserv: enable database sharing michael.opdenacker
2024-05-11 11:01 ` [PATCH v7 5/8] prserv: avoid possible race condition in database code michael.opdenacker
2024-05-11 11:01 ` [PATCH v7 6/8] prserv: store_value() improvements michael.opdenacker
2024-05-11 11:01 ` michael.opdenacker [this message]
2024-05-11 11:01 ` [PATCH v7 8/8] prserv: add bitbake selftests michael.opdenacker

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=20240511110135.1887578-8-michael.opdenacker@bootlin.com \
    --to=michael.opdenacker@bootlin.com \
    --cc=JPEWhacker@gmail.com \
    --cc=bitbake-devel@lists.openembedded.org \
    --cc=thomas.petazzoni@bootlin.com \
    --cc=ticotimo@gmail.com \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for read-only IMAP folder(s) and NNTP newsgroup(s).