WIP handling sync requests
This commit is contained in:
parent
9247866bb6
commit
e7469c848c
@ -38,6 +38,7 @@ type ACLTree interface {
|
|||||||
ACLState() *ACLState
|
ACLState() *ACLState
|
||||||
AddContent(ctx context.Context, f func(builder ChangeBuilder) error) (*Change, error)
|
AddContent(ctx context.Context, f func(builder ChangeBuilder) error) (*Change, error)
|
||||||
AddChanges(ctx context.Context, changes ...*Change) (AddResult, error)
|
AddChanges(ctx context.Context, changes ...*Change) (AddResult, error)
|
||||||
|
AddRawChanges(ctx context.Context, changes ...*aclpb.RawChange) (AddResult, error)
|
||||||
Heads() []string
|
Heads() []string
|
||||||
Root() *Change
|
Root() *Change
|
||||||
Iterate(func(change *Change) bool)
|
Iterate(func(change *Change) bool)
|
||||||
@ -245,6 +246,20 @@ func (a *aclTree) AddContent(ctx context.Context, build func(builder ChangeBuild
|
|||||||
return ch, nil
|
return ch, nil
|
||||||
}
|
}
|
||||||
|
|
||||||
|
func (a *aclTree) AddRawChanges(ctx context.Context, rawChanges ...*aclpb.RawChange) (AddResult, error) {
|
||||||
|
var aclChanges []*Change
|
||||||
|
for _, ch := range rawChanges {
|
||||||
|
change, err := NewFromRawChange(ch)
|
||||||
|
// TODO: think what if we will have incorrect signatures on rawChanges, how everything will work
|
||||||
|
if err != nil {
|
||||||
|
continue
|
||||||
|
}
|
||||||
|
aclChanges = append(aclChanges, change)
|
||||||
|
}
|
||||||
|
|
||||||
|
return a.AddChanges(ctx, aclChanges...)
|
||||||
|
}
|
||||||
|
|
||||||
func (a *aclTree) AddChanges(ctx context.Context, changes ...*Change) (AddResult, error) {
|
func (a *aclTree) AddChanges(ctx context.Context, changes ...*Change) (AddResult, error) {
|
||||||
a.Lock()
|
a.Lock()
|
||||||
// TODO: make proper error handling, because there are a lot of corner cases where this will break
|
// TODO: make proper error handling, because there are a lot of corner cases where this will break
|
||||||
|
|||||||
43
service/sync/requesthandler.go
Normal file
43
service/sync/requesthandler.go
Normal file
@ -0,0 +1,43 @@
|
|||||||
|
package sync
|
||||||
|
|
||||||
|
import (
|
||||||
|
"context"
|
||||||
|
"github.com/anytypeio/go-anytype-infrastructure-experiments/pkg/acl/acltree"
|
||||||
|
"github.com/anytypeio/go-anytype-infrastructure-experiments/service/sync/syncpb"
|
||||||
|
"github.com/anytypeio/go-anytype-infrastructure-experiments/service/treecache"
|
||||||
|
"github.com/anytypeio/go-anytype-infrastructure-experiments/util/slice"
|
||||||
|
)
|
||||||
|
|
||||||
|
type requestHander struct {
|
||||||
|
treeCache treecache.Service
|
||||||
|
client SyncClient
|
||||||
|
}
|
||||||
|
|
||||||
|
func (r *requestHander) HandleHeadUpdate(ctx context.Context, senderId string, update *syncpb.SyncHeadUpdate) error {
|
||||||
|
err := r.treeCache.Do(ctx, update.TreeId, func(tree acltree.ACLTree) error {
|
||||||
|
_, err := tree.AddRawChanges(ctx, update.Changes...)
|
||||||
|
if err != nil {
|
||||||
|
return err
|
||||||
|
}
|
||||||
|
shouldFullSync := !r.compareHeads(update.Heads, tree.Heads())
|
||||||
|
|
||||||
|
return nil
|
||||||
|
})
|
||||||
|
if err != nil {
|
||||||
|
return err
|
||||||
|
}
|
||||||
|
return nil
|
||||||
|
}
|
||||||
|
|
||||||
|
func (r *requestHander) compareHeads(syncHeads []*syncpb.SyncHead, heads []string) bool {
|
||||||
|
for _, head := range syncHeads {
|
||||||
|
if slice.FindPos(heads, head.Id) == -1 {
|
||||||
|
return false
|
||||||
|
}
|
||||||
|
}
|
||||||
|
return true
|
||||||
|
}
|
||||||
|
|
||||||
|
func (r *requestHander) prepareFullSyncRequest(tree acltree.ACLTree) (*syncpb.SyncFullRequest, error) {
|
||||||
|
|
||||||
|
}
|
||||||
8
service/sync/syncclient.go
Normal file
8
service/sync/syncclient.go
Normal file
@ -0,0 +1,8 @@
|
|||||||
|
package sync
|
||||||
|
|
||||||
|
import "github.com/anytypeio/go-anytype-infrastructure-experiments/service/sync/syncpb"
|
||||||
|
|
||||||
|
type SyncClient interface {
|
||||||
|
NotifyHeadsChanged(update *syncpb.SyncHeadUpdate) error
|
||||||
|
RequestFullSync(id string, request *syncpb.SyncFullRequest) error
|
||||||
|
}
|
||||||
Loading…
x
Reference in New Issue
Block a user