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:
@@ -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
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user