Skip to content

Commit d8f4e8f

Browse files
authored
Prepare for single stored schema (#2805)
1 parent dc79633 commit d8f4e8f

File tree

86 files changed

+1633
-907
lines changed

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

86 files changed

+1633
-907
lines changed

internal/caveats/run.go

Lines changed: 13 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -38,7 +38,7 @@ func RunSingleCaveatExpression(
3838
ts *caveattypes.TypeSet,
3939
expr *core.CaveatExpression,
4040
context map[string]any,
41-
reader datastore.CaveatReader,
41+
reader datastore.SchemaReadable,
4242
debugOption RunCaveatExpressionDebugOption,
4343
) (ExpressionResult, error) {
4444
runner := NewCaveatRunner(ts)
@@ -66,7 +66,7 @@ func (cr *CaveatRunner) RunCaveatExpression(
6666
ctx context.Context,
6767
expr *core.CaveatExpression,
6868
context map[string]any,
69-
reader datastore.CaveatReader,
69+
reader datastore.SchemaReadable,
7070
debugOption RunCaveatExpressionDebugOption,
7171
) (ExpressionResult, error) {
7272
ctx, span := tracer.Start(ctx, "RunCaveatExpression")
@@ -82,7 +82,7 @@ func (cr *CaveatRunner) RunCaveatExpression(
8282

8383
// PopulateCaveatDefinitionsForExpr populates the CaveatRunner's cache with the definitions
8484
// referenced in the given caveat expression.
85-
func (cr *CaveatRunner) PopulateCaveatDefinitionsForExpr(ctx context.Context, expr *core.CaveatExpression, reader datastore.CaveatReader) error {
85+
func (cr *CaveatRunner) PopulateCaveatDefinitionsForExpr(ctx context.Context, expr *core.CaveatExpression, reader datastore.SchemaReadable) error {
8686
ctx, span := tracer.Start(ctx, "PopulateCaveatDefinitions")
8787
defer span.End()
8888

@@ -107,14 +107,21 @@ func (cr *CaveatRunner) PopulateCaveatDefinitionsForExpr(ctx context.Context, ex
107107
}
108108

109109
// Bulk lookup all of the referenced caveat definitions.
110-
caveatDefs, err := reader.LookupCaveatsWithNames(ctx, caveatNames.AsSlice())
110+
// TODO(jschorr): Remove the local population here once the general schema cache is in place.
111+
schemaReader, err := reader.SchemaReader()
112+
if err != nil {
113+
return err
114+
}
115+
foundDefs, err := schemaReader.LookupSchemaDefinitionsByNames(ctx, caveatNames.AsSlice())
111116
if err != nil {
112117
return err
113118
}
114119
span.AddEvent(otelconv.EventCaveatsLookedUp)
115120

116-
for _, cd := range caveatDefs {
117-
cr.caveatDefs[cd.Definition.GetName()] = cd.Definition
121+
for _, def := range foundDefs {
122+
if caveatDef, ok := def.(*core.CaveatDefinition); ok {
123+
cr.caveatDefs[caveatDef.GetName()] = caveatDef
124+
}
118125
}
119126

120127
return nil

internal/caveats/run_test.go

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -622,15 +622,15 @@ type noCaveatsReader struct {
622622
datastore.Reader
623623
}
624624

625-
func (f noCaveatsReader) ReadCaveatByName(ctx context.Context, name string) (caveat *core.CaveatDefinition, lastWritten datastore.Revision, err error) {
625+
func (f noCaveatsReader) LegacyReadCaveatByName(ctx context.Context, name string) (caveat *core.CaveatDefinition, lastWritten datastore.Revision, err error) {
626626
return nil, nil, errors.New("should not be called")
627627
}
628628

629-
func (f noCaveatsReader) LookupCaveatsWithNames(ctx context.Context, names []string) ([]datastore.RevisionedCaveat, error) {
629+
func (f noCaveatsReader) LegacyLookupCaveatsWithNames(ctx context.Context, names []string) ([]datastore.RevisionedCaveat, error) {
630630
return nil, errors.New("should not be called")
631631
}
632632

633-
func (f noCaveatsReader) ListAllCaveats(ctx context.Context) ([]datastore.RevisionedCaveat, error) {
633+
func (f noCaveatsReader) LegacyListAllCaveats(ctx context.Context) ([]datastore.RevisionedCaveat, error) {
634634
return nil, errors.New("should not be called")
635635
}
636636

internal/datastore/context.go

Lines changed: 16 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -112,28 +112,28 @@ func (r *ctxReader) LookupCounters(ctx context.Context) ([]datastore.Relationshi
112112
return r.delegate.LookupCounters(context.WithoutCancel(ctx))
113113
}
114114

115-
func (r *ctxReader) ReadCaveatByName(ctx context.Context, name string) (*core.CaveatDefinition, datastore.Revision, error) {
116-
return r.delegate.ReadCaveatByName(context.WithoutCancel(ctx), name)
115+
func (r *ctxReader) LegacyReadCaveatByName(ctx context.Context, name string) (*core.CaveatDefinition, datastore.Revision, error) {
116+
return r.delegate.LegacyReadCaveatByName(context.WithoutCancel(ctx), name)
117117
}
118118

119-
func (r *ctxReader) ListAllCaveats(ctx context.Context) ([]datastore.RevisionedCaveat, error) {
120-
return r.delegate.ListAllCaveats(context.WithoutCancel(ctx))
119+
func (r *ctxReader) LegacyListAllCaveats(ctx context.Context) ([]datastore.RevisionedCaveat, error) {
120+
return r.delegate.LegacyListAllCaveats(context.WithoutCancel(ctx))
121121
}
122122

123-
func (r *ctxReader) LookupCaveatsWithNames(ctx context.Context, caveatNames []string) ([]datastore.RevisionedCaveat, error) {
124-
return r.delegate.LookupCaveatsWithNames(context.WithoutCancel(ctx), caveatNames)
123+
func (r *ctxReader) LegacyLookupCaveatsWithNames(ctx context.Context, caveatNames []string) ([]datastore.RevisionedCaveat, error) {
124+
return r.delegate.LegacyLookupCaveatsWithNames(context.WithoutCancel(ctx), caveatNames)
125125
}
126126

127-
func (r *ctxReader) ListAllNamespaces(ctx context.Context) ([]datastore.RevisionedNamespace, error) {
128-
return r.delegate.ListAllNamespaces(context.WithoutCancel(ctx))
127+
func (r *ctxReader) LegacyListAllNamespaces(ctx context.Context) ([]datastore.RevisionedNamespace, error) {
128+
return r.delegate.LegacyListAllNamespaces(context.WithoutCancel(ctx))
129129
}
130130

131-
func (r *ctxReader) LookupNamespacesWithNames(ctx context.Context, nsNames []string) ([]datastore.RevisionedNamespace, error) {
132-
return r.delegate.LookupNamespacesWithNames(context.WithoutCancel(ctx), nsNames)
131+
func (r *ctxReader) LegacyLookupNamespacesWithNames(ctx context.Context, nsNames []string) ([]datastore.RevisionedNamespace, error) {
132+
return r.delegate.LegacyLookupNamespacesWithNames(context.WithoutCancel(ctx), nsNames)
133133
}
134134

135-
func (r *ctxReader) ReadNamespaceByName(ctx context.Context, nsName string) (*core.NamespaceDefinition, datastore.Revision, error) {
136-
return r.delegate.ReadNamespaceByName(context.WithoutCancel(ctx), nsName)
135+
func (r *ctxReader) LegacyReadNamespaceByName(ctx context.Context, nsName string) (*core.NamespaceDefinition, datastore.Revision, error) {
136+
return r.delegate.LegacyReadNamespaceByName(context.WithoutCancel(ctx), nsName)
137137
}
138138

139139
func (r *ctxReader) QueryRelationships(ctx context.Context, filter datastore.RelationshipsFilter, options ...options.QueryOptionsOption) (datastore.RelationshipIterator, error) {
@@ -144,6 +144,10 @@ func (r *ctxReader) ReverseQueryRelationships(ctx context.Context, subjectsFilte
144144
return r.delegate.ReverseQueryRelationships(context.WithoutCancel(ctx), subjectsFilter, options...)
145145
}
146146

147+
func (r *ctxReader) SchemaReader() (datastore.SchemaReader, error) {
148+
return r.delegate.SchemaReader()
149+
}
150+
147151
var (
148152
_ datastore.Datastore = (*ctxProxy)(nil)
149153
_ datastore.Reader = (*ctxReader)(nil)

internal/datastore/crdb/caveat.go

Lines changed: 5 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -35,7 +35,7 @@ const (
3535
errDeleteCaveats = "unable to delete caveats: %w"
3636
)
3737

38-
func (cr *crdbReader) ReadCaveatByName(ctx context.Context, name string) (*core.CaveatDefinition, datastore.Revision, error) {
38+
func (cr *crdbReader) LegacyReadCaveatByName(ctx context.Context, name string) (*core.CaveatDefinition, datastore.Revision, error) {
3939
query := cr.addFromToQuery(readCaveat.Where(sq.Eq{schema.ColCaveatName: name}), schema.TableCaveat, noIndexHint)
4040
sql, args, err := query.ToSql()
4141
if err != nil {
@@ -64,14 +64,14 @@ func (cr *crdbReader) ReadCaveatByName(ctx context.Context, name string) (*core.
6464
return loaded, revisions.NewHLCForTime(timestamp), nil
6565
}
6666

67-
func (cr *crdbReader) LookupCaveatsWithNames(ctx context.Context, caveatNames []string) ([]datastore.RevisionedCaveat, error) {
67+
func (cr *crdbReader) LegacyLookupCaveatsWithNames(ctx context.Context, caveatNames []string) ([]datastore.RevisionedCaveat, error) {
6868
if len(caveatNames) == 0 {
6969
return nil, nil
7070
}
7171
return cr.lookupCaveats(ctx, caveatNames)
7272
}
7373

74-
func (cr *crdbReader) ListAllCaveats(ctx context.Context) ([]datastore.RevisionedCaveat, error) {
74+
func (cr *crdbReader) LegacyListAllCaveats(ctx context.Context) ([]datastore.RevisionedCaveat, error) {
7575
return cr.lookupCaveats(ctx, nil)
7676
}
7777

@@ -127,7 +127,7 @@ func (cr *crdbReader) lookupCaveats(ctx context.Context, caveatNames []string) (
127127
return caveats, nil
128128
}
129129

130-
func (rwt *crdbReadWriteTXN) WriteCaveats(ctx context.Context, caveats []*core.CaveatDefinition) error {
130+
func (rwt *crdbReadWriteTXN) LegacyWriteCaveats(ctx context.Context, caveats []*core.CaveatDefinition) error {
131131
if len(caveats) == 0 {
132132
return nil
133133
}
@@ -158,7 +158,7 @@ func (rwt *crdbReadWriteTXN) WriteCaveats(ctx context.Context, caveats []*core.C
158158
return nil
159159
}
160160

161-
func (rwt *crdbReadWriteTXN) DeleteCaveats(ctx context.Context, names []string) error {
161+
func (rwt *crdbReadWriteTXN) LegacyDeleteCaveats(ctx context.Context, names []string) error {
162162
deleteCaveatClause := deleteCaveat.Where(sq.Eq{schema.ColCaveatName: names})
163163
sql, args, err := deleteCaveatClause.ToSql()
164164
if err != nil {

internal/datastore/crdb/crdb_test.go

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -827,18 +827,18 @@ func StreamingWatchTest(t *testing.T, rawDS datastore.Datastore) {
827827
})
828828
require.NoError(err)
829829

830-
err = rwt.DeleteNamespaces(ctx, []string{"resource2"}, datastore.DeleteNamespacesAndRelationships)
830+
err = rwt.LegacyDeleteNamespaces(ctx, []string{"resource2"}, datastore.DeleteNamespacesAndRelationships)
831831
require.NoError(err)
832832

833-
err = rwt.DeleteCaveats(ctx, []string{"somecaveat2"})
833+
err = rwt.LegacyDeleteCaveats(ctx, []string{"somecaveat2"})
834834
require.NoError(err)
835835

836-
err = rwt.WriteNamespaces(ctx, &core.NamespaceDefinition{
836+
err = rwt.LegacyWriteNamespaces(ctx, &core.NamespaceDefinition{
837837
Name: "somenewnamespace",
838838
})
839839
require.NoError(err)
840840

841-
err = rwt.WriteCaveats(ctx, []*core.CaveatDefinition{{
841+
err = rwt.LegacyWriteCaveats(ctx, []*core.CaveatDefinition{{
842842
Name: "somenewcaveat",
843843
}})
844844
require.NoError(err)

internal/datastore/crdb/pool_test.go

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -129,7 +129,7 @@ func TestTxReset(t *testing.T) {
129129
defer func() { i++ }()
130130
return tt.errors[i]
131131
}
132-
return rwt.WriteNamespaces(ctx, testUserNS)
132+
return rwt.LegacyWriteNamespaces(ctx, testUserNS)
133133
})
134134
if tt.expectError {
135135
require.Error(t, err)

internal/datastore/crdb/reader.go

Lines changed: 9 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -15,6 +15,7 @@ import (
1515
"github.com/authzed/spicedb/internal/datastore/crdb/schema"
1616
pgxcommon "github.com/authzed/spicedb/internal/datastore/postgres/common"
1717
"github.com/authzed/spicedb/internal/datastore/revisions"
18+
schemautil "github.com/authzed/spicedb/internal/datastore/schema"
1819
"github.com/authzed/spicedb/pkg/datastore"
1920
"github.com/authzed/spicedb/pkg/datastore/options"
2021
core "github.com/authzed/spicedb/pkg/proto/core/v1"
@@ -198,7 +199,7 @@ func (cr *crdbReader) lookupCounters(ctx context.Context, optionalFilterName str
198199
return counters, nil
199200
}
200201

201-
func (cr *crdbReader) ReadNamespaceByName(
202+
func (cr *crdbReader) LegacyReadNamespaceByName(
202203
ctx context.Context,
203204
nsName string,
204205
) (*core.NamespaceDefinition, datastore.Revision, error) {
@@ -213,7 +214,7 @@ func (cr *crdbReader) ReadNamespaceByName(
213214
return config, revisions.NewHLCForTime(timestamp), nil
214215
}
215216

216-
func (cr *crdbReader) ListAllNamespaces(ctx context.Context) ([]datastore.RevisionedNamespace, error) {
217+
func (cr *crdbReader) LegacyListAllNamespaces(ctx context.Context) ([]datastore.RevisionedNamespace, error) {
217218
addFromToQuery := func(query sq.SelectBuilder, tableName string) sq.SelectBuilder {
218219
return cr.addFromToQuery(query, tableName, noIndexHint)
219220
}
@@ -226,7 +227,7 @@ func (cr *crdbReader) ListAllNamespaces(ctx context.Context) ([]datastore.Revisi
226227
return nsDefs, nil
227228
}
228229

229-
func (cr *crdbReader) LookupNamespacesWithNames(ctx context.Context, nsNames []string) ([]datastore.RevisionedNamespace, error) {
230+
func (cr *crdbReader) LegacyLookupNamespacesWithNames(ctx context.Context, nsNames []string) ([]datastore.RevisionedNamespace, error) {
230231
if len(nsNames) == 0 {
231232
return nil, nil
232233
}
@@ -428,4 +429,9 @@ func (cr *crdbReader) addOverlapKey(namespace string) {
428429
cr.keyer.addKey(cr.overlapKeySet, namespace)
429430
}
430431

432+
// SchemaReader returns a SchemaReader for reading schema information.
433+
func (cr *crdbReader) SchemaReader() (datastore.SchemaReader, error) {
434+
return schemautil.NewLegacySchemaReaderAdapter(cr), nil
435+
}
436+
431437
var _ datastore.Reader = &crdbReader{}

internal/datastore/crdb/readwrite.go

Lines changed: 7 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -16,6 +16,7 @@ import (
1616
"github.com/authzed/spicedb/internal/datastore/crdb/schema"
1717
pgxcommon "github.com/authzed/spicedb/internal/datastore/postgres/common"
1818
"github.com/authzed/spicedb/internal/datastore/revisions"
19+
schemautil "github.com/authzed/spicedb/internal/datastore/schema"
1920
log "github.com/authzed/spicedb/internal/logging"
2021
"github.com/authzed/spicedb/pkg/datastore"
2122
"github.com/authzed/spicedb/pkg/datastore/options"
@@ -481,7 +482,7 @@ func (rwt *crdbReadWriteTXN) DeleteRelationships(ctx context.Context, filter *v1
481482
return rowsAffected, false, nil
482483
}
483484

484-
func (rwt *crdbReadWriteTXN) WriteNamespaces(ctx context.Context, newConfigs ...*core.NamespaceDefinition) error {
485+
func (rwt *crdbReadWriteTXN) LegacyWriteNamespaces(ctx context.Context, newConfigs ...*core.NamespaceDefinition) error {
485486
rwt.hasNonExpiredDeletionChange = true
486487

487488
query := queryWriteNamespace
@@ -508,7 +509,7 @@ func (rwt *crdbReadWriteTXN) WriteNamespaces(ctx context.Context, newConfigs ...
508509
return nil
509510
}
510511

511-
func (rwt *crdbReadWriteTXN) DeleteNamespaces(ctx context.Context, nsNames []string, delOption datastore.DeleteNamespacesRelationshipsOption) error {
512+
func (rwt *crdbReadWriteTXN) LegacyDeleteNamespaces(ctx context.Context, nsNames []string, delOption datastore.DeleteNamespacesRelationshipsOption) error {
512513
if len(nsNames) == 0 {
513514
return nil
514515
}
@@ -563,6 +564,10 @@ func (rwt *crdbReadWriteTXN) DeleteNamespaces(ctx context.Context, nsNames []str
563564
return nil
564565
}
565566

567+
func (rwt *crdbReadWriteTXN) SchemaWriter() (datastore.SchemaWriter, error) {
568+
return schemautil.NewLegacySchemaWriterAdapter(rwt, rwt), nil
569+
}
570+
566571
var copyCols = []string{
567572
schema.ColNamespace,
568573
schema.ColObjectID,

internal/datastore/memdb/caveat.go

Lines changed: 6 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -25,7 +25,7 @@ func (c *caveat) Unwrap() (*core.CaveatDefinition, error) {
2525
return &definition, err
2626
}
2727

28-
func (r *memdbReader) ReadCaveatByName(_ context.Context, name string) (*core.CaveatDefinition, datastore.Revision, error) {
28+
func (r *memdbReader) LegacyReadCaveatByName(_ context.Context, name string) (*core.CaveatDefinition, datastore.Revision, error) {
2929
r.mustLock()
3030
defer r.Unlock()
3131

@@ -60,7 +60,7 @@ func (r *memdbReader) readUnwrappedCaveatByName(tx *memdb.Txn, name string) (*co
6060
return unwrapped, rev, nil
6161
}
6262

63-
func (r *memdbReader) ListAllCaveats(_ context.Context) ([]datastore.RevisionedCaveat, error) {
63+
func (r *memdbReader) LegacyListAllCaveats(_ context.Context) ([]datastore.RevisionedCaveat, error) {
6464
r.mustLock()
6565
defer r.Unlock()
6666

@@ -90,8 +90,8 @@ func (r *memdbReader) ListAllCaveats(_ context.Context) ([]datastore.RevisionedC
9090
return caveats, nil
9191
}
9292

93-
func (r *memdbReader) LookupCaveatsWithNames(ctx context.Context, caveatNames []string) ([]datastore.RevisionedCaveat, error) {
94-
allCaveats, err := r.ListAllCaveats(ctx)
93+
func (r *memdbReader) LegacyLookupCaveatsWithNames(ctx context.Context, caveatNames []string) ([]datastore.RevisionedCaveat, error) {
94+
allCaveats, err := r.LegacyListAllCaveats(ctx)
9595
if err != nil {
9696
return nil, err
9797
}
@@ -108,7 +108,7 @@ func (r *memdbReader) LookupCaveatsWithNames(ctx context.Context, caveatNames []
108108
return toReturn, nil
109109
}
110110

111-
func (rwt *memdbReadWriteTx) WriteCaveats(_ context.Context, caveats []*core.CaveatDefinition) error {
111+
func (rwt *memdbReadWriteTx) LegacyWriteCaveats(_ context.Context, caveats []*core.CaveatDefinition) error {
112112
rwt.mustLock()
113113
defer rwt.Unlock()
114114
tx, err := rwt.txSource()
@@ -140,7 +140,7 @@ func (rwt *memdbReadWriteTx) writeCaveat(tx *memdb.Txn, caveats []*core.CaveatDe
140140
return nil
141141
}
142142

143-
func (rwt *memdbReadWriteTx) DeleteCaveats(_ context.Context, names []string) error {
143+
func (rwt *memdbReadWriteTx) LegacyDeleteCaveats(_ context.Context, names []string) error {
144144
rwt.mustLock()
145145
defer rwt.Unlock()
146146
tx, err := rwt.txSource()

internal/datastore/memdb/memdb_test.go

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -58,7 +58,7 @@ func TestConcurrentWritePanic(t *testing.T) {
5858
}
5959
}()
6060

61-
return rwt.WriteNamespaces(ctx, ns.Namespace(
61+
return rwt.LegacyWriteNamespaces(ctx, ns.Namespace(
6262
"resource",
6363
relationList...,
6464
))
@@ -72,7 +72,7 @@ func TestConcurrentWritePanic(t *testing.T) {
7272
}
7373
}()
7474

75-
return rwt.WriteNamespaces(ctx, ns.Namespace("user", relationList...))
75+
return rwt.LegacyWriteNamespaces(ctx, ns.Namespace("user", relationList...))
7676
})
7777

7878
return g.Wait()

0 commit comments

Comments
 (0)