From mboxrd@z Thu Jan 1 00:00:00 1970 From: =?UTF-8?Q?Cl=C3=A9ment?= Lassieur Subject: bug#32234: [PATCH 2/2] database: Serialize all database accesses in a thread. Date: Sun, 26 Aug 2018 16:07:12 +0200 Message-ID: <87lg8tb4rz.fsf@lassieur.org> References: <20180806192736.1747-1-clement@lassieur.org> <20180806192736.1747-2-clement@lassieur.org> <87zhxih2no.fsf@gnu.org> Mime-Version: 1.0 Content-Type: text/plain; charset=utf-8 Content-Transfer-Encoding: quoted-printable Return-path: Received: from eggs.gnu.org ([2001:4830:134:3::10]:58911) by lists.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1ftvi1-0005Md-Lg for bug-guix@gnu.org; Sun, 26 Aug 2018 10:08:06 -0400 Received: from Debian-exim by eggs.gnu.org with spam-scanned (Exim 4.71) (envelope-from ) id 1ftvhy-0004Wp-FN for bug-guix@gnu.org; Sun, 26 Aug 2018 10:08:05 -0400 Received: from debbugs.gnu.org ([208.118.235.43]:56407) by eggs.gnu.org with esmtps (TLS1.0:RSA_AES_128_CBC_SHA1:16) (Exim 4.71) (envelope-from ) id 1ftvhy-0004WY-6o for bug-guix@gnu.org; Sun, 26 Aug 2018 10:08:02 -0400 Received: from Debian-debbugs by debbugs.gnu.org with local (Exim 4.84_2) (envelope-from ) id 1ftvhx-0008Lw-Ua for bug-guix@gnu.org; Sun, 26 Aug 2018 10:08:01 -0400 Sender: "Debbugs-submit" Resent-Message-ID: In-reply-to: <87zhxih2no.fsf@gnu.org> List-Id: Bug reports for GNU Guix List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: bug-guix-bounces+gcggb-bug-guix=m.gmane.org@gnu.org Sender: "bug-Guix" To: Ludovic =?UTF-8?Q?Court=C3=A8s?= Cc: 32234@debbugs.gnu.org Hi Ludovic, Ludovic Court=C3=A8s writes: > Excellent, thanks for working on this! This looks great to me, and I > think the pros outweigh the cons. Did you check on a big database how > well it performs? Yes, I didn't see any difference. When I use Berlin's database, it works well but crashes quickly for another reason (lack of disk space I think, and /tmp being tmpfs). > One comment: > >> -(define* (handle-build-event db event) >> +(define* (handle-build-event event) >> "Handle EVENT, a build event sexp as produced by 'build-event-output-= port', >> -updating DB accordingly." >> +updating the database accordingly." > > [...] > >> +(define %db-channel >> + (make-parameter #f)) >> + >> +(define-syntax-rule (with-db-critical-section db exp ...) >> + "Evaluate EXP... in the critical section corresponding to %DB-CHANNEL. >> +DB is bound to the argument of that critical section: the database >> +connection." >> + (call-with-critical-section (%db-channel) >> + (lambda (db) exp ...))) >> + > > I think I find it nicer to keep the =E2=80=98db=E2=80=99 parameter everyw= here (except > that it=E2=80=99s now a channel instead of an actual database) rather tha= n using > this global variable. > > WDYT? That 'db' parameter made sense before, because there were different database connections: one per fiber. But now that there is only one global channel accessible from everywhere, I can't find any use for a 'db-channel' parameter. Also, using two differents channels for the same database would be a bug, it would break the serialization mechanism. And I don't think using several databases (with one channel per database) would make sense either. WDYT?