Use id instead of seen time/created_at to sort hosts (#3482)

* Use id instead of seen time/created_at to sort hosts

* Add test for ordering by id
This commit is contained in:
Tomas Touceda 2021-12-23 15:45:50 -03:00 committed by GitHub
parent 5dc93a8c7a
commit 06a64cdd2c
No known key found for this signature in database
GPG key ID: 4AEE18F83AFDEB23
3 changed files with 9 additions and 1 deletions

View file

@ -0,0 +1 @@
* Improve performance of sorting hosts in certain scenarios.

View file

@ -816,7 +816,7 @@ func (d *Datastore) SearchHosts(ctx context.Context, filter fleet.TeamFilter, qu
args = append(args, in)
sqlb.WriteString(" id NOT IN (?) AND ")
sqlb.WriteString(d.whereFilterHostsByTeams(filter, "h"))
sqlb.WriteString(` ORDER BY COALESCE(hst.seen_time, h.created_at) DESC LIMIT 10`)
sqlb.WriteString(` ORDER BY h.id DESC LIMIT 10`)
sql, args, err := sqlx.In(sqlb.String(), args...)
if err != nil {

View file

@ -1017,6 +1017,13 @@ func testHostsSearch(t *testing.T, ds *Datastore) {
assert.Nil(t, err)
require.Len(t, hosts, 1)
assert.Equal(t, hosts[0].ID, h2.ID)
// sorted by ids desc
filter = fleet.TeamFilter{User: userObs, IncludeObserver: true}
hits, err = ds.SearchHosts(context.Background(), filter, "")
require.NoError(t, err)
assert.Len(t, hits, 3)
assert.Equal(t, []uint{h3.ID, h2.ID, h1.ID}, []uint{hits[0].ID, hits[1].ID, hits[2].ID})
}
func testHostsSearchLimit(t *testing.T, ds *Datastore) {