unofficial mirror of guix-devel@gnu.org 
 help / color / mirror / code / Atom feed
From: Danny Milosavljevic <dannym@scratchpost.org>
To: Tatiana Sholokhova <tanja201396@gmail.com>
Cc: guix-devel <guix-devel@gnu.org>
Subject: Re: GSoC: Adding a web interface similar to the Hydra web interface
Date: Tue, 12 Jun 2018 18:35:04 +0200	[thread overview]
Message-ID: <20180612183504.2621cefa@scratchpost.org> (raw)
In-Reply-To: <CAMSS15AKvAwbogR_-uWMWyr+miKOREP6dOWVMPTAMdGQuqzmjg@mail.gmail.com>

[-- Attachment #1: Type: text/plain, Size: 3238 bytes --]

Hi Tatiana,

nice work!

I have a few comments:

db-get-builds looks fine and we could merge this change to master.  But you have other changes in the same commit, so we can't directly cherry-pick it.  (not so bad, but somewhat cumbersome now)

I'd suggest to rename "db-get-evaluations-info" to "db-get-evaluations-build-summary".  Please don't use nonsensical names like "succ" or "que" in public interfaces (f.e. #:que ).

Nitpick: You have a few variables with "_" like "eval_cnt".  This is not customary in Scheme.  Also, having funny abbreviations like "cnt" isn't either.  I suggest "evaluation-count".

For db-get-evaluations-count: Please add a short docstring documenting what it's for (i.e. "Return the number of evaluations of the given specification SPEC").

In src/cuirass/http.scm :

I don't think that HTML5 is XML-compatible.  So if not, please use XHTML preamble and content-type (I think that that is even broken on master - but it's not difficult to fix).  It's also easier on web browsers if they can assume well-formedness once their XML parser is done parsing.

respond-static-file: We should not second-guess the VFS layer.  Checking for ".." gives an illusion of security when in fact random things could be mounted and also the VFS could have funny syntax for who knows what on the filesystem.  Let's rather have a static list of permissible names and allow those (whitelist).  That's the intention of the check anyway, right?

Also, in light of an ever-changing backing store (cuirass continusly evaluates things), the way you are doing pagination is not the correct way to do it because the data set will scroll underneath you and you will miss items (or see duplicate items) as an user.  Also, it's slow and the DBMS can't reuse anything because you are cutting it off and offseting it over and over again and the transaction isolation level is too low for the DBMS to be able to do anything about it[1].

See also https://use-the-index-luke.com/blog/2013-07/pagination-done-the-postgresql-way for a much better way.  Basically, remember the last value and use it as a limit in the WHERE condition by this one (also, sorting always).

That means if you have the (sorted) list:

A
B
C
E
G
H

and for some reason only 3 fit the page, print first page:

A
B
C <--- print, and remember this one for the boundary of the next page

Second page is "after C", so "... WHERE ... > 'C'":

E
G
H <--- print; and remember that no next page exists.

Note that this also works if, in the mean time, "D" appeared in the backing store.

Then second page is "after C", so "... WHERE ... > 'C'":

D
E
G <--- print, and remember this one for the boundary of the next page

This would only cause a problem if items vanished, so we should keep this in mind.  And jumps to random pages by page number would be difficult now (but who needs that in this case?  Much better to be able to jump by actual timestamp, which then would be easily possible).

In the case of evaluations, it would be good to sort by timestamp and then by evaluation id - since no matter what this would be a stable sort criteria.
(maybe revision, too)

[1] We should fix the latter eventually, too.

[-- Attachment #2: OpenPGP digital signature --]
[-- Type: application/pgp-signature, Size: 488 bytes --]

  parent reply	other threads:[~2018-06-12 16:35 UTC|newest]

Thread overview: 58+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2018-05-03 15:44 GSoC: Adding a web interface similar to the Hydra web interface Tatiana Sholokhova
2018-05-04  2:01 ` Maxim Cournoyer
2018-05-04 12:55 ` Ludovic Courtès
2018-05-05 10:50   ` Ricardo Wurmus
2018-05-08  7:26   ` Danny Milosavljevic
2018-05-09  9:56     ` Ricardo Wurmus
2018-05-09 17:21   ` Ricardo Wurmus
2018-05-13 18:45     ` Tatiana Sholokhova
2018-05-13 19:30       ` Gábor Boskovits
2018-05-13 19:33       ` Tonton
2018-05-13 19:54       ` Danny Milosavljevic
2018-05-14  3:34       ` Chris Marusich
2018-05-14  4:20       ` Ricardo Wurmus
2018-05-17 22:31         ` Tatiana Sholokhova
2018-05-18 20:35           ` Ricardo Wurmus
2018-05-21 21:52             ` Tatiana Sholokhova
2018-05-22  5:33               ` Ricardo Wurmus
2018-05-23 21:06                 ` Tatiana Sholokhova
2018-05-24  6:03                   ` Ricardo Wurmus
     [not found]                     ` <CAMSS15DThnLO+YEVaBmJ9ozMeu4mO1rHAdXHgZ8K+Csu40pORQ@mail.gmail.com>
2018-05-28 10:39                       ` Ricardo Wurmus
2018-06-02 15:03                         ` Ricardo Wurmus
2018-06-03 15:50                           ` Tatiana Sholokhova
2018-06-03 19:40                             ` Ricardo Wurmus
2018-06-04 22:14                               ` Tatiana Sholokhova
2018-06-05 20:40                                 ` Ricardo Wurmus
2018-06-06 18:02                                 ` Danny Milosavljevic
2018-06-10 14:36                                   ` Tatiana Sholokhova
2018-06-11 10:19                                     ` Ricardo Wurmus
2018-06-11 11:23                                       ` Ludovic Courtès
2018-06-12 16:35                                     ` Danny Milosavljevic [this message]
2018-06-12 21:52                                       ` Ricardo Wurmus
2018-06-12 22:43                                         ` Tatiana Sholokhova
2018-06-13  6:39                                           ` Gábor Boskovits
2018-06-13  8:27                                           ` Danny Milosavljevic
2018-06-13 13:58                                           ` Joshua Branson
2018-06-13 14:22                                             ` Gábor Boskovits
2018-06-13 15:07                                               ` Joshua Branson
2018-06-25 10:46                                           ` Gábor Boskovits
2018-06-25 12:12                                             ` Tatiana Sholokhova
2018-06-27 19:56                                               ` Ludovic Courtès
2018-07-04 20:54                                                 ` Tatiana Sholokhova
2018-07-04 21:47                                                   ` Jelle Licht
2018-07-05  8:27                                                   ` Danny Milosavljevic
2018-07-06  9:58                                                     ` Gábor Boskovits
2018-07-08 19:48                                                       ` Tatiana Sholokhova
2018-07-08 21:09                                                         ` Danny Milosavljevic
2018-07-29 12:01                                                           ` Clément Lassieur
2018-07-29 13:25                                                             ` Gábor Boskovits
2018-07-29 14:41                                                               ` Clément Lassieur
2018-07-08 21:19                                                         ` Gábor Boskovits
2018-07-18 10:37                                                         ` Clément Lassieur
2018-07-19 20:10                                                           ` Tatiana Sholokhova
2018-07-19 21:47                                                             ` Amirouche Boubekki
2018-07-18 10:19                                 ` Clément Lassieur
2018-07-17 19:31                         ` Clément Lassieur
2018-05-29 16:07                     ` Ludovic Courtès
2018-05-29 16:17                       ` Gábor Boskovits
2018-07-18  9:34                       ` Clément Lassieur

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

  List information: https://guix.gnu.org/

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

  git send-email \
    --in-reply-to=20180612183504.2621cefa@scratchpost.org \
    --to=dannym@scratchpost.org \
    --cc=guix-devel@gnu.org \
    --cc=tanja201396@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.
Code repositories for project(s) associated with this public inbox

	https://git.savannah.gnu.org/cgit/guix.git

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