@@ -20,25 +20,41 @@ import (
2020
2121 "github.com/uber/submitqueue/platform/base/change"
2222 "github.com/uber/submitqueue/submitqueue/entity"
23- orchstorage "github.com/uber/submitqueue/submitqueue/orchestrator /extension/storage"
23+ storage "github.com/uber/submitqueue/submitqueue/extension/storage"
2424)
2525
26- // resolver is the store-backed Resolver. It holds the storage factory and
27- // resolves the batch's queue-scoped request and change stores per call, since
28- // every resolution is for exactly one batch and the batch names its queue.
26+ // Stores is the slice of a queue-scoped storage aggregate this package needs.
27+ // Declaring it here rather than naming a service's aggregate keeps `core/`
28+ // free of any dependency on a service package; every aggregate that exposes
29+ // these two accessors satisfies it.
30+ type Stores interface {
31+ // GetRequestStore returns the queue's RequestStore.
32+ GetRequestStore () storage.RequestStore
33+
34+ // GetChangeStore returns the queue's ChangeStore.
35+ GetChangeStore () storage.ChangeStore
36+ }
37+
38+ // Resolve binds Stores to one queue. The wiring layer supplies it, because
39+ // that is the layer that knows which service's aggregate serves a queue.
40+ type Resolve func (queue string ) (Stores , error )
41+
42+ // resolver is the store-backed Resolver. It resolves the batch's queue-scoped
43+ // request and change stores per call, since every resolution is for exactly
44+ // one batch and the batch names its queue.
2945type resolver struct {
30- stores orchstorage. Factory
46+ resolve Resolve
3147}
3248
33- // New returns a Resolver backed by the given storage factory .
34- func New (stores orchstorage. Factory ) Resolver {
35- return resolver {stores : stores }
49+ // New returns a Resolver that reads through the given per-queue binding .
50+ func New (resolve Resolve ) Resolver {
51+ return resolver {resolve : resolve }
3652}
3753
3854// ChangesForBatch resolves a batch's requests to their raw changes, in
3955// batch.Contains order.
4056func (r resolver ) ChangesForBatch (ctx context.Context , batch entity.Batch ) ([]change.Change , error ) {
41- store , err := r .stores . For (orchstorage. Config { QueueName : batch .Queue } )
57+ store , err := r .resolve ( batch .Queue )
4258 if err != nil {
4359 return nil , fmt .Errorf ("failed to resolve storage for queue %q: %w" , batch .Queue , err )
4460 }
@@ -57,7 +73,7 @@ func (r resolver) ChangesForBatch(ctx context.Context, batch entity.Batch) ([]ch
5773// ChangeInfo per claimed URI, owned by the requesting request, aggregated across
5874// the whole batch.
5975func (r resolver ) DetailedForBatch (ctx context.Context , batch entity.Batch ) (entity.BatchChanges , error ) {
60- store , err := r .stores . For (orchstorage. Config { QueueName : batch .Queue } )
76+ store , err := r .resolve ( batch .Queue )
6177 if err != nil {
6278 return entity.BatchChanges {}, fmt .Errorf ("failed to resolve storage for queue %q: %w" , batch .Queue , err )
6379 }
0 commit comments