Ticket #1953 (closed enhancement: fixed)

Opened 2 years ago

Last modified 2 years ago

add aggressive caching in the db layer

Reported by: dustin Owned by:
Priority: critical Milestone: 0.8.4
Version: master Keywords: database, performance
Cc:

Description

This should be implemented at master.db.cache and should have a configurable global size limit. It should probably also be able to cache process objects (the results of fromSsdict, fromChdict, etc.)

A few details:

  • lots of tables are write-only, so those can be cached easily and newly-written records should go into the cache too (write-through)
  • dynamic state should be written through a write-coalescing cache
    • scheduler state
    • build request / buildset results

Change History

comment:1 Changed 2 years ago by dustin

comment:2 Changed 2 years ago by dustin

beaker doesn't seem to implement what we need, yet brings a lot of baggage to implement things we don't need (web sessions, pluggable backends, etc.)

Options with compatible licenses:

comment:3 Changed 2 years ago by catlee

It would be nice if you could configure buildbot to use an external memcached or redis cache.

comment:4 Changed 2 years ago by Dustin J. Mitchell

  • Status changed from new to closed
  • Resolution set to fixed

Implement caching

This is conservative in how it caches database dictionaries, but more aggressive with process objects.

  • bug1953: cache Change instances cache BuildRequest? instances cache SourceStamps?; add a fakemaster module to help tests cache db results Add @base.cached for DBConnectorComponents add master.caches, so-far unused AsyncLRUCache changes

Fixes #1953.

Changeset: 9e2408449d0fb9d10807ab03bb0cd4cb38a42800

Note: See TracTickets for help on using tickets.