mirror of
https://git.yoctoproject.org/poky
synced 2026-06-01 13:09:50 +00:00
bitbake: bitbake: hashserve: Add support for readonly upstream
Adds support for an upstream server to be specified. The upstream server will be queried for equivalent hashes whenever a miss is found in the local server. If the server returns a match, it is merged into the local database. In order to keep the get stream queries as fast as possible since they are the critical path when bitbake is preparing the run queue, missing tasks provided by the server are not immediately pulled from the upstream server, but instead are put into a queue to be backfilled by a worker task later. (Bitbake rev: e6d6c0b39393e9bdf378c1eba141f815e26b724b) Signed-off-by: Joshua Watt <JPEWhacker@gmail.com> Signed-off-by: Richard Purdie <richard.purdie@linuxfoundation.org>
This commit is contained in:
committed by
Richard Purdie
parent
859f43e176
commit
96b548a79d
@@ -22,6 +22,24 @@ ADDR_TYPE_TCP = 1
|
||||
# is necessary
|
||||
DEFAULT_MAX_CHUNK = 32 * 1024
|
||||
|
||||
TABLE_DEFINITION = (
|
||||
("method", "TEXT NOT NULL"),
|
||||
("outhash", "TEXT NOT NULL"),
|
||||
("taskhash", "TEXT NOT NULL"),
|
||||
("unihash", "TEXT NOT NULL"),
|
||||
("created", "DATETIME"),
|
||||
|
||||
# Optional fields
|
||||
("owner", "TEXT"),
|
||||
("PN", "TEXT"),
|
||||
("PV", "TEXT"),
|
||||
("PR", "TEXT"),
|
||||
("task", "TEXT"),
|
||||
("outhash_siginfo", "TEXT"),
|
||||
)
|
||||
|
||||
TABLE_COLUMNS = tuple(name for name, _ in TABLE_DEFINITION)
|
||||
|
||||
def setup_database(database, sync=True):
|
||||
db = sqlite3.connect(database)
|
||||
db.row_factory = sqlite3.Row
|
||||
@@ -30,23 +48,10 @@ def setup_database(database, sync=True):
|
||||
cursor.execute('''
|
||||
CREATE TABLE IF NOT EXISTS tasks_v2 (
|
||||
id INTEGER PRIMARY KEY AUTOINCREMENT,
|
||||
method TEXT NOT NULL,
|
||||
outhash TEXT NOT NULL,
|
||||
taskhash TEXT NOT NULL,
|
||||
unihash TEXT NOT NULL,
|
||||
created DATETIME,
|
||||
|
||||
-- Optional fields
|
||||
owner TEXT,
|
||||
PN TEXT,
|
||||
PV TEXT,
|
||||
PR TEXT,
|
||||
task TEXT,
|
||||
outhash_siginfo TEXT,
|
||||
|
||||
%s
|
||||
UNIQUE(method, outhash, taskhash)
|
||||
)
|
||||
''')
|
||||
''' % " ".join("%s %s," % (name, typ) for name, typ in TABLE_DEFINITION))
|
||||
cursor.execute('PRAGMA journal_mode = WAL')
|
||||
cursor.execute('PRAGMA synchronous = %s' % ('NORMAL' if sync else 'OFF'))
|
||||
|
||||
@@ -89,10 +94,10 @@ def chunkify(msg, max_chunk):
|
||||
yield "\n"
|
||||
|
||||
|
||||
def create_server(addr, dbname, *, sync=True):
|
||||
def create_server(addr, dbname, *, sync=True, upstream=None):
|
||||
from . import server
|
||||
db = setup_database(dbname, sync=sync)
|
||||
s = server.Server(db)
|
||||
s = server.Server(db, upstream=upstream)
|
||||
|
||||
(typ, a) = parse_address(addr)
|
||||
if typ == ADDR_TYPE_UNIX:
|
||||
|
||||
Reference in New Issue
Block a user