Change deleter peer logic
This commit is contained in:
parent
fa52eb413d
commit
3caa36d3a5
@ -4,6 +4,7 @@ package settings
|
|||||||
import (
|
import (
|
||||||
"context"
|
"context"
|
||||||
"errors"
|
"errors"
|
||||||
|
"fmt"
|
||||||
"github.com/anytypeio/any-sync/accountservice"
|
"github.com/anytypeio/any-sync/accountservice"
|
||||||
"github.com/anytypeio/any-sync/app/logger"
|
"github.com/anytypeio/any-sync/app/logger"
|
||||||
"github.com/anytypeio/any-sync/commonspace/object/tree/objecttree"
|
"github.com/anytypeio/any-sync/commonspace/object/tree/objecttree"
|
||||||
@ -26,8 +27,8 @@ type SettingsObject interface {
|
|||||||
synctree.SyncTree
|
synctree.SyncTree
|
||||||
Init(ctx context.Context) (err error)
|
Init(ctx context.Context) (err error)
|
||||||
DeleteObject(id string) (err error)
|
DeleteObject(id string) (err error)
|
||||||
DeleteSpace(ctx context.Context, deleterId string, raw *treechangeproto.RawTreeChangeWithId) (err error)
|
DeleteSpace(ctx context.Context, raw *treechangeproto.RawTreeChangeWithId) (err error)
|
||||||
SpaceDeleteRawChange(deleterId string) (raw *treechangeproto.RawTreeChangeWithId, err error)
|
SpaceDeleteRawChange() (raw *treechangeproto.RawTreeChangeWithId, err error)
|
||||||
}
|
}
|
||||||
|
|
||||||
var (
|
var (
|
||||||
@ -35,7 +36,6 @@ var (
|
|||||||
ErrAlreadyDeleted = errors.New("the object is already deleted")
|
ErrAlreadyDeleted = errors.New("the object is already deleted")
|
||||||
ErrObjDoesNotExist = errors.New("the object does not exist")
|
ErrObjDoesNotExist = errors.New("the object does not exist")
|
||||||
ErrCantDeleteSpace = errors.New("not able to delete space")
|
ErrCantDeleteSpace = errors.New("not able to delete space")
|
||||||
ErrIncorrectDeleteChange = errors.New("incorrect delete change")
|
|
||||||
)
|
)
|
||||||
|
|
||||||
type BuildTreeFunc func(ctx context.Context, id string, listener updatelistener.UpdateListener) (t synctree.SyncTree, err error)
|
type BuildTreeFunc func(ctx context.Context, id string, listener updatelistener.UpdateListener) (t synctree.SyncTree, err error)
|
||||||
@ -137,7 +137,7 @@ func (s *settingsObject) updateIds(tr objecttree.ObjectTree) {
|
|||||||
log.Error("failed to build state", zap.Error(err))
|
log.Error("failed to build state", zap.Error(err))
|
||||||
return
|
return
|
||||||
}
|
}
|
||||||
log.Debug("updating object state", zap.String("deleterId", s.state.DeleterId))
|
log.Debug("updating object state", zap.String("deleted by", s.state.DeleterId))
|
||||||
if err = s.deletionManager.UpdateState(context.Background(), s.state); err != nil {
|
if err = s.deletionManager.UpdateState(context.Background(), s.state); err != nil {
|
||||||
log.Error("failed to update state", zap.Error(err))
|
log.Error("failed to update state", zap.Error(err))
|
||||||
}
|
}
|
||||||
@ -172,13 +172,13 @@ func (s *settingsObject) Close() error {
|
|||||||
return s.SyncTree.Close()
|
return s.SyncTree.Close()
|
||||||
}
|
}
|
||||||
|
|
||||||
func (s *settingsObject) DeleteSpace(ctx context.Context, deleterId string, raw *treechangeproto.RawTreeChangeWithId) (err error) {
|
func (s *settingsObject) DeleteSpace(ctx context.Context, raw *treechangeproto.RawTreeChangeWithId) (err error) {
|
||||||
s.Lock()
|
s.Lock()
|
||||||
defer s.Unlock()
|
defer s.Unlock()
|
||||||
defer func() {
|
defer func() {
|
||||||
log.Debug("finished adding delete change", zap.Error(err))
|
log.Debug("finished adding delete change", zap.Error(err))
|
||||||
}()
|
}()
|
||||||
err = s.verifyDeleteSpace(deleterId, raw)
|
err = s.verifyDeleteSpace(raw)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return
|
return
|
||||||
}
|
}
|
||||||
@ -196,12 +196,12 @@ func (s *settingsObject) DeleteSpace(ctx context.Context, deleterId string, raw
|
|||||||
return
|
return
|
||||||
}
|
}
|
||||||
|
|
||||||
func (s *settingsObject) SpaceDeleteRawChange(deleterId string) (raw *treechangeproto.RawTreeChangeWithId, err error) {
|
func (s *settingsObject) SpaceDeleteRawChange() (raw *treechangeproto.RawTreeChangeWithId, err error) {
|
||||||
data, err := s.changeFactory.CreateSpaceDeleteChange(deleterId, s.state, false)
|
accountData := s.account.Account()
|
||||||
|
data, err := s.changeFactory.CreateSpaceDeleteChange(accountData.PeerId, s.state, false)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return
|
return
|
||||||
}
|
}
|
||||||
accountData := s.account.Account()
|
|
||||||
return s.PrepareChange(objecttree.SignableChangeContent{
|
return s.PrepareChange(objecttree.SignableChangeContent{
|
||||||
Data: data,
|
Data: data,
|
||||||
Key: accountData.SignKey,
|
Key: accountData.SignKey,
|
||||||
@ -237,7 +237,7 @@ func (s *settingsObject) DeleteObject(id string) (err error) {
|
|||||||
return s.addContent(res)
|
return s.addContent(res)
|
||||||
}
|
}
|
||||||
|
|
||||||
func (s *settingsObject) verifyDeleteSpace(peerId string, raw *treechangeproto.RawTreeChangeWithId) (err error) {
|
func (s *settingsObject) verifyDeleteSpace(raw *treechangeproto.RawTreeChangeWithId) (err error) {
|
||||||
data, err := s.UnpackChange(raw)
|
data, err := s.UnpackChange(raw)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return
|
return
|
||||||
@ -249,8 +249,8 @@ func (s *settingsObject) verifyDeleteSpace(peerId string, raw *treechangeproto.R
|
|||||||
}
|
}
|
||||||
if len(content.GetContent()) != 1 ||
|
if len(content.GetContent()) != 1 ||
|
||||||
content.GetContent()[0].GetSpaceDelete() == nil ||
|
content.GetContent()[0].GetSpaceDelete() == nil ||
|
||||||
content.GetContent()[0].GetSpaceDelete().GetDeleterPeerId() != peerId {
|
content.GetContent()[0].GetSpaceDelete().GetDeleterPeerId() == "" {
|
||||||
return ErrIncorrectDeleteChange
|
return fmt.Errorf("incorrect delete change payload")
|
||||||
}
|
}
|
||||||
return
|
return
|
||||||
}
|
}
|
||||||
|
|||||||
@ -235,11 +235,11 @@ func TestSettingsObject_DeleteSpace(t *testing.T) {
|
|||||||
Heads: []string{rawCh.Id},
|
Heads: []string{rawCh.Id},
|
||||||
}, nil)
|
}, nil)
|
||||||
|
|
||||||
err = fx.doc.DeleteSpace(context.Background(), deleterId, rawCh)
|
err = fx.doc.DeleteSpace(context.Background(), rawCh)
|
||||||
require.NoError(t, err)
|
require.NoError(t, err)
|
||||||
}
|
}
|
||||||
|
|
||||||
func TestSettingsObject_DeleteSpaceIncorrectPeerId(t *testing.T) {
|
func TestSettingsObject_DeleteSpaceIncorrectChange(t *testing.T) {
|
||||||
fx := newSettingsFixture(t)
|
fx := newSettingsFixture(t)
|
||||||
defer fx.stop()
|
defer fx.stop()
|
||||||
|
|
||||||
@ -250,15 +250,29 @@ func TestSettingsObject_DeleteSpaceIncorrectPeerId(t *testing.T) {
|
|||||||
require.NoError(t, err)
|
require.NoError(t, err)
|
||||||
time.Sleep(100 * time.Millisecond)
|
time.Sleep(100 * time.Millisecond)
|
||||||
|
|
||||||
deleterId := "delId"
|
t.Run("incorrect change type", func(t *testing.T) {
|
||||||
rawCh := &treechangeproto.RawTreeChangeWithId{
|
rawCh := &treechangeproto.RawTreeChangeWithId{
|
||||||
RawChange: []byte{1},
|
RawChange: []byte{1},
|
||||||
Id: "id",
|
Id: "id",
|
||||||
}
|
}
|
||||||
changeFactory := settingsstate.NewChangeFactory()
|
changeFactory := settingsstate.NewChangeFactory()
|
||||||
delChange, _ := changeFactory.CreateSpaceDeleteChange("otherId", &settingsstate.State{}, false)
|
delChange, _ := changeFactory.CreateObjectDeleteChange("otherId", &settingsstate.State{}, false)
|
||||||
|
|
||||||
fx.syncTree.EXPECT().UnpackChange(rawCh).Return(delChange, nil)
|
fx.syncTree.EXPECT().UnpackChange(rawCh).Return(delChange, nil)
|
||||||
err = fx.doc.DeleteSpace(context.Background(), deleterId, rawCh)
|
err = fx.doc.DeleteSpace(context.Background(), rawCh)
|
||||||
require.Equal(t, err, ErrIncorrectDeleteChange)
|
require.NotNil(t, err)
|
||||||
|
})
|
||||||
|
|
||||||
|
t.Run("empty peer", func(t *testing.T) {
|
||||||
|
rawCh := &treechangeproto.RawTreeChangeWithId{
|
||||||
|
RawChange: []byte{1},
|
||||||
|
Id: "id",
|
||||||
|
}
|
||||||
|
changeFactory := settingsstate.NewChangeFactory()
|
||||||
|
delChange, _ := changeFactory.CreateSpaceDeleteChange("", &settingsstate.State{}, false)
|
||||||
|
|
||||||
|
fx.syncTree.EXPECT().UnpackChange(rawCh).Return(delChange, nil)
|
||||||
|
err = fx.doc.DeleteSpace(context.Background(), rawCh)
|
||||||
|
require.NotNil(t, err)
|
||||||
|
})
|
||||||
}
|
}
|
||||||
|
|||||||
@ -39,7 +39,6 @@ import (
|
|||||||
|
|
||||||
var (
|
var (
|
||||||
ErrSpaceClosed = errors.New("space is closed")
|
ErrSpaceClosed = errors.New("space is closed")
|
||||||
ErrPutNotImplemented = errors.New("put tree is not implemented")
|
|
||||||
)
|
)
|
||||||
|
|
||||||
type SpaceCreatePayload struct {
|
type SpaceCreatePayload struct {
|
||||||
@ -99,8 +98,8 @@ type Space interface {
|
|||||||
DeleteTree(ctx context.Context, id string) (err error)
|
DeleteTree(ctx context.Context, id string) (err error)
|
||||||
BuildHistoryTree(ctx context.Context, id string, opts HistoryTreeOpts) (t objecttree.HistoryTree, err error)
|
BuildHistoryTree(ctx context.Context, id string, opts HistoryTreeOpts) (t objecttree.HistoryTree, err error)
|
||||||
|
|
||||||
SpaceDeleteRawChange(ctx context.Context, deleterPeer string) (raw *treechangeproto.RawTreeChangeWithId, err error)
|
SpaceDeleteRawChange(ctx context.Context) (raw *treechangeproto.RawTreeChangeWithId, err error)
|
||||||
DeleteSpace(ctx context.Context, deleterPeer string, deleteChange *treechangeproto.RawTreeChangeWithId) (err error)
|
DeleteSpace(ctx context.Context, deleteChange *treechangeproto.RawTreeChangeWithId) (err error)
|
||||||
|
|
||||||
HeadSync() headsync.HeadSync
|
HeadSync() headsync.HeadSync
|
||||||
ObjectSync() objectsync.ObjectSync
|
ObjectSync() objectsync.ObjectSync
|
||||||
@ -369,12 +368,12 @@ func (s *space) DeleteTree(ctx context.Context, id string) (err error) {
|
|||||||
return s.settingsObject.DeleteObject(id)
|
return s.settingsObject.DeleteObject(id)
|
||||||
}
|
}
|
||||||
|
|
||||||
func (s *space) SpaceDeleteRawChange(ctx context.Context, deleterPeer string) (raw *treechangeproto.RawTreeChangeWithId, err error) {
|
func (s *space) SpaceDeleteRawChange(ctx context.Context) (raw *treechangeproto.RawTreeChangeWithId, err error) {
|
||||||
return s.settingsObject.SpaceDeleteRawChange(deleterPeer)
|
return s.settingsObject.SpaceDeleteRawChange()
|
||||||
}
|
}
|
||||||
|
|
||||||
func (s *space) DeleteSpace(ctx context.Context, deleterPeer string, deleteChange *treechangeproto.RawTreeChangeWithId) (err error) {
|
func (s *space) DeleteSpace(ctx context.Context, deleteChange *treechangeproto.RawTreeChangeWithId) (err error) {
|
||||||
return s.settingsObject.DeleteSpace(ctx, deleterPeer, deleteChange)
|
return s.settingsObject.DeleteSpace(ctx, deleteChange)
|
||||||
}
|
}
|
||||||
|
|
||||||
func (s *space) HandleMessage(ctx context.Context, hm HandleMessage) (err error) {
|
func (s *space) HandleMessage(ctx context.Context, hm HandleMessage) (err error) {
|
||||||
|
|||||||
Loading…
x
Reference in New Issue
Block a user