Skip to content
This repository was archived by the owner on Jul 12, 2023. It is now read-only.

Commit 866deed

Browse files
authored
Automatically clear caches on save (#369)
1 parent 737f660 commit 866deed

File tree

12 files changed

+103
-70
lines changed

12 files changed

+103
-70
lines changed

cmd/adminapi/main.go

Lines changed: 11 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -80,16 +80,6 @@ func realMain(ctx context.Context) error {
8080
defer oe.Close()
8181
logger.Infow("observability exporter", "config", oeConfig)
8282

83-
// Setup database
84-
db, err := config.Database.Load(ctx)
85-
if err != nil {
86-
return fmt.Errorf("failed to load database config: %w", err)
87-
}
88-
if err := db.Open(ctx); err != nil {
89-
return fmt.Errorf("failed to connect to database: %w", err)
90-
}
91-
defer db.Close()
92-
9383
// Setup cacher
9484
// TODO(sethvargo): switch to HMAC
9585
cacher, err := cache.CacherFor(ctx, &config.Cache, cache.MultiKeyFunc(
@@ -99,6 +89,16 @@ func realMain(ctx context.Context) error {
9989
}
10090
defer cacher.Close()
10191

92+
// Setup database
93+
db, err := config.Database.Load(ctx)
94+
if err != nil {
95+
return fmt.Errorf("failed to load database config: %w", err)
96+
}
97+
if err := db.OpenWithCacher(ctx, cacher); err != nil {
98+
return fmt.Errorf("failed to connect to database: %w", err)
99+
}
100+
defer db.Close()
101+
102102
// Create the router
103103
r := mux.NewRouter()
104104

@@ -123,7 +123,7 @@ func realMain(ctx context.Context) error {
123123
return fmt.Errorf("failed to create renderer: %w", err)
124124
}
125125

126-
r.Handle("/health", controller.HandleHealthz(ctx, h, &config.Database)).Methods("GET")
126+
r.Handle("/health", controller.HandleHealthz(ctx, &config.Database, h)).Methods("GET")
127127

128128
// Setup API auth
129129
requireAPIKey := middleware.RequireAPIKey(ctx, cacher, db, h, []database.APIUserType{

cmd/apiserver/main.go

Lines changed: 11 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -83,16 +83,6 @@ func realMain(ctx context.Context) error {
8383
defer oe.Close()
8484
logger.Infow("observability exporter", "config", oeConfig)
8585

86-
// Setup database
87-
db, err := config.Database.Load(ctx)
88-
if err != nil {
89-
return fmt.Errorf("failed to load database config: %w", err)
90-
}
91-
if err := db.Open(ctx); err != nil {
92-
return fmt.Errorf("failed to connect to database: %w", err)
93-
}
94-
defer db.Close()
95-
9686
// Setup cacher
9787
// TODO(sethvargo): switch to HMAC
9888
cacher, err := cache.CacherFor(ctx, &config.Cache, cache.MultiKeyFunc(
@@ -102,6 +92,16 @@ func realMain(ctx context.Context) error {
10292
}
10393
defer cacher.Close()
10494

95+
// Setup database
96+
db, err := config.Database.Load(ctx)
97+
if err != nil {
98+
return fmt.Errorf("failed to load database config: %w", err)
99+
}
100+
if err := db.OpenWithCacher(ctx, cacher); err != nil {
101+
return fmt.Errorf("failed to connect to database: %w", err)
102+
}
103+
defer db.Close()
104+
105105
// Setup signer
106106
signer, err := keys.KeyManagerFor(ctx, &config.Database.Keys)
107107
if err != nil {
@@ -132,7 +132,7 @@ func realMain(ctx context.Context) error {
132132
return fmt.Errorf("failed to create renderer: %w", err)
133133
}
134134

135-
r.Handle("/health", controller.HandleHealthz(ctx, h, &config.Database)).Methods("GET")
135+
r.Handle("/health", controller.HandleHealthz(ctx, &config.Database, h)).Methods("GET")
136136

137137
// Setup API auth
138138
requireAPIKey := middleware.RequireAPIKey(ctx, cacher, db, h, []database.APIUserType{

cmd/server/main.go

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -109,7 +109,7 @@ func realMain(ctx context.Context) error {
109109
if err != nil {
110110
return fmt.Errorf("failed to load database config: %w", err)
111111
}
112-
if err := db.Open(ctx); err != nil {
112+
if err := db.OpenWithCacher(ctx, cacher); err != nil {
113113
return fmt.Errorf("failed to connect to database: %w", err)
114114
}
115115
defer db.Close()
@@ -181,7 +181,7 @@ func realMain(ctx context.Context) error {
181181

182182
{
183183
sub := r.PathPrefix("").Subrouter()
184-
sub.Handle("/health", controller.HandleHealthz(ctx, h, &config.Database)).Methods("GET")
184+
sub.Handle("/health", controller.HandleHealthz(ctx, &config.Database, h)).Methods("GET")
185185
}
186186

187187
{
@@ -289,7 +289,7 @@ func realMain(ctx context.Context) error {
289289
realmSub.Use(requireAdmin)
290290
realmSub.Use(rateLimit)
291291

292-
realmadminController := realmadmin.New(ctx, cacher, config, db, h)
292+
realmadminController := realmadmin.New(ctx, config, db, h)
293293
realmSub.Handle("/settings", realmadminController.HandleIndex()).Methods("GET")
294294
realmSub.Handle("/settings/save", realmadminController.HandleSave()).Methods("POST")
295295

pkg/controller/apikey/update.go

Lines changed: 0 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -16,7 +16,6 @@ package apikey
1616

1717
import (
1818
"context"
19-
"fmt"
2019
"net/http"
2120

2221
"github.com/google/exposure-notifications-verification-server/pkg/controller"
@@ -27,8 +26,6 @@ import (
2726

2827
// HandleUpdate handles an update.
2928
func (c *Controller) HandleUpdate() http.Handler {
30-
logger := c.logger.Named("HandleUpdate")
31-
3229
type FormData struct {
3330
Name string `form:"name"`
3431
}
@@ -91,11 +88,6 @@ func (c *Controller) HandleUpdate() http.Handler {
9188
return
9289
}
9390

94-
// Clear the app from the cache
95-
if err := c.cacher.Delete(ctx, fmt.Sprintf("authorized_apps:by_id:%d", authApp.ID)); err != nil {
96-
logger.Errorw("failed to delete authorized app from cache", "error", err)
97-
}
98-
9991
flash.Alert("Successfully updated API key!")
10092
http.Redirect(w, r, "/apikeys", http.StatusSeeOther)
10193
})

pkg/controller/healthz.go

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -17,7 +17,7 @@ var (
1717
rl = rate.NewLimiter(rate.Every(time.Minute), 1)
1818
)
1919

20-
func HandleHealthz(hctx context.Context, h *render.Renderer, cfg *database.Config) http.Handler {
20+
func HandleHealthz(hctx context.Context, cfg *database.Config, h *render.Renderer) http.Handler {
2121
logger := logging.FromContext(hctx).Named("healthz")
2222

2323
return http.HandlerFunc(func(w http.ResponseWriter, r *http.Request) {

pkg/controller/middleware/apikey.go

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -47,7 +47,7 @@ func RequireAPIKey(ctx context.Context, cacher cache.Cacher, db *database.Databa
4747
allowedTypesMap[t] = struct{}{}
4848
}
4949

50-
cacheTTL := 30 * time.Second
50+
cacheTTL := 5 * time.Minute
5151

5252
return func(next http.Handler) http.Handler {
5353
return http.HandlerFunc(func(w http.ResponseWriter, r *http.Request) {

pkg/controller/middleware/auth.go

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -38,7 +38,7 @@ import (
3838
func RequireAuth(ctx context.Context, cacher cache.Cacher, fbClient *auth.Client, db *database.Database, h *render.Renderer, ttl time.Duration) mux.MiddlewareFunc {
3939
logger := logging.FromContext(ctx).Named("middleware.RequireAuth")
4040

41-
cacheTTL := 30 * time.Second
41+
cacheTTL := 5 * time.Minute
4242

4343
return func(next http.Handler) http.Handler {
4444
return http.HandlerFunc(func(w http.ResponseWriter, r *http.Request) {

pkg/controller/middleware/realm.go

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -36,7 +36,7 @@ import (
3636
func RequireRealm(ctx context.Context, cacher cache.Cacher, db *database.Database, h *render.Renderer) mux.MiddlewareFunc {
3737
logger := logging.FromContext(ctx).Named("middleware.RequireRealm")
3838

39-
cacheTTL := 30 * time.Second
39+
cacheTTL := 5 * time.Minute
4040

4141
return func(next http.Handler) http.Handler {
4242
return http.HandlerFunc(func(w http.ResponseWriter, r *http.Request) {

pkg/controller/realmadmin/realmadmin.go

Lines changed: 1 addition & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -18,7 +18,6 @@ package realmadmin
1818
import (
1919
"context"
2020

21-
"github.com/google/exposure-notifications-verification-server/pkg/cache"
2221
"github.com/google/exposure-notifications-verification-server/pkg/config"
2322
"github.com/google/exposure-notifications-verification-server/pkg/database"
2423
"github.com/google/exposure-notifications-verification-server/pkg/render"
@@ -29,18 +28,16 @@ import (
2928
)
3029

3130
type Controller struct {
32-
cacher cache.Cacher
3331
config *config.ServerConfig
3432
db *database.Database
3533
h *render.Renderer
3634
logger *zap.SugaredLogger
3735
}
3836

39-
func New(ctx context.Context, cacher cache.Cacher, config *config.ServerConfig, db *database.Database, h *render.Renderer) *Controller {
37+
func New(ctx context.Context, config *config.ServerConfig, db *database.Database, h *render.Renderer) *Controller {
4038
logger := logging.FromContext(ctx)
4139

4240
return &Controller{
43-
cacher: cacher,
4441
config: config,
4542
db: db,
4643
h: h,

pkg/controller/realmadmin/save.go

Lines changed: 0 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -16,7 +16,6 @@ package realmadmin
1616

1717
import (
1818
"context"
19-
"fmt"
2019
"net/http"
2120
"time"
2221

@@ -42,8 +41,6 @@ func init() {
4241
}
4342

4443
func (c *Controller) HandleSave() http.Handler {
45-
logger := c.logger.Named("HandleSave")
46-
4744
type FormData struct {
4845
Name string `form:"name"`
4946
RegionCode string `form:"regionCode"`
@@ -106,12 +103,6 @@ func (c *Controller) HandleSave() http.Handler {
106103
return
107104
}
108105

109-
// Purge the cache so new values appear for this realm
110-
if err := c.cacher.Delete(ctx, fmt.Sprintf("realms:by_id:%d", realm.ID)); err != nil {
111-
// Don't return an error here, just continue along
112-
logger.Errorw("failed to clear cache", "error", err)
113-
}
114-
115106
// Process SMS settings
116107
smsConfig, err := realm.SMSConfig(c.db)
117108
if err != nil && !database.IsNotFound(err) {

0 commit comments

Comments
 (0)