Unitstore: Fix the Folder migration (#96078)

* UniStore: Add folder to the SQL backend

This reverts commit aaa4f4a23e.

* fix folder migration
This commit is contained in:
Georges Chaudy
2024-11-12 12:52:04 +01:00
committed by GitHub
parent 7f675cd218
commit c3571752b6
43 changed files with 235 additions and 72 deletions
+32 -18
View File
@@ -168,12 +168,15 @@ func (b *backend) create(ctx context.Context, event resource.WriteEvent) (int64,
var newVersion int64
guid := uuid.New().String()
err := b.db.WithTx(ctx, ReadCommitted, func(ctx context.Context, tx db.Tx) error {
// TODO: Set the Labels
folder := ""
if event.Object != nil {
folder = event.Object.GetFolder()
}
// 1. Insert into resource
if _, err := dbutil.Exec(ctx, tx, sqlResourceInsert, sqlResourceRequest{
SQLTemplate: sqltemplate.New(b.dialect),
WriteEvent: event,
Folder: folder,
GUID: guid,
}); err != nil {
return fmt.Errorf("insert into resource: %w", err)
@@ -183,6 +186,7 @@ func (b *backend) create(ctx context.Context, event resource.WriteEvent) (int64,
if _, err := dbutil.Exec(ctx, tx, sqlResourceHistoryInsert, sqlResourceRequest{
SQLTemplate: sqltemplate.New(b.dialect),
WriteEvent: event,
Folder: folder,
GUID: guid,
}); err != nil {
return fmt.Errorf("insert into resource history: %w", err)
@@ -225,12 +229,15 @@ func (b *backend) update(ctx context.Context, event resource.WriteEvent) (int64,
var newVersion int64
guid := uuid.New().String()
err := b.db.WithTx(ctx, ReadCommitted, func(ctx context.Context, tx db.Tx) error {
// TODO: Set the Labels
folder := ""
if event.Object != nil {
folder = event.Object.GetFolder()
}
// 1. Update resource
_, err := dbutil.Exec(ctx, tx, sqlResourceUpdate, sqlResourceRequest{
SQLTemplate: sqltemplate.New(b.dialect),
WriteEvent: event,
Folder: folder,
GUID: guid,
})
if err != nil {
@@ -241,6 +248,7 @@ func (b *backend) update(ctx context.Context, event resource.WriteEvent) (int64,
if _, err := dbutil.Exec(ctx, tx, sqlResourceHistoryInsert, sqlResourceRequest{
SQLTemplate: sqltemplate.New(b.dialect),
WriteEvent: event,
Folder: folder,
GUID: guid,
}); err != nil {
return fmt.Errorf("insert into resource history: %w", err)
@@ -285,8 +293,10 @@ func (b *backend) delete(ctx context.Context, event resource.WriteEvent) (int64,
guid := uuid.New().String()
err := b.db.WithTx(ctx, ReadCommitted, func(ctx context.Context, tx db.Tx) error {
// TODO: Set the Labels
folder := ""
if event.Object != nil {
folder = event.Object.GetFolder()
}
// 1. delete from resource
_, err := dbutil.Exec(ctx, tx, sqlResourceDelete, sqlResourceRequest{
SQLTemplate: sqltemplate.New(b.dialect),
@@ -301,6 +311,7 @@ func (b *backend) delete(ctx context.Context, event resource.WriteEvent) (int64,
if _, err := dbutil.Exec(ctx, tx, sqlResourceHistoryInsert, sqlResourceRequest{
SQLTemplate: sqltemplate.New(b.dialect),
WriteEvent: event,
Folder: folder,
GUID: guid,
}); err != nil {
return fmt.Errorf("insert into resource history: %w", err)
@@ -330,16 +341,16 @@ func (b *backend) delete(ctx context.Context, event resource.WriteEvent) (int64,
return newVersion, err
}
func (b *backend) ReadResource(ctx context.Context, req *resource.ReadRequest) *resource.ReadResponse {
func (b *backend) ReadResource(ctx context.Context, req *resource.ReadRequest) *resource.BackendReadResponse {
_, span := b.tracer.Start(ctx, tracePrefix+".Read")
defer span.End()
// TODO: validate key ?
readReq := &sqlResourceReadRequest{
SQLTemplate: sqltemplate.New(b.dialect),
Request: req,
readResponse: new(readResponse),
SQLTemplate: sqltemplate.New(b.dialect),
Request: req,
Response: NewReadResponse(),
}
sr := sqlResourceRead
@@ -348,21 +359,21 @@ func (b *backend) ReadResource(ctx context.Context, req *resource.ReadRequest) *
sr = sqlResourceHistoryRead
}
var res *readResponse
var res *resource.BackendReadResponse
err := b.db.WithTx(ctx, ReadCommittedRO, func(ctx context.Context, tx db.Tx) error {
var err error
res, err = dbutil.QueryRow(ctx, tx, sr, readReq)
return err
})
if errors.Is(err, sql.ErrNoRows) {
return &resource.ReadResponse{
return &resource.BackendReadResponse{
Error: resource.NewNotFoundError(req.Key),
}
} else if err != nil {
return &resource.ReadResponse{Error: resource.AsErrorResult(err)}
return &resource.BackendReadResponse{Error: resource.AsErrorResult(err)}
}
return &res.ReadResponse
return res
}
func (b *backend) ListIterator(ctx context.Context, req *resource.ListRequest, cb func(resource.ListIterator) error) (int64, error) {
@@ -396,6 +407,7 @@ type listIter struct {
value []byte
namespace string
name string
folder string
}
// ContinueToken implements resource.ListIterator.
@@ -403,21 +415,22 @@ func (l *listIter) ContinueToken() string {
return ContinueToken{ResourceVersion: l.listRV, StartOffset: l.offset}.String()
}
// Error implements resource.ListIterator.
func (l *listIter) Error() error {
return l.err
}
// Name implements resource.ListIterator.
func (l *listIter) Name() string {
return l.name
}
// Namespace implements resource.ListIterator.
func (l *listIter) Namespace() string {
return l.namespace
}
func (l *listIter) Folder() string {
return l.folder
}
// ResourceVersion implements resource.ListIterator.
func (l *listIter) ResourceVersion() int64 {
return l.rv
@@ -432,7 +445,7 @@ func (l *listIter) Value() []byte {
func (l *listIter) Next() bool {
if l.rows.Next() {
l.offset++
l.err = l.rows.Scan(&l.rv, &l.namespace, &l.name, &l.value)
l.err = l.rows.Scan(&l.rv, &l.namespace, &l.name, &l.folder, &l.value)
return true
}
return false
@@ -680,6 +693,7 @@ func (b *backend) poll(ctx context.Context, grp string, res string, since int64,
Type: resource.WatchEvent_Type(rec.Action),
PreviousRV: *prevRV,
},
Folder: rec.Folder,
ResourceVersion: rec.ResourceVersion,
// Timestamp: , // TODO: add timestamp
}