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
next prev 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).