Skip to content

Commit 2a51173

Browse files
committed
Disable dataloader cache.
1 parent f021fdb commit 2a51173

File tree

2 files changed

+46
-107
lines changed

2 files changed

+46
-107
lines changed

backend/cmd/server/main.go

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -128,8 +128,9 @@ func main() {
128128
slog.Info("Cache initialized", "default_ttl", "15m", "max_cost", "100MB")
129129

130130
// Initialize DataLoaders (shared globally across all requests)
131+
// Dataloaders handle request batching while Ristretto cache handles data caching
131132
dataLoaders := loaders.NewLoaders(db, cacheInstance)
132-
slog.Info("DataLoaders initialized with global caching")
133+
slog.Info("DataLoaders initialized with Ristretto cache integration")
133134

134135
// Initialize RoleService
135136
roleService := services.NewRoleService(db.Queries, cacheInstance)
Lines changed: 44 additions & 106 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,8 @@
11
package loaders
22

33
import (
4+
"context"
5+
46
"github.com/bcc-media/wayfarer/internal/cache"
57
"github.com/bcc-media/wayfarer/internal/database"
68
"github.com/bcc-media/wayfarer/internal/database/sqlc"
@@ -9,7 +11,7 @@ import (
911
)
1012

1113
// Loaders holds all dataloader instances for batching database queries
12-
// These are shared globally across all requests and use built-in caching
14+
// These are shared globally across all requests and rely on Ristretto cache for data caching
1315
type Loaders struct {
1416
UserByIDLoader *dataloader.Loader[string, *model.User]
1517
ChurchLoader *dataloader.Loader[string, *model.Church]
@@ -39,113 +41,49 @@ type Loaders struct {
3941
UserStreakActivityLoader *dataloader.Loader[UserStreakActivityKey, []*sqlc.UserStreakActivity]
4042
}
4143

42-
// NewLoaders creates all dataloaders with batch functions and default caching
44+
// newBatchedLoader creates a new batched dataloader with standard configuration:
45+
// - Batch capacity of 100
46+
// - Cache disabled (we rely on Ristretto cache in batch functions instead)
47+
func newBatchedLoader[K comparable, V any](
48+
batchFunc func(context.Context, []K) []*dataloader.Result[V],
49+
) *dataloader.Loader[K, V] {
50+
return dataloader.NewBatchedLoader(
51+
batchFunc,
52+
dataloader.WithBatchCapacity[K, V](100),
53+
dataloader.WithCache[K, V](&dataloader.NoCache[K, V]{}), // Disable internal cache, use Ristretto instead
54+
)
55+
}
56+
57+
// NewLoaders creates all dataloaders with batch functions
58+
// Dataloaders provide request batching while relying on Ristretto cache for data caching
4359
// Should be called once at server startup
4460
func NewLoaders(db *database.DB, cache *cache.CacheWithRegistry) *Loaders {
4561
return &Loaders{
46-
UserByIDLoader: dataloader.NewBatchedLoader(
47-
userByIDBatchFunc(db, cache),
48-
dataloader.WithBatchCapacity[string, *model.User](100),
49-
),
50-
ChurchLoader: dataloader.NewBatchedLoader(
51-
churchBatchFunc(db, cache),
52-
dataloader.WithBatchCapacity[string, *model.Church](100),
53-
),
54-
ProjectsByUserLoader: dataloader.NewBatchedLoader(
55-
projectsByUserBatchFunc(db, cache),
56-
dataloader.WithBatchCapacity[string, []*model.Project](100),
57-
),
58-
EventsByUserLoader: dataloader.NewBatchedLoader(
59-
eventsByUserBatchFunc(db, cache),
60-
dataloader.WithBatchCapacity[string, []*model.Event](100),
61-
),
62-
EventsByProjectLoader: dataloader.NewBatchedLoader(
63-
eventsByProjectBatchFunc(db, cache),
64-
dataloader.WithBatchCapacity[string, []*model.Event](100),
65-
),
66-
TeamsByUserLoader: dataloader.NewBatchedLoader(
67-
teamsByUserBatchFunc(db, cache),
68-
dataloader.WithBatchCapacity[string, []*model.Team](100),
69-
),
70-
TeamsByProjectLoader: dataloader.NewBatchedLoader(
71-
teamsByProjectBatchFunc(db, cache),
72-
dataloader.WithBatchCapacity[string, []*model.Team](100),
73-
),
74-
TeamsBySuperTeamLoader: dataloader.NewBatchedLoader(
75-
teamsBySuperTeamBatchFunc(db, cache),
76-
dataloader.WithBatchCapacity[string, []*model.Team](100),
77-
),
78-
SuperTeamsByUserLoader: dataloader.NewBatchedLoader(
79-
superTeamsByUserBatchFunc(db, cache),
80-
dataloader.WithBatchCapacity[string, []*model.SuperTeam](100),
81-
),
82-
RolesByUserLoader: dataloader.NewBatchedLoader(
83-
rolesByUserBatchFunc(db, cache),
84-
dataloader.WithBatchCapacity[string, []*model.UserRole](100),
85-
),
86-
UsersByTeamLoader: dataloader.NewBatchedLoader(
87-
usersByTeamBatchFunc(db, cache),
88-
dataloader.WithBatchCapacity[string, []*model.User](100),
89-
),
90-
ProjectByIDLoader: dataloader.NewBatchedLoader(
91-
projectByIDBatchFunc(db, cache),
92-
dataloader.WithBatchCapacity[string, *model.Project](100),
93-
),
94-
EventByIDLoader: dataloader.NewBatchedLoader(
95-
eventByIDBatchFunc(db, cache),
96-
dataloader.WithBatchCapacity[string, *model.Event](100),
97-
),
98-
TeamByIDLoader: dataloader.NewBatchedLoader(
99-
teamByIDBatchFunc(db, cache),
100-
dataloader.WithBatchCapacity[string, *model.Team](100),
101-
),
102-
SuperTeamByIDLoader: dataloader.NewBatchedLoader(
103-
superTeamByIDBatchFunc(db, cache),
104-
dataloader.WithBatchCapacity[string, *model.SuperTeam](100),
105-
),
106-
AchievementByIDLoader: dataloader.NewBatchedLoader(
107-
achievementByIDBatchFunc(db, cache),
108-
dataloader.WithBatchCapacity[string, model.Achievement](100),
109-
),
110-
AchievementsByProjectLoader: dataloader.NewBatchedLoader(
111-
achievementsByProjectBatchFunc(db, cache),
112-
dataloader.WithBatchCapacity[string, []model.Achievement](100),
113-
),
114-
ArticlesByAchievementLoader: dataloader.NewBatchedLoader(
115-
articlesByAchievementBatchFunc(db, cache),
116-
dataloader.WithBatchCapacity[string, []model.Article](100),
117-
),
118-
TracksByAchievementLoader: dataloader.NewBatchedLoader(
119-
tracksByAchievementBatchFunc(db, cache),
120-
dataloader.WithBatchCapacity[string, []model.Track](100),
121-
),
122-
ChallengeByIDLoader: dataloader.NewBatchedLoader(
123-
challengeByIDBatchFunc(db, cache),
124-
dataloader.WithBatchCapacity[string, *model.Challenge](100),
125-
),
126-
ChallengesByProjectLoader: dataloader.NewBatchedLoader(
127-
challengesByProjectBatchFunc(db, cache),
128-
dataloader.WithBatchCapacity[string, []*model.Challenge](100),
129-
),
130-
ChallengesByEventLoader: dataloader.NewBatchedLoader(
131-
challengesByEventBatchFunc(db, cache),
132-
dataloader.WithBatchCapacity[string, []*model.Challenge](100),
133-
),
134-
StreakByIDLoader: dataloader.NewBatchedLoader(
135-
streakByIDBatchFunc(db, cache),
136-
dataloader.WithBatchCapacity[string, *model.Streak](100),
137-
),
138-
StreaksByProjectLoader: dataloader.NewBatchedLoader(
139-
streaksByProjectBatchFunc(db, cache),
140-
dataloader.WithBatchCapacity[string, []*model.Streak](100),
141-
),
142-
RelevantDaysByStreakLoader: dataloader.NewBatchedLoader(
143-
relevantDaysByStreakBatchFunc(db, cache),
144-
dataloader.WithBatchCapacity[string, []model.DateRange](100),
145-
),
146-
UserStreakActivityLoader: dataloader.NewBatchedLoader(
147-
userStreakActivityBatchFunc(db, cache),
148-
dataloader.WithBatchCapacity[UserStreakActivityKey, []*sqlc.UserStreakActivity](100),
149-
),
62+
UserByIDLoader: newBatchedLoader(userByIDBatchFunc(db, cache)),
63+
ChurchLoader: newBatchedLoader(churchBatchFunc(db, cache)),
64+
ProjectsByUserLoader: newBatchedLoader(projectsByUserBatchFunc(db, cache)),
65+
EventsByUserLoader: newBatchedLoader(eventsByUserBatchFunc(db, cache)),
66+
EventsByProjectLoader: newBatchedLoader(eventsByProjectBatchFunc(db, cache)),
67+
TeamsByUserLoader: newBatchedLoader(teamsByUserBatchFunc(db, cache)),
68+
TeamsByProjectLoader: newBatchedLoader(teamsByProjectBatchFunc(db, cache)),
69+
TeamsBySuperTeamLoader: newBatchedLoader(teamsBySuperTeamBatchFunc(db, cache)),
70+
SuperTeamsByUserLoader: newBatchedLoader(superTeamsByUserBatchFunc(db, cache)),
71+
RolesByUserLoader: newBatchedLoader(rolesByUserBatchFunc(db, cache)),
72+
UsersByTeamLoader: newBatchedLoader(usersByTeamBatchFunc(db, cache)),
73+
ProjectByIDLoader: newBatchedLoader(projectByIDBatchFunc(db, cache)),
74+
EventByIDLoader: newBatchedLoader(eventByIDBatchFunc(db, cache)),
75+
TeamByIDLoader: newBatchedLoader(teamByIDBatchFunc(db, cache)),
76+
SuperTeamByIDLoader: newBatchedLoader(superTeamByIDBatchFunc(db, cache)),
77+
AchievementByIDLoader: newBatchedLoader(achievementByIDBatchFunc(db, cache)),
78+
AchievementsByProjectLoader: newBatchedLoader(achievementsByProjectBatchFunc(db, cache)),
79+
ArticlesByAchievementLoader: newBatchedLoader(articlesByAchievementBatchFunc(db, cache)),
80+
TracksByAchievementLoader: newBatchedLoader(tracksByAchievementBatchFunc(db, cache)),
81+
ChallengeByIDLoader: newBatchedLoader(challengeByIDBatchFunc(db, cache)),
82+
ChallengesByProjectLoader: newBatchedLoader(challengesByProjectBatchFunc(db, cache)),
83+
ChallengesByEventLoader: newBatchedLoader(challengesByEventBatchFunc(db, cache)),
84+
StreakByIDLoader: newBatchedLoader(streakByIDBatchFunc(db, cache)),
85+
StreaksByProjectLoader: newBatchedLoader(streaksByProjectBatchFunc(db, cache)),
86+
RelevantDaysByStreakLoader: newBatchedLoader(relevantDaysByStreakBatchFunc(db, cache)),
87+
UserStreakActivityLoader: newBatchedLoader(userStreakActivityBatchFunc(db, cache)),
15088
}
15189
}

0 commit comments

Comments
 (0)