diff --git a/client/account/service.go b/client/account/service.go index d73f9c8d..8aeed2e2 100644 --- a/client/account/service.go +++ b/client/account/service.go @@ -1,21 +1,21 @@ package account import ( - commonaccount "github.com/anytypeio/go-anytype-infrastructure-experiments/common/account" + commonaccount "github.com/anytypeio/go-anytype-infrastructure-experiments/common/accountservice" "github.com/anytypeio/go-anytype-infrastructure-experiments/common/app" + "github.com/anytypeio/go-anytype-infrastructure-experiments/common/commonspace/object/accountdata" "github.com/anytypeio/go-anytype-infrastructure-experiments/common/config" - "github.com/anytypeio/go-anytype-infrastructure-experiments/common/pkg/acl/account" "github.com/anytypeio/go-anytype-infrastructure-experiments/common/util/keys" "github.com/anytypeio/go-anytype-infrastructure-experiments/common/util/keys/asymmetric/encryptionkey" "github.com/anytypeio/go-anytype-infrastructure-experiments/common/util/keys/asymmetric/signingkey" ) type service struct { - accountData *account.AccountData + accountData *accountdata.AccountData peerId string } -func (s *service) Account() *account.AccountData { +func (s *service) Account() *accountdata.AccountData { return s.accountData } @@ -55,7 +55,7 @@ func (s *service) Init(a *app.App) (err error) { return err } - s.accountData = &account.AccountData{ + s.accountData = &accountdata.AccountData{ Identity: identity, PeerKey: decodedPeerKey, SignKey: decodedSigningKey, diff --git a/client/api/rpchandler.go b/client/api/rpchandler.go deleted file mode 100644 index ba6aca50..00000000 --- a/client/api/rpchandler.go +++ /dev/null @@ -1,167 +0,0 @@ -package api - -import ( - "context" - "github.com/anytypeio/go-anytype-infrastructure-experiments/client/api/apiproto" - "github.com/anytypeio/go-anytype-infrastructure-experiments/client/clientspace" - "github.com/anytypeio/go-anytype-infrastructure-experiments/client/document" - "github.com/anytypeio/go-anytype-infrastructure-experiments/client/storage" - "github.com/anytypeio/go-anytype-infrastructure-experiments/common/account" - "github.com/anytypeio/go-anytype-infrastructure-experiments/common/commonspace" - "github.com/anytypeio/go-anytype-infrastructure-experiments/common/util/keys/symmetric" - "math/rand" -) - -type rpcHandler struct { - spaceService clientspace.Service - storageService storage.ClientStorage - docService document.Service - account account.Service -} - -func (r *rpcHandler) Watch(ctx context.Context, request *apiproto.WatchRequest) (resp *apiproto.WatchResponse, err error) { - space, err := r.spaceService.GetSpace(context.Background(), request.SpaceId) - if err != nil { - return - } - - space.StatusService().Watch(request.TreeId) - resp = &apiproto.WatchResponse{} - return -} - -func (r *rpcHandler) Unwatch(ctx context.Context, request *apiproto.UnwatchRequest) (resp *apiproto.UnwatchResponse, err error) { - space, err := r.spaceService.GetSpace(context.Background(), request.SpaceId) - if err != nil { - return - } - space.StatusService().Unwatch(request.TreeId) - resp = &apiproto.UnwatchResponse{} - return -} - -func (r *rpcHandler) LoadSpace(ctx context.Context, request *apiproto.LoadSpaceRequest) (resp *apiproto.LoadSpaceResponse, err error) { - _, err = r.spaceService.GetSpace(context.Background(), request.SpaceId) - if err != nil { - return - } - resp = &apiproto.LoadSpaceResponse{} - return -} - -func (r *rpcHandler) CreateSpace(ctx context.Context, request *apiproto.CreateSpaceRequest) (resp *apiproto.CreateSpaceResponse, err error) { - key, err := symmetric.NewRandom() - if err != nil { - return - } - sp, err := r.spaceService.CreateSpace(context.Background(), commonspace.SpaceCreatePayload{ - SigningKey: r.account.Account().SignKey, - EncryptionKey: r.account.Account().EncKey, - ReadKey: key.Bytes(), - ReplicationKey: rand.Uint64(), - }) - if err != nil { - return - } - id := sp.Id() - if err != nil { - return - } - resp = &apiproto.CreateSpaceResponse{Id: id} - return -} - -func (r *rpcHandler) DeriveSpace(ctx context.Context, request *apiproto.DeriveSpaceRequest) (resp *apiproto.DeriveSpaceResponse, err error) { - sp, err := r.spaceService.DeriveSpace(context.Background(), commonspace.SpaceDerivePayload{ - SigningKey: r.account.Account().SignKey, - EncryptionKey: r.account.Account().EncKey, - }) - if err != nil { - return - } - id := sp.Id() - if err != nil { - return - } - resp = &apiproto.DeriveSpaceResponse{Id: id} - return -} - -func (r *rpcHandler) CreateDocument(ctx context.Context, request *apiproto.CreateDocumentRequest) (resp *apiproto.CreateDocumentResponse, err error) { - id, err := r.docService.CreateDocument(request.SpaceId) - if err != nil { - return - } - resp = &apiproto.CreateDocumentResponse{Id: id} - return -} - -func (r *rpcHandler) DeleteDocument(ctx context.Context, request *apiproto.DeleteDocumentRequest) (resp *apiproto.DeleteDocumentResponse, err error) { - err = r.docService.DeleteDocument(request.SpaceId, request.DocumentId) - if err != nil { - return - } - resp = &apiproto.DeleteDocumentResponse{} - return -} - -func (r *rpcHandler) AddText(ctx context.Context, request *apiproto.AddTextRequest) (resp *apiproto.AddTextResponse, err error) { - root, head, err := r.docService.AddText(request.SpaceId, request.DocumentId, request.Text, request.IsSnapshot) - if err != nil { - return - } - resp = &apiproto.AddTextResponse{ - DocumentId: request.DocumentId, - HeadId: head, - RootId: root, - } - return -} - -func (r *rpcHandler) DumpTree(ctx context.Context, request *apiproto.DumpTreeRequest) (resp *apiproto.DumpTreeResponse, err error) { - dump, err := r.docService.DumpDocumentTree(request.SpaceId, request.DocumentId) - if err != nil { - return - } - resp = &apiproto.DumpTreeResponse{ - Dump: dump, - } - return -} - -func (r *rpcHandler) AllTrees(ctx context.Context, request *apiproto.AllTreesRequest) (resp *apiproto.AllTreesResponse, err error) { - heads, err := r.docService.AllDocumentHeads(request.SpaceId) - if err != nil { - return - } - var trees []*apiproto.Tree - for _, head := range heads { - trees = append(trees, &apiproto.Tree{ - Id: head.Id, - Heads: head.Heads, - }) - } - resp = &apiproto.AllTreesResponse{Trees: trees} - return -} - -func (r *rpcHandler) AllSpaces(ctx context.Context, request *apiproto.AllSpacesRequest) (resp *apiproto.AllSpacesResponse, err error) { - ids, err := r.storageService.AllSpaceIds() - if err != nil { - return - } - resp = &apiproto.AllSpacesResponse{SpaceIds: ids} - return -} - -func (r *rpcHandler) TreeParams(ctx context.Context, request *apiproto.TreeParamsRequest) (resp *apiproto.TreeParamsResponse, err error) { - root, heads, err := r.docService.TreeParams(request.SpaceId, request.DocumentId) - if err != nil { - return - } - resp = &apiproto.TreeParamsResponse{ - RootId: root, - HeadIds: heads, - } - return -} diff --git a/client/clientspace/clientcache/treecache.go b/client/clientspace/clientcache/treecache.go index e33a1235..4dffd9e1 100644 --- a/client/clientspace/clientcache/treecache.go +++ b/client/clientspace/clientcache/treecache.go @@ -5,12 +5,12 @@ import ( "errors" "github.com/anytypeio/go-anytype-infrastructure-experiments/client/clientspace" "github.com/anytypeio/go-anytype-infrastructure-experiments/client/document/textdocument" - "github.com/anytypeio/go-anytype-infrastructure-experiments/common/account" + "github.com/anytypeio/go-anytype-infrastructure-experiments/common/accountservice" "github.com/anytypeio/go-anytype-infrastructure-experiments/common/app" "github.com/anytypeio/go-anytype-infrastructure-experiments/common/app/logger" - "github.com/anytypeio/go-anytype-infrastructure-experiments/common/commonspace/treegetter" - "github.com/anytypeio/go-anytype-infrastructure-experiments/common/pkg/acl/tree" - "github.com/anytypeio/go-anytype-infrastructure-experiments/common/pkg/ocache" + "github.com/anytypeio/go-anytype-infrastructure-experiments/common/app/ocache" + "github.com/anytypeio/go-anytype-infrastructure-experiments/common/commonspace/object/tree/objecttree" + "github.com/anytypeio/go-anytype-infrastructure-experiments/common/commonspace/object/treegetter" "go.uber.org/zap" "time" ) @@ -25,7 +25,7 @@ const spaceKey ctxKey = 0 type treeCache struct { gcttl int cache ocache.OCache - account account.Service + account accountservice.Service clientService clientspace.Service } @@ -37,14 +37,14 @@ type TreeCache interface { type updateListener struct { } -func (u *updateListener) Update(tree tree.ObjectTree) { +func (u *updateListener) Update(tree objecttree.ObjectTree) { log.With( zap.Strings("heads", tree.Heads()), zap.String("tree id", tree.ID())). Debug("updating tree") } -func (u *updateListener) Rebuild(tree tree.ObjectTree) { +func (u *updateListener) Rebuild(tree objecttree.ObjectTree) { log.With( zap.Strings("heads", tree.Heads()), zap.String("tree id", tree.ID())). @@ -67,7 +67,7 @@ func (c *treeCache) Close(ctx context.Context) (err error) { func (c *treeCache) Init(a *app.App) (err error) { c.clientService = a.MustComponent(clientspace.CName).(clientspace.Service) - c.account = a.MustComponent(account.CName).(account.Service) + c.account = a.MustComponent(accountservice.CName).(accountservice.Service) c.cache = ocache.New( func(ctx context.Context, id string) (value ocache.Object, err error) { spaceId := ctx.Value(spaceKey).(string) @@ -98,7 +98,7 @@ func (c *treeCache) GetDocument(ctx context.Context, spaceId, id string) (doc te return } -func (c *treeCache) GetTree(ctx context.Context, spaceId, id string) (tr tree.ObjectTree, err error) { +func (c *treeCache) GetTree(ctx context.Context, spaceId, id string) (tr objecttree.ObjectTree, err error) { doc, err := c.GetDocument(ctx, spaceId, id) if err != nil { return diff --git a/client/clientspace/service.go b/client/clientspace/service.go index ebd2efd0..98a34b16 100644 --- a/client/clientspace/service.go +++ b/client/clientspace/service.go @@ -4,12 +4,13 @@ import ( "context" "github.com/anytypeio/go-anytype-infrastructure-experiments/common/app" "github.com/anytypeio/go-anytype-infrastructure-experiments/common/app/logger" + "github.com/anytypeio/go-anytype-infrastructure-experiments/common/app/ocache" "github.com/anytypeio/go-anytype-infrastructure-experiments/common/commonspace" + "github.com/anytypeio/go-anytype-infrastructure-experiments/common/commonspace/spacestorage" "github.com/anytypeio/go-anytype-infrastructure-experiments/common/commonspace/spacesyncproto" - "github.com/anytypeio/go-anytype-infrastructure-experiments/common/commonspace/storage" + "github.com/anytypeio/go-anytype-infrastructure-experiments/common/commonspace/syncstatus" config2 "github.com/anytypeio/go-anytype-infrastructure-experiments/common/config" "github.com/anytypeio/go-anytype-infrastructure-experiments/common/net/rpc/server" - "github.com/anytypeio/go-anytype-infrastructure-experiments/common/pkg/ocache" "time" ) @@ -31,14 +32,14 @@ type Service interface { type service struct { conf config2.Space spaceCache ocache.OCache - commonSpace commonspace.Service - spaceStorageProvider storage.SpaceStorageProvider + commonSpace commonspace.SpaceService + spaceStorageProvider spacestorage.SpaceStorageProvider } func (s *service) Init(a *app.App) (err error) { s.conf = a.MustComponent(config2.CName).(*config2.Config).Space - s.commonSpace = a.MustComponent(commonspace.CName).(commonspace.Service) - s.spaceStorageProvider = a.MustComponent(storage.CName).(storage.SpaceStorageProvider) + s.commonSpace = a.MustComponent(commonspace.CName).(commonspace.SpaceService) + s.spaceStorageProvider = a.MustComponent(spacestorage.CName).(spacestorage.SpaceStorageProvider) s.spaceCache = ocache.New( s.loadSpace, ocache.WithLogger(log.Sugar()), @@ -99,7 +100,7 @@ func (s *service) loadSpace(ctx context.Context, id string) (value ocache.Object if err != nil { return } - ns.StatusService().SetUpdateReceiver(&statusReceiver{}) + ns.SyncStatus().(syncstatus.SyncStatusWatcher).SetUpdateReceiver(&statusReceiver{}) if err = ns.Init(ctx); err != nil { return } diff --git a/client/cmd/client.go b/client/cmd/client.go index 42193a19..cbe57c17 100644 --- a/client/cmd/client.go +++ b/client/cmd/client.go @@ -5,10 +5,10 @@ import ( "flag" "fmt" "github.com/anytypeio/go-anytype-infrastructure-experiments/client/account" - "github.com/anytypeio/go-anytype-infrastructure-experiments/client/api" "github.com/anytypeio/go-anytype-infrastructure-experiments/client/badgerprovider" "github.com/anytypeio/go-anytype-infrastructure-experiments/client/clientspace" "github.com/anytypeio/go-anytype-infrastructure-experiments/client/clientspace/clientcache" + "github.com/anytypeio/go-anytype-infrastructure-experiments/client/debug/clientdebugrpc" "github.com/anytypeio/go-anytype-infrastructure-experiments/client/document" "github.com/anytypeio/go-anytype-infrastructure-experiments/client/filestorage" "github.com/anytypeio/go-anytype-infrastructure-experiments/client/filestorage/rpcstore" @@ -22,7 +22,7 @@ import ( "github.com/anytypeio/go-anytype-infrastructure-experiments/common/net/dialer" "github.com/anytypeio/go-anytype-infrastructure-experiments/common/net/pool" "github.com/anytypeio/go-anytype-infrastructure-experiments/common/net/rpc/server" - "github.com/anytypeio/go-anytype-infrastructure-experiments/common/net/secure" + "github.com/anytypeio/go-anytype-infrastructure-experiments/common/net/secureservice" "github.com/anytypeio/go-anytype-infrastructure-experiments/common/nodeconf" "go.uber.org/zap" "net/http" @@ -104,7 +104,7 @@ func Bootstrap(a *app.App) { Register(badgerprovider.New()). Register(storage.New()). Register(clientcache.New(200)). - Register(secure.New()). + Register(secureservice.New()). Register(dialer.New()). Register(pool.New()). Register(commonspace.New()). @@ -114,5 +114,5 @@ func Bootstrap(a *app.App) { Register(rpcstore.New()). Register(fileservice.New()). Register(filestorage.New()). - Register(api.New()) + Register(clientdebugrpc.New()) } diff --git a/client/api/service.go b/client/debug/clientdebugrpc/clientdebugrpc.go similarity index 71% rename from client/api/service.go rename to client/debug/clientdebugrpc/clientdebugrpc.go index 8e7ea5c9..0317a81c 100644 --- a/client/api/service.go +++ b/client/debug/clientdebugrpc/clientdebugrpc.go @@ -1,51 +1,54 @@ -package api +package clientdebugrpc import ( "context" - "github.com/anytypeio/go-anytype-infrastructure-experiments/client/api/apiproto" "github.com/anytypeio/go-anytype-infrastructure-experiments/client/clientspace" + "github.com/anytypeio/go-anytype-infrastructure-experiments/client/debug/clientdebugrpc/clientdebugrpcproto" "github.com/anytypeio/go-anytype-infrastructure-experiments/client/document" clientstorage "github.com/anytypeio/go-anytype-infrastructure-experiments/client/storage" - "github.com/anytypeio/go-anytype-infrastructure-experiments/common/account" + "github.com/anytypeio/go-anytype-infrastructure-experiments/common/accountservice" "github.com/anytypeio/go-anytype-infrastructure-experiments/common/app" "github.com/anytypeio/go-anytype-infrastructure-experiments/common/app/logger" - "github.com/anytypeio/go-anytype-infrastructure-experiments/common/commonspace/storage" + "github.com/anytypeio/go-anytype-infrastructure-experiments/common/commonfile/fileservice" + "github.com/anytypeio/go-anytype-infrastructure-experiments/common/commonspace/spacestorage" "github.com/anytypeio/go-anytype-infrastructure-experiments/common/config" "github.com/anytypeio/go-anytype-infrastructure-experiments/common/net/rpc/server" - "github.com/anytypeio/go-anytype-infrastructure-experiments/common/net/secure" + "github.com/anytypeio/go-anytype-infrastructure-experiments/common/net/secureservice" "storj.io/drpc" ) -const CName = "api.service" +const CName = "debug.clientdebugrpc" var log = logger.NewNamed(CName) -func New() Service { +func New() ClientDebugRpc { return &service{BaseDrpcServer: server.NewBaseDrpcServer()} } -type Service interface { +type ClientDebugRpc interface { app.ComponentRunnable drpc.Mux } type service struct { - transport secure.Service + transport secureservice.SecureService cfg *config.Config spaceService clientspace.Service storageService clientstorage.ClientStorage docService document.Service - account account.Service + account accountservice.Service + file fileservice.FileService *server.BaseDrpcServer } func (s *service) Init(a *app.App) (err error) { s.spaceService = a.MustComponent(clientspace.CName).(clientspace.Service) - s.storageService = a.MustComponent(storage.CName).(clientstorage.ClientStorage) + s.storageService = a.MustComponent(spacestorage.CName).(clientstorage.ClientStorage) s.docService = a.MustComponent(document.CName).(document.Service) - s.account = a.MustComponent(account.CName).(account.Service) + s.account = a.MustComponent(accountservice.CName).(accountservice.Service) s.cfg = a.MustComponent(config.CName).(*config.Config) - s.transport = a.MustComponent(secure.CName).(secure.Service) + s.transport = a.MustComponent(secureservice.CName).(secureservice.SecureService) + s.file = a.MustComponent(fileservice.CName).(fileservice.FileService) return nil } @@ -67,11 +70,12 @@ func (s *service) Run(ctx context.Context) (err error) { if err != nil { return } - return apiproto.DRPCRegisterClientApi(s, &rpcHandler{ + return clientdebugrpcproto.DRPCRegisterClientApi(s, &rpcHandler{ spaceService: s.spaceService, storageService: s.storageService, docService: s.docService, account: s.account, + file: s.file, }) } diff --git a/client/api/apiproto/api.pb.go b/client/debug/clientdebugrpc/clientdebugrpcproto/api.pb.go similarity index 99% rename from client/api/apiproto/api.pb.go rename to client/debug/clientdebugrpc/clientdebugrpcproto/api.pb.go index cb7865a0..78d33553 100644 --- a/client/api/apiproto/api.pb.go +++ b/client/debug/clientdebugrpc/clientdebugrpcproto/api.pb.go @@ -1,7 +1,7 @@ // Code generated by protoc-gen-gogo. DO NOT EDIT. // source: api/apiproto/protos/api.proto -package apiproto +package clientdebugrpcproto import ( fmt "fmt" diff --git a/client/api/apiproto/api_drpc.pb.go b/client/debug/clientdebugrpc/clientdebugrpcproto/api_drpc.pb.go similarity index 99% rename from client/api/apiproto/api_drpc.pb.go rename to client/debug/clientdebugrpc/clientdebugrpcproto/api_drpc.pb.go index 6bf49f0c..1783c3c9 100644 --- a/client/api/apiproto/api_drpc.pb.go +++ b/client/debug/clientdebugrpc/clientdebugrpcproto/api_drpc.pb.go @@ -2,7 +2,7 @@ // protoc-gen-go-drpc version: v0.0.32 // source: api/apiproto/protos/api.proto -package apiproto +package clientdebugrpcproto import ( bytes "bytes" diff --git a/client/api/apiproto/protos/api.proto b/client/debug/clientdebugrpc/clientdebugrpcproto/protos/api.proto similarity index 100% rename from client/api/apiproto/protos/api.proto rename to client/debug/clientdebugrpc/clientdebugrpcproto/protos/api.proto diff --git a/client/debug/clientdebugrpc/rpchandler.go b/client/debug/clientdebugrpc/rpchandler.go new file mode 100644 index 00000000..db3f936f --- /dev/null +++ b/client/debug/clientdebugrpc/rpchandler.go @@ -0,0 +1,222 @@ +package clientdebugrpc + +import ( + "context" + "github.com/anytypeio/go-anytype-infrastructure-experiments/client/clientspace" + "github.com/anytypeio/go-anytype-infrastructure-experiments/client/debug/clientdebugrpc/clientdebugrpcproto" + "github.com/anytypeio/go-anytype-infrastructure-experiments/client/document" + "github.com/anytypeio/go-anytype-infrastructure-experiments/client/storage" + "github.com/anytypeio/go-anytype-infrastructure-experiments/common/accountservice" + "github.com/anytypeio/go-anytype-infrastructure-experiments/common/commonfile/fileservice" + "github.com/anytypeio/go-anytype-infrastructure-experiments/common/commonspace" + "github.com/anytypeio/go-anytype-infrastructure-experiments/common/commonspace/syncstatus" + "github.com/anytypeio/go-anytype-infrastructure-experiments/common/util/keys/symmetric" + "github.com/ipfs/go-cid" + "go.uber.org/zap" + "io" + "math/rand" + "os" +) + +type rpcHandler struct { + spaceService clientspace.Service + storageService storage.ClientStorage + docService document.Service + account accountservice.Service + file fileservice.FileService +} + +func (r *rpcHandler) Watch(ctx context.Context, request *clientdebugrpcproto.WatchRequest) (resp *clientdebugrpcproto.WatchResponse, err error) { + space, err := r.spaceService.GetSpace(context.Background(), request.SpaceId) + if err != nil { + return + } + watcher := space.SyncStatus().(syncstatus.SyncStatusWatcher) + watcher.Watch(request.TreeId) + resp = &clientdebugrpcproto.WatchResponse{} + return +} + +func (r *rpcHandler) Unwatch(ctx context.Context, request *clientdebugrpcproto.UnwatchRequest) (resp *clientdebugrpcproto.UnwatchResponse, err error) { + space, err := r.spaceService.GetSpace(context.Background(), request.SpaceId) + if err != nil { + return + } + watcher := space.SyncStatus().(syncstatus.SyncStatusWatcher) + watcher.Unwatch(request.TreeId) + resp = &clientdebugrpcproto.UnwatchResponse{} + return +} + +func (r *rpcHandler) LoadSpace(ctx context.Context, request *clientdebugrpcproto.LoadSpaceRequest) (resp *clientdebugrpcproto.LoadSpaceResponse, err error) { + _, err = r.spaceService.GetSpace(context.Background(), request.SpaceId) + if err != nil { + return + } + resp = &clientdebugrpcproto.LoadSpaceResponse{} + return +} + +func (r *rpcHandler) CreateSpace(ctx context.Context, request *clientdebugrpcproto.CreateSpaceRequest) (resp *clientdebugrpcproto.CreateSpaceResponse, err error) { + key, err := symmetric.NewRandom() + if err != nil { + return + } + sp, err := r.spaceService.CreateSpace(context.Background(), commonspace.SpaceCreatePayload{ + SigningKey: r.account.Account().SignKey, + EncryptionKey: r.account.Account().EncKey, + ReadKey: key.Bytes(), + ReplicationKey: rand.Uint64(), + }) + if err != nil { + return + } + id := sp.Id() + if err != nil { + return + } + resp = &clientdebugrpcproto.CreateSpaceResponse{Id: id} + return +} + +func (r *rpcHandler) DeriveSpace(ctx context.Context, request *clientdebugrpcproto.DeriveSpaceRequest) (resp *clientdebugrpcproto.DeriveSpaceResponse, err error) { + sp, err := r.spaceService.DeriveSpace(context.Background(), commonspace.SpaceDerivePayload{ + SigningKey: r.account.Account().SignKey, + EncryptionKey: r.account.Account().EncKey, + }) + if err != nil { + return + } + id := sp.Id() + if err != nil { + return + } + resp = &clientdebugrpcproto.DeriveSpaceResponse{Id: id} + return +} + +func (r *rpcHandler) CreateDocument(ctx context.Context, request *clientdebugrpcproto.CreateDocumentRequest) (resp *clientdebugrpcproto.CreateDocumentResponse, err error) { + id, err := r.docService.CreateDocument(request.SpaceId) + if err != nil { + return + } + resp = &clientdebugrpcproto.CreateDocumentResponse{Id: id} + return +} + +func (r *rpcHandler) DeleteDocument(ctx context.Context, request *clientdebugrpcproto.DeleteDocumentRequest) (resp *clientdebugrpcproto.DeleteDocumentResponse, err error) { + err = r.docService.DeleteDocument(request.SpaceId, request.DocumentId) + if err != nil { + return + } + resp = &clientdebugrpcproto.DeleteDocumentResponse{} + return +} + +func (r *rpcHandler) AddText(ctx context.Context, request *clientdebugrpcproto.AddTextRequest) (resp *clientdebugrpcproto.AddTextResponse, err error) { + root, head, err := r.docService.AddText(request.SpaceId, request.DocumentId, request.Text, request.IsSnapshot) + if err != nil { + return + } + resp = &clientdebugrpcproto.AddTextResponse{ + DocumentId: request.DocumentId, + HeadId: head, + RootId: root, + } + return +} + +func (r *rpcHandler) DumpTree(ctx context.Context, request *clientdebugrpcproto.DumpTreeRequest) (resp *clientdebugrpcproto.DumpTreeResponse, err error) { + dump, err := r.docService.DumpDocumentTree(request.SpaceId, request.DocumentId) + if err != nil { + return + } + resp = &clientdebugrpcproto.DumpTreeResponse{ + Dump: dump, + } + return +} + +func (r *rpcHandler) AllTrees(ctx context.Context, request *clientdebugrpcproto.AllTreesRequest) (resp *clientdebugrpcproto.AllTreesResponse, err error) { + heads, err := r.docService.AllDocumentHeads(request.SpaceId) + if err != nil { + return + } + var trees []*clientdebugrpcproto.Tree + for _, head := range heads { + trees = append(trees, &clientdebugrpcproto.Tree{ + Id: head.Id, + Heads: head.Heads, + }) + } + resp = &clientdebugrpcproto.AllTreesResponse{Trees: trees} + return +} + +func (r *rpcHandler) AllSpaces(ctx context.Context, request *clientdebugrpcproto.AllSpacesRequest) (resp *clientdebugrpcproto.AllSpacesResponse, err error) { + ids, err := r.storageService.AllSpaceIds() + if err != nil { + return + } + resp = &clientdebugrpcproto.AllSpacesResponse{SpaceIds: ids} + return +} + +func (r *rpcHandler) TreeParams(ctx context.Context, request *clientdebugrpcproto.TreeParamsRequest) (resp *clientdebugrpcproto.TreeParamsResponse, err error) { + root, heads, err := r.docService.TreeParams(request.SpaceId, request.DocumentId) + if err != nil { + return + } + resp = &clientdebugrpcproto.TreeParamsResponse{ + RootId: root, + HeadIds: heads, + } + return +} + +func (r *rpcHandler) PutFile(ctx context.Context, request *clientdebugrpcproto.PutFileRequest) (*clientdebugrpcproto.PutFileResponse, error) { + f, err := os.Open(request.Path) + if err != nil { + return nil, err + } + defer f.Close() + n, err := r.file.AddFile(ctx, f) + if err != nil { + return nil, err + } + return &clientdebugrpcproto.PutFileResponse{ + Hash: n.Cid().String(), + }, nil +} + +func (r *rpcHandler) GetFile(ctx context.Context, request *clientdebugrpcproto.GetFileRequest) (*clientdebugrpcproto.GetFileResponse, error) { + c, err := cid.Parse(request.Hash) + if err != nil { + return nil, err + } + + f, err := os.Create(request.Path) + if err != nil { + return nil, err + } + defer f.Close() + + rd, err := r.file.GetFile(ctx, c) + if err != nil { + return nil, err + } + defer rd.Close() + wr, err := io.Copy(f, rd) + if err != nil && err != io.EOF { + return nil, err + } + log.Info("copied bytes", zap.Int64("size", wr)) + return &clientdebugrpcproto.GetFileResponse{ + Path: request.Path, + }, nil +} + +func (r *rpcHandler) DeleteFile(ctx context.Context, request *clientdebugrpcproto.DeleteFileRequest) (*clientdebugrpcproto.DeleteFileResponse, error) { + //TODO implement me + panic("implement me") +} diff --git a/client/document/service.go b/client/document/service.go index 50cffa3e..7d49990f 100644 --- a/client/document/service.go +++ b/client/document/service.go @@ -5,10 +5,11 @@ import ( "github.com/anytypeio/go-anytype-infrastructure-experiments/client/clientspace" "github.com/anytypeio/go-anytype-infrastructure-experiments/client/clientspace/clientcache" "github.com/anytypeio/go-anytype-infrastructure-experiments/client/document/textdocument" - "github.com/anytypeio/go-anytype-infrastructure-experiments/common/account" + "github.com/anytypeio/go-anytype-infrastructure-experiments/common/accountservice" "github.com/anytypeio/go-anytype-infrastructure-experiments/common/app" "github.com/anytypeio/go-anytype-infrastructure-experiments/common/app/logger" - "github.com/anytypeio/go-anytype-infrastructure-experiments/common/commonspace/treegetter" + "github.com/anytypeio/go-anytype-infrastructure-experiments/common/commonspace/headsync" + "github.com/anytypeio/go-anytype-infrastructure-experiments/common/commonspace/object/treegetter" ) type Service interface { @@ -27,7 +28,7 @@ const CName = "client.document" var log = logger.NewNamed(CName) type service struct { - account account.Service + account accountservice.Service spaceService clientspace.Service cache clientcache.TreeCache } @@ -37,7 +38,7 @@ func New() Service { } func (s *service) Init(a *app.App) (err error) { - s.account = a.MustComponent(account.CName).(account.Service) + s.account = a.MustComponent(accountservice.CName).(accountservice.Service) s.spaceService = a.MustComponent(clientspace.CName).(clientspace.Service) s.cache = a.MustComponent(treegetter.CName).(clientcache.TreeCache) return diff --git a/common/pkg/acl/testutils/testchanges/proto/test.proto b/client/document/textchangeproto/protos/test.proto similarity index 83% rename from common/pkg/acl/testutils/testchanges/proto/test.proto rename to client/document/textchangeproto/protos/test.proto index 2c9d5f66..5a9b89e8 100644 --- a/common/pkg/acl/testutils/testchanges/proto/test.proto +++ b/client/document/textchangeproto/protos/test.proto @@ -1,6 +1,6 @@ syntax = "proto3"; -package anytype; -option go_package = "testchanges"; +package textchange; +option go_package = "textchange"; message TextContent { oneof value { diff --git a/common/pkg/acl/testutils/testchanges/proto/test.pb.go b/client/document/textchangeproto/test.pb.go similarity index 99% rename from common/pkg/acl/testutils/testchanges/proto/test.pb.go rename to client/document/textchangeproto/test.pb.go index 9071b091..28ab3d4e 100644 --- a/common/pkg/acl/testutils/testchanges/proto/test.pb.go +++ b/client/document/textchangeproto/test.pb.go @@ -1,7 +1,7 @@ // Code generated by protoc-gen-gogo. DO NOT EDIT. // source: pkg/acl/testutils/testchanges/proto/test.proto -package testchanges +package textchangeproto import ( fmt "fmt" diff --git a/client/document/textdocument/textdocument.go b/client/document/textdocument/textdocument.go index d47ccf50..dc66ba1b 100644 --- a/client/document/textdocument/textdocument.go +++ b/client/document/textdocument/textdocument.go @@ -2,17 +2,17 @@ package textdocument import ( "context" - "github.com/anytypeio/go-anytype-infrastructure-experiments/common/account" + textchange "github.com/anytypeio/go-anytype-infrastructure-experiments/client/document/textchangeproto" + "github.com/anytypeio/go-anytype-infrastructure-experiments/common/accountservice" "github.com/anytypeio/go-anytype-infrastructure-experiments/common/commonspace" - "github.com/anytypeio/go-anytype-infrastructure-experiments/common/commonspace/synctree/updatelistener" - testchanges "github.com/anytypeio/go-anytype-infrastructure-experiments/common/pkg/acl/testutils/testchanges/proto" - "github.com/anytypeio/go-anytype-infrastructure-experiments/common/pkg/acl/tree" + "github.com/anytypeio/go-anytype-infrastructure-experiments/common/commonspace/object/tree/objecttree" + "github.com/anytypeio/go-anytype-infrastructure-experiments/common/commonspace/object/tree/synctree/updatelistener" "github.com/gogo/protobuf/proto" ) type TextDocument interface { - tree.ObjectTree - InnerTree() tree.ObjectTree + objecttree.ObjectTree + InnerTree() objecttree.ObjectTree AddText(text string, isSnapshot bool) (string, string, error) Text() (string, error) TreeDump() string @@ -20,15 +20,15 @@ type TextDocument interface { } type textDocument struct { - tree.ObjectTree - account account.Service + objecttree.ObjectTree + account accountservice.Service } func CreateTextDocument( ctx context.Context, space commonspace.Space, - account account.Service) (id string, err error) { - payload := tree.ObjectTreeCreatePayload{ + account accountservice.Service) (id string, err error) { + payload := objecttree.ObjectTreeCreatePayload{ SignKey: account.Account().SignKey, SpaceId: space.Id(), Identity: account.Account().Identity, @@ -36,7 +36,7 @@ func CreateTextDocument( return space.CreateTree(ctx, payload) } -func NewTextDocument(ctx context.Context, space commonspace.Space, id string, listener updatelistener.UpdateListener, account account.Service) (doc TextDocument, err error) { +func NewTextDocument(ctx context.Context, space commonspace.Space, id string, listener updatelistener.UpdateListener, account accountservice.Service) (doc TextDocument, err error) { t, err := space.BuildTree(ctx, id, listener) if err != nil { return @@ -47,16 +47,16 @@ func NewTextDocument(ctx context.Context, space commonspace.Space, id string, li }, nil } -func (t *textDocument) InnerTree() tree.ObjectTree { +func (t *textDocument) InnerTree() objecttree.ObjectTree { return t.ObjectTree } func (t *textDocument) AddText(text string, isSnapshot bool) (root, head string, err error) { - content := &testchanges.TextContent_TextAppend{ - TextAppend: &testchanges.TextAppend{Text: text}, + content := &textchange.TextContent_TextAppend{ + TextAppend: &textchange.TextAppend{Text: text}, } - change := &testchanges.TextData{ - Content: []*testchanges.TextContent{ + change := &textchange.TextData{ + Content: []*textchange.TextContent{ {content}, }, Snapshot: nil, @@ -67,7 +67,7 @@ func (t *textDocument) AddText(text string, isSnapshot bool) (root, head string, } t.Lock() defer t.Unlock() - addRes, err := t.AddContent(context.Background(), tree.SignableChangeContent{ + addRes, err := t.AddContent(context.Background(), objecttree.SignableChangeContent{ Data: res, Key: t.account.Account().SignKey, Identity: t.account.Account().Identity, @@ -87,7 +87,7 @@ func (t *textDocument) Text() (text string, err error) { err = t.Iterate( func(decrypted []byte) (any, error) { - textChange := &testchanges.TextData{} + textChange := &textchange.TextData{} err = proto.Unmarshal(decrypted, textChange) if err != nil { return nil, err @@ -98,7 +98,7 @@ func (t *textDocument) Text() (text string, err error) { } } return textChange, nil - }, func(change *tree.Change) bool { + }, func(change *objecttree.Change) bool { return true }) return diff --git a/client/filestorage/rpcstore/clientmgr.go b/client/filestorage/rpcstore/clientmgr.go index 45d4c579..04131949 100644 --- a/client/filestorage/rpcstore/clientmgr.go +++ b/client/filestorage/rpcstore/clientmgr.go @@ -3,7 +3,7 @@ package rpcstore import ( "context" "fmt" - "github.com/anytypeio/go-anytype-infrastructure-experiments/common/pkg/ocache" + "github.com/anytypeio/go-anytype-infrastructure-experiments/common/app/ocache" "github.com/cheggaaa/mb/v3" "go.uber.org/zap" "math/rand" diff --git a/client/storage/keys.go b/client/storage/keys.go index cd19c07a..e3688ce3 100644 --- a/client/storage/keys.go +++ b/client/storage/keys.go @@ -1,7 +1,7 @@ package storage import ( - "github.com/anytypeio/go-anytype-infrastructure-experiments/common/pkg/acl/storage" + "github.com/anytypeio/go-anytype-infrastructure-experiments/common/commonspace/object/tree/treestorage" ) type aclKeys struct { @@ -13,8 +13,8 @@ type aclKeys struct { func newACLKeys(spaceId string) aclKeys { return aclKeys{ spaceId: spaceId, - rootKey: storage.JoinStringsToBytes("space", spaceId, "a", "rootId"), - headKey: storage.JoinStringsToBytes("space", spaceId, "a", "headId"), + rootKey: treestorage.JoinStringsToBytes("space", spaceId, "a", "rootId"), + headKey: treestorage.JoinStringsToBytes("space", spaceId, "a", "headId"), } } @@ -27,7 +27,7 @@ func (a aclKeys) RootIdKey() []byte { } func (a aclKeys) RawRecordKey(id string) []byte { - return storage.JoinStringsToBytes("space", a.spaceId, "a", id) + return treestorage.JoinStringsToBytes("space", a.spaceId, "a", id) } type treeKeys struct { @@ -42,9 +42,9 @@ func newTreeKeys(spaceId, id string) treeKeys { return treeKeys{ id: id, spaceId: spaceId, - headsKey: storage.JoinStringsToBytes("space", spaceId, "t", id, "heads"), - rootKey: storage.JoinStringsToBytes("space", spaceId, "t", "rootId", id), - rawChangePrefix: storage.JoinStringsToBytes("space", spaceId, "t", id), + headsKey: treestorage.JoinStringsToBytes("space", spaceId, "t", id, "heads"), + rootKey: treestorage.JoinStringsToBytes("space", spaceId, "t", "rootId", id), + rawChangePrefix: treestorage.JoinStringsToBytes("space", spaceId, "t", id), } } @@ -57,7 +57,7 @@ func (t treeKeys) RootIdKey() []byte { } func (t treeKeys) RawChangeKey(id string) []byte { - return storage.JoinStringsToBytes("space", t.spaceId, "t", t.id, id) + return treestorage.JoinStringsToBytes("space", t.spaceId, "t", t.id, id) } func (t treeKeys) RawChangePrefix() []byte { @@ -74,9 +74,9 @@ type spaceKeys struct { func newSpaceKeys(spaceId string) spaceKeys { return spaceKeys{ spaceId: spaceId, - headerKey: storage.JoinStringsToBytes("space", "header", spaceId), - treePrefixKey: storage.JoinStringsToBytes("space", spaceId, "t", "rootId"), - spaceSettingsIdKey: storage.JoinStringsToBytes("space", spaceId, "spaceSettingsId"), + headerKey: treestorage.JoinStringsToBytes("space", "header", spaceId), + treePrefixKey: treestorage.JoinStringsToBytes("space", spaceId, "t", "rootId"), + spaceSettingsIdKey: treestorage.JoinStringsToBytes("space", spaceId, "spaceSettingsId"), } } @@ -93,7 +93,7 @@ func (s spaceKeys) SpaceSettingsId() []byte { } func (s spaceKeys) TreeDeletedKey(id string) []byte { - return storage.JoinStringsToBytes("space", s.spaceId, "deleted", id) + return treestorage.JoinStringsToBytes("space", s.spaceId, "deleted", id) } type storageServiceKeys struct { diff --git a/client/storage/liststorage.go b/client/storage/liststorage.go index ea6fb886..c016f89b 100644 --- a/client/storage/liststorage.go +++ b/client/storage/liststorage.go @@ -3,8 +3,8 @@ package storage import ( "context" "errors" - "github.com/anytypeio/go-anytype-infrastructure-experiments/common/pkg/acl/aclrecordproto" - "github.com/anytypeio/go-anytype-infrastructure-experiments/common/pkg/acl/storage" + "github.com/anytypeio/go-anytype-infrastructure-experiments/common/commonspace/object/acl/aclrecordproto" + "github.com/anytypeio/go-anytype-infrastructure-experiments/common/commonspace/object/acl/liststorage" "github.com/dgraph-io/badger/v3" ) @@ -17,7 +17,7 @@ type listStorage struct { root *aclrecordproto.RawACLRecordWithId } -func newListStorage(spaceId string, db *badger.DB, txn *badger.Txn) (ls storage.ListStorage, err error) { +func newListStorage(spaceId string, db *badger.DB, txn *badger.Txn) (ls liststorage.ListStorage, err error) { keys := newACLKeys(spaceId) rootId, err := getTxn(txn, keys.RootIdKey()) if err != nil { @@ -44,7 +44,7 @@ func newListStorage(spaceId string, db *badger.DB, txn *badger.Txn) (ls storage. return } -func createListStorage(spaceId string, db *badger.DB, txn *badger.Txn, root *aclrecordproto.RawACLRecordWithId) (ls storage.ListStorage, err error) { +func createListStorage(spaceId string, db *badger.DB, txn *badger.Txn, root *aclrecordproto.RawACLRecordWithId) (ls liststorage.ListStorage, err error) { keys := newACLKeys(spaceId) _, err = getTxn(txn, keys.RootIdKey()) if err != badger.ErrKeyNotFound { @@ -98,7 +98,7 @@ func (l *listStorage) GetRawRecord(ctx context.Context, id string) (raw *aclreco res, err := getDB(l.db, l.keys.RawRecordKey(id)) if err != nil { if err == badger.ErrKeyNotFound { - err = storage.ErrUnknownRecord + err = liststorage.ErrUnknownRecord } return } diff --git a/client/storage/liststorage_test.go b/client/storage/liststorage_test.go index 6afa676c..7146fc67 100644 --- a/client/storage/liststorage_test.go +++ b/client/storage/liststorage_test.go @@ -2,15 +2,15 @@ package storage import ( "context" - "github.com/anytypeio/go-anytype-infrastructure-experiments/common/pkg/acl/aclrecordproto" - "github.com/anytypeio/go-anytype-infrastructure-experiments/common/pkg/acl/storage" + "github.com/anytypeio/go-anytype-infrastructure-experiments/common/commonspace/object/acl/aclrecordproto" + "github.com/anytypeio/go-anytype-infrastructure-experiments/common/commonspace/object/acl/liststorage" "github.com/dgraph-io/badger/v3" "github.com/stretchr/testify/require" "testing" ) -func testList(t *testing.T, store storage.ListStorage, root *aclrecordproto.RawACLRecordWithId, head string) { - require.Equal(t, store.ID(), root.Id) +func testList(t *testing.T, store liststorage.ListStorage, root *aclrecordproto.RawACLRecordWithId, head string) { + require.Equal(t, store.Id(), root.Id) aclRoot, err := store.Root() require.NoError(t, err) @@ -34,7 +34,7 @@ func TestListStorage(t *testing.T) { return nil }) - var listStore storage.ListStorage + var listStore liststorage.ListStorage fx.db.View(func(txn *badger.Txn) (err error) { listStore, err = newListStorage(spaceId, fx.db, txn) require.NoError(t, err) diff --git a/client/storage/spacestorage.go b/client/storage/spacestorage.go index 7f65f9ff..c1447d10 100644 --- a/client/storage/spacestorage.go +++ b/client/storage/spacestorage.go @@ -1,10 +1,11 @@ package storage import ( + "github.com/anytypeio/go-anytype-infrastructure-experiments/common/commonspace/object/acl/liststorage" + "github.com/anytypeio/go-anytype-infrastructure-experiments/common/commonspace/object/tree/treechangeproto" + storage "github.com/anytypeio/go-anytype-infrastructure-experiments/common/commonspace/object/tree/treestorage" + spacestorage "github.com/anytypeio/go-anytype-infrastructure-experiments/common/commonspace/spacestorage" "github.com/anytypeio/go-anytype-infrastructure-experiments/common/commonspace/spacesyncproto" - spacestorage "github.com/anytypeio/go-anytype-infrastructure-experiments/common/commonspace/storage" - storage "github.com/anytypeio/go-anytype-infrastructure-experiments/common/pkg/acl/storage" - "github.com/anytypeio/go-anytype-infrastructure-experiments/common/pkg/acl/treechangeproto" "github.com/dgraph-io/badger/v3" ) @@ -13,7 +14,7 @@ type spaceStorage struct { spaceSettingsId string objDb *badger.DB keys spaceKeys - aclStorage storage.ListStorage + aclStorage liststorage.ListStorage header *spacesyncproto.RawSpaceHeaderWithId } @@ -119,7 +120,7 @@ func (s *spaceStorage) CreateTreeStorage(payload storage.TreeStorageCreatePayloa return createTreeStorage(s.objDb, s.spaceId, payload) } -func (s *spaceStorage) ACLStorage() (storage.ListStorage, error) { +func (s *spaceStorage) ACLStorage() (liststorage.ListStorage, error) { return s.aclStorage, nil } diff --git a/client/storage/spacestorage_test.go b/client/storage/spacestorage_test.go index 10b29f6d..8083d2f0 100644 --- a/client/storage/spacestorage_test.go +++ b/client/storage/spacestorage_test.go @@ -1,10 +1,10 @@ package storage import ( + "github.com/anytypeio/go-anytype-infrastructure-experiments/common/commonspace/object/acl/aclrecordproto" + "github.com/anytypeio/go-anytype-infrastructure-experiments/common/commonspace/object/tree/treechangeproto" + spacestorage "github.com/anytypeio/go-anytype-infrastructure-experiments/common/commonspace/spacestorage" "github.com/anytypeio/go-anytype-infrastructure-experiments/common/commonspace/spacesyncproto" - spacestorage "github.com/anytypeio/go-anytype-infrastructure-experiments/common/commonspace/storage" - "github.com/anytypeio/go-anytype-infrastructure-experiments/common/pkg/acl/aclrecordproto" - "github.com/anytypeio/go-anytype-infrastructure-experiments/common/pkg/acl/treechangeproto" "github.com/stretchr/testify/require" "sort" "strconv" diff --git a/client/storage/storageservice.go b/client/storage/storageservice.go index 43b9c6f4..b7f8e851 100644 --- a/client/storage/storageservice.go +++ b/client/storage/storageservice.go @@ -4,7 +4,7 @@ import ( "context" "github.com/anytypeio/go-anytype-infrastructure-experiments/client/badgerprovider" "github.com/anytypeio/go-anytype-infrastructure-experiments/common/app" - "github.com/anytypeio/go-anytype-infrastructure-experiments/common/commonspace/storage" + "github.com/anytypeio/go-anytype-infrastructure-experiments/common/commonspace/spacestorage" "github.com/dgraph-io/badger/v3" ) @@ -14,7 +14,7 @@ type storageService struct { } type ClientStorage interface { - storage.SpaceStorageProvider + spacestorage.SpaceStorageProvider app.ComponentRunnable AllSpaceIds() (ids []string, err error) } @@ -31,14 +31,14 @@ func (s *storageService) Init(a *app.App) (err error) { } func (s *storageService) Name() (name string) { - return storage.CName + return spacestorage.CName } -func (s *storageService) SpaceStorage(id string) (storage.SpaceStorage, error) { +func (s *storageService) SpaceStorage(id string) (spacestorage.SpaceStorage, error) { return newSpaceStorage(s.db, id) } -func (s *storageService) CreateSpaceStorage(payload storage.SpaceStorageCreatePayload) (storage.SpaceStorage, error) { +func (s *storageService) CreateSpaceStorage(payload spacestorage.SpaceStorageCreatePayload) (spacestorage.SpaceStorage, error) { return createSpaceStorage(s.db, payload) } diff --git a/client/storage/treestorage.go b/client/storage/treestorage.go index e89999bf..3e60a704 100644 --- a/client/storage/treestorage.go +++ b/client/storage/treestorage.go @@ -2,8 +2,8 @@ package storage import ( "context" - "github.com/anytypeio/go-anytype-infrastructure-experiments/common/pkg/acl/storage" - "github.com/anytypeio/go-anytype-infrastructure-experiments/common/pkg/acl/treechangeproto" + "github.com/anytypeio/go-anytype-infrastructure-experiments/common/commonspace/object/tree/treechangeproto" + "github.com/anytypeio/go-anytype-infrastructure-experiments/common/commonspace/object/tree/treestorage" "github.com/dgraph-io/badger/v3" ) @@ -14,7 +14,7 @@ type treeStorage struct { root *treechangeproto.RawTreeChangeWithId } -func newTreeStorage(db *badger.DB, spaceId, treeId string) (ts storage.TreeStorage, err error) { +func newTreeStorage(db *badger.DB, spaceId, treeId string) (ts treestorage.TreeStorage, err error) { keys := newTreeKeys(spaceId, treeId) err = db.View(func(txn *badger.Txn) error { _, err := txn.Get(keys.RootIdKey()) @@ -40,17 +40,20 @@ func newTreeStorage(db *badger.DB, spaceId, treeId string) (ts storage.TreeStora } return nil }) + if err == badger.ErrKeyNotFound { + err = treestorage.ErrUnknownTreeId + } return } -func createTreeStorage(db *badger.DB, spaceId string, payload storage.TreeStorageCreatePayload) (ts storage.TreeStorage, err error) { - keys := newTreeKeys(spaceId, payload.TreeId) +func createTreeStorage(db *badger.DB, spaceId string, payload treestorage.TreeStorageCreatePayload) (ts treestorage.TreeStorage, err error) { + keys := newTreeKeys(spaceId, payload.RootRawChange.Id) if hasDB(db, keys.RootIdKey()) { - err = storage.ErrTreeExists + err = treestorage.ErrTreeExists return } err = db.Update(func(txn *badger.Txn) error { - heads := storage.CreateHeadsPayload(payload.Heads) + heads := treestorage.CreateHeadsPayload(payload.Heads) for _, ch := range payload.Changes { err = txn.Set(keys.RawChangeKey(ch.Id), ch.GetRawChange()) @@ -97,16 +100,16 @@ func (t *treeStorage) Heads() (heads []string, err error) { headsBytes, err := getDB(t.db, t.keys.HeadsKey()) if err != nil { if err == badger.ErrKeyNotFound { - err = storage.ErrUnknownTreeId + err = treestorage.ErrUnknownTreeId } return } - heads = storage.ParseHeads(headsBytes) + heads = treestorage.ParseHeads(headsBytes) return } func (t *treeStorage) SetHeads(heads []string) (err error) { - payload := storage.CreateHeadsPayload(heads) + payload := treestorage.CreateHeadsPayload(heads) return putDB(t.db, t.keys.HeadsKey(), payload) } @@ -118,7 +121,7 @@ func (t *treeStorage) GetRawChange(ctx context.Context, id string) (raw *treecha res, err := getDB(t.db, t.keys.RawChangeKey(id)) if err != nil { if err == badger.ErrKeyNotFound { - err = storage.ErrUnknownTreeId + err = treestorage.ErrUnknownTreeId } return } diff --git a/client/storage/treestorage_test.go b/client/storage/treestorage_test.go index 5acb3980..a5c6e4c0 100644 --- a/client/storage/treestorage_test.go +++ b/client/storage/treestorage_test.go @@ -2,19 +2,19 @@ package storage import ( "context" - "github.com/anytypeio/go-anytype-infrastructure-experiments/common/pkg/acl/storage" - "github.com/anytypeio/go-anytype-infrastructure-experiments/common/pkg/acl/treechangeproto" + "github.com/anytypeio/go-anytype-infrastructure-experiments/common/commonspace/object/tree/treechangeproto" + "github.com/anytypeio/go-anytype-infrastructure-experiments/common/commonspace/object/tree/treestorage" "github.com/dgraph-io/badger/v3" "github.com/stretchr/testify/require" "os" "testing" ) -func treeTestPayload() storage.TreeStorageCreatePayload { +func treeTestPayload() treestorage.TreeStorageCreatePayload { rootRawChange := &treechangeproto.RawTreeChangeWithId{RawChange: []byte("some"), Id: "someRootId"} otherChange := &treechangeproto.RawTreeChangeWithId{RawChange: []byte("some other"), Id: "otherId"} changes := []*treechangeproto.RawTreeChangeWithId{rootRawChange, otherChange} - return storage.TreeStorageCreatePayload{ + return treestorage.TreeStorageCreatePayload{ RootRawChange: rootRawChange, Changes: changes, Heads: []string{rootRawChange.Id}, @@ -26,8 +26,8 @@ type fixture struct { db *badger.DB } -func testTreePayload(t *testing.T, store storage.TreeStorage, payload storage.TreeStorageCreatePayload) { - require.Equal(t, payload.RootRawChange.Id, store.ID()) +func testTreePayload(t *testing.T, store treestorage.TreeStorage, payload treestorage.TreeStorageCreatePayload) { + require.Equal(t, payload.RootRawChange.Id, store.Id()) root, err := store.Root() require.NoError(t, err) @@ -181,7 +181,7 @@ func TestTreeStorage_Delete(t *testing.T) { require.NoError(t, err) _, err = newTreeStorage(fx.db, spaceId, payload.RootRawChange.Id) - require.Equal(t, err, storage.ErrUnknownTreeId) + require.Equal(t, err, treestorage.ErrUnknownTreeId) fx.testNoKeysExist(t, spaceId, payload.RootRawChange.Id) }) diff --git a/common/account/service.go b/common/accountservice/accountservice.go similarity index 58% rename from common/account/service.go rename to common/accountservice/accountservice.go index 23b279b2..e7ff7341 100644 --- a/common/account/service.go +++ b/common/accountservice/accountservice.go @@ -1,17 +1,17 @@ -//go:generate mockgen -destination mock_account/mock_account.go github.com/anytypeio/go-anytype-infrastructure-experiments/common/account Service -package account +//go:generate mockgen -destination mock_accountservice/mock_accountservice.go github.com/anytypeio/go-anytype-infrastructure-experiments/common/accountservice Service +package accountservice import ( "github.com/anytypeio/go-anytype-infrastructure-experiments/common/app" + "github.com/anytypeio/go-anytype-infrastructure-experiments/common/commonspace/object/accountdata" "github.com/anytypeio/go-anytype-infrastructure-experiments/common/config" - "github.com/anytypeio/go-anytype-infrastructure-experiments/common/pkg/acl/account" ) const CName = "common.account" type Service interface { app.Component - Account() *account.AccountData + Account() *accountdata.AccountData } type ConfigGetter interface { diff --git a/common/account/mock_account/mock_account.go b/common/accountservice/mock_accountservice/mock_accountservice.go similarity index 85% rename from common/account/mock_account/mock_account.go rename to common/accountservice/mock_accountservice/mock_accountservice.go index 6f6d3b54..11f1df88 100644 --- a/common/account/mock_account/mock_account.go +++ b/common/accountservice/mock_accountservice/mock_accountservice.go @@ -1,14 +1,14 @@ // Code generated by MockGen. DO NOT EDIT. -// Source: github.com/anytypeio/go-anytype-infrastructure-experiments/common/account (interfaces: Service) +// Source: github.com/anytypeio/go-anytype-infrastructure-experiments/common/accountservice (interfaces: Service) -// Package mock_account is a generated GoMock package. -package mock_account +// Package mock_accountservice is a generated GoMock package. +package mock_accountservice import ( reflect "reflect" app "github.com/anytypeio/go-anytype-infrastructure-experiments/common/app" - account "github.com/anytypeio/go-anytype-infrastructure-experiments/common/pkg/acl/account" + accountdata "github.com/anytypeio/go-anytype-infrastructure-experiments/common/commonspace/object/accountdata" gomock "github.com/golang/mock/gomock" ) @@ -36,10 +36,10 @@ func (m *MockService) EXPECT() *MockServiceMockRecorder { } // Account mocks base method. -func (m *MockService) Account() *account.AccountData { +func (m *MockService) Account() *accountdata.AccountData { m.ctrl.T.Helper() ret := m.ctrl.Call(m, "Account") - ret0, _ := ret[0].(*account.AccountData) + ret0, _ := ret[0].(*accountdata.AccountData) return ret0 } diff --git a/common/pkg/ldiff/diff.go b/common/app/ldiff/diff.go similarity index 98% rename from common/pkg/ldiff/diff.go rename to common/app/ldiff/diff.go index 68b0f115..cce15fa5 100644 --- a/common/pkg/ldiff/diff.go +++ b/common/app/ldiff/diff.go @@ -1,7 +1,7 @@ // Package ldiff provides a container of elements with fixed id and changeable content. // Diff can calculate the difference with another diff container (you can make it remote) with minimum hops and traffic. // -//go:generate mockgen -destination mock_ldiff/mock_ldiff.go github.com/anytypeio/go-anytype-infrastructure-experiments/common/pkg/ldiff Diff,Remote +//go:generate mockgen -destination mock_ldiff/mock_ldiff.go github.com/anytypeio/go-anytype-infrastructure-experiments/common/app/ldiff Diff,Remote package ldiff import ( diff --git a/common/pkg/ldiff/diff_test.go b/common/app/ldiff/diff_test.go similarity index 100% rename from common/pkg/ldiff/diff_test.go rename to common/app/ldiff/diff_test.go diff --git a/common/pkg/ldiff/mock_ldiff/mock_ldiff.go b/common/app/ldiff/mock_ldiff/mock_ldiff.go similarity index 98% rename from common/pkg/ldiff/mock_ldiff/mock_ldiff.go rename to common/app/ldiff/mock_ldiff/mock_ldiff.go index d2170600..ad01feb2 100644 --- a/common/pkg/ldiff/mock_ldiff/mock_ldiff.go +++ b/common/app/ldiff/mock_ldiff/mock_ldiff.go @@ -1,5 +1,5 @@ // Code generated by MockGen. DO NOT EDIT. -// Source: github.com/anytypeio/go-anytype-infrastructure-experiments/common/pkg/ldiff (interfaces: Diff,Remote) +// Source: github.com/anytypeio/go-anytype-infrastructure-experiments/common/app/ldiff (interfaces: Diff,Remote) // Package mock_ldiff is a generated GoMock package. package mock_ldiff @@ -8,7 +8,7 @@ import ( context "context" reflect "reflect" - ldiff "github.com/anytypeio/go-anytype-infrastructure-experiments/common/pkg/ldiff" + ldiff "github.com/anytypeio/go-anytype-infrastructure-experiments/common/app/ldiff" gomock "github.com/golang/mock/gomock" ) diff --git a/common/pkg/ocache/metrics.go b/common/app/ocache/metrics.go similarity index 100% rename from common/pkg/ocache/metrics.go rename to common/app/ocache/metrics.go diff --git a/common/pkg/ocache/ocache.go b/common/app/ocache/ocache.go similarity index 99% rename from common/pkg/ocache/ocache.go rename to common/app/ocache/ocache.go index 31a788ce..04575750 100644 --- a/common/pkg/ocache/ocache.go +++ b/common/app/ocache/ocache.go @@ -87,9 +87,9 @@ type entry struct { refCount uint32 isClosing bool load chan struct{} - loadErr error - value Object - close chan struct{} + loadErr error + value Object + close chan struct{} } func (e *entry) locked() bool { diff --git a/common/pkg/ocache/ocache_test.go b/common/app/ocache/ocache_test.go similarity index 100% rename from common/pkg/ocache/ocache_test.go rename to common/app/ocache/ocache_test.go diff --git a/common/commonspace/commongetter.go b/common/commonspace/commongetter.go index 6dbeb99c..6f28b51d 100644 --- a/common/commonspace/commongetter.go +++ b/common/commonspace/commongetter.go @@ -2,10 +2,10 @@ package commonspace import ( "context" - "github.com/anytypeio/go-anytype-infrastructure-experiments/common/commonspace/objectgetter" + "github.com/anytypeio/go-anytype-infrastructure-experiments/common/commonspace/object/acl/syncacl" + "github.com/anytypeio/go-anytype-infrastructure-experiments/common/commonspace/object/syncobjectgetter" + "github.com/anytypeio/go-anytype-infrastructure-experiments/common/commonspace/object/treegetter" "github.com/anytypeio/go-anytype-infrastructure-experiments/common/commonspace/settings" - "github.com/anytypeio/go-anytype-infrastructure-experiments/common/commonspace/syncacl" - "github.com/anytypeio/go-anytype-infrastructure-experiments/common/commonspace/treegetter" ) type commonSpaceGetter struct { @@ -15,7 +15,7 @@ type commonSpaceGetter struct { settings settings.SettingsObject } -func newCommonSpaceGetter(spaceId string, aclList *syncacl.SyncACL, treeGetter treegetter.TreeGetter, settings settings.SettingsObject) objectgetter.ObjectGetter { +func newCommonSpaceGetter(spaceId string, aclList *syncacl.SyncACL, treeGetter treegetter.TreeGetter, settings settings.SettingsObject) syncobjectgetter.SyncObjectGetter { return &commonSpaceGetter{ spaceId: spaceId, aclList: aclList, @@ -24,19 +24,19 @@ func newCommonSpaceGetter(spaceId string, aclList *syncacl.SyncACL, treeGetter t } } -func (c *commonSpaceGetter) GetObject(ctx context.Context, objectId string) (obj objectgetter.Object, err error) { +func (c *commonSpaceGetter) GetObject(ctx context.Context, objectId string) (obj syncobjectgetter.SyncObject, err error) { if c.aclList.ID() == objectId { obj = c.aclList return } if c.settings.ID() == objectId { - obj = c.settings.(objectgetter.Object) + obj = c.settings.(syncobjectgetter.SyncObject) return } t, err := c.treeGetter.GetTree(ctx, c.spaceId, objectId) if err != nil { return } - obj = t.(objectgetter.Object) + obj = t.(syncobjectgetter.SyncObject) return } diff --git a/common/commonspace/commonstorage.go b/common/commonspace/commonstorage.go index 3299f54e..aaa3f22b 100644 --- a/common/commonspace/commonstorage.go +++ b/common/commonspace/commonstorage.go @@ -1,15 +1,15 @@ package commonspace import ( - "github.com/anytypeio/go-anytype-infrastructure-experiments/common/commonspace/storage" - treestorage "github.com/anytypeio/go-anytype-infrastructure-experiments/common/pkg/acl/storage" + "github.com/anytypeio/go-anytype-infrastructure-experiments/common/commonspace/object/tree/treestorage" + "github.com/anytypeio/go-anytype-infrastructure-experiments/common/commonspace/spacestorage" ) type commonStorage struct { - storage.SpaceStorage + spacestorage.SpaceStorage } -func newCommonStorage(spaceStorage storage.SpaceStorage) storage.SpaceStorage { +func newCommonStorage(spaceStorage spacestorage.SpaceStorage) spacestorage.SpaceStorage { return &commonStorage{ SpaceStorage: spaceStorage, } @@ -23,6 +23,6 @@ func (c *commonStorage) CreateTreeStorage(payload treestorage.TreeStorageCreateP if status == "" { return c.SpaceStorage.CreateTreeStorage(payload) } - err = storage.ErrTreeStorageAlreadyDeleted + err = spacestorage.ErrTreeStorageAlreadyDeleted return } diff --git a/common/commonspace/headsync/diffsyncer.go b/common/commonspace/headsync/diffsyncer.go index 0cd0143d..ccbe96c7 100644 --- a/common/commonspace/headsync/diffsyncer.go +++ b/common/commonspace/headsync/diffsyncer.go @@ -2,16 +2,16 @@ package headsync import ( "context" + "github.com/anytypeio/go-anytype-infrastructure-experiments/common/app/ldiff" + "github.com/anytypeio/go-anytype-infrastructure-experiments/common/commonspace/object/tree/synctree" + "github.com/anytypeio/go-anytype-infrastructure-experiments/common/commonspace/object/treegetter" "github.com/anytypeio/go-anytype-infrastructure-experiments/common/commonspace/settings/deletionstate" + "github.com/anytypeio/go-anytype-infrastructure-experiments/common/commonspace/spacestorage" "github.com/anytypeio/go-anytype-infrastructure-experiments/common/commonspace/spacesyncproto" - "github.com/anytypeio/go-anytype-infrastructure-experiments/common/commonspace/storage" "github.com/anytypeio/go-anytype-infrastructure-experiments/common/commonspace/syncstatus" - "github.com/anytypeio/go-anytype-infrastructure-experiments/common/commonspace/synctree" - "github.com/anytypeio/go-anytype-infrastructure-experiments/common/commonspace/treegetter" "github.com/anytypeio/go-anytype-infrastructure-experiments/common/net/peer" "github.com/anytypeio/go-anytype-infrastructure-experiments/common/net/rpc/rpcerr" "github.com/anytypeio/go-anytype-infrastructure-experiments/common/nodeconf" - "github.com/anytypeio/go-anytype-infrastructure-experiments/common/pkg/ldiff" "go.uber.org/zap" "time" ) @@ -28,7 +28,7 @@ func newDiffSyncer( diff ldiff.Diff, confConnector nodeconf.ConfConnector, cache treegetter.TreeGetter, - storage storage.SpaceStorage, + storage spacestorage.SpaceStorage, clientFactory spacesyncproto.ClientFactory, syncStatus syncstatus.SyncStatusUpdater, log *zap.Logger) DiffSyncer { @@ -49,7 +49,7 @@ type diffSyncer struct { diff ldiff.Diff confConnector nodeconf.ConfConnector cache treegetter.TreeGetter - storage storage.SpaceStorage + storage spacestorage.SpaceStorage clientFactory spacesyncproto.ClientFactory log *zap.Logger deletionState deletionstate.DeletionState diff --git a/common/commonspace/headsync/diffsyncer_test.go b/common/commonspace/headsync/diffsyncer_test.go index bcdf3c30..6dfe9cbe 100644 --- a/common/commonspace/headsync/diffsyncer_test.go +++ b/common/commonspace/headsync/diffsyncer_test.go @@ -3,21 +3,20 @@ package headsync import ( "context" "fmt" + "github.com/anytypeio/go-anytype-infrastructure-experiments/common/app/ldiff" + "github.com/anytypeio/go-anytype-infrastructure-experiments/common/app/ldiff/mock_ldiff" "github.com/anytypeio/go-anytype-infrastructure-experiments/common/app/logger" + "github.com/anytypeio/go-anytype-infrastructure-experiments/common/commonspace/object/acl/aclrecordproto" + "github.com/anytypeio/go-anytype-infrastructure-experiments/common/commonspace/object/tree/treechangeproto" + mock_treestorage "github.com/anytypeio/go-anytype-infrastructure-experiments/common/commonspace/object/tree/treestorage/mock_treestorage" + "github.com/anytypeio/go-anytype-infrastructure-experiments/common/commonspace/object/treegetter/mock_treegetter" "github.com/anytypeio/go-anytype-infrastructure-experiments/common/commonspace/settings/deletionstate/mock_deletionstate" + "github.com/anytypeio/go-anytype-infrastructure-experiments/common/commonspace/spacestorage/mock_spacestorage" "github.com/anytypeio/go-anytype-infrastructure-experiments/common/commonspace/spacesyncproto" "github.com/anytypeio/go-anytype-infrastructure-experiments/common/commonspace/spacesyncproto/mock_spacesyncproto" - "github.com/anytypeio/go-anytype-infrastructure-experiments/common/commonspace/storage/mock_storage" "github.com/anytypeio/go-anytype-infrastructure-experiments/common/commonspace/syncstatus" - "github.com/anytypeio/go-anytype-infrastructure-experiments/common/commonspace/treegetter/mock_treegetter" "github.com/anytypeio/go-anytype-infrastructure-experiments/common/net/peer" "github.com/anytypeio/go-anytype-infrastructure-experiments/common/nodeconf/mock_nodeconf" - "github.com/anytypeio/go-anytype-infrastructure-experiments/common/pkg/acl/aclrecordproto" - mock_aclstorage "github.com/anytypeio/go-anytype-infrastructure-experiments/common/pkg/acl/storage/mock_storage" - mock_treestorage "github.com/anytypeio/go-anytype-infrastructure-experiments/common/pkg/acl/storage/mock_storage" - "github.com/anytypeio/go-anytype-infrastructure-experiments/common/pkg/acl/treechangeproto" - "github.com/anytypeio/go-anytype-infrastructure-experiments/common/pkg/ldiff" - "github.com/anytypeio/go-anytype-infrastructure-experiments/common/pkg/ldiff/mock_ldiff" "github.com/golang/mock/gomock" "github.com/libp2p/go-libp2p/core/sec" "github.com/stretchr/testify/require" @@ -101,7 +100,7 @@ func TestDiffSyncer_Sync(t *testing.T) { diffMock := mock_ldiff.NewMockDiff(ctrl) connectorMock := mock_nodeconf.NewMockConfConnector(ctrl) cacheMock := mock_treegetter.NewMockTreeGetter(ctrl) - stMock := mock_storage.NewMockSpaceStorage(ctrl) + stMock := mock_spacestorage.NewMockSpaceStorage(ctrl) clientMock := mock_spacesyncproto.NewMockDRPCSpaceClient(ctrl) factory := spacesyncproto.ClientFactoryFunc(func(cc drpc.Conn) spacesyncproto.DRPCSpaceClient { return clientMock @@ -158,7 +157,7 @@ func TestDiffSyncer_Sync(t *testing.T) { }) t.Run("diff syncer sync space missing", func(t *testing.T) { - aclStorageMock := mock_aclstorage.NewMockListStorage(ctrl) + aclStorageMock := mock_treestorage.NewMockListStorage(ctrl) settingsStorage := mock_treestorage.NewMockTreeStorage(ctrl) settingsId := "settingsId" aclRoot := &aclrecordproto.RawACLRecordWithId{ diff --git a/common/commonspace/headsync/headsync.go b/common/commonspace/headsync/headsync.go index 163387a9..d6e527db 100644 --- a/common/commonspace/headsync/headsync.go +++ b/common/commonspace/headsync/headsync.go @@ -3,13 +3,13 @@ package headsync import ( "context" + "github.com/anytypeio/go-anytype-infrastructure-experiments/common/app/ldiff" + "github.com/anytypeio/go-anytype-infrastructure-experiments/common/commonspace/object/treegetter" "github.com/anytypeio/go-anytype-infrastructure-experiments/common/commonspace/settings/deletionstate" + "github.com/anytypeio/go-anytype-infrastructure-experiments/common/commonspace/spacestorage" "github.com/anytypeio/go-anytype-infrastructure-experiments/common/commonspace/spacesyncproto" - "github.com/anytypeio/go-anytype-infrastructure-experiments/common/commonspace/storage" "github.com/anytypeio/go-anytype-infrastructure-experiments/common/commonspace/syncstatus" - "github.com/anytypeio/go-anytype-infrastructure-experiments/common/commonspace/treegetter" "github.com/anytypeio/go-anytype-infrastructure-experiments/common/nodeconf" - "github.com/anytypeio/go-anytype-infrastructure-experiments/common/pkg/ldiff" "github.com/anytypeio/go-anytype-infrastructure-experiments/common/util/periodicsync" "go.uber.org/zap" "strings" @@ -35,7 +35,7 @@ type HeadSync interface { type headSync struct { spaceId string periodicSync periodicsync.PeriodicSync - storage storage.SpaceStorage + storage spacestorage.SpaceStorage diff ldiff.Diff log *zap.Logger syncer DiffSyncer @@ -46,7 +46,7 @@ type headSync struct { func NewHeadSync( spaceId string, syncPeriod int, - storage storage.SpaceStorage, + storage spacestorage.SpaceStorage, confConnector nodeconf.ConfConnector, cache treegetter.TreeGetter, syncStatus syncstatus.SyncStatusUpdater, diff --git a/common/commonspace/headsync/headsync_test.go b/common/commonspace/headsync/headsync_test.go index 005c18c2..18a35559 100644 --- a/common/commonspace/headsync/headsync_test.go +++ b/common/commonspace/headsync/headsync_test.go @@ -1,13 +1,13 @@ package headsync import ( + "github.com/anytypeio/go-anytype-infrastructure-experiments/common/app/ldiff" + "github.com/anytypeio/go-anytype-infrastructure-experiments/common/app/ldiff/mock_ldiff" "github.com/anytypeio/go-anytype-infrastructure-experiments/common/app/logger" "github.com/anytypeio/go-anytype-infrastructure-experiments/common/commonspace/headsync/mock_headsync" + "github.com/anytypeio/go-anytype-infrastructure-experiments/common/commonspace/object/tree/treestorage/mock_treestorage" "github.com/anytypeio/go-anytype-infrastructure-experiments/common/commonspace/settings/deletionstate/mock_deletionstate" - "github.com/anytypeio/go-anytype-infrastructure-experiments/common/commonspace/storage/mock_storage" - mock_storage2 "github.com/anytypeio/go-anytype-infrastructure-experiments/common/pkg/acl/storage/mock_storage" - "github.com/anytypeio/go-anytype-infrastructure-experiments/common/pkg/ldiff" - "github.com/anytypeio/go-anytype-infrastructure-experiments/common/pkg/ldiff/mock_ldiff" + "github.com/anytypeio/go-anytype-infrastructure-experiments/common/commonspace/spacestorage/mock_spacestorage" "github.com/anytypeio/go-anytype-infrastructure-experiments/common/util/periodicsync/mock_periodicsync" "github.com/golang/mock/gomock" "testing" @@ -20,8 +20,8 @@ func TestDiffService(t *testing.T) { spaceId := "spaceId" l := logger.NewNamed("sync") pSyncMock := mock_periodicsync.NewMockPeriodicSync(ctrl) - storageMock := mock_storage.NewMockSpaceStorage(ctrl) - treeStorageMock := mock_storage2.NewMockTreeStorage(ctrl) + storageMock := mock_spacestorage.NewMockSpaceStorage(ctrl) + treeStorageMock := mock_treestorage.NewMockTreeStorage(ctrl) diffMock := mock_ldiff.NewMockDiff(ctrl) syncer := mock_headsync.NewMockDiffSyncer(ctrl) delState := mock_deletionstate.NewMockDeletionState(ctrl) diff --git a/common/commonspace/headsync/remotediff.go b/common/commonspace/headsync/remotediff.go index 4fda2241..96b8363f 100644 --- a/common/commonspace/headsync/remotediff.go +++ b/common/commonspace/headsync/remotediff.go @@ -2,8 +2,8 @@ package headsync import ( "context" + "github.com/anytypeio/go-anytype-infrastructure-experiments/common/app/ldiff" "github.com/anytypeio/go-anytype-infrastructure-experiments/common/commonspace/spacesyncproto" - "github.com/anytypeio/go-anytype-infrastructure-experiments/common/pkg/ldiff" ) type Client interface { diff --git a/common/commonspace/headsync/remotediff_test.go b/common/commonspace/headsync/remotediff_test.go index aae8e392..29c07fb4 100644 --- a/common/commonspace/headsync/remotediff_test.go +++ b/common/commonspace/headsync/remotediff_test.go @@ -3,8 +3,8 @@ package headsync import ( "context" "fmt" + "github.com/anytypeio/go-anytype-infrastructure-experiments/common/app/ldiff" "github.com/anytypeio/go-anytype-infrastructure-experiments/common/commonspace/spacesyncproto" - "github.com/anytypeio/go-anytype-infrastructure-experiments/common/pkg/ldiff" "github.com/stretchr/testify/assert" "github.com/stretchr/testify/require" "testing" diff --git a/common/pkg/acl/account/accountdata.go b/common/commonspace/object/accountdata/accountdata.go similarity index 95% rename from common/pkg/acl/account/accountdata.go rename to common/commonspace/object/accountdata/accountdata.go index 13bcf342..9331e2fe 100644 --- a/common/pkg/acl/account/accountdata.go +++ b/common/commonspace/object/accountdata/accountdata.go @@ -1,4 +1,4 @@ -package account +package accountdata import ( "github.com/anytypeio/go-anytype-infrastructure-experiments/common/util/keys/asymmetric/encryptionkey" diff --git a/common/pkg/acl/aclrecordproto/aclreadkeyderive.go b/common/commonspace/object/acl/aclrecordproto/aclreadkeyderive.go similarity index 100% rename from common/pkg/acl/aclrecordproto/aclreadkeyderive.go rename to common/commonspace/object/acl/aclrecordproto/aclreadkeyderive.go diff --git a/common/pkg/acl/aclrecordproto/aclrecord.pb.go b/common/commonspace/object/acl/aclrecordproto/aclrecord.pb.go similarity index 100% rename from common/pkg/acl/aclrecordproto/aclrecord.pb.go rename to common/commonspace/object/acl/aclrecordproto/aclrecord.pb.go diff --git a/common/pkg/acl/aclrecordproto/protos/aclrecord.proto b/common/commonspace/object/acl/aclrecordproto/protos/aclrecord.proto similarity index 100% rename from common/pkg/acl/aclrecordproto/protos/aclrecord.proto rename to common/commonspace/object/acl/aclrecordproto/protos/aclrecord.proto diff --git a/common/pkg/acl/list/aclrecordbuilder.go b/common/commonspace/object/acl/list/aclrecordbuilder.go similarity index 93% rename from common/pkg/acl/list/aclrecordbuilder.go rename to common/commonspace/object/acl/list/aclrecordbuilder.go index 1448d460..450bda28 100644 --- a/common/pkg/acl/list/aclrecordbuilder.go +++ b/common/commonspace/object/acl/list/aclrecordbuilder.go @@ -1,9 +1,9 @@ package list import ( - "github.com/anytypeio/go-anytype-infrastructure-experiments/common/pkg/acl/aclrecordproto" - "github.com/anytypeio/go-anytype-infrastructure-experiments/common/pkg/acl/common" - "github.com/anytypeio/go-anytype-infrastructure-experiments/common/util/cid" + "github.com/anytypeio/go-anytype-infrastructure-experiments/common/commonspace/object/acl/aclrecordproto" + "github.com/anytypeio/go-anytype-infrastructure-experiments/common/commonspace/object/keychain" + "github.com/anytypeio/go-anytype-infrastructure-experiments/common/util/cidutil" "github.com/anytypeio/go-anytype-infrastructure-experiments/common/util/keys/asymmetric/signingkey" "github.com/anytypeio/go-anytype-infrastructure-experiments/common/util/keys/symmetric" "github.com/gogo/protobuf/proto" @@ -17,10 +17,10 @@ type ACLRecordBuilder interface { type aclRecordBuilder struct { id string - keychain *common.Keychain + keychain *keychain.Keychain } -func newACLRecordBuilder(id string, keychain *common.Keychain) ACLRecordBuilder { +func newACLRecordBuilder(id string, keychain *keychain.Keychain) ACLRecordBuilder { return &aclRecordBuilder{ id: id, keychain: keychain, @@ -149,7 +149,7 @@ func (a *aclRecordBuilder) ConvertFromRaw(rawIdRecord *aclrecordproto.RawACLReco } func verifyRaw( - keychain *common.Keychain, + keychain *keychain.Keychain, rawRec *aclrecordproto.RawACLRecord, recWithId *aclrecordproto.RawACLRecordWithId, identity []byte) (err error) { @@ -169,7 +169,7 @@ func verifyRaw( } // verifying ID - if !cid.VerifyCID(recWithId.Payload, recWithId.Id) { + if !cidutil.VerifyCID(recWithId.Payload, recWithId.Id) { err = ErrIncorrectCID } return diff --git a/common/pkg/acl/list/aclrecordbuilder_test.go b/common/commonspace/object/acl/list/aclrecordbuilder_test.go similarity index 58% rename from common/pkg/acl/list/aclrecordbuilder_test.go rename to common/commonspace/object/acl/list/aclrecordbuilder_test.go index a804bcb4..2094db82 100644 --- a/common/pkg/acl/list/aclrecordbuilder_test.go +++ b/common/commonspace/object/acl/list/aclrecordbuilder_test.go @@ -1,25 +1,25 @@ package list import ( - account "github.com/anytypeio/go-anytype-infrastructure-experiments/common/pkg/acl/account" - "github.com/anytypeio/go-anytype-infrastructure-experiments/common/pkg/acl/aclrecordproto" - "github.com/anytypeio/go-anytype-infrastructure-experiments/common/pkg/acl/common" - "github.com/anytypeio/go-anytype-infrastructure-experiments/common/pkg/acl/testutils/acllistbuilder" - "github.com/anytypeio/go-anytype-infrastructure-experiments/common/util/cid" + "github.com/anytypeio/go-anytype-infrastructure-experiments/common/commonspace/object/accountdata" + "github.com/anytypeio/go-anytype-infrastructure-experiments/common/commonspace/object/acl/aclrecordproto" + acllistbuilder2 "github.com/anytypeio/go-anytype-infrastructure-experiments/common/commonspace/object/acl/testutils/acllistbuilder" + "github.com/anytypeio/go-anytype-infrastructure-experiments/common/commonspace/object/keychain" + "github.com/anytypeio/go-anytype-infrastructure-experiments/common/util/cidutil" "github.com/anytypeio/go-anytype-infrastructure-experiments/common/util/keys/asymmetric/signingkey" "github.com/stretchr/testify/require" "testing" ) func TestAclRecordBuilder_BuildUserJoin(t *testing.T) { - st, err := acllistbuilder.NewListStorageWithTestName("userjoinexample.yml") + st, err := acllistbuilder2.NewListStorageWithTestName("userjoinexample.yml") require.NoError(t, err, "building storage should not result in error") - keychain := st.(*acllistbuilder.ACLListStorageBuilder).GetKeychain() - identity := keychain.GeneratedIdentities["D"] - signPrivKey := keychain.SigningKeysByYAMLName["D"] - encPrivKey := keychain.EncryptionKeysByYAMLName["D"] - acc := &account.AccountData{ + testKeychain := st.(*acllistbuilder2.ACLListStorageBuilder).GetKeychain() + identity := testKeychain.GeneratedIdentities["D"] + signPrivKey := testKeychain.SigningKeysByYAMLName["D"] + encPrivKey := testKeychain.EncryptionKeysByYAMLName["D"] + acc := &accountdata.AccountData{ Identity: []byte(identity), SignKey: signPrivKey, EncKey: encPrivKey, @@ -27,17 +27,17 @@ func TestAclRecordBuilder_BuildUserJoin(t *testing.T) { aclList, err := BuildACLListWithIdentity(acc, st) require.NoError(t, err, "building acl list should be without error") - recordBuilder := newACLRecordBuilder(aclList.ID(), common.NewKeychain()) - rk, err := keychain.GetKey("key.Read.EncKey").(*acllistbuilder.SymKey).Key.Raw() + recordBuilder := newACLRecordBuilder(aclList.ID(), keychain.NewKeychain()) + rk, err := testKeychain.GetKey("key.Read.EncKey").(*acllistbuilder2.SymKey).Key.Raw() require.NoError(t, err) - privKey, err := keychain.GetKey("key.Sign.Onetime1").(signingkey.PrivKey).Raw() + privKey, err := testKeychain.GetKey("key.Sign.Onetime1").(signingkey.PrivKey).Raw() require.NoError(t, err) userJoin, err := recordBuilder.BuildUserJoin(privKey, rk, aclList.ACLState()) require.NoError(t, err) marshalledJoin, err := userJoin.Marshal() require.NoError(t, err) - id, err := cid.NewCIDFromBytes(marshalledJoin) + id, err := cidutil.NewCIDFromBytes(marshalledJoin) require.NoError(t, err) rawRec := &aclrecordproto.RawACLRecordWithId{ Payload: marshalledJoin, diff --git a/common/pkg/acl/list/aclstate.go b/common/commonspace/object/acl/list/aclstate.go similarity index 75% rename from common/pkg/acl/list/aclstate.go rename to common/commonspace/object/acl/list/aclstate.go index 90a33c5c..527d829a 100644 --- a/common/pkg/acl/list/aclstate.go +++ b/common/commonspace/object/acl/list/aclstate.go @@ -5,8 +5,8 @@ import ( "errors" "fmt" "github.com/anytypeio/go-anytype-infrastructure-experiments/common/app/logger" - "github.com/anytypeio/go-anytype-infrastructure-experiments/common/pkg/acl/aclrecordproto" - "github.com/anytypeio/go-anytype-infrastructure-experiments/common/pkg/acl/common" + aclrecordproto2 "github.com/anytypeio/go-anytype-infrastructure-experiments/common/commonspace/object/acl/aclrecordproto" + "github.com/anytypeio/go-anytype-infrastructure-experiments/common/commonspace/object/keychain" "github.com/anytypeio/go-anytype-infrastructure-experiments/common/util/keys" "github.com/anytypeio/go-anytype-infrastructure-experiments/common/util/keys/asymmetric/encryptionkey" "github.com/anytypeio/go-anytype-infrastructure-experiments/common/util/keys/asymmetric/signingkey" @@ -18,31 +18,33 @@ import ( var log = logger.NewNamed("acllist").Sugar() -var ErrNoSuchUser = errors.New("no such user") -var ErrFailedToDecrypt = errors.New("failed to decrypt key") -var ErrUserRemoved = errors.New("user was removed from the document") -var ErrDocumentForbidden = errors.New("your user was forbidden access to the document") -var ErrUserAlreadyExists = errors.New("user already exists") -var ErrNoSuchRecord = errors.New("no such record") -var ErrNoSuchInvite = errors.New("no such invite") -var ErrOldInvite = errors.New("invite is too old") -var ErrInsufficientPermissions = errors.New("insufficient permissions") -var ErrNoReadKey = errors.New("acl state doesn't have a read key") -var ErrInvalidSignature = errors.New("signature is invalid") -var ErrIncorrectRoot = errors.New("incorrect root") -var ErrIncorrectRecordSequence = errors.New("incorrect prev id of a record") +var ( + ErrNoSuchUser = errors.New("no such user") + ErrFailedToDecrypt = errors.New("failed to decrypt key") + ErrUserRemoved = errors.New("user was removed from the document") + ErrDocumentForbidden = errors.New("your user was forbidden access to the document") + ErrUserAlreadyExists = errors.New("user already exists") + ErrNoSuchRecord = errors.New("no such record") + ErrNoSuchInvite = errors.New("no such invite") + ErrOldInvite = errors.New("invite is too old") + ErrInsufficientPermissions = errors.New("insufficient permissions") + ErrNoReadKey = errors.New("acl state doesn't have a read key") + ErrInvalidSignature = errors.New("signature is invalid") + ErrIncorrectRoot = errors.New("incorrect root") + ErrIncorrectRecordSequence = errors.New("incorrect prev id of a record") +) type UserPermissionPair struct { Identity string - Permission aclrecordproto.ACLUserPermissions + Permission aclrecordproto2.ACLUserPermissions } type ACLState struct { id string currentReadKeyHash uint64 userReadKeys map[uint64]*symmetric.Key - userStates map[string]*aclrecordproto.ACLUserState - userInvites map[string]*aclrecordproto.ACLUserInvite + userStates map[string]*aclrecordproto2.ACLUserState + userInvites map[string]*aclrecordproto2.ACLUserInvite encryptionKey encryptionkey.PrivKey signingKey signingkey.PrivKey totalReadKeys int @@ -51,7 +53,7 @@ type ACLState struct { permissionsAtRecord map[string][]UserPermissionPair lastRecordId string - keychain *common.Keychain + keychain *keychain.Keychain } func newACLStateWithKeys( @@ -68,8 +70,8 @@ func newACLStateWithKeys( signingKey: signingKey, encryptionKey: encryptionKey, userReadKeys: make(map[uint64]*symmetric.Key), - userStates: make(map[string]*aclrecordproto.ACLUserState), - userInvites: make(map[string]*aclrecordproto.ACLUserInvite), + userStates: make(map[string]*aclrecordproto2.ACLUserState), + userInvites: make(map[string]*aclrecordproto2.ACLUserInvite), permissionsAtRecord: make(map[string][]UserPermissionPair), }, nil } @@ -78,8 +80,8 @@ func newACLState(id string) *ACLState { return &ACLState{ id: id, userReadKeys: make(map[uint64]*symmetric.Key), - userStates: make(map[string]*aclrecordproto.ACLUserState), - userInvites: make(map[string]*aclrecordproto.ACLUserInvite), + userStates: make(map[string]*aclrecordproto2.ACLUserState), + userInvites: make(map[string]*aclrecordproto2.ACLUserInvite), permissionsAtRecord: make(map[string][]UserPermissionPair), } } @@ -126,7 +128,7 @@ func (st *ACLState) applyRecord(record *ACLRecord) (err error) { return } if record.Id == st.id { - root, ok := record.Model.(*aclrecordproto.ACLRoot) + root, ok := record.Model.(*aclrecordproto2.ACLRoot) if !ok { return ErrIncorrectRoot } @@ -135,14 +137,14 @@ func (st *ACLState) applyRecord(record *ACLRecord) (err error) { return } st.permissionsAtRecord[record.Id] = []UserPermissionPair{ - {Identity: string(root.Identity), Permission: aclrecordproto.ACLUserPermissions_Admin}, + {Identity: string(root.Identity), Permission: aclrecordproto2.ACLUserPermissions_Admin}, } return } - aclData := &aclrecordproto.ACLData{} + aclData := &aclrecordproto2.ACLData{} if record.Model != nil { - aclData = record.Model.(*aclrecordproto.ACLData) + aclData = record.Model.(*aclrecordproto2.ACLData) } else { err = proto.Unmarshal(record.Data, aclData) if err != nil { @@ -170,7 +172,7 @@ func (st *ACLState) applyRecord(record *ACLRecord) (err error) { return } -func (st *ACLState) applyRoot(root *aclrecordproto.ACLRoot) (err error) { +func (st *ACLState) applyRoot(root *aclrecordproto2.ACLRoot) (err error) { if st.signingKey != nil && st.encryptionKey != nil && st.identity == string(root.Identity) { err = st.saveReadKeyFromRoot(root) if err != nil { @@ -179,10 +181,10 @@ func (st *ACLState) applyRoot(root *aclrecordproto.ACLRoot) (err error) { } // adding user to the list - userState := &aclrecordproto.ACLUserState{ + userState := &aclrecordproto2.ACLUserState{ Identity: root.Identity, EncryptionKey: root.EncryptionKey, - Permissions: aclrecordproto.ACLUserPermissions_Admin, + Permissions: aclrecordproto2.ACLUserPermissions_Admin, } st.currentReadKeyHash = root.CurrentReadKeyHash st.userStates[string(root.Identity)] = userState @@ -190,7 +192,7 @@ func (st *ACLState) applyRoot(root *aclrecordproto.ACLRoot) (err error) { return } -func (st *ACLState) saveReadKeyFromRoot(root *aclrecordproto.ACLRoot) (err error) { +func (st *ACLState) saveReadKeyFromRoot(root *aclrecordproto2.ACLRoot) (err error) { var readKey *symmetric.Key if len(root.GetDerivationScheme()) != 0 { var encPrivKey []byte @@ -204,7 +206,7 @@ func (st *ACLState) saveReadKeyFromRoot(root *aclrecordproto.ACLRoot) (err error return } - readKey, err = aclrecordproto.ACLReadKeyDerive(signPrivKey, encPrivKey) + readKey, err = aclrecordproto2.ACLReadKeyDerive(signPrivKey, encPrivKey) if err != nil { return } @@ -228,7 +230,7 @@ func (st *ACLState) saveReadKeyFromRoot(root *aclrecordproto.ACLRoot) (err error return } -func (st *ACLState) applyChangeData(changeData *aclrecordproto.ACLData, hash uint64, identity []byte) (err error) { +func (st *ACLState) applyChangeData(changeData *aclrecordproto2.ACLData, hash uint64, identity []byte) (err error) { defer func() { if err != nil { return @@ -246,7 +248,7 @@ func (st *ACLState) applyChangeData(changeData *aclrecordproto.ACLData, hash uin return } - if !st.HasPermission(identity, aclrecordproto.ACLUserPermissions_Admin) { + if !st.HasPermission(identity, aclrecordproto2.ACLUserPermissions_Admin) { err = fmt.Errorf("user %s must have admin permissions", identity) return } @@ -262,7 +264,7 @@ func (st *ACLState) applyChangeData(changeData *aclrecordproto.ACLData, hash uin return nil } -func (st *ACLState) applyChangeContent(ch *aclrecordproto.ACLContentValue) error { +func (st *ACLState) applyChangeContent(ch *aclrecordproto2.ACLContentValue) error { switch { case ch.GetUserPermissionChange() != nil: return st.applyUserPermissionChange(ch.GetUserPermissionChange()) @@ -279,7 +281,7 @@ func (st *ACLState) applyChangeContent(ch *aclrecordproto.ACLContentValue) error } } -func (st *ACLState) applyUserPermissionChange(ch *aclrecordproto.ACLUserPermissionChange) error { +func (st *ACLState) applyUserPermissionChange(ch *aclrecordproto2.ACLUserPermissionChange) error { chIdentity := string(ch.Identity) state, exists := st.userStates[chIdentity] if !exists { @@ -290,12 +292,12 @@ func (st *ACLState) applyUserPermissionChange(ch *aclrecordproto.ACLUserPermissi return nil } -func (st *ACLState) applyUserInvite(ch *aclrecordproto.ACLUserInvite) error { +func (st *ACLState) applyUserInvite(ch *aclrecordproto2.ACLUserInvite) error { st.userInvites[string(ch.AcceptPublicKey)] = ch return nil } -func (st *ACLState) applyUserJoin(ch *aclrecordproto.ACLUserJoin) error { +func (st *ACLState) applyUserJoin(ch *aclrecordproto2.ACLUserJoin) error { invite, exists := st.userInvites[string(ch.AcceptPubKey)] if !exists { return fmt.Errorf("no such invite with such public key %s", keys.EncodeBytesToString(ch.AcceptPubKey)) @@ -334,7 +336,7 @@ func (st *ACLState) applyUserJoin(ch *aclrecordproto.ACLUserJoin) error { } // adding user to the list - userState := &aclrecordproto.ACLUserState{ + userState := &aclrecordproto2.ACLUserState{ Identity: ch.Identity, EncryptionKey: ch.EncryptionKey, Permissions: invite.Permissions, @@ -343,13 +345,13 @@ func (st *ACLState) applyUserJoin(ch *aclrecordproto.ACLUserJoin) error { return nil } -func (st *ACLState) applyUserAdd(ch *aclrecordproto.ACLUserAdd) error { +func (st *ACLState) applyUserAdd(ch *aclrecordproto2.ACLUserAdd) error { chIdentity := string(ch.Identity) if _, exists := st.userStates[chIdentity]; exists { return ErrUserAlreadyExists } - st.userStates[chIdentity] = &aclrecordproto.ACLUserState{ + st.userStates[chIdentity] = &aclrecordproto2.ACLUserState{ Identity: ch.Identity, EncryptionKey: ch.EncryptionKey, Permissions: ch.Permissions, @@ -369,7 +371,7 @@ func (st *ACLState) applyUserAdd(ch *aclrecordproto.ACLUserAdd) error { return nil } -func (st *ACLState) applyUserRemove(ch *aclrecordproto.ACLUserRemove) error { +func (st *ACLState) applyUserRemove(ch *aclrecordproto2.ACLUserRemove) error { chIdentity := string(ch.Identity) if chIdentity == st.identity { return ErrDocumentForbidden @@ -413,7 +415,7 @@ func (st *ACLState) decryptReadKeyAndHash(msg []byte) (*symmetric.Key, uint64, e return key, hasher.Sum64(), nil } -func (st *ACLState) HasPermission(identity []byte, permission aclrecordproto.ACLUserPermissions) bool { +func (st *ACLState) HasPermission(identity []byte, permission aclrecordproto2.ACLUserPermissions) bool { state, exists := st.userStates[string(identity)] if !exists { return false @@ -422,22 +424,22 @@ func (st *ACLState) HasPermission(identity []byte, permission aclrecordproto.ACL return state.Permissions == permission } -func (st *ACLState) isUserJoin(data *aclrecordproto.ACLData) bool { +func (st *ACLState) isUserJoin(data *aclrecordproto2.ACLData) bool { // if we have a UserJoin, then it should always be the first one applied return data.GetAclContent() != nil && data.GetAclContent()[0].GetUserJoin() != nil } -func (st *ACLState) isUserAdd(data *aclrecordproto.ACLData, identity []byte) bool { +func (st *ACLState) isUserAdd(data *aclrecordproto2.ACLData, identity []byte) bool { // if we have a UserAdd, then it should always be the first one applied userAdd := data.GetAclContent()[0].GetUserAdd() return data.GetAclContent() != nil && userAdd != nil && bytes.Compare(userAdd.GetIdentity(), identity) == 0 } -func (st *ACLState) UserStates() map[string]*aclrecordproto.ACLUserState { +func (st *ACLState) UserStates() map[string]*aclrecordproto2.ACLUserState { return st.userStates } -func (st *ACLState) Invite(acceptPubKey []byte) (invite *aclrecordproto.ACLUserInvite, err error) { +func (st *ACLState) Invite(acceptPubKey []byte) (invite *aclrecordproto2.ACLUserInvite, err error) { invite, exists := st.userInvites[string(acceptPubKey)] if !exists { err = ErrNoSuchInvite diff --git a/common/pkg/acl/list/aclstatebuilder.go b/common/commonspace/object/acl/list/aclstatebuilder.go similarity index 90% rename from common/pkg/acl/list/aclstatebuilder.go rename to common/commonspace/object/acl/list/aclstatebuilder.go index 2ef79cd5..d501ab1d 100644 --- a/common/pkg/acl/list/aclstatebuilder.go +++ b/common/commonspace/object/acl/list/aclstatebuilder.go @@ -1,7 +1,7 @@ package list import ( - "github.com/anytypeio/go-anytype-infrastructure-experiments/common/pkg/acl/account" + "github.com/anytypeio/go-anytype-infrastructure-experiments/common/commonspace/object/accountdata" "github.com/anytypeio/go-anytype-infrastructure-experiments/common/util/keys/asymmetric/encryptionkey" "github.com/anytypeio/go-anytype-infrastructure-experiments/common/util/keys/asymmetric/signingkey" ) @@ -12,7 +12,7 @@ type aclStateBuilder struct { id string } -func newACLStateBuilderWithIdentity(accountData *account.AccountData) *aclStateBuilder { +func newACLStateBuilderWithIdentity(accountData *accountdata.AccountData) *aclStateBuilder { return &aclStateBuilder{ signPrivKey: accountData.SignKey, encPrivKey: accountData.EncKey, diff --git a/common/pkg/acl/list/list.go b/common/commonspace/object/acl/list/list.go similarity index 69% rename from common/pkg/acl/list/list.go rename to common/commonspace/object/acl/list/list.go index 1078f974..e67ef2cd 100644 --- a/common/pkg/acl/list/list.go +++ b/common/commonspace/object/acl/list/list.go @@ -1,23 +1,20 @@ -//go:generate mockgen -destination mock_list/mock_list.go github.com/anytypeio/go-anytype-infrastructure-experiments/common/pkg/acl/list ACLList +//go:generate mockgen -destination mock_list/mock_list.go github.com/anytypeio/go-anytype-infrastructure-experiments/common/commonspace/object/acl/list ACLList package list import ( "context" "errors" "fmt" - "github.com/anytypeio/go-anytype-infrastructure-experiments/common/pkg/acl/account" - "github.com/anytypeio/go-anytype-infrastructure-experiments/common/pkg/acl/aclrecordproto" - "github.com/anytypeio/go-anytype-infrastructure-experiments/common/pkg/acl/common" - "github.com/anytypeio/go-anytype-infrastructure-experiments/common/pkg/acl/storage" + "github.com/anytypeio/go-anytype-infrastructure-experiments/common/commonspace/object/accountdata" + "github.com/anytypeio/go-anytype-infrastructure-experiments/common/commonspace/object/acl/aclrecordproto" + "github.com/anytypeio/go-anytype-infrastructure-experiments/common/commonspace/object/acl/liststorage" + "github.com/anytypeio/go-anytype-infrastructure-experiments/common/commonspace/object/keychain" "sync" ) type IterFunc = func(record *ACLRecord) (IsContinue bool) -var ( - ErrIncorrectCID = errors.New("incorrect CID") - ErrInconsistent = errors.New("inconsistent record") -) +var ErrIncorrectCID = errors.New("incorrect CID") type RWLocker interface { sync.Locker @@ -28,7 +25,7 @@ type RWLocker interface { type ACLList interface { RWLocker ID() string - Root() *aclrecordproto.ACLRoot + Root() *aclrecordproto.RawACLRecordWithId Records() []*ACLRecord ACLState() *ACLState IsAfter(first string, second string) (bool, error) @@ -43,39 +40,30 @@ type ACLList interface { } type aclList struct { - root *aclrecordproto.ACLRoot + root *aclrecordproto.RawACLRecordWithId records []*ACLRecord indexes map[string]int id string - recBuilder ACLRecordBuilder - builder *aclStateBuilder - aclState *ACLState - keychain *common.Keychain + stateBuilder *aclStateBuilder + recordBuilder ACLRecordBuilder + aclState *ACLState + keychain *keychain.Keychain + storage liststorage.ListStorage sync.RWMutex } -func BuildACLListWithIdentity(acc *account.AccountData, storage storage.ListStorage) (ACLList, error) { +func BuildACLListWithIdentity(acc *accountdata.AccountData, storage liststorage.ListStorage) (ACLList, error) { builder := newACLStateBuilderWithIdentity(acc) - return build(storage.Id(), builder, newACLRecordBuilder(storage.Id(), common.NewKeychain()), storage) + return build(storage.Id(), builder, newACLRecordBuilder(storage.Id(), keychain.NewKeychain()), storage) } -func BuildACLList(storage storage.ListStorage) (ACLList, error) { - return build(storage.Id(), newACLStateBuilder(), newACLRecordBuilder(storage.Id(), common.NewKeychain()), storage) +func BuildACLList(storage liststorage.ListStorage) (ACLList, error) { + return build(storage.Id(), newACLStateBuilder(), newACLRecordBuilder(storage.Id(), keychain.NewKeychain()), storage) } -func build(id string, stateBuilder *aclStateBuilder, recBuilder ACLRecordBuilder, storage storage.ListStorage) (list ACLList, err error) { - // TODO: need to add context here - rootWithId, err := storage.Root() - if err != nil { - return - } - aclRecRoot, err := recBuilder.ConvertFromRaw(rootWithId) - if err != nil { - return - } - +func build(id string, stateBuilder *aclStateBuilder, recBuilder ACLRecordBuilder, storage liststorage.ListStorage) (list ACLList, err error) { head, err := storage.Head() if err != nil { return @@ -92,7 +80,7 @@ func build(id string, stateBuilder *aclStateBuilder, recBuilder ACLRecordBuilder } records := []*ACLRecord{record} - for record.PrevId != "" && record.PrevId != id { + for record.PrevId != "" { rawRecordWithId, err = storage.GetRawRecord(context.Background(), record.PrevId) if err != nil { return @@ -104,8 +92,6 @@ func build(id string, stateBuilder *aclStateBuilder, recBuilder ACLRecordBuilder } records = append(records, record) } - // adding root in the end, because we already parsed it - records = append(records, aclRecRoot) indexes := make(map[string]int) for i, j := 0, len(records)-1; i < j; i, j = i+1, j-1 { @@ -124,14 +110,21 @@ func build(id string, stateBuilder *aclStateBuilder, recBuilder ACLRecordBuilder return } + // TODO: check if this is correct (raw model instead of unmarshalled) + rootWithId, err := storage.Root() + if err != nil { + return + } + list = &aclList{ - root: aclRecRoot.Model.(*aclrecordproto.ACLRoot), - records: records, - indexes: indexes, - builder: stateBuilder, - recBuilder: recBuilder, - aclState: state, - id: id, + root: rootWithId, + records: records, + indexes: indexes, + stateBuilder: stateBuilder, + recordBuilder: recBuilder, + aclState: state, + storage: storage, + id: id, } return } @@ -144,34 +137,30 @@ func (a *aclList) AddRawRecord(rawRec *aclrecordproto.RawACLRecordWithId) (added if _, ok := a.indexes[rawRec.Id]; ok { return } - record, err := a.recBuilder.ConvertFromRaw(rawRec) + record, err := a.recordBuilder.ConvertFromRaw(rawRec) if err != nil { return } - var lastId string - if len(a.records) > 0 { - lastId = a.records[len(a.records)-1].Id - } - if record.PrevId != lastId { - return false, ErrInconsistent + if err = a.aclState.applyRecord(record); err != nil { + return } a.records = append(a.records, record) a.indexes[record.Id] = len(a.records) - 1 + if err = a.storage.AddRawRecord(context.Background(), rawRec); err != nil { + return + } + if err = a.storage.SetHead(rawRec.Id); err != nil { + return + } return true, nil } func (a *aclList) IsValidNext(rawRec *aclrecordproto.RawACLRecordWithId) (err error) { - rec, err := a.recBuilder.ConvertFromRaw(rawRec) + _, err = a.recordBuilder.ConvertFromRaw(rawRec) if err != nil { return } - var lastId string - if len(a.records) > 0 { - lastId = a.records[len(a.records)-1].Id - } - if rec.PrevId != lastId { - return ErrInconsistent - } + // TODO: change state and add "check" method for records return } @@ -179,7 +168,7 @@ func (a *aclList) ID() string { return a.id } -func (a *aclList) Root() *aclrecordproto.ACLRoot { +func (a *aclList) Root() *aclrecordproto.RawACLRecordWithId { return a.root } diff --git a/common/pkg/acl/list/list_test.go b/common/commonspace/object/acl/list/list_test.go similarity index 97% rename from common/pkg/acl/list/list_test.go rename to common/commonspace/object/acl/list/list_test.go index c4effdae..79698db5 100644 --- a/common/pkg/acl/list/list_test.go +++ b/common/commonspace/object/acl/list/list_test.go @@ -1,8 +1,8 @@ package list import ( - "github.com/anytypeio/go-anytype-infrastructure-experiments/common/pkg/acl/aclrecordproto" - "github.com/anytypeio/go-anytype-infrastructure-experiments/common/pkg/acl/testutils/acllistbuilder" + "github.com/anytypeio/go-anytype-infrastructure-experiments/common/commonspace/object/acl/aclrecordproto" + "github.com/anytypeio/go-anytype-infrastructure-experiments/common/commonspace/object/acl/testutils/acllistbuilder" "github.com/stretchr/testify/assert" "github.com/stretchr/testify/require" "testing" diff --git a/common/pkg/acl/list/mock_list/mock_list.go b/common/commonspace/object/acl/list/mock_list/mock_list.go similarity index 97% rename from common/pkg/acl/list/mock_list/mock_list.go rename to common/commonspace/object/acl/list/mock_list/mock_list.go index c70c183b..ef9d4551 100644 --- a/common/pkg/acl/list/mock_list/mock_list.go +++ b/common/commonspace/object/acl/list/mock_list/mock_list.go @@ -1,5 +1,5 @@ // Code generated by MockGen. DO NOT EDIT. -// Source: github.com/anytypeio/go-anytype-infrastructure-experiments/common/pkg/acl/list (interfaces: ACLList) +// Source: github.com/anytypeio/go-anytype-infrastructure-experiments/common/commonspace/object/acl/list (interfaces: ACLList) // Package mock_list is a generated GoMock package. package mock_list @@ -7,8 +7,8 @@ package mock_list import ( reflect "reflect" - aclrecordproto "github.com/anytypeio/go-anytype-infrastructure-experiments/common/pkg/acl/aclrecordproto" - list "github.com/anytypeio/go-anytype-infrastructure-experiments/common/pkg/acl/list" + aclrecordproto "github.com/anytypeio/go-anytype-infrastructure-experiments/common/commonspace/object/acl/aclrecordproto" + list "github.com/anytypeio/go-anytype-infrastructure-experiments/common/commonspace/object/acl/list" gomock "github.com/golang/mock/gomock" ) diff --git a/common/pkg/acl/list/record.go b/common/commonspace/object/acl/list/record.go similarity index 100% rename from common/pkg/acl/list/record.go rename to common/commonspace/object/acl/list/record.go diff --git a/common/commonspace/object/acl/liststorage/inmemory.go b/common/commonspace/object/acl/liststorage/inmemory.go new file mode 100644 index 00000000..a0efa1ba --- /dev/null +++ b/common/commonspace/object/acl/liststorage/inmemory.go @@ -0,0 +1,78 @@ +package liststorage + +import ( + "context" + "fmt" + "github.com/anytypeio/go-anytype-infrastructure-experiments/common/commonspace/object/acl/aclrecordproto" + "sync" +) + +type inMemoryACLListStorage struct { + id string + root *aclrecordproto.RawACLRecordWithId + head string + records map[string]*aclrecordproto.RawACLRecordWithId + + sync.RWMutex +} + +func NewInMemoryACLListStorage( + id string, + records []*aclrecordproto.RawACLRecordWithId) (ListStorage, error) { + + allRecords := make(map[string]*aclrecordproto.RawACLRecordWithId) + for _, ch := range records { + allRecords[ch.Id] = ch + } + root := records[0] + head := records[len(records)-1] + + return &inMemoryACLListStorage{ + id: root.Id, + root: root, + head: head.Id, + records: allRecords, + }, nil +} + +func (t *inMemoryACLListStorage) Id() string { + t.RLock() + defer t.RUnlock() + return t.id +} + +func (t *inMemoryACLListStorage) Root() (*aclrecordproto.RawACLRecordWithId, error) { + t.RLock() + defer t.RUnlock() + return t.root, nil +} + +func (t *inMemoryACLListStorage) Head() (string, error) { + t.RLock() + defer t.RUnlock() + return t.head, nil +} + +func (t *inMemoryACLListStorage) SetHead(head string) error { + t.Lock() + defer t.Unlock() + t.head = head + return nil +} + +func (t *inMemoryACLListStorage) AddRawRecord(ctx context.Context, record *aclrecordproto.RawACLRecordWithId) error { + t.Lock() + defer t.Unlock() + // TODO: better to do deep copy + t.records[record.Id] = record + return nil +} + +func (t *inMemoryACLListStorage) GetRawRecord(ctx context.Context, recordId string) (*aclrecordproto.RawACLRecordWithId, error) { + t.RLock() + defer t.RUnlock() + if res, exists := t.records[recordId]; exists { + return res, nil + } + return nil, fmt.Errorf("could not get record with id: %s", recordId) +} diff --git a/common/pkg/acl/storage/liststorage.go b/common/commonspace/object/acl/liststorage/liststorage.go similarity index 50% rename from common/pkg/acl/storage/liststorage.go rename to common/commonspace/object/acl/liststorage/liststorage.go index bfe47ab9..abc14cbd 100644 --- a/common/pkg/acl/storage/liststorage.go +++ b/common/commonspace/object/acl/liststorage/liststorage.go @@ -1,15 +1,17 @@ -//go:generate mockgen -destination mock_storage/mock_storage.go github.com/anytypeio/go-anytype-infrastructure-experiments/common/pkg/acl/storage ListStorage,TreeStorage -package storage +//go:generate mockgen -destination mock_liststorage/mock_liststorage.go github.com/anytypeio/go-anytype-infrastructure-experiments/common/commonspace/object/acl/liststorage ListStorage +package liststorage import ( "context" "errors" - "github.com/anytypeio/go-anytype-infrastructure-experiments/common/pkg/acl/aclrecordproto" + "github.com/anytypeio/go-anytype-infrastructure-experiments/common/commonspace/object/acl/aclrecordproto" ) -var ErrUnknownACLId = errors.New("acl does not exist") -var ErrACLExists = errors.New("acl already exists") -var ErrUnknownRecord = errors.New("record doesn't exist") +var ( + ErrUnknownACLId = errors.New("acl does not exist") + ErrACLExists = errors.New("acl already exists") + ErrUnknownRecord = errors.New("record doesn't exist") +) type ListStorage interface { Id() string diff --git a/common/commonspace/object/acl/liststorage/mock_liststorage/mock_liststorage.go b/common/commonspace/object/acl/liststorage/mock_liststorage/mock_liststorage.go new file mode 100644 index 00000000..6000454e --- /dev/null +++ b/common/commonspace/object/acl/liststorage/mock_liststorage/mock_liststorage.go @@ -0,0 +1,123 @@ +// Code generated by MockGen. DO NOT EDIT. +// Source: github.com/anytypeio/go-anytype-infrastructure-experiments/common/commonspace/object/acl/liststorage (interfaces: ListStorage) + +// Package mock_liststorage is a generated GoMock package. +package mock_liststorage + +import ( + context "context" + reflect "reflect" + + aclrecordproto "github.com/anytypeio/go-anytype-infrastructure-experiments/common/commonspace/object/acl/aclrecordproto" + gomock "github.com/golang/mock/gomock" +) + +// MockListStorage is a mock of ListStorage interface. +type MockListStorage struct { + ctrl *gomock.Controller + recorder *MockListStorageMockRecorder +} + +// MockListStorageMockRecorder is the mock recorder for MockListStorage. +type MockListStorageMockRecorder struct { + mock *MockListStorage +} + +// NewMockListStorage creates a new mock instance. +func NewMockListStorage(ctrl *gomock.Controller) *MockListStorage { + mock := &MockListStorage{ctrl: ctrl} + mock.recorder = &MockListStorageMockRecorder{mock} + return mock +} + +// EXPECT returns an object that allows the caller to indicate expected use. +func (m *MockListStorage) EXPECT() *MockListStorageMockRecorder { + return m.recorder +} + +// AddRawRecord mocks base method. +func (m *MockListStorage) AddRawRecord(arg0 context.Context, arg1 *aclrecordproto.RawACLRecordWithId) error { + m.ctrl.T.Helper() + ret := m.ctrl.Call(m, "AddRawRecord", arg0, arg1) + ret0, _ := ret[0].(error) + return ret0 +} + +// AddRawRecord indicates an expected call of AddRawRecord. +func (mr *MockListStorageMockRecorder) AddRawRecord(arg0, arg1 interface{}) *gomock.Call { + mr.mock.ctrl.T.Helper() + return mr.mock.ctrl.RecordCallWithMethodType(mr.mock, "AddRawRecord", reflect.TypeOf((*MockListStorage)(nil).AddRawRecord), arg0, arg1) +} + +// GetRawRecord mocks base method. +func (m *MockListStorage) GetRawRecord(arg0 context.Context, arg1 string) (*aclrecordproto.RawACLRecordWithId, error) { + m.ctrl.T.Helper() + ret := m.ctrl.Call(m, "GetRawRecord", arg0, arg1) + ret0, _ := ret[0].(*aclrecordproto.RawACLRecordWithId) + ret1, _ := ret[1].(error) + return ret0, ret1 +} + +// GetRawRecord indicates an expected call of GetRawRecord. +func (mr *MockListStorageMockRecorder) GetRawRecord(arg0, arg1 interface{}) *gomock.Call { + mr.mock.ctrl.T.Helper() + return mr.mock.ctrl.RecordCallWithMethodType(mr.mock, "GetRawRecord", reflect.TypeOf((*MockListStorage)(nil).GetRawRecord), arg0, arg1) +} + +// Head mocks base method. +func (m *MockListStorage) Head() (string, error) { + m.ctrl.T.Helper() + ret := m.ctrl.Call(m, "Head") + ret0, _ := ret[0].(string) + ret1, _ := ret[1].(error) + return ret0, ret1 +} + +// Head indicates an expected call of Head. +func (mr *MockListStorageMockRecorder) Head() *gomock.Call { + mr.mock.ctrl.T.Helper() + return mr.mock.ctrl.RecordCallWithMethodType(mr.mock, "Head", reflect.TypeOf((*MockListStorage)(nil).Head)) +} + +// Id mocks base method. +func (m *MockListStorage) Id() string { + m.ctrl.T.Helper() + ret := m.ctrl.Call(m, "Id") + ret0, _ := ret[0].(string) + return ret0 +} + +// Id indicates an expected call of Id. +func (mr *MockListStorageMockRecorder) Id() *gomock.Call { + mr.mock.ctrl.T.Helper() + return mr.mock.ctrl.RecordCallWithMethodType(mr.mock, "Id", reflect.TypeOf((*MockListStorage)(nil).Id)) +} + +// Root mocks base method. +func (m *MockListStorage) Root() (*aclrecordproto.RawACLRecordWithId, error) { + m.ctrl.T.Helper() + ret := m.ctrl.Call(m, "Root") + ret0, _ := ret[0].(*aclrecordproto.RawACLRecordWithId) + ret1, _ := ret[1].(error) + return ret0, ret1 +} + +// Root indicates an expected call of Root. +func (mr *MockListStorageMockRecorder) Root() *gomock.Call { + mr.mock.ctrl.T.Helper() + return mr.mock.ctrl.RecordCallWithMethodType(mr.mock, "Root", reflect.TypeOf((*MockListStorage)(nil).Root)) +} + +// SetHead mocks base method. +func (m *MockListStorage) SetHead(arg0 string) error { + m.ctrl.T.Helper() + ret := m.ctrl.Call(m, "SetHead", arg0) + ret0, _ := ret[0].(error) + return ret0 +} + +// SetHead indicates an expected call of SetHead. +func (mr *MockListStorageMockRecorder) SetHead(arg0 interface{}) *gomock.Call { + mr.mock.ctrl.T.Helper() + return mr.mock.ctrl.RecordCallWithMethodType(mr.mock, "SetHead", reflect.TypeOf((*MockListStorage)(nil).SetHead), arg0) +} diff --git a/common/commonspace/syncacl/syncacl.go b/common/commonspace/object/acl/syncacl/syncacl.go similarity index 63% rename from common/commonspace/syncacl/syncacl.go rename to common/commonspace/object/acl/syncacl/syncacl.go index c7343625..cc84fdb7 100644 --- a/common/commonspace/syncacl/syncacl.go +++ b/common/commonspace/object/acl/syncacl/syncacl.go @@ -1,18 +1,18 @@ package syncacl import ( - "github.com/anytypeio/go-anytype-infrastructure-experiments/common/commonspace/syncservice" - "github.com/anytypeio/go-anytype-infrastructure-experiments/common/commonspace/syncservice/synchandler" - "github.com/anytypeio/go-anytype-infrastructure-experiments/common/pkg/acl/list" + "github.com/anytypeio/go-anytype-infrastructure-experiments/common/commonspace/object/acl/list" + "github.com/anytypeio/go-anytype-infrastructure-experiments/common/commonspace/objectsync" + "github.com/anytypeio/go-anytype-infrastructure-experiments/common/commonspace/objectsync/synchandler" ) type SyncACL struct { list.ACLList synchandler.SyncHandler - streamPool syncservice.StreamPool + streamPool objectsync.StreamPool } -func NewSyncACL(aclList list.ACLList, streamPool syncservice.StreamPool) *SyncACL { +func NewSyncACL(aclList list.ACLList, streamPool objectsync.StreamPool) *SyncACL { return &SyncACL{ ACLList: aclList, SyncHandler: nil, diff --git a/common/commonspace/syncacl/syncaclhandler.go b/common/commonspace/object/acl/syncacl/syncaclhandler.go similarity index 92% rename from common/commonspace/syncacl/syncaclhandler.go rename to common/commonspace/object/acl/syncacl/syncaclhandler.go index feb78e07..8aa70722 100644 --- a/common/commonspace/syncacl/syncaclhandler.go +++ b/common/commonspace/object/acl/syncacl/syncaclhandler.go @@ -3,9 +3,9 @@ package syncacl import ( "context" "fmt" + "github.com/anytypeio/go-anytype-infrastructure-experiments/common/commonspace/object/acl/aclrecordproto" + "github.com/anytypeio/go-anytype-infrastructure-experiments/common/commonspace/object/acl/list" "github.com/anytypeio/go-anytype-infrastructure-experiments/common/commonspace/spacesyncproto" - "github.com/anytypeio/go-anytype-infrastructure-experiments/common/pkg/acl/aclrecordproto" - "github.com/anytypeio/go-anytype-infrastructure-experiments/common/pkg/acl/list" ) type syncAclHandler struct { diff --git a/common/pkg/acl/testutils/acllistbuilder/keychain.go b/common/commonspace/object/acl/testutils/acllistbuilder/keychain.go similarity index 80% rename from common/pkg/acl/testutils/acllistbuilder/keychain.go rename to common/commonspace/object/acl/testutils/acllistbuilder/keychain.go index ff0b9b04..ba129ace 100644 --- a/common/pkg/acl/testutils/acllistbuilder/keychain.go +++ b/common/commonspace/object/acl/testutils/acllistbuilder/keychain.go @@ -1,10 +1,10 @@ package acllistbuilder import ( - "github.com/anytypeio/go-anytype-infrastructure-experiments/common/pkg/acl/aclrecordproto" + "github.com/anytypeio/go-anytype-infrastructure-experiments/common/commonspace/object/acl/aclrecordproto" "github.com/anytypeio/go-anytype-infrastructure-experiments/common/util/keys" - encryptionkey2 "github.com/anytypeio/go-anytype-infrastructure-experiments/common/util/keys/asymmetric/encryptionkey" - signingkey2 "github.com/anytypeio/go-anytype-infrastructure-experiments/common/util/keys/asymmetric/signingkey" + "github.com/anytypeio/go-anytype-infrastructure-experiments/common/util/keys/asymmetric/encryptionkey" + "github.com/anytypeio/go-anytype-infrastructure-experiments/common/util/keys/asymmetric/signingkey" "github.com/anytypeio/go-anytype-infrastructure-experiments/common/util/keys/symmetric" "hash/fnv" "strings" @@ -16,9 +16,9 @@ type SymKey struct { } type YAMLKeychain struct { - SigningKeysByYAMLName map[string]signingkey2.PrivKey - SigningKeysByRealIdentity map[string]signingkey2.PrivKey - EncryptionKeysByYAMLName map[string]encryptionkey2.PrivKey + SigningKeysByYAMLName map[string]signingkey.PrivKey + SigningKeysByRealIdentity map[string]signingkey.PrivKey + EncryptionKeysByYAMLName map[string]encryptionkey.PrivKey ReadKeysByYAMLName map[string]*SymKey ReadKeysByHash map[uint64]*SymKey GeneratedIdentities map[string]string @@ -26,9 +26,9 @@ type YAMLKeychain struct { func NewKeychain() *YAMLKeychain { return &YAMLKeychain{ - SigningKeysByYAMLName: map[string]signingkey2.PrivKey{}, - SigningKeysByRealIdentity: map[string]signingkey2.PrivKey{}, - EncryptionKeysByYAMLName: map[string]encryptionkey2.PrivKey{}, + SigningKeysByYAMLName: map[string]signingkey.PrivKey{}, + SigningKeysByRealIdentity: map[string]signingkey.PrivKey{}, + EncryptionKeysByYAMLName: map[string]encryptionkey.PrivKey{}, GeneratedIdentities: map[string]string{}, ReadKeysByYAMLName: map[string]*SymKey{}, ReadKeysByHash: map[uint64]*SymKey{}, @@ -54,16 +54,16 @@ func (k *YAMLKeychain) AddEncryptionKey(key *Key) { return } var ( - newPrivKey encryptionkey2.PrivKey + newPrivKey encryptionkey.PrivKey err error ) if key.Value == "generated" { - newPrivKey, _, err = encryptionkey2.GenerateRandomRSAKeyPair(2048) + newPrivKey, _, err = encryptionkey.GenerateRandomRSAKeyPair(2048) if err != nil { panic(err) } } else { - newPrivKey, err = keys.DecodeKeyFromString(key.Value, encryptionkey2.NewEncryptionRsaPrivKeyFromBytes, nil) + newPrivKey, err = keys.DecodeKeyFromString(key.Value, encryptionkey.NewEncryptionRsaPrivKeyFromBytes, nil) if err != nil { panic(err) } @@ -76,17 +76,17 @@ func (k *YAMLKeychain) AddSigningKey(key *Key) { return } var ( - newPrivKey signingkey2.PrivKey - pubKey signingkey2.PubKey + newPrivKey signingkey.PrivKey + pubKey signingkey.PubKey err error ) if key.Value == "generated" { - newPrivKey, pubKey, err = signingkey2.GenerateRandomEd25519KeyPair() + newPrivKey, pubKey, err = signingkey.GenerateRandomEd25519KeyPair() if err != nil { panic(err) } } else { - newPrivKey, err = keys.DecodeKeyFromString(key.Value, signingkey2.NewSigningEd25519PrivKeyFromBytes, nil) + newPrivKey, err = keys.DecodeKeyFromString(key.Value, signingkey.NewSigningEd25519PrivKeyFromBytes, nil) if err != nil { panic(err) } diff --git a/common/pkg/acl/testutils/acllistbuilder/liststoragebuilder.go b/common/commonspace/object/acl/testutils/acllistbuilder/liststoragebuilder.go similarity index 51% rename from common/pkg/acl/testutils/acllistbuilder/liststoragebuilder.go rename to common/commonspace/object/acl/testutils/acllistbuilder/liststoragebuilder.go index 33703a9b..4a8b0620 100644 --- a/common/pkg/acl/testutils/acllistbuilder/liststoragebuilder.go +++ b/common/commonspace/object/acl/testutils/acllistbuilder/liststoragebuilder.go @@ -3,13 +3,13 @@ package acllistbuilder import ( "context" "fmt" - aclrecordproto2 "github.com/anytypeio/go-anytype-infrastructure-experiments/common/pkg/acl/aclrecordproto" - "github.com/anytypeio/go-anytype-infrastructure-experiments/common/pkg/acl/storage" - "github.com/anytypeio/go-anytype-infrastructure-experiments/common/pkg/acl/testutils/yamltests" - "github.com/anytypeio/go-anytype-infrastructure-experiments/common/util/cid" + "github.com/anytypeio/go-anytype-infrastructure-experiments/common/commonspace/object/acl/aclrecordproto" + "github.com/anytypeio/go-anytype-infrastructure-experiments/common/commonspace/object/acl/liststorage" + "github.com/anytypeio/go-anytype-infrastructure-experiments/common/commonspace/object/acl/testutils/yamltests" + "github.com/anytypeio/go-anytype-infrastructure-experiments/common/util/cidutil" "github.com/anytypeio/go-anytype-infrastructure-experiments/common/util/keys/asymmetric/encryptionkey" "github.com/anytypeio/go-anytype-infrastructure-experiments/common/util/keys/asymmetric/signingkey" - "hash/fnv" + "github.com/anytypeio/go-anytype-infrastructure-experiments/common/util/keys/symmetric" "io/ioutil" "path" "time" @@ -19,25 +19,17 @@ import ( ) type ACLListStorageBuilder struct { - aclList string - records []*aclrecordproto2.ACLRecord - rawRecords []*aclrecordproto2.RawACLRecordWithId - indexes map[string]int - keychain *YAMLKeychain - rawRoot *aclrecordproto2.RawACLRecordWithId - root *aclrecordproto2.ACLRoot - id string + liststorage.ListStorage + keychain *YAMLKeychain } func NewACLListStorageBuilder(keychain *YAMLKeychain) *ACLListStorageBuilder { return &ACLListStorageBuilder{ - records: make([]*aclrecordproto2.ACLRecord, 0), - indexes: make(map[string]int), keychain: keychain, } } -func NewListStorageWithTestName(name string) (storage.ListStorage, error) { +func NewListStorageWithTestName(name string) (liststorage.ListStorage, error) { filePath := path.Join(yamltests.Path(), name) return NewACLListStorageBuilderFromFile(filePath) } @@ -60,7 +52,7 @@ func NewACLListStorageBuilderFromFile(file string) (*ACLListStorageBuilder, erro return tb, nil } -func (t *ACLListStorageBuilder) createRaw(rec proto.Marshaler, identity []byte) *aclrecordproto2.RawACLRecordWithId { +func (t *ACLListStorageBuilder) createRaw(rec proto.Marshaler, identity []byte) *aclrecordproto.RawACLRecordWithId { protoMarshalled, err := rec.Marshal() if err != nil { panic("should be able to marshal final acl message!") @@ -71,7 +63,7 @@ func (t *ACLListStorageBuilder) createRaw(rec proto.Marshaler, identity []byte) panic("should be able to sign final acl message!") } - rawRec := &aclrecordproto2.RawACLRecord{ + rawRec := &aclrecordproto.RawACLRecord{ Payload: protoMarshalled, Signature: signature, } @@ -81,96 +73,64 @@ func (t *ACLListStorageBuilder) createRaw(rec proto.Marshaler, identity []byte) panic(err) } - id, _ := cid.NewCIDFromBytes(rawMarshalled) + id, _ := cidutil.NewCIDFromBytes(rawMarshalled) - return &aclrecordproto2.RawACLRecordWithId{ + return &aclrecordproto.RawACLRecordWithId{ Payload: rawMarshalled, Id: id, } } -func (t *ACLListStorageBuilder) Head() (string, error) { - l := len(t.records) - if l > 0 { - return t.rawRecords[l-1].Id, nil - } - return t.rawRoot.Id, nil -} - -func (t *ACLListStorageBuilder) SetHead(headId string) error { - panic("SetHead is not implemented") -} - -func (t *ACLListStorageBuilder) Root() (*aclrecordproto2.RawACLRecordWithId, error) { - return t.rawRoot, nil -} - -func (t *ACLListStorageBuilder) GetRawRecord(ctx context.Context, id string) (*aclrecordproto2.RawACLRecordWithId, error) { - recIdx, ok := t.indexes[id] - if !ok { - if id == t.rawRoot.Id { - return t.rawRoot, nil - } - return nil, fmt.Errorf("no such record") - } - return t.rawRecords[recIdx], nil -} - -func (t *ACLListStorageBuilder) AddRawRecord(ctx context.Context, rec *aclrecordproto2.RawACLRecordWithId) error { - panic("implement me") -} - -func (t *ACLListStorageBuilder) Id() string { - return t.id -} - -func (t *ACLListStorageBuilder) GetRawRecords() []*aclrecordproto2.RawACLRecordWithId { - return t.rawRecords -} - func (t *ACLListStorageBuilder) GetKeychain() *YAMLKeychain { return t.keychain } -func (t *ACLListStorageBuilder) Parse(tree *YMLList) { +func (t *ACLListStorageBuilder) Parse(l *YMLList) { // Just to clarify - we are generating new identities for the ones that // are specified in the yml file, because our identities should be Ed25519 // the same thing is happening for the encryption keys - t.keychain.ParseKeys(&tree.Keys) - t.parseRoot(tree.Root) - prevId := t.id - for idx, rec := range tree.Records { + t.keychain.ParseKeys(&l.Keys) + rawRoot := t.parseRoot(l.Root) + var err error + t.ListStorage, err = liststorage.NewInMemoryACLListStorage(rawRoot.Id, []*aclrecordproto.RawACLRecordWithId{rawRoot}) + if err != nil { + panic(err) + } + prevId := rawRoot.Id + for _, rec := range l.Records { newRecord := t.parseRecord(rec, prevId) rawRecord := t.createRaw(newRecord, newRecord.Identity) - t.records = append(t.records, newRecord) - t.rawRecords = append(t.rawRecords, rawRecord) - t.indexes[rawRecord.Id] = idx + err = t.AddRawRecord(context.Background(), rawRecord) + if err != nil { + panic(err) + } prevId = rawRecord.Id } + t.SetHead(prevId) } -func (t *ACLListStorageBuilder) parseRecord(rec *Record, prevId string) *aclrecordproto2.ACLRecord { +func (t *ACLListStorageBuilder) parseRecord(rec *Record, prevId string) *aclrecordproto.ACLRecord { k := t.keychain.GetKey(rec.ReadKey).(*SymKey) - var aclChangeContents []*aclrecordproto2.ACLContentValue + var aclChangeContents []*aclrecordproto.ACLContentValue for _, ch := range rec.AclChanges { aclChangeContent := t.parseACLChange(ch) aclChangeContents = append(aclChangeContents, aclChangeContent) } - data := &aclrecordproto2.ACLData{ + data := &aclrecordproto.ACLData{ AclContent: aclChangeContents, } bytes, _ := data.Marshal() - return &aclrecordproto2.ACLRecord{ + return &aclrecordproto.ACLRecord{ PrevId: prevId, Identity: []byte(t.keychain.GetIdentity(rec.Identity)), Data: bytes, CurrentReadKeyHash: k.Hash, - Timestamp: time.Now().Unix(), + Timestamp: time.Now().UnixNano(), } } -func (t *ACLListStorageBuilder) parseACLChange(ch *ACLChange) (convCh *aclrecordproto2.ACLContentValue) { +func (t *ACLListStorageBuilder) parseACLChange(ch *ACLChange) (convCh *aclrecordproto.ACLContentValue) { switch { case ch.UserAdd != nil: add := ch.UserAdd @@ -178,12 +138,12 @@ func (t *ACLListStorageBuilder) parseACLChange(ch *ACLChange) (convCh *aclrecord encKey := t.keychain.GetKey(add.EncryptionKey).(encryptionkey.PrivKey) rawKey, _ := encKey.GetPublic().Raw() - convCh = &aclrecordproto2.ACLContentValue{ - Value: &aclrecordproto2.ACLContentValue_UserAdd{ - UserAdd: &aclrecordproto2.ACLUserAdd{ + convCh = &aclrecordproto.ACLContentValue{ + Value: &aclrecordproto.ACLContentValue_UserAdd{ + UserAdd: &aclrecordproto.ACLUserAdd{ Identity: []byte(t.keychain.GetIdentity(add.Identity)), EncryptionKey: rawKey, - EncryptedReadKeys: t.encryptReadKeys(add.EncryptedReadKeys, encKey), + EncryptedReadKeys: t.encryptReadKeysWithPubKey(add.EncryptedReadKeys, encKey), Permissions: t.convertPermission(add.Permission), }, }, @@ -191,52 +151,50 @@ func (t *ACLListStorageBuilder) parseACLChange(ch *ACLChange) (convCh *aclrecord case ch.UserJoin != nil: join := ch.UserJoin - encKey := t.keychain. - GetKey(join.EncryptionKey).(encryptionkey.PrivKey) + encKey := t.keychain.GetKey(join.EncryptionKey).(encryptionkey.PrivKey) rawKey, _ := encKey.GetPublic().Raw() - idKey, _ := t.keychain.SigningKeysByYAMLIdentity[join.Identity].GetPublic().Raw() - signKey := t.keychain.GetKey(join.AcceptSignature).(signingkey.PrivKey) + idKey, _ := t.keychain.SigningKeysByYAMLName[join.Identity].GetPublic().Raw() + signKey := t.keychain.GetKey(join.AcceptKey).(signingkey.PrivKey) signature, err := signKey.Sign(idKey) if err != nil { panic(err) } + acceptPubKey, _ := signKey.GetPublic().Raw() - convCh = &aclrecordproto2.ACLContentValue{ - Value: &aclrecordproto2.ACLContentValue_UserJoin{ - UserJoin: &aclrecordproto2.ACLUserJoin{ + convCh = &aclrecordproto.ACLContentValue{ + Value: &aclrecordproto.ACLContentValue_UserJoin{ + UserJoin: &aclrecordproto.ACLUserJoin{ Identity: []byte(t.keychain.GetIdentity(join.Identity)), EncryptionKey: rawKey, AcceptSignature: signature, - InviteId: join.InviteId, - EncryptedReadKeys: t.encryptReadKeys(join.EncryptedReadKeys, encKey), + AcceptPubKey: acceptPubKey, + EncryptedReadKeys: t.encryptReadKeysWithPubKey(join.EncryptedReadKeys, encKey), }, }, } case ch.UserInvite != nil: invite := ch.UserInvite rawAcceptKey, _ := t.keychain.GetKey(invite.AcceptKey).(signingkey.PrivKey).GetPublic().Raw() - encKey := t.keychain. - GetKey(invite.EncryptionKey).(encryptionkey.PrivKey) - rawEncKey, _ := encKey.GetPublic().Raw() + hash := t.keychain.GetKey(invite.EncryptionKey).(*SymKey).Hash + encKey := t.keychain.ReadKeysByHash[hash] - convCh = &aclrecordproto2.ACLContentValue{ - Value: &aclrecordproto2.ACLContentValue_UserInvite{ - UserInvite: &aclrecordproto2.ACLUserInvite{ + convCh = &aclrecordproto.ACLContentValue{ + Value: &aclrecordproto.ACLContentValue_UserInvite{ + UserInvite: &aclrecordproto.ACLUserInvite{ AcceptPublicKey: rawAcceptKey, - EncryptPublicKey: rawEncKey, - EncryptedReadKeys: t.encryptReadKeys(invite.EncryptedReadKeys, encKey), + EncryptSymKeyHash: hash, + EncryptedReadKeys: t.encryptReadKeysWithSymKey(invite.EncryptedReadKeys, encKey.Key), Permissions: t.convertPermission(invite.Permissions), - InviteId: invite.InviteId, }, }, } case ch.UserPermissionChange != nil: permissionChange := ch.UserPermissionChange - convCh = &aclrecordproto2.ACLContentValue{ - Value: &aclrecordproto2.ACLContentValue_UserPermissionChange{ - UserPermissionChange: &aclrecordproto2.ACLUserPermissionChange{ + convCh = &aclrecordproto.ACLContentValue{ + Value: &aclrecordproto.ACLContentValue_UserPermissionChange{ + UserPermissionChange: &aclrecordproto.ACLUserPermissionChange{ Identity: []byte(t.keychain.GetIdentity(permissionChange.Identity)), Permissions: t.convertPermission(permissionChange.Permission), }, @@ -247,24 +205,24 @@ func (t *ACLListStorageBuilder) parseACLChange(ch *ACLChange) (convCh *aclrecord newReadKey := t.keychain.GetKey(remove.NewReadKey).(*SymKey) - var replaces []*aclrecordproto2.ACLReadKeyReplace + var replaces []*aclrecordproto.ACLReadKeyReplace for _, id := range remove.IdentitiesLeft { - encKey := t.keychain.EncryptionKeysByYAMLIdentity[id] + encKey := t.keychain.EncryptionKeysByYAMLName[id] rawEncKey, _ := encKey.GetPublic().Raw() encReadKey, err := encKey.GetPublic().Encrypt(newReadKey.Key.Bytes()) if err != nil { panic(err) } - replaces = append(replaces, &aclrecordproto2.ACLReadKeyReplace{ + replaces = append(replaces, &aclrecordproto.ACLReadKeyReplace{ Identity: []byte(t.keychain.GetIdentity(id)), EncryptionKey: rawEncKey, EncryptedReadKey: encReadKey, }) } - convCh = &aclrecordproto2.ACLContentValue{ - Value: &aclrecordproto2.ACLContentValue_UserRemove{ - UserRemove: &aclrecordproto2.ACLUserRemove{ + convCh = &aclrecordproto.ACLContentValue{ + Value: &aclrecordproto.ACLContentValue_UserRemove{ + UserRemove: &aclrecordproto.ACLUserRemove{ Identity: []byte(t.keychain.GetIdentity(remove.RemovedIdentity)), ReadKeyReplaces: replaces, }, @@ -278,7 +236,7 @@ func (t *ACLListStorageBuilder) parseACLChange(ch *ACLChange) (convCh *aclrecord return convCh } -func (t *ACLListStorageBuilder) encryptReadKeys(keys []string, encKey encryptionkey.PrivKey) (enc [][]byte) { +func (t *ACLListStorageBuilder) encryptReadKeysWithPubKey(keys []string, encKey encryptionkey.PrivKey) (enc [][]byte) { for _, k := range keys { realKey := t.keychain.GetKey(k).(*SymKey).Key.Bytes() res, err := encKey.GetPublic().Encrypt(realKey) @@ -291,43 +249,47 @@ func (t *ACLListStorageBuilder) encryptReadKeys(keys []string, encKey encryption return } -func (t *ACLListStorageBuilder) convertPermission(perm string) aclrecordproto2.ACLUserPermissions { +func (t *ACLListStorageBuilder) encryptReadKeysWithSymKey(keys []string, key *symmetric.Key) (enc [][]byte) { + for _, k := range keys { + realKey := t.keychain.GetKey(k).(*SymKey).Key.Bytes() + res, err := key.Encrypt(realKey) + if err != nil { + panic(err) + } + + enc = append(enc, res) + } + return +} + +func (t *ACLListStorageBuilder) convertPermission(perm string) aclrecordproto.ACLUserPermissions { switch perm { case "admin": - return aclrecordproto2.ACLUserPermissions_Admin + return aclrecordproto.ACLUserPermissions_Admin case "writer": - return aclrecordproto2.ACLUserPermissions_Writer + return aclrecordproto.ACLUserPermissions_Writer case "reader": - return aclrecordproto2.ACLUserPermissions_Reader + return aclrecordproto.ACLUserPermissions_Reader default: panic(fmt.Sprintf("incorrect permission: %s", perm)) } } -func (t *ACLListStorageBuilder) traverseFromHead(f func(rec *aclrecordproto2.ACLRecord, id string) error) (err error) { - for i := len(t.records) - 1; i >= 0; i-- { - err = f(t.records[i], t.rawRecords[i].Id) - if err != nil { - return err - } - } - return nil +func (t *ACLListStorageBuilder) traverseFromHead(f func(rec *aclrecordproto.ACLRecord, id string) error) (err error) { + panic("this was removed, add if needed") } -func (t *ACLListStorageBuilder) parseRoot(root *Root) { - rawSignKey, _ := t.keychain.SigningKeysByYAMLIdentity[root.Identity].GetPublic().Raw() - rawEncKey, _ := t.keychain.EncryptionKeysByYAMLIdentity[root.Identity].GetPublic().Raw() - readKey, _ := aclrecordproto2.ACLReadKeyDerive(rawSignKey, rawEncKey) - hasher := fnv.New64() - hasher.Write(readKey.Bytes()) - t.root = &aclrecordproto2.ACLRoot{ +func (t *ACLListStorageBuilder) parseRoot(root *Root) (rawRoot *aclrecordproto.RawACLRecordWithId) { + rawSignKey, _ := t.keychain.SigningKeysByYAMLName[root.Identity].GetPublic().Raw() + rawEncKey, _ := t.keychain.EncryptionKeysByYAMLName[root.Identity].GetPublic().Raw() + readKey := t.keychain.ReadKeysByYAMLName[root.Identity] + aclRoot := &aclrecordproto.ACLRoot{ Identity: rawSignKey, EncryptionKey: rawEncKey, SpaceId: root.SpaceId, EncryptedReadKey: nil, DerivationScheme: "scheme", - CurrentReadKeyHash: hasher.Sum64(), + CurrentReadKeyHash: readKey.Hash, } - t.rawRoot = t.createRaw(t.root, rawSignKey) - t.id = t.rawRoot.Id + return t.createRaw(aclRoot, rawSignKey) } diff --git a/common/pkg/acl/testutils/acllistbuilder/liststoragebuildergraph.go b/common/commonspace/object/acl/testutils/acllistbuilder/liststoragebuildergraph.go similarity index 100% rename from common/pkg/acl/testutils/acllistbuilder/liststoragebuildergraph.go rename to common/commonspace/object/acl/testutils/acllistbuilder/liststoragebuildergraph.go diff --git a/common/pkg/acl/testutils/acllistbuilder/liststoragebuildergraph_nix.go b/common/commonspace/object/acl/testutils/acllistbuilder/liststoragebuildergraph_nix.go similarity index 98% rename from common/pkg/acl/testutils/acllistbuilder/liststoragebuildergraph_nix.go rename to common/commonspace/object/acl/testutils/acllistbuilder/liststoragebuildergraph_nix.go index ba2679f3..2185b4f2 100644 --- a/common/pkg/acl/testutils/acllistbuilder/liststoragebuildergraph_nix.go +++ b/common/commonspace/object/acl/testutils/acllistbuilder/liststoragebuildergraph_nix.go @@ -9,7 +9,7 @@ package acllistbuilder import ( "fmt" - "github.com/anytypeio/go-anytype-infrastructure-experiments/common/pkg/acl/aclrecordproto" + "github.com/anytypeio/go-anytype-infrastructure-experiments/common/commonspace/object/acl/aclrecordproto" "github.com/gogo/protobuf/proto" "strings" "unicode" diff --git a/common/pkg/acl/testutils/acllistbuilder/ymlentities.go b/common/commonspace/object/acl/testutils/acllistbuilder/ymlentities.go similarity index 100% rename from common/pkg/acl/testutils/acllistbuilder/ymlentities.go rename to common/commonspace/object/acl/testutils/acllistbuilder/ymlentities.go diff --git a/common/pkg/acl/testutils/yamltests/path.go b/common/commonspace/object/acl/testutils/yamltests/path.go similarity index 100% rename from common/pkg/acl/testutils/yamltests/path.go rename to common/commonspace/object/acl/testutils/yamltests/path.go diff --git a/common/pkg/acl/testutils/yamltests/userjoinexample.yml b/common/commonspace/object/acl/testutils/yamltests/userjoinexample.yml similarity index 100% rename from common/pkg/acl/testutils/yamltests/userjoinexample.yml rename to common/commonspace/object/acl/testutils/yamltests/userjoinexample.yml diff --git a/common/pkg/acl/testutils/yamltests/userremoveexample.yml b/common/commonspace/object/acl/testutils/yamltests/userremoveexample.yml similarity index 100% rename from common/pkg/acl/testutils/yamltests/userremoveexample.yml rename to common/commonspace/object/acl/testutils/yamltests/userremoveexample.yml diff --git a/common/commonspace/object/keychain/keychain.go b/common/commonspace/object/keychain/keychain.go new file mode 100644 index 00000000..19b9f3c1 --- /dev/null +++ b/common/commonspace/object/keychain/keychain.go @@ -0,0 +1,28 @@ +package keychain + +import ( + "github.com/anytypeio/go-anytype-infrastructure-experiments/common/util/keys/asymmetric/signingkey" +) + +type Keychain struct { + keys map[string]signingkey.PubKey +} + +func NewKeychain() *Keychain { + return &Keychain{ + keys: make(map[string]signingkey.PubKey), + } +} + +func (k *Keychain) GetOrAdd(identity string) (signingkey.PubKey, error) { + if key, exists := k.keys[identity]; exists { + return key, nil + } + res, err := signingkey.NewSigningEd25519PubKeyFromBytes([]byte(identity)) + if err != nil { + return nil, err + } + + k.keys[identity] = res.(signingkey.PubKey) + return res.(signingkey.PubKey), nil +} diff --git a/common/commonspace/object/syncobjectgetter/syncobjectgetter.go b/common/commonspace/object/syncobjectgetter/syncobjectgetter.go new file mode 100644 index 00000000..2032b190 --- /dev/null +++ b/common/commonspace/object/syncobjectgetter/syncobjectgetter.go @@ -0,0 +1,14 @@ +package syncobjectgetter + +import ( + "context" + "github.com/anytypeio/go-anytype-infrastructure-experiments/common/commonspace/objectsync/synchandler" +) + +type SyncObject interface { + synchandler.SyncHandler +} + +type SyncObjectGetter interface { + GetObject(ctx context.Context, objectId string) (SyncObject, error) +} diff --git a/common/pkg/acl/tree/change.go b/common/commonspace/object/tree/objecttree/change.go similarity index 95% rename from common/pkg/acl/tree/change.go rename to common/commonspace/object/tree/objecttree/change.go index 308ee958..9638a3dc 100644 --- a/common/pkg/acl/tree/change.go +++ b/common/commonspace/object/tree/objecttree/change.go @@ -1,8 +1,8 @@ -package tree +package objecttree import ( "errors" - "github.com/anytypeio/go-anytype-infrastructure-experiments/common/pkg/acl/treechangeproto" + "github.com/anytypeio/go-anytype-infrastructure-experiments/common/commonspace/object/tree/treechangeproto" ) var ( diff --git a/common/pkg/acl/tree/changebuilder.go b/common/commonspace/object/tree/objecttree/changebuilder.go similarity index 93% rename from common/pkg/acl/tree/changebuilder.go rename to common/commonspace/object/tree/objecttree/changebuilder.go index 5547b332..a829522c 100644 --- a/common/pkg/acl/tree/changebuilder.go +++ b/common/commonspace/object/tree/objecttree/changebuilder.go @@ -1,10 +1,10 @@ -package tree +package objecttree import ( "errors" - "github.com/anytypeio/go-anytype-infrastructure-experiments/common/pkg/acl/common" - "github.com/anytypeio/go-anytype-infrastructure-experiments/common/pkg/acl/treechangeproto" - "github.com/anytypeio/go-anytype-infrastructure-experiments/common/util/cid" + "github.com/anytypeio/go-anytype-infrastructure-experiments/common/commonspace/object/keychain" + "github.com/anytypeio/go-anytype-infrastructure-experiments/common/commonspace/object/tree/treechangeproto" + "github.com/anytypeio/go-anytype-infrastructure-experiments/common/util/cidutil" "github.com/anytypeio/go-anytype-infrastructure-experiments/common/util/keys/asymmetric/signingkey" "github.com/anytypeio/go-anytype-infrastructure-experiments/common/util/keys/symmetric" "github.com/gogo/protobuf/proto" @@ -45,10 +45,10 @@ type ChangeBuilder interface { type changeBuilder struct { rootChange *treechangeproto.RawTreeChangeWithId - keys *common.Keychain + keys *keychain.Keychain } -func NewChangeBuilder(keys *common.Keychain, rootChange *treechangeproto.RawTreeChangeWithId) ChangeBuilder { +func NewChangeBuilder(keys *keychain.Keychain, rootChange *treechangeproto.RawTreeChangeWithId) ChangeBuilder { return &changeBuilder{keys: keys, rootChange: rootChange} } @@ -60,7 +60,7 @@ func (c *changeBuilder) ConvertFromRaw(rawIdChange *treechangeproto.RawTreeChang if verify { // verifying ID - if !cid.VerifyCID(rawIdChange.RawChange, rawIdChange.Id) { + if !cidutil.VerifyCID(rawIdChange.RawChange, rawIdChange.Id) { err = ErrIncorrectCID return } @@ -131,7 +131,7 @@ func (c *changeBuilder) BuildInitialContent(payload InitialContent) (ch *Change, return } - id, err := cid.NewCIDFromBytes(marshalledRawChange) + id, err := cidutil.NewCIDFromBytes(marshalledRawChange) if err != nil { return } @@ -186,7 +186,7 @@ func (c *changeBuilder) BuildContent(payload BuilderContent) (ch *Change, rawIdC return } - id, err := cid.NewCIDFromBytes(marshalledRawChange) + id, err := cidutil.NewCIDFromBytes(marshalledRawChange) if err != nil { return } diff --git a/common/pkg/acl/tree/changevalidator.go b/common/commonspace/object/tree/objecttree/changevalidator.go similarity index 95% rename from common/pkg/acl/tree/changevalidator.go rename to common/commonspace/object/tree/objecttree/changevalidator.go index b4d63ea9..7aaa5a7e 100644 --- a/common/pkg/acl/tree/changevalidator.go +++ b/common/commonspace/object/tree/objecttree/changevalidator.go @@ -1,9 +1,9 @@ -package tree +package objecttree import ( "fmt" - "github.com/anytypeio/go-anytype-infrastructure-experiments/common/pkg/acl/aclrecordproto" - "github.com/anytypeio/go-anytype-infrastructure-experiments/common/pkg/acl/list" + "github.com/anytypeio/go-anytype-infrastructure-experiments/common/commonspace/object/acl/aclrecordproto" + "github.com/anytypeio/go-anytype-infrastructure-experiments/common/commonspace/object/acl/list" ) type ObjectTreeValidator interface { diff --git a/common/pkg/acl/tree/descriptionparser.go b/common/commonspace/object/tree/objecttree/descriptionparser.go similarity index 93% rename from common/pkg/acl/tree/descriptionparser.go rename to common/commonspace/object/tree/objecttree/descriptionparser.go index c7ad3bfe..a3e79a04 100644 --- a/common/pkg/acl/tree/descriptionparser.go +++ b/common/commonspace/object/tree/objecttree/descriptionparser.go @@ -1,4 +1,4 @@ -package tree +package objecttree type DescriptionParser interface { ParseChange(*Change) ([]string, error) diff --git a/common/pkg/acl/tree/mock_objecttree/mock_objecttree.go b/common/commonspace/object/tree/objecttree/mock_objecttree/mock_objecttree.go similarity index 90% rename from common/pkg/acl/tree/mock_objecttree/mock_objecttree.go rename to common/commonspace/object/tree/objecttree/mock_objecttree/mock_objecttree.go index ca2151cb..a377f19b 100644 --- a/common/pkg/acl/tree/mock_objecttree/mock_objecttree.go +++ b/common/commonspace/object/tree/objecttree/mock_objecttree/mock_objecttree.go @@ -1,16 +1,16 @@ // Code generated by MockGen. DO NOT EDIT. -// Source: github.com/anytypeio/go-anytype-infrastructure-experiments/common/pkg/acl/tree (interfaces: ObjectTree) +// Source: github.com/anytypeio/go-anytype-infrastructure-experiments/common/commonspace/object/tree/objecttree (interfaces: ObjectTree) -// Package mock_tree is a generated GoMock package. -package mock_tree +// Package mock_objecttree is a generated GoMock package. +package mock_objecttree import ( context "context" reflect "reflect" - storage "github.com/anytypeio/go-anytype-infrastructure-experiments/common/pkg/acl/storage" - tree "github.com/anytypeio/go-anytype-infrastructure-experiments/common/pkg/acl/tree" - treechangeproto "github.com/anytypeio/go-anytype-infrastructure-experiments/common/pkg/acl/treechangeproto" + objecttree "github.com/anytypeio/go-anytype-infrastructure-experiments/common/commonspace/object/tree/objecttree" + treechangeproto "github.com/anytypeio/go-anytype-infrastructure-experiments/common/commonspace/object/tree/treechangeproto" + treestorage "github.com/anytypeio/go-anytype-infrastructure-experiments/common/commonspace/object/tree/treestorage" gomock "github.com/golang/mock/gomock" ) @@ -38,10 +38,10 @@ func (m *MockObjectTree) EXPECT() *MockObjectTreeMockRecorder { } // AddContent mocks base method. -func (m *MockObjectTree) AddContent(arg0 context.Context, arg1 tree.SignableChangeContent) (tree.AddResult, error) { +func (m *MockObjectTree) AddContent(arg0 context.Context, arg1 objecttree.SignableChangeContent) (objecttree.AddResult, error) { m.ctrl.T.Helper() ret := m.ctrl.Call(m, "AddContent", arg0, arg1) - ret0, _ := ret[0].(tree.AddResult) + ret0, _ := ret[0].(objecttree.AddResult) ret1, _ := ret[1].(error) return ret0, ret1 } @@ -53,10 +53,10 @@ func (mr *MockObjectTreeMockRecorder) AddContent(arg0, arg1 interface{}) *gomock } // AddRawChanges mocks base method. -func (m *MockObjectTree) AddRawChanges(arg0 context.Context, arg1 tree.RawChangesPayload) (tree.AddResult, error) { +func (m *MockObjectTree) AddRawChanges(arg0 context.Context, arg1 objecttree.RawChangesPayload) (objecttree.AddResult, error) { m.ctrl.T.Helper() ret := m.ctrl.Call(m, "AddRawChanges", arg0, arg1) - ret0, _ := ret[0].(tree.AddResult) + ret0, _ := ret[0].(objecttree.AddResult) ret1, _ := ret[1].(error) return ret0, ret1 } @@ -186,7 +186,7 @@ func (mr *MockObjectTreeMockRecorder) ID() *gomock.Call { } // Iterate mocks base method. -func (m *MockObjectTree) Iterate(arg0 func([]byte) (interface{}, error), arg1 func(*tree.Change) bool) error { +func (m *MockObjectTree) Iterate(arg0 func([]byte) (interface{}, error), arg1 func(*objecttree.Change) bool) error { m.ctrl.T.Helper() ret := m.ctrl.Call(m, "Iterate", arg0, arg1) ret0, _ := ret[0].(error) @@ -200,7 +200,7 @@ func (mr *MockObjectTreeMockRecorder) Iterate(arg0, arg1 interface{}) *gomock.Ca } // IterateFrom mocks base method. -func (m *MockObjectTree) IterateFrom(arg0 string, arg1 func([]byte) (interface{}, error), arg2 func(*tree.Change) bool) error { +func (m *MockObjectTree) IterateFrom(arg0 string, arg1 func([]byte) (interface{}, error), arg2 func(*objecttree.Change) bool) error { m.ctrl.T.Helper() ret := m.ctrl.Call(m, "IterateFrom", arg0, arg1, arg2) ret0, _ := ret[0].(error) @@ -250,10 +250,10 @@ func (mr *MockObjectTreeMockRecorder) RUnlock() *gomock.Call { } // Root mocks base method. -func (m *MockObjectTree) Root() *tree.Change { +func (m *MockObjectTree) Root() *objecttree.Change { m.ctrl.T.Helper() ret := m.ctrl.Call(m, "Root") - ret0, _ := ret[0].(*tree.Change) + ret0, _ := ret[0].(*objecttree.Change) return ret0 } @@ -278,10 +278,10 @@ func (mr *MockObjectTreeMockRecorder) SnapshotPath() *gomock.Call { } // Storage mocks base method. -func (m *MockObjectTree) Storage() storage.TreeStorage { +func (m *MockObjectTree) Storage() treestorage.TreeStorage { m.ctrl.T.Helper() ret := m.ctrl.Call(m, "Storage") - ret0, _ := ret[0].(storage.TreeStorage) + ret0, _ := ret[0].(treestorage.TreeStorage) return ret0 } diff --git a/common/pkg/acl/tree/objecttree.go b/common/commonspace/object/tree/objecttree/objecttree.go similarity index 95% rename from common/pkg/acl/tree/objecttree.go rename to common/commonspace/object/tree/objecttree/objecttree.go index 56e3b7a3..6b8d26fa 100644 --- a/common/pkg/acl/tree/objecttree.go +++ b/common/commonspace/object/tree/objecttree/objecttree.go @@ -1,14 +1,14 @@ -//go:generate mockgen -destination mock_objecttree/mock_objecttree.go github.com/anytypeio/go-anytype-infrastructure-experiments/common/pkg/acl/tree ObjectTree -package tree +//go:generate mockgen -destination mock_objecttree/mock_objecttree.go github.com/anytypeio/go-anytype-infrastructure-experiments/common/commonspace/object/tree/objecttree ObjectTree +package objecttree import ( "context" "errors" - "github.com/anytypeio/go-anytype-infrastructure-experiments/common/pkg/acl/aclrecordproto" - "github.com/anytypeio/go-anytype-infrastructure-experiments/common/pkg/acl/common" - list "github.com/anytypeio/go-anytype-infrastructure-experiments/common/pkg/acl/list" - "github.com/anytypeio/go-anytype-infrastructure-experiments/common/pkg/acl/storage" - "github.com/anytypeio/go-anytype-infrastructure-experiments/common/pkg/acl/treechangeproto" + "github.com/anytypeio/go-anytype-infrastructure-experiments/common/commonspace/object/acl/aclrecordproto" + list2 "github.com/anytypeio/go-anytype-infrastructure-experiments/common/commonspace/object/acl/list" + "github.com/anytypeio/go-anytype-infrastructure-experiments/common/commonspace/object/keychain" + "github.com/anytypeio/go-anytype-infrastructure-experiments/common/commonspace/object/tree/treechangeproto" + "github.com/anytypeio/go-anytype-infrastructure-experiments/common/commonspace/object/tree/treestorage" "github.com/anytypeio/go-anytype-infrastructure-experiments/common/util/keys/symmetric" "github.com/anytypeio/go-anytype-infrastructure-experiments/common/util/slice" "sync" @@ -59,7 +59,7 @@ type ObjectTree interface { SnapshotPath() []string ChangesAfterCommonSnapshot(snapshotPath, heads []string) ([]*treechangeproto.RawTreeChangeWithId, error) - Storage() storage.TreeStorage + Storage() treestorage.TreeStorage AddContent(ctx context.Context, content SignableChangeContent) (AddResult, error) AddRawChanges(ctx context.Context, changes RawChangesPayload) (AddResult, error) @@ -69,12 +69,12 @@ type ObjectTree interface { } type objectTree struct { - treeStorage storage.TreeStorage + treeStorage treestorage.TreeStorage changeBuilder ChangeBuilder validator ObjectTreeValidator rawChangeLoader *rawChangeLoader treeBuilder *treeBuilder - aclList list.ACLList + aclList list2.ACLList id string root *treechangeproto.RawTreeChangeWithId @@ -96,18 +96,18 @@ type objectTree struct { type objectTreeDeps struct { changeBuilder ChangeBuilder treeBuilder *treeBuilder - treeStorage storage.TreeStorage + treeStorage treestorage.TreeStorage validator ObjectTreeValidator rawChangeLoader *rawChangeLoader - aclList list.ACLList + aclList list2.ACLList } func defaultObjectTreeDeps( rootChange *treechangeproto.RawTreeChangeWithId, - treeStorage storage.TreeStorage, - aclList list.ACLList) objectTreeDeps { + treeStorage treestorage.TreeStorage, + aclList list2.ACLList) objectTreeDeps { - keychain := common.NewKeychain() + keychain := keychain.NewKeychain() changeBuilder := NewChangeBuilder(keychain, rootChange) treeBuilder := newTreeBuilder(treeStorage, changeBuilder) return objectTreeDeps{ @@ -145,7 +145,7 @@ func (ot *objectTree) Header() *treechangeproto.RawTreeChangeWithId { return ot.root } -func (ot *objectTree) Storage() storage.TreeStorage { +func (ot *objectTree) Storage() treestorage.TreeStorage { return ot.treeStorage } @@ -202,7 +202,7 @@ func (ot *objectTree) prepareBuilderContent(content SignableChangeContent) (cnt canWrite := state.HasPermission(content.Identity, aclrecordproto.ACLUserPermissions_Writer) || state.HasPermission(content.Identity, aclrecordproto.ACLUserPermissions_Admin) if !canWrite { - err = list.ErrInsufficientPermissions + err = list2.ErrInsufficientPermissions return } @@ -469,7 +469,7 @@ func (ot *objectTree) IterateFrom(id string, convert ChangeConvertFunc, iterate } readKey, exists := ot.keys[c.ReadKeyHash] if !exists { - err = list.ErrNoReadKey + err = list2.ErrNoReadKey return } diff --git a/common/pkg/acl/tree/objecttree_test.go b/common/commonspace/object/tree/objecttree/objecttree_test.go similarity index 97% rename from common/pkg/acl/tree/objecttree_test.go rename to common/commonspace/object/tree/objecttree/objecttree_test.go index 84c39547..4eaafa57 100644 --- a/common/pkg/acl/tree/objecttree_test.go +++ b/common/commonspace/object/tree/objecttree/objecttree_test.go @@ -1,11 +1,11 @@ -package tree +package objecttree import ( "context" - "github.com/anytypeio/go-anytype-infrastructure-experiments/common/pkg/acl/list" - storage "github.com/anytypeio/go-anytype-infrastructure-experiments/common/pkg/acl/storage" - "github.com/anytypeio/go-anytype-infrastructure-experiments/common/pkg/acl/testutils/acllistbuilder" - "github.com/anytypeio/go-anytype-infrastructure-experiments/common/pkg/acl/treechangeproto" + "github.com/anytypeio/go-anytype-infrastructure-experiments/common/commonspace/object/acl/list" + "github.com/anytypeio/go-anytype-infrastructure-experiments/common/commonspace/object/acl/testutils/acllistbuilder" + "github.com/anytypeio/go-anytype-infrastructure-experiments/common/commonspace/object/tree/treechangeproto" + "github.com/anytypeio/go-anytype-infrastructure-experiments/common/commonspace/object/tree/treestorage" "github.com/stretchr/testify/assert" "github.com/stretchr/testify/require" "testing" @@ -53,9 +53,9 @@ func (c *mockChangeCreator) createRaw(id, aclId, snapshotId string, isSnapshot b } } -func (c *mockChangeCreator) createNewTreeStorage(treeId, aclHeadId string) storage.TreeStorage { +func (c *mockChangeCreator) createNewTreeStorage(treeId, aclHeadId string) treestorage.TreeStorage { root := c.createRoot(treeId, aclHeadId) - treeStorage, _ := storage.NewInMemoryTreeStorage(root, []string{root.Id}, []*treechangeproto.RawTreeChangeWithId{root}) + treeStorage, _ := treestorage.NewInMemoryTreeStorage(root, []string{root.Id}, []*treechangeproto.RawTreeChangeWithId{root}) return treeStorage } @@ -95,7 +95,7 @@ func (m *mockChangeValidator) ValidateFullTree(tree *Tree, aclList list.ACLList) type testTreeContext struct { aclList list.ACLList - treeStorage storage.TreeStorage + treeStorage treestorage.TreeStorage changeBuilder *mockChangeBuilder changeCreator *mockChangeCreator objTree ObjectTree diff --git a/common/pkg/acl/tree/objecttreefactory.go b/common/commonspace/object/tree/objecttree/objecttreefactory.go similarity index 81% rename from common/pkg/acl/tree/objecttreefactory.go rename to common/commonspace/object/tree/objecttree/objecttreefactory.go index e2f7b6db..dba7ba8b 100644 --- a/common/pkg/acl/tree/objecttreefactory.go +++ b/common/commonspace/object/tree/objecttree/objecttreefactory.go @@ -1,10 +1,10 @@ -package tree +package objecttree import ( - "github.com/anytypeio/go-anytype-infrastructure-experiments/common/pkg/acl/common" - "github.com/anytypeio/go-anytype-infrastructure-experiments/common/pkg/acl/list" - storage2 "github.com/anytypeio/go-anytype-infrastructure-experiments/common/pkg/acl/storage" - "github.com/anytypeio/go-anytype-infrastructure-experiments/common/pkg/acl/treechangeproto" + "github.com/anytypeio/go-anytype-infrastructure-experiments/common/commonspace/object/acl/list" + "github.com/anytypeio/go-anytype-infrastructure-experiments/common/commonspace/object/keychain" + "github.com/anytypeio/go-anytype-infrastructure-experiments/common/commonspace/object/tree/treechangeproto" + "github.com/anytypeio/go-anytype-infrastructure-experiments/common/commonspace/object/tree/treestorage" "github.com/anytypeio/go-anytype-infrastructure-experiments/common/util/keys/asymmetric/signingkey" "github.com/anytypeio/go-anytype-infrastructure-experiments/common/util/keys/symmetric" "github.com/anytypeio/go-anytype-infrastructure-experiments/common/util/slice" @@ -21,7 +21,7 @@ type ObjectTreeCreatePayload struct { IsEncrypted bool } -func BuildObjectTree(treeStorage storage2.TreeStorage, aclList list.ACLList) (ObjectTree, error) { +func BuildObjectTree(treeStorage treestorage.TreeStorage, aclList list.ACLList) (ObjectTree, error) { rootChange, err := treeStorage.Root() if err != nil { return nil, err @@ -33,14 +33,14 @@ func BuildObjectTree(treeStorage storage2.TreeStorage, aclList list.ACLList) (Ob func CreateDerivedObjectTree( payload ObjectTreeCreatePayload, aclList list.ACLList, - createStorage storage2.TreeStorageCreatorFunc) (objTree ObjectTree, err error) { + createStorage treestorage.TreeStorageCreatorFunc) (objTree ObjectTree, err error) { return createObjectTree(payload, 0, nil, aclList, createStorage) } func CreateObjectTree( payload ObjectTreeCreatePayload, aclList list.ACLList, - createStorage storage2.TreeStorageCreatorFunc) (objTree ObjectTree, err error) { + createStorage treestorage.TreeStorageCreatorFunc) (objTree ObjectTree, err error) { bytes := make([]byte, 32) _, err = rand.Read(bytes) if err != nil { @@ -54,7 +54,7 @@ func createObjectTree( timestamp int64, seed []byte, aclList list.ACLList, - createStorage storage2.TreeStorageCreatorFunc) (objTree ObjectTree, err error) { + createStorage treestorage.TreeStorageCreatorFunc) (objTree ObjectTree, err error) { aclList.RLock() aclHeadId := aclList.Head().Id aclList.RUnlock() @@ -72,14 +72,13 @@ func createObjectTree( Seed: seed, } - _, raw, err := NewChangeBuilder(common.NewKeychain(), nil).BuildInitialContent(cnt) + _, raw, err := NewChangeBuilder(keychain.NewKeychain(), nil).BuildInitialContent(cnt) if err != nil { return } // create storage - st, err := createStorage(storage2.TreeStorageCreatePayload{ - TreeId: raw.Id, + st, err := createStorage(treestorage.TreeStorageCreatePayload{ RootRawChange: raw, Changes: []*treechangeproto.RawTreeChangeWithId{raw}, Heads: []string{raw.Id}, @@ -130,6 +129,7 @@ func buildObjectTree(deps objectTreeDeps) (ObjectTree, error) { objTree.id = objTree.treeStorage.Id() + objTree.id = objTree.treeStorage.Id() objTree.root, err = objTree.treeStorage.Root() if err != nil { return nil, err diff --git a/common/pkg/acl/tree/rawloader.go b/common/commonspace/object/tree/objecttree/rawloader.go similarity index 95% rename from common/pkg/acl/tree/rawloader.go rename to common/commonspace/object/tree/objecttree/rawloader.go index 78b5114f..5125df99 100644 --- a/common/pkg/acl/tree/rawloader.go +++ b/common/commonspace/object/tree/objecttree/rawloader.go @@ -1,15 +1,15 @@ -package tree +package objecttree import ( "context" - "github.com/anytypeio/go-anytype-infrastructure-experiments/common/pkg/acl/storage" - "github.com/anytypeio/go-anytype-infrastructure-experiments/common/pkg/acl/treechangeproto" + "github.com/anytypeio/go-anytype-infrastructure-experiments/common/commonspace/object/tree/treechangeproto" + "github.com/anytypeio/go-anytype-infrastructure-experiments/common/commonspace/object/tree/treestorage" "github.com/anytypeio/go-anytype-infrastructure-experiments/common/util/slice" "time" ) type rawChangeLoader struct { - treeStorage storage.TreeStorage + treeStorage treestorage.TreeStorage changeBuilder ChangeBuilder // buffers @@ -23,7 +23,7 @@ type rawCacheEntry struct { position int } -func newRawChangeLoader(treeStorage storage.TreeStorage, changeBuilder ChangeBuilder) *rawChangeLoader { +func newRawChangeLoader(treeStorage treestorage.TreeStorage, changeBuilder ChangeBuilder) *rawChangeLoader { return &rawChangeLoader{ treeStorage: treeStorage, changeBuilder: changeBuilder, diff --git a/common/commonspace/object/tree/objecttree/rawtreevalidator.go b/common/commonspace/object/tree/objecttree/rawtreevalidator.go new file mode 100644 index 00000000..f6cc93e9 --- /dev/null +++ b/common/commonspace/object/tree/objecttree/rawtreevalidator.go @@ -0,0 +1,17 @@ +package objecttree + +import ( + "github.com/anytypeio/go-anytype-infrastructure-experiments/common/commonspace/object/acl/list" + "github.com/anytypeio/go-anytype-infrastructure-experiments/common/commonspace/object/tree/treestorage" +) + +func ValidateRawTree(payload treestorage.TreeStorageCreatePayload, aclList list.ACLList) (err error) { + provider := treestorage.NewInMemoryTreeStorageProvider() + treeStorage, err := provider.CreateTreeStorage(payload) + if err != nil { + return + } + + _, err = BuildObjectTree(treeStorage, aclList) + return +} diff --git a/common/pkg/acl/tree/signablecontent.go b/common/commonspace/object/tree/objecttree/signablecontent.go similarity index 93% rename from common/pkg/acl/tree/signablecontent.go rename to common/commonspace/object/tree/objecttree/signablecontent.go index 4be96d1d..16138e85 100644 --- a/common/pkg/acl/tree/signablecontent.go +++ b/common/commonspace/object/tree/objecttree/signablecontent.go @@ -1,4 +1,4 @@ -package tree +package objecttree import ( "github.com/anytypeio/go-anytype-infrastructure-experiments/common/util/keys/asymmetric/signingkey" diff --git a/common/pkg/acl/tree/tree.go b/common/commonspace/object/tree/objecttree/tree.go similarity index 99% rename from common/pkg/acl/tree/tree.go rename to common/commonspace/object/tree/objecttree/tree.go index f1dbbf9b..51a3b444 100644 --- a/common/pkg/acl/tree/tree.go +++ b/common/commonspace/object/tree/objecttree/tree.go @@ -1,4 +1,4 @@ -package tree +package objecttree import ( "bytes" diff --git a/common/pkg/acl/tree/tree_test.go b/common/commonspace/object/tree/objecttree/tree_test.go similarity index 99% rename from common/pkg/acl/tree/tree_test.go rename to common/commonspace/object/tree/objecttree/tree_test.go index 4c7f5ae7..8bbed0cc 100644 --- a/common/pkg/acl/tree/tree_test.go +++ b/common/commonspace/object/tree/objecttree/tree_test.go @@ -1,4 +1,4 @@ -package tree +package objecttree import ( "fmt" diff --git a/common/pkg/acl/tree/treebuilder.go b/common/commonspace/object/tree/objecttree/treebuilder.go similarity index 97% rename from common/pkg/acl/tree/treebuilder.go rename to common/commonspace/object/tree/objecttree/treebuilder.go index d9e7f531..d863a9f2 100644 --- a/common/pkg/acl/tree/treebuilder.go +++ b/common/commonspace/object/tree/objecttree/treebuilder.go @@ -1,11 +1,11 @@ -package tree +package objecttree import ( "context" "errors" "fmt" "github.com/anytypeio/go-anytype-infrastructure-experiments/common/app/logger" - "github.com/anytypeio/go-anytype-infrastructure-experiments/common/pkg/acl/storage" + "github.com/anytypeio/go-anytype-infrastructure-experiments/common/commonspace/object/tree/treestorage" "github.com/anytypeio/go-anytype-infrastructure-experiments/common/util/slice" "go.uber.org/zap" "time" @@ -17,7 +17,7 @@ var ( ) type treeBuilder struct { - treeStorage storage.TreeStorage + treeStorage treestorage.TreeStorage builder ChangeBuilder cache map[string]*Change @@ -28,7 +28,7 @@ type treeBuilder struct { loadBuffer []*Change } -func newTreeBuilder(storage storage.TreeStorage, builder ChangeBuilder) *treeBuilder { +func newTreeBuilder(storage treestorage.TreeStorage, builder ChangeBuilder) *treeBuilder { return &treeBuilder{ treeStorage: storage, builder: builder, diff --git a/common/pkg/acl/tree/treegraph.go b/common/commonspace/object/tree/objecttree/treegraph.go similarity index 93% rename from common/pkg/acl/tree/treegraph.go rename to common/commonspace/object/tree/objecttree/treegraph.go index 67cd42bd..a4915d34 100644 --- a/common/pkg/acl/tree/treegraph.go +++ b/common/commonspace/object/tree/objecttree/treegraph.go @@ -2,7 +2,7 @@ // +build !linux,!darwin android ios nographviz // +build !amd64 -package tree +package objecttree import "fmt" diff --git a/common/pkg/acl/tree/treegraph_nix.go b/common/commonspace/object/tree/objecttree/treegraph_nix.go similarity index 66% rename from common/pkg/acl/tree/treegraph_nix.go rename to common/commonspace/object/tree/objecttree/treegraph_nix.go index cdf9e6b8..355ca96d 100644 --- a/common/pkg/acl/tree/treegraph_nix.go +++ b/common/commonspace/object/tree/objecttree/treegraph_nix.go @@ -5,20 +5,18 @@ // +build !nographviz // +build amd64 arm64 -package acltree +package objecttree import ( "bytes" "fmt" - "strings" - "time" - "unicode" - "github.com/goccy/go-graphviz" "github.com/goccy/go-graphviz/cgraph" + "strings" + "time" ) -func (t *Tree) Graph() (data string, err error) { +func (t *Tree) Graph(parser DescriptionParser) (data string, err error) { var order = make(map[string]string) var seq = 0 t.Iterate(t.RootId(), func(c *Change) (isContinue bool) { @@ -46,44 +44,15 @@ func (t *Tree) Graph() (data string, err error) { if e != nil { return e } - if c.Content.GetAclData() != nil { - n.SetStyle(cgraph.FilledNodeStyle) - } else if c.IsSnapshot { - n.SetStyle(cgraph.DashedNodeStyle) - } + n.SetStyle(cgraph.FilledNodeStyle) nodes[c.Id] = n ord := order[c.Id] if ord == "" { ord = "miss" } - var chSymbs []string - if c.Content.AclData != nil { - for _, chc := range c.Content.AclData.AclContent { - tp := fmt.Sprintf("%T", chc.Value) - tp = strings.Replace(tp, "ACLChange_ACLContent_Value_", "", 1) - res := "" - for _, ts := range tp { - if unicode.IsUpper(ts) { - res += string(ts) - } - } - chSymbs = append(chSymbs, res) - } - } - if c.DecryptedDocumentChange != nil { - // TODO: add some parser to provide custom unmarshalling for the document change - //for _, chc := range c.DecryptedDocumentChange.Content { - // tp := fmt.Sprintf("%T", chc.Value) - // tp = strings.Replace(tp, "ChangeContent_Value_", "", 1) - // res := "" - // for _, ts := range tp { - // if unicode.IsUpper(ts) { - // res += string(ts) - // } - // } - // chSymbs = append(chSymbs, res) - //} - chSymbs = append(chSymbs, "DEC") + chSymbs, err := parser.ParseChange(c) + if err != nil { + return err } shortId := c.Id diff --git a/common/pkg/acl/tree/treeiterator.go b/common/commonspace/object/tree/objecttree/treeiterator.go similarity index 98% rename from common/pkg/acl/tree/treeiterator.go rename to common/commonspace/object/tree/objecttree/treeiterator.go index cee20c7e..3cff0d3a 100644 --- a/common/pkg/acl/tree/treeiterator.go +++ b/common/commonspace/object/tree/objecttree/treeiterator.go @@ -1,4 +1,4 @@ -package tree +package objecttree import ( "sync" diff --git a/common/pkg/acl/tree/treereduce.go b/common/commonspace/object/tree/objecttree/treereduce.go similarity index 99% rename from common/pkg/acl/tree/treereduce.go rename to common/commonspace/object/tree/objecttree/treereduce.go index 0cd201d9..708ee7a8 100644 --- a/common/pkg/acl/tree/treereduce.go +++ b/common/commonspace/object/tree/objecttree/treereduce.go @@ -1,4 +1,4 @@ -package tree +package objecttree import "math" diff --git a/common/pkg/acl/tree/util.go b/common/commonspace/object/tree/objecttree/util.go similarity index 97% rename from common/pkg/acl/tree/util.go rename to common/commonspace/object/tree/objecttree/util.go index 0e6cc7cd..ad577194 100644 --- a/common/pkg/acl/tree/util.go +++ b/common/commonspace/object/tree/objecttree/util.go @@ -1,4 +1,4 @@ -package tree +package objecttree func commonSnapshotForTwoPaths(ourPath []string, theirPath []string) (string, error) { var i int diff --git a/common/commonspace/synctree/mock_synctree/mock_synctree.go b/common/commonspace/object/tree/synctree/mock_synctree/mock_synctree.go similarity index 93% rename from common/commonspace/synctree/mock_synctree/mock_synctree.go rename to common/commonspace/object/tree/synctree/mock_synctree/mock_synctree.go index 5916216c..88a371d9 100644 --- a/common/commonspace/synctree/mock_synctree/mock_synctree.go +++ b/common/commonspace/object/tree/synctree/mock_synctree/mock_synctree.go @@ -1,5 +1,5 @@ // Code generated by MockGen. DO NOT EDIT. -// Source: github.com/anytypeio/go-anytype-infrastructure-experiments/common/commonspace/synctree (interfaces: SyncClient,SyncTree,ReceiveQueue,HeadNotifiable) +// Source: github.com/anytypeio/go-anytype-infrastructure-experiments/common/commonspace/object/tree/synctree (interfaces: SyncClient,SyncTree,ReceiveQueue,HeadNotifiable) // Package mock_synctree is a generated GoMock package. package mock_synctree @@ -8,10 +8,10 @@ import ( context "context" reflect "reflect" + objecttree "github.com/anytypeio/go-anytype-infrastructure-experiments/common/commonspace/object/tree/objecttree" + treechangeproto "github.com/anytypeio/go-anytype-infrastructure-experiments/common/commonspace/object/tree/treechangeproto" + treestorage "github.com/anytypeio/go-anytype-infrastructure-experiments/common/commonspace/object/tree/treestorage" spacesyncproto "github.com/anytypeio/go-anytype-infrastructure-experiments/common/commonspace/spacesyncproto" - storage "github.com/anytypeio/go-anytype-infrastructure-experiments/common/pkg/acl/storage" - tree "github.com/anytypeio/go-anytype-infrastructure-experiments/common/pkg/acl/tree" - treechangeproto "github.com/anytypeio/go-anytype-infrastructure-experiments/common/pkg/acl/treechangeproto" gomock "github.com/golang/mock/gomock" ) @@ -67,7 +67,7 @@ func (mr *MockSyncClientMockRecorder) BroadcastAsyncOrSendResponsible(arg0 inter } // CreateFullSyncRequest mocks base method. -func (m *MockSyncClient) CreateFullSyncRequest(arg0 tree.ObjectTree, arg1, arg2 []string) (*treechangeproto.TreeSyncMessage, error) { +func (m *MockSyncClient) CreateFullSyncRequest(arg0 objecttree.ObjectTree, arg1, arg2 []string) (*treechangeproto.TreeSyncMessage, error) { m.ctrl.T.Helper() ret := m.ctrl.Call(m, "CreateFullSyncRequest", arg0, arg1, arg2) ret0, _ := ret[0].(*treechangeproto.TreeSyncMessage) @@ -82,7 +82,7 @@ func (mr *MockSyncClientMockRecorder) CreateFullSyncRequest(arg0, arg1, arg2 int } // CreateFullSyncResponse mocks base method. -func (m *MockSyncClient) CreateFullSyncResponse(arg0 tree.ObjectTree, arg1, arg2 []string) (*treechangeproto.TreeSyncMessage, error) { +func (m *MockSyncClient) CreateFullSyncResponse(arg0 objecttree.ObjectTree, arg1, arg2 []string) (*treechangeproto.TreeSyncMessage, error) { m.ctrl.T.Helper() ret := m.ctrl.Call(m, "CreateFullSyncResponse", arg0, arg1, arg2) ret0, _ := ret[0].(*treechangeproto.TreeSyncMessage) @@ -97,7 +97,7 @@ func (mr *MockSyncClientMockRecorder) CreateFullSyncResponse(arg0, arg1, arg2 in } // CreateHeadUpdate mocks base method. -func (m *MockSyncClient) CreateHeadUpdate(arg0 tree.ObjectTree, arg1 []*treechangeproto.RawTreeChangeWithId) *treechangeproto.TreeSyncMessage { +func (m *MockSyncClient) CreateHeadUpdate(arg0 objecttree.ObjectTree, arg1 []*treechangeproto.RawTreeChangeWithId) *treechangeproto.TreeSyncMessage { m.ctrl.T.Helper() ret := m.ctrl.Call(m, "CreateHeadUpdate", arg0, arg1) ret0, _ := ret[0].(*treechangeproto.TreeSyncMessage) @@ -162,10 +162,10 @@ func (m *MockSyncTree) EXPECT() *MockSyncTreeMockRecorder { } // AddContent mocks base method. -func (m *MockSyncTree) AddContent(arg0 context.Context, arg1 tree.SignableChangeContent) (tree.AddResult, error) { +func (m *MockSyncTree) AddContent(arg0 context.Context, arg1 objecttree.SignableChangeContent) (objecttree.AddResult, error) { m.ctrl.T.Helper() ret := m.ctrl.Call(m, "AddContent", arg0, arg1) - ret0, _ := ret[0].(tree.AddResult) + ret0, _ := ret[0].(objecttree.AddResult) ret1, _ := ret[1].(error) return ret0, ret1 } @@ -177,10 +177,10 @@ func (mr *MockSyncTreeMockRecorder) AddContent(arg0, arg1 interface{}) *gomock.C } // AddRawChanges mocks base method. -func (m *MockSyncTree) AddRawChanges(arg0 context.Context, arg1 tree.RawChangesPayload) (tree.AddResult, error) { +func (m *MockSyncTree) AddRawChanges(arg0 context.Context, arg1 objecttree.RawChangesPayload) (objecttree.AddResult, error) { m.ctrl.T.Helper() ret := m.ctrl.Call(m, "AddRawChanges", arg0, arg1) - ret0, _ := ret[0].(tree.AddResult) + ret0, _ := ret[0].(objecttree.AddResult) ret1, _ := ret[1].(error) return ret0, ret1 } @@ -324,7 +324,7 @@ func (mr *MockSyncTreeMockRecorder) ID() *gomock.Call { } // Iterate mocks base method. -func (m *MockSyncTree) Iterate(arg0 func([]byte) (interface{}, error), arg1 func(*tree.Change) bool) error { +func (m *MockSyncTree) Iterate(arg0 func([]byte) (interface{}, error), arg1 func(*objecttree.Change) bool) error { m.ctrl.T.Helper() ret := m.ctrl.Call(m, "Iterate", arg0, arg1) ret0, _ := ret[0].(error) @@ -338,7 +338,7 @@ func (mr *MockSyncTreeMockRecorder) Iterate(arg0, arg1 interface{}) *gomock.Call } // IterateFrom mocks base method. -func (m *MockSyncTree) IterateFrom(arg0 string, arg1 func([]byte) (interface{}, error), arg2 func(*tree.Change) bool) error { +func (m *MockSyncTree) IterateFrom(arg0 string, arg1 func([]byte) (interface{}, error), arg2 func(*objecttree.Change) bool) error { m.ctrl.T.Helper() ret := m.ctrl.Call(m, "IterateFrom", arg0, arg1, arg2) ret0, _ := ret[0].(error) @@ -402,10 +402,10 @@ func (mr *MockSyncTreeMockRecorder) RUnlock() *gomock.Call { } // Root mocks base method. -func (m *MockSyncTree) Root() *tree.Change { +func (m *MockSyncTree) Root() *objecttree.Change { m.ctrl.T.Helper() ret := m.ctrl.Call(m, "Root") - ret0, _ := ret[0].(*tree.Change) + ret0, _ := ret[0].(*objecttree.Change) return ret0 } @@ -430,10 +430,10 @@ func (mr *MockSyncTreeMockRecorder) SnapshotPath() *gomock.Call { } // Storage mocks base method. -func (m *MockSyncTree) Storage() storage.TreeStorage { +func (m *MockSyncTree) Storage() treestorage.TreeStorage { m.ctrl.T.Helper() ret := m.ctrl.Call(m, "Storage") - ret0, _ := ret[0].(storage.TreeStorage) + ret0, _ := ret[0].(treestorage.TreeStorage) return ret0 } diff --git a/common/commonspace/synctree/queuedclient.go b/common/commonspace/object/tree/synctree/queuedclient.go similarity index 82% rename from common/commonspace/synctree/queuedclient.go rename to common/commonspace/object/tree/synctree/queuedclient.go index a0fceff9..29f791c6 100644 --- a/common/commonspace/synctree/queuedclient.go +++ b/common/commonspace/object/tree/synctree/queuedclient.go @@ -1,16 +1,16 @@ package synctree import ( - "github.com/anytypeio/go-anytype-infrastructure-experiments/common/commonspace/syncservice" - "github.com/anytypeio/go-anytype-infrastructure-experiments/common/pkg/acl/treechangeproto" + "github.com/anytypeio/go-anytype-infrastructure-experiments/common/commonspace/object/tree/treechangeproto" + "github.com/anytypeio/go-anytype-infrastructure-experiments/common/commonspace/objectsync" ) type queuedClient struct { SyncClient - queue syncservice.ActionQueue + queue objectsync.ActionQueue } -func newQueuedClient(client SyncClient, queue syncservice.ActionQueue) SyncClient { +func newQueuedClient(client SyncClient, queue objectsync.ActionQueue) SyncClient { return &queuedClient{ SyncClient: client, queue: queue, diff --git a/common/commonspace/synctree/receivequeue.go b/common/commonspace/object/tree/synctree/receivequeue.go similarity index 97% rename from common/commonspace/synctree/receivequeue.go rename to common/commonspace/object/tree/synctree/receivequeue.go index d9913684..83601041 100644 --- a/common/commonspace/synctree/receivequeue.go +++ b/common/commonspace/object/tree/synctree/receivequeue.go @@ -2,7 +2,7 @@ package synctree import ( "errors" - "github.com/anytypeio/go-anytype-infrastructure-experiments/common/pkg/acl/treechangeproto" + "github.com/anytypeio/go-anytype-infrastructure-experiments/common/commonspace/object/tree/treechangeproto" "sync" ) diff --git a/common/commonspace/synctree/requestfactory.go b/common/commonspace/object/tree/synctree/requestfactory.go similarity index 64% rename from common/commonspace/synctree/requestfactory.go rename to common/commonspace/object/tree/synctree/requestfactory.go index b66a2689..38f218cb 100644 --- a/common/commonspace/synctree/requestfactory.go +++ b/common/commonspace/object/tree/synctree/requestfactory.go @@ -2,16 +2,16 @@ package synctree import ( "fmt" - "github.com/anytypeio/go-anytype-infrastructure-experiments/common/pkg/acl/tree" - "github.com/anytypeio/go-anytype-infrastructure-experiments/common/pkg/acl/treechangeproto" + "github.com/anytypeio/go-anytype-infrastructure-experiments/common/commonspace/object/tree/objecttree" + "github.com/anytypeio/go-anytype-infrastructure-experiments/common/commonspace/object/tree/treechangeproto" "github.com/anytypeio/go-anytype-infrastructure-experiments/common/util/slice" ) type RequestFactory interface { - CreateHeadUpdate(t tree.ObjectTree, added []*treechangeproto.RawTreeChangeWithId) (msg *treechangeproto.TreeSyncMessage) + CreateHeadUpdate(t objecttree.ObjectTree, added []*treechangeproto.RawTreeChangeWithId) (msg *treechangeproto.TreeSyncMessage) CreateNewTreeRequest() (msg *treechangeproto.TreeSyncMessage) - CreateFullSyncRequest(t tree.ObjectTree, theirHeads, theirSnapshotPath []string) (req *treechangeproto.TreeSyncMessage, err error) - CreateFullSyncResponse(t tree.ObjectTree, theirHeads, theirSnapshotPath []string) (*treechangeproto.TreeSyncMessage, error) + CreateFullSyncRequest(t objecttree.ObjectTree, theirHeads, theirSnapshotPath []string) (req *treechangeproto.TreeSyncMessage, err error) + CreateFullSyncResponse(t objecttree.ObjectTree, theirHeads, theirSnapshotPath []string) (*treechangeproto.TreeSyncMessage, error) } var sharedFactory = &requestFactory{} @@ -22,7 +22,7 @@ func GetRequestFactory() RequestFactory { type requestFactory struct{} -func (r *requestFactory) CreateHeadUpdate(t tree.ObjectTree, added []*treechangeproto.RawTreeChangeWithId) (msg *treechangeproto.TreeSyncMessage) { +func (r *requestFactory) CreateHeadUpdate(t objecttree.ObjectTree, added []*treechangeproto.RawTreeChangeWithId) (msg *treechangeproto.TreeSyncMessage) { return treechangeproto.WrapHeadUpdate(&treechangeproto.TreeHeadUpdate{ Heads: t.Heads(), Changes: added, @@ -34,7 +34,7 @@ func (r *requestFactory) CreateNewTreeRequest() (msg *treechangeproto.TreeSyncMe return treechangeproto.WrapFullRequest(&treechangeproto.TreeFullSyncRequest{}, nil) } -func (r *requestFactory) CreateFullSyncRequest(t tree.ObjectTree, theirHeads, theirSnapshotPath []string) (msg *treechangeproto.TreeSyncMessage, err error) { +func (r *requestFactory) CreateFullSyncRequest(t objecttree.ObjectTree, theirHeads, theirSnapshotPath []string) (msg *treechangeproto.TreeSyncMessage, err error) { req := &treechangeproto.TreeFullSyncRequest{} if t == nil { return nil, fmt.Errorf("tree should not be empty") @@ -54,7 +54,7 @@ func (r *requestFactory) CreateFullSyncRequest(t tree.ObjectTree, theirHeads, th return } -func (r *requestFactory) CreateFullSyncResponse(t tree.ObjectTree, theirHeads, theirSnapshotPath []string) (msg *treechangeproto.TreeSyncMessage, err error) { +func (r *requestFactory) CreateFullSyncResponse(t objecttree.ObjectTree, theirHeads, theirSnapshotPath []string) (msg *treechangeproto.TreeSyncMessage, err error) { resp := &treechangeproto.TreeFullSyncResponse{ Heads: t.Heads(), SnapshotPath: t.SnapshotPath(), diff --git a/common/commonspace/synctree/syncclient.go b/common/commonspace/object/tree/synctree/syncclient.go similarity index 89% rename from common/commonspace/synctree/syncclient.go rename to common/commonspace/object/tree/synctree/syncclient.go index 1091bf51..034a822f 100644 --- a/common/commonspace/synctree/syncclient.go +++ b/common/commonspace/object/tree/synctree/syncclient.go @@ -1,11 +1,11 @@ -//go:generate mockgen -destination mock_synctree/mock_synctree.go github.com/anytypeio/go-anytype-infrastructure-experiments/common/commonspace/synctree SyncClient,SyncTree,ReceiveQueue,HeadNotifiable +//go:generate mockgen -destination mock_synctree/mock_synctree.go github.com/anytypeio/go-anytype-infrastructure-experiments/common/commonspace/object/tree/synctree SyncClient,SyncTree,ReceiveQueue,HeadNotifiable package synctree import ( + "github.com/anytypeio/go-anytype-infrastructure-experiments/common/commonspace/object/tree/treechangeproto" + "github.com/anytypeio/go-anytype-infrastructure-experiments/common/commonspace/objectsync" "github.com/anytypeio/go-anytype-infrastructure-experiments/common/commonspace/spacesyncproto" - "github.com/anytypeio/go-anytype-infrastructure-experiments/common/commonspace/syncservice" "github.com/anytypeio/go-anytype-infrastructure-experiments/common/nodeconf" - "github.com/anytypeio/go-anytype-infrastructure-experiments/common/pkg/acl/treechangeproto" ) type SyncClient interface { @@ -16,21 +16,21 @@ type SyncClient interface { } type syncClient struct { - syncservice.StreamPool + objectsync.StreamPool RequestFactory spaceId string connector nodeconf.ConfConnector configuration nodeconf.Configuration - checker syncservice.StreamChecker + checker objectsync.StreamChecker } func newSyncClient( spaceId string, - pool syncservice.StreamPool, + pool objectsync.StreamPool, factory RequestFactory, configuration nodeconf.Configuration, - checker syncservice.StreamChecker) SyncClient { + checker objectsync.StreamChecker) SyncClient { return &syncClient{ StreamPool: pool, RequestFactory: factory, diff --git a/common/commonspace/synctree/synctree.go b/common/commonspace/object/tree/synctree/synctree.go similarity index 81% rename from common/commonspace/synctree/synctree.go rename to common/commonspace/object/tree/synctree/synctree.go index 86b140ef..5c949351 100644 --- a/common/commonspace/synctree/synctree.go +++ b/common/commonspace/object/tree/synctree/synctree.go @@ -5,17 +5,17 @@ import ( "errors" "fmt" "github.com/anytypeio/go-anytype-infrastructure-experiments/common/app/logger" - spacestorage "github.com/anytypeio/go-anytype-infrastructure-experiments/common/commonspace/storage" - "github.com/anytypeio/go-anytype-infrastructure-experiments/common/commonspace/syncservice" - "github.com/anytypeio/go-anytype-infrastructure-experiments/common/commonspace/syncservice/synchandler" + "github.com/anytypeio/go-anytype-infrastructure-experiments/common/commonspace/object/acl/list" + "github.com/anytypeio/go-anytype-infrastructure-experiments/common/commonspace/object/tree/objecttree" + "github.com/anytypeio/go-anytype-infrastructure-experiments/common/commonspace/object/tree/synctree/updatelistener" + "github.com/anytypeio/go-anytype-infrastructure-experiments/common/commonspace/object/tree/treechangeproto" + "github.com/anytypeio/go-anytype-infrastructure-experiments/common/commonspace/object/tree/treestorage" + "github.com/anytypeio/go-anytype-infrastructure-experiments/common/commonspace/objectsync" + "github.com/anytypeio/go-anytype-infrastructure-experiments/common/commonspace/objectsync/synchandler" + spacestorage "github.com/anytypeio/go-anytype-infrastructure-experiments/common/commonspace/spacestorage" "github.com/anytypeio/go-anytype-infrastructure-experiments/common/commonspace/syncstatus" - "github.com/anytypeio/go-anytype-infrastructure-experiments/common/commonspace/synctree/updatelistener" "github.com/anytypeio/go-anytype-infrastructure-experiments/common/net/peer" "github.com/anytypeio/go-anytype-infrastructure-experiments/common/nodeconf" - "github.com/anytypeio/go-anytype-infrastructure-experiments/common/pkg/acl/list" - "github.com/anytypeio/go-anytype-infrastructure-experiments/common/pkg/acl/storage" - "github.com/anytypeio/go-anytype-infrastructure-experiments/common/pkg/acl/tree" - "github.com/anytypeio/go-anytype-infrastructure-experiments/common/pkg/acl/treechangeproto" "github.com/gogo/protobuf/proto" "go.uber.org/zap" "sync/atomic" @@ -31,14 +31,14 @@ type HeadNotifiable interface { } type SyncTree interface { - tree.ObjectTree + objecttree.ObjectTree synchandler.SyncHandler Ping() (err error) } // SyncTree sends head updates to sync service and also sends new changes to update listener type syncTree struct { - tree.ObjectTree + objecttree.ObjectTree synchandler.SyncHandler syncClient SyncClient syncStatus syncstatus.SyncStatusUpdater @@ -51,16 +51,16 @@ type syncTree struct { var log = logger.NewNamed("commonspace.synctree").Sugar() -var createDerivedObjectTree = tree.CreateDerivedObjectTree -var createObjectTree = tree.CreateObjectTree -var buildObjectTree = tree.BuildObjectTree +var createDerivedObjectTree = objecttree.CreateDerivedObjectTree +var createObjectTree = objecttree.CreateObjectTree +var buildObjectTree = objecttree.BuildObjectTree var createSyncClient = newWrappedSyncClient type CreateDeps struct { SpaceId string - Payload tree.ObjectTreeCreatePayload + Payload objecttree.ObjectTreeCreatePayload Configuration nodeconf.Configuration - SyncService syncservice.SyncService + ObjectSync objectsync.ObjectSync AclList list.ACLList SpaceStorage spacestorage.SpaceStorage SyncStatus syncstatus.SyncStatusUpdater @@ -69,13 +69,13 @@ type CreateDeps struct { type BuildDeps struct { SpaceId string - SyncService syncservice.SyncService + ObjectSync objectsync.ObjectSync Configuration nodeconf.Configuration HeadNotifiable HeadNotifiable Listener updatelistener.UpdateListener AclList list.ACLList SpaceStorage spacestorage.SpaceStorage - TreeStorage storage.TreeStorage + TreeStorage treestorage.TreeStorage TreeUsage *atomic.Int32 SyncStatus syncstatus.SyncStatusUpdater } @@ -83,10 +83,10 @@ type BuildDeps struct { func newWrappedSyncClient( spaceId string, factory RequestFactory, - syncService syncservice.SyncService, + objectSync objectsync.ObjectSync, configuration nodeconf.Configuration) SyncClient { - syncClient := newSyncClient(spaceId, syncService.StreamPool(), factory, configuration, syncService.StreamChecker()) - return newQueuedClient(syncClient, syncService.ActionQueue()) + syncClient := newSyncClient(spaceId, objectSync.StreamPool(), factory, configuration, objectSync.StreamChecker()) + return newQueuedClient(syncClient, objectSync.ActionQueue()) } func DeriveSyncTree(ctx context.Context, deps CreateDeps) (id string, err error) { @@ -98,7 +98,7 @@ func DeriveSyncTree(ctx context.Context, deps CreateDeps) (id string, err error) syncClient := createSyncClient( deps.SpaceId, sharedFactory, - deps.SyncService, + deps.ObjectSync, deps.Configuration) id = objTree.ID() @@ -119,7 +119,7 @@ func CreateSyncTree(ctx context.Context, deps CreateDeps) (id string, err error) syncClient := createSyncClient( deps.SpaceId, sharedFactory, - deps.SyncService, + deps.ObjectSync, deps.Configuration) id = objTree.ID() @@ -145,12 +145,12 @@ func BuildSyncTreeOrGetRemote(ctx context.Context, id string, deps BuildDeps) (t return } - err = deps.SyncService.StreamChecker().CheckPeerConnection(peerId) + err = deps.ObjectSync.StreamChecker().CheckPeerConnection(peerId) if err != nil { return } - resp, err := deps.SyncService.StreamPool().SendSync(peerId, objMsg) + resp, err := deps.ObjectSync.StreamPool().SendSync(peerId, objMsg) if err != nil { return } @@ -165,7 +165,7 @@ func BuildSyncTreeOrGetRemote(ctx context.Context, id string, deps BuildDeps) (t return buildSyncTree(ctx, false, deps) } - if err != nil && err != storage.ErrUnknownTreeId { + if err != nil && err != treestorage.ErrUnknownTreeId { return } @@ -188,7 +188,7 @@ func BuildSyncTreeOrGetRemote(ctx context.Context, id string, deps BuildDeps) (t } fullSyncResp := resp.GetContent().GetFullSyncResponse() - payload := storage.TreeStorageCreatePayload{ + payload := treestorage.TreeStorageCreatePayload{ RootRawChange: resp.RootChange, Changes: fullSyncResp.Changes, Heads: fullSyncResp.Heads, @@ -196,7 +196,7 @@ func BuildSyncTreeOrGetRemote(ctx context.Context, id string, deps BuildDeps) (t // basically building tree with in-memory storage and validating that it was without errors log.With(zap.String("id", id)).Debug("validating tree") - err = tree.ValidateRawTree(payload, deps.AclList) + err = objecttree.ValidateRawTree(payload, deps.AclList) if err != nil { return } @@ -216,7 +216,7 @@ func buildSyncTree(ctx context.Context, isFirstBuild bool, deps BuildDeps) (t Sy syncClient := createSyncClient( deps.SpaceId, sharedFactory, - deps.SyncService, + deps.ObjectSync, deps.Configuration) syncTree := &syncTree{ ObjectTree: objTree, @@ -241,21 +241,21 @@ func buildSyncTree(ctx context.Context, isFirstBuild bool, deps BuildDeps) (t Sy return } -func (s *syncTree) IterateFrom(id string, convert tree.ChangeConvertFunc, iterate tree.ChangeIterateFunc) (err error) { +func (s *syncTree) IterateFrom(id string, convert objecttree.ChangeConvertFunc, iterate objecttree.ChangeIterateFunc) (err error) { if err = s.checkAlive(); err != nil { return } return s.ObjectTree.IterateFrom(id, convert, iterate) } -func (s *syncTree) Iterate(convert tree.ChangeConvertFunc, iterate tree.ChangeIterateFunc) (err error) { +func (s *syncTree) Iterate(convert objecttree.ChangeConvertFunc, iterate objecttree.ChangeIterateFunc) (err error) { if err = s.checkAlive(); err != nil { return } return s.ObjectTree.Iterate(convert, iterate) } -func (s *syncTree) AddContent(ctx context.Context, content tree.SignableChangeContent) (res tree.AddResult, err error) { +func (s *syncTree) AddContent(ctx context.Context, content objecttree.SignableChangeContent) (res objecttree.AddResult, err error) { if err = s.checkAlive(); err != nil { return } @@ -272,7 +272,7 @@ func (s *syncTree) AddContent(ctx context.Context, content tree.SignableChangeCo return } -func (s *syncTree) AddRawChanges(ctx context.Context, changesPayload tree.RawChangesPayload) (res tree.AddResult, err error) { +func (s *syncTree) AddRawChanges(ctx context.Context, changesPayload objecttree.RawChangesPayload) (res objecttree.AddResult, err error) { if err = s.checkAlive(); err != nil { return } @@ -282,15 +282,15 @@ func (s *syncTree) AddRawChanges(ctx context.Context, changesPayload tree.RawCha } if s.listener != nil { switch res.Mode { - case tree.Nothing: + case objecttree.Nothing: return - case tree.Append: + case objecttree.Append: s.listener.Update(s) - case tree.Rebuild: + case objecttree.Rebuild: s.listener.Rebuild(s) } } - if res.Mode != tree.Nothing { + if res.Mode != objecttree.Nothing { if s.notifiable != nil { s.notifiable.UpdateHeads(s.ID(), res.Heads) } diff --git a/common/commonspace/synctree/synctree_test.go b/common/commonspace/object/tree/synctree/synctree_test.go similarity index 74% rename from common/commonspace/synctree/synctree_test.go rename to common/commonspace/object/tree/synctree/synctree_test.go index e19eaa1e..b283fb72 100644 --- a/common/commonspace/synctree/synctree_test.go +++ b/common/commonspace/object/tree/synctree/synctree_test.go @@ -2,26 +2,26 @@ package synctree import ( "context" - "github.com/anytypeio/go-anytype-infrastructure-experiments/common/commonspace/storage/mock_storage" - "github.com/anytypeio/go-anytype-infrastructure-experiments/common/commonspace/syncservice" + "github.com/anytypeio/go-anytype-infrastructure-experiments/common/commonspace/object/acl/list" + "github.com/anytypeio/go-anytype-infrastructure-experiments/common/commonspace/object/acl/list/mock_list" + "github.com/anytypeio/go-anytype-infrastructure-experiments/common/commonspace/object/tree/objecttree" + "github.com/anytypeio/go-anytype-infrastructure-experiments/common/commonspace/object/tree/objecttree/mock_objecttree" + "github.com/anytypeio/go-anytype-infrastructure-experiments/common/commonspace/object/tree/synctree/mock_synctree" + "github.com/anytypeio/go-anytype-infrastructure-experiments/common/commonspace/object/tree/synctree/updatelistener" + "github.com/anytypeio/go-anytype-infrastructure-experiments/common/commonspace/object/tree/synctree/updatelistener/mock_updatelistener" + "github.com/anytypeio/go-anytype-infrastructure-experiments/common/commonspace/object/tree/treechangeproto" + "github.com/anytypeio/go-anytype-infrastructure-experiments/common/commonspace/object/tree/treestorage" + "github.com/anytypeio/go-anytype-infrastructure-experiments/common/commonspace/objectsync" + "github.com/anytypeio/go-anytype-infrastructure-experiments/common/commonspace/spacestorage/mock_spacestorage" "github.com/anytypeio/go-anytype-infrastructure-experiments/common/commonspace/syncstatus" - "github.com/anytypeio/go-anytype-infrastructure-experiments/common/commonspace/synctree/mock_synctree" - "github.com/anytypeio/go-anytype-infrastructure-experiments/common/commonspace/synctree/updatelistener" - "github.com/anytypeio/go-anytype-infrastructure-experiments/common/commonspace/synctree/updatelistener/mock_updatelistener" "github.com/anytypeio/go-anytype-infrastructure-experiments/common/nodeconf" - "github.com/anytypeio/go-anytype-infrastructure-experiments/common/pkg/acl/list" - "github.com/anytypeio/go-anytype-infrastructure-experiments/common/pkg/acl/list/mock_list" - storage2 "github.com/anytypeio/go-anytype-infrastructure-experiments/common/pkg/acl/storage" - tree "github.com/anytypeio/go-anytype-infrastructure-experiments/common/pkg/acl/tree" - "github.com/anytypeio/go-anytype-infrastructure-experiments/common/pkg/acl/tree/mock_objecttree" - "github.com/anytypeio/go-anytype-infrastructure-experiments/common/pkg/acl/treechangeproto" "github.com/golang/mock/gomock" "github.com/stretchr/testify/require" "testing" ) type syncTreeMatcher struct { - objTree tree.ObjectTree + objTree objecttree.ObjectTree client SyncClient listener updatelistener.UpdateListener } @@ -38,8 +38,8 @@ func (s syncTreeMatcher) String() string { return "" } -func syncClientFuncCreator(client SyncClient) func(spaceId string, factory RequestFactory, syncService syncservice.SyncService, configuration nodeconf.Configuration) SyncClient { - return func(spaceId string, factory RequestFactory, syncService syncservice.SyncService, configuration nodeconf.Configuration) SyncClient { +func syncClientFuncCreator(client SyncClient) func(spaceId string, factory RequestFactory, objectSync objectsync.ObjectSync, configuration nodeconf.Configuration) SyncClient { + return func(spaceId string, factory RequestFactory, objectSync objectsync.ObjectSync, configuration nodeconf.Configuration) SyncClient { return client } } @@ -51,12 +51,12 @@ func Test_DeriveSyncTree(t *testing.T) { syncClientMock := mock_synctree.NewMockSyncClient(ctrl) aclListMock := mock_list.NewMockACLList(ctrl) - objTreeMock := newTestObjMock(mock_tree.NewMockObjectTree(ctrl)) - spaceStorageMock := mock_storage.NewMockSpaceStorage(ctrl) + objTreeMock := newTestObjMock(mock_objecttree.NewMockObjectTree(ctrl)) + spaceStorageMock := mock_spacestorage.NewMockSpaceStorage(ctrl) headNotifiableMock := mock_synctree.NewMockHeadNotifiable(ctrl) spaceId := "spaceId" - expectedPayload := tree.ObjectTreeCreatePayload{SpaceId: spaceId} - createDerivedObjectTree = func(payload tree.ObjectTreeCreatePayload, l list.ACLList, create storage2.TreeStorageCreatorFunc) (objTree tree.ObjectTree, err error) { + expectedPayload := objecttree.ObjectTreeCreatePayload{SpaceId: spaceId} + createDerivedObjectTree = func(payload objecttree.ObjectTreeCreatePayload, l list.ACLList, create treestorage.TreeStorageCreatorFunc) (objTree objecttree.ObjectTree, err error) { require.Equal(t, l, aclListMock) require.Equal(t, expectedPayload, payload) return objTreeMock, nil @@ -88,12 +88,12 @@ func Test_CreateSyncTree(t *testing.T) { syncClientMock := mock_synctree.NewMockSyncClient(ctrl) aclListMock := mock_list.NewMockACLList(ctrl) - objTreeMock := newTestObjMock(mock_tree.NewMockObjectTree(ctrl)) - spaceStorageMock := mock_storage.NewMockSpaceStorage(ctrl) + objTreeMock := newTestObjMock(mock_objecttree.NewMockObjectTree(ctrl)) + spaceStorageMock := mock_spacestorage.NewMockSpaceStorage(ctrl) headNotifiableMock := mock_synctree.NewMockHeadNotifiable(ctrl) spaceId := "spaceId" - expectedPayload := tree.ObjectTreeCreatePayload{SpaceId: spaceId} - createObjectTree = func(payload tree.ObjectTreeCreatePayload, l list.ACLList, create storage2.TreeStorageCreatorFunc) (objTree tree.ObjectTree, err error) { + expectedPayload := objecttree.ObjectTreeCreatePayload{SpaceId: spaceId} + createObjectTree = func(payload objecttree.ObjectTreeCreatePayload, l list.ACLList, create treestorage.TreeStorageCreatorFunc) (objTree objecttree.ObjectTree, err error) { require.Equal(t, l, aclListMock) require.Equal(t, expectedPayload, payload) return objTreeMock, nil @@ -126,7 +126,7 @@ func Test_BuildSyncTree(t *testing.T) { updateListenerMock := mock_updatelistener.NewMockUpdateListener(ctrl) syncClientMock := mock_synctree.NewMockSyncClient(ctrl) - objTreeMock := newTestObjMock(mock_tree.NewMockObjectTree(ctrl)) + objTreeMock := newTestObjMock(mock_objecttree.NewMockObjectTree(ctrl)) tr := &syncTree{ ObjectTree: objTreeMock, SyncHandler: nil, @@ -139,13 +139,13 @@ func Test_BuildSyncTree(t *testing.T) { headUpdate := &treechangeproto.TreeSyncMessage{} t.Run("AddRawChanges update", func(t *testing.T) { changes := []*treechangeproto.RawTreeChangeWithId{{Id: "some"}} - payload := tree.RawChangesPayload{ + payload := objecttree.RawChangesPayload{ NewHeads: nil, RawChanges: changes, } - expectedRes := tree.AddResult{ + expectedRes := objecttree.AddResult{ Added: changes, - Mode: tree.Append, + Mode: objecttree.Append, } objTreeMock.EXPECT().AddRawChanges(gomock.Any(), gomock.Eq(payload)). Return(expectedRes, nil) @@ -160,14 +160,14 @@ func Test_BuildSyncTree(t *testing.T) { t.Run("AddRawChanges rebuild", func(t *testing.T) { changes := []*treechangeproto.RawTreeChangeWithId{{Id: "some"}} - payload := tree.RawChangesPayload{ + payload := objecttree.RawChangesPayload{ NewHeads: nil, RawChanges: changes, } - expectedRes := tree.AddResult{ + expectedRes := objecttree.AddResult{ Added: changes, - Mode: tree.Rebuild, + Mode: objecttree.Rebuild, } objTreeMock.EXPECT().AddRawChanges(gomock.Any(), gomock.Eq(payload)). Return(expectedRes, nil) @@ -182,13 +182,13 @@ func Test_BuildSyncTree(t *testing.T) { t.Run("AddRawChanges nothing", func(t *testing.T) { changes := []*treechangeproto.RawTreeChangeWithId{{Id: "some"}} - payload := tree.RawChangesPayload{ + payload := objecttree.RawChangesPayload{ NewHeads: nil, RawChanges: changes, } - expectedRes := tree.AddResult{ + expectedRes := objecttree.AddResult{ Added: changes, - Mode: tree.Nothing, + Mode: objecttree.Nothing, } objTreeMock.EXPECT().AddRawChanges(gomock.Any(), gomock.Eq(payload)). Return(expectedRes, nil) @@ -200,11 +200,11 @@ func Test_BuildSyncTree(t *testing.T) { t.Run("AddContent", func(t *testing.T) { changes := []*treechangeproto.RawTreeChangeWithId{{Id: "some"}} - content := tree.SignableChangeContent{ + content := objecttree.SignableChangeContent{ Data: []byte("abcde"), } - expectedRes := tree.AddResult{ - Mode: tree.Append, + expectedRes := objecttree.AddResult{ + Mode: objecttree.Append, Added: changes, } objTreeMock.EXPECT().ID().Return("id").AnyTimes() diff --git a/common/commonspace/synctree/synctreehandler.go b/common/commonspace/object/tree/synctree/synctreehandler.go similarity index 90% rename from common/commonspace/synctree/synctreehandler.go rename to common/commonspace/object/tree/synctree/synctreehandler.go index e6471257..399ce4cb 100644 --- a/common/commonspace/synctree/synctreehandler.go +++ b/common/commonspace/object/tree/synctree/synctreehandler.go @@ -2,11 +2,11 @@ package synctree import ( "context" + "github.com/anytypeio/go-anytype-infrastructure-experiments/common/commonspace/object/tree/objecttree" + "github.com/anytypeio/go-anytype-infrastructure-experiments/common/commonspace/object/tree/treechangeproto" + "github.com/anytypeio/go-anytype-infrastructure-experiments/common/commonspace/objectsync/synchandler" "github.com/anytypeio/go-anytype-infrastructure-experiments/common/commonspace/spacesyncproto" - "github.com/anytypeio/go-anytype-infrastructure-experiments/common/commonspace/syncservice/synchandler" "github.com/anytypeio/go-anytype-infrastructure-experiments/common/commonspace/syncstatus" - "github.com/anytypeio/go-anytype-infrastructure-experiments/common/pkg/acl/tree" - "github.com/anytypeio/go-anytype-infrastructure-experiments/common/pkg/acl/treechangeproto" "github.com/anytypeio/go-anytype-infrastructure-experiments/common/util/slice" "github.com/gogo/protobuf/proto" "go.uber.org/zap" @@ -14,7 +14,7 @@ import ( ) type syncTreeHandler struct { - objTree tree.ObjectTree + objTree objecttree.ObjectTree syncClient SyncClient syncStatus syncstatus.SyncStatusUpdater handlerLock sync.Mutex @@ -23,7 +23,7 @@ type syncTreeHandler struct { const maxQueueSize = 5 -func newSyncTreeHandler(objTree tree.ObjectTree, syncClient SyncClient, syncStatus syncstatus.SyncStatusUpdater) synchandler.SyncHandler { +func newSyncTreeHandler(objTree objecttree.ObjectTree, syncClient SyncClient, syncStatus syncstatus.SyncStatusUpdater) synchandler.SyncHandler { return &syncTreeHandler{ objTree: objTree, syncClient: syncClient, @@ -118,7 +118,7 @@ func (s *syncTreeHandler) handleHeadUpdate( return } - _, err = objTree.AddRawChanges(ctx, tree.RawChangesPayload{ + _, err = objTree.AddRawChanges(ctx, objecttree.RawChangesPayload{ NewHeads: update.Heads, RawChanges: update.Changes, }) @@ -167,7 +167,7 @@ func (s *syncTreeHandler) handleFullSyncRequest( }() if len(request.Changes) != 0 && !s.alreadyHasHeads(objTree, request.Heads) { - _, err = objTree.AddRawChanges(ctx, tree.RawChangesPayload{ + _, err = objTree.AddRawChanges(ctx, objecttree.RawChangesPayload{ NewHeads: request.Heads, RawChanges: request.Changes, }) @@ -207,13 +207,13 @@ func (s *syncTreeHandler) handleFullSyncResponse( return } - _, err = objTree.AddRawChanges(ctx, tree.RawChangesPayload{ + _, err = objTree.AddRawChanges(ctx, objecttree.RawChangesPayload{ NewHeads: response.Heads, RawChanges: response.Changes, }) return } -func (s *syncTreeHandler) alreadyHasHeads(t tree.ObjectTree, heads []string) bool { +func (s *syncTreeHandler) alreadyHasHeads(t objecttree.ObjectTree, heads []string) bool { return slice.UnsortedEquals(t.Heads(), heads) || t.HasChanges(heads...) } diff --git a/common/commonspace/synctree/synctreehandler_test.go b/common/commonspace/object/tree/synctree/synctreehandler_test.go similarity index 94% rename from common/commonspace/synctree/synctreehandler_test.go rename to common/commonspace/object/tree/synctree/synctreehandler_test.go index 8223f6db..3840d9f5 100644 --- a/common/commonspace/synctree/synctreehandler_test.go +++ b/common/commonspace/object/tree/synctree/synctreehandler_test.go @@ -3,11 +3,11 @@ package synctree import ( "context" "fmt" + "github.com/anytypeio/go-anytype-infrastructure-experiments/common/commonspace/object/tree/objecttree" + "github.com/anytypeio/go-anytype-infrastructure-experiments/common/commonspace/object/tree/objecttree/mock_objecttree" + "github.com/anytypeio/go-anytype-infrastructure-experiments/common/commonspace/object/tree/synctree/mock_synctree" + "github.com/anytypeio/go-anytype-infrastructure-experiments/common/commonspace/object/tree/treechangeproto" "github.com/anytypeio/go-anytype-infrastructure-experiments/common/commonspace/syncstatus" - "github.com/anytypeio/go-anytype-infrastructure-experiments/common/commonspace/synctree/mock_synctree" - "github.com/anytypeio/go-anytype-infrastructure-experiments/common/pkg/acl/tree" - "github.com/anytypeio/go-anytype-infrastructure-experiments/common/pkg/acl/tree/mock_objecttree" - "github.com/anytypeio/go-anytype-infrastructure-experiments/common/pkg/acl/treechangeproto" "github.com/golang/mock/gomock" "github.com/stretchr/testify/require" "go.uber.org/zap" @@ -16,11 +16,11 @@ import ( ) type testObjTreeMock struct { - *mock_tree.MockObjectTree + *mock_objecttree.MockObjectTree m sync.Mutex } -func newTestObjMock(mockTree *mock_tree.MockObjectTree) *testObjTreeMock { +func newTestObjMock(mockTree *mock_objecttree.MockObjectTree) *testObjTreeMock { return &testObjTreeMock{ MockObjectTree: mockTree, } @@ -46,7 +46,7 @@ type syncHandlerFixture struct { func newSyncHandlerFixture(t *testing.T) *syncHandlerFixture { ctrl := gomock.NewController(t) syncClientMock := mock_synctree.NewMockSyncClient(ctrl) - objectTreeMock := newTestObjMock(mock_tree.NewMockObjectTree(ctrl)) + objectTreeMock := newTestObjMock(mock_objecttree.NewMockObjectTree(ctrl)) receiveQueueMock := mock_synctree.NewMockReceiveQueue(ctrl) syncHandler := &syncTreeHandler{ @@ -93,11 +93,11 @@ func TestSyncHandler_HandleHeadUpdate(t *testing.T) { fx.objectTreeMock.EXPECT().Heads().Return([]string{"h2"}).Times(2) fx.objectTreeMock.EXPECT().HasChanges(gomock.Eq([]string{"h1"})).Return(false) fx.objectTreeMock.EXPECT(). - AddRawChanges(gomock.Any(), gomock.Eq(tree.RawChangesPayload{ + AddRawChanges(gomock.Any(), gomock.Eq(objecttree.RawChangesPayload{ NewHeads: []string{"h1"}, RawChanges: []*treechangeproto.RawTreeChangeWithId{chWithId}, })). - Return(tree.AddResult{}, nil) + Return(objecttree.AddResult{}, nil) fx.objectTreeMock.EXPECT().Heads().Return([]string{"h2", "h1"}) fx.objectTreeMock.EXPECT().HasChanges(gomock.Eq([]string{"h1"})).Return(true) @@ -127,11 +127,11 @@ func TestSyncHandler_HandleHeadUpdate(t *testing.T) { fx.objectTreeMock.EXPECT().Heads().Return([]string{"h2"}).AnyTimes() fx.objectTreeMock.EXPECT().HasChanges(gomock.Eq([]string{"h1"})).Return(false) fx.objectTreeMock.EXPECT(). - AddRawChanges(gomock.Any(), gomock.Eq(tree.RawChangesPayload{ + AddRawChanges(gomock.Any(), gomock.Eq(objecttree.RawChangesPayload{ NewHeads: []string{"h1"}, RawChanges: []*treechangeproto.RawTreeChangeWithId{chWithId}, })). - Return(tree.AddResult{}, nil) + Return(objecttree.AddResult{}, nil) fx.objectTreeMock.EXPECT().HasChanges(gomock.Eq([]string{"h1"})).Return(false) fx.syncClientMock.EXPECT(). CreateFullSyncRequest(gomock.Eq(fx.objectTreeMock), gomock.Eq([]string{"h1"}), gomock.Eq([]string{"h1"})). @@ -247,11 +247,11 @@ func TestSyncHandler_HandleFullSyncRequest(t *testing.T) { fx.objectTreeMock.EXPECT().Heads().Return([]string{"h2"}).AnyTimes() fx.objectTreeMock.EXPECT().HasChanges(gomock.Eq([]string{"h1"})).Return(false) fx.objectTreeMock.EXPECT(). - AddRawChanges(gomock.Any(), gomock.Eq(tree.RawChangesPayload{ + AddRawChanges(gomock.Any(), gomock.Eq(objecttree.RawChangesPayload{ NewHeads: []string{"h1"}, RawChanges: []*treechangeproto.RawTreeChangeWithId{chWithId}, })). - Return(tree.AddResult{}, nil) + Return(objecttree.AddResult{}, nil) fx.syncClientMock.EXPECT(). CreateFullSyncResponse(gomock.Eq(fx.objectTreeMock), gomock.Eq([]string{"h1"}), gomock.Eq([]string{"h1"})). Return(fullResponse, nil) @@ -351,11 +351,11 @@ func TestSyncHandler_HandleFullSyncRequest(t *testing.T) { HasChanges(gomock.Eq([]string{"h1"})). Return(false) fx.objectTreeMock.EXPECT(). - AddRawChanges(gomock.Any(), gomock.Eq(tree.RawChangesPayload{ + AddRawChanges(gomock.Any(), gomock.Eq(objecttree.RawChangesPayload{ NewHeads: []string{"h1"}, RawChanges: []*treechangeproto.RawTreeChangeWithId{chWithId}, })). - Return(tree.AddResult{}, fmt.Errorf("")) + Return(objecttree.AddResult{}, fmt.Errorf("")) fx.syncClientMock.EXPECT().SendAsync(gomock.Eq(senderId), gomock.Any(), gomock.Eq("")) fx.receiveQueueMock.EXPECT().ClearQueue(senderId) @@ -393,11 +393,11 @@ func TestSyncHandler_HandleFullSyncResponse(t *testing.T) { HasChanges(gomock.Eq([]string{"h1"})). Return(false) fx.objectTreeMock.EXPECT(). - AddRawChanges(gomock.Any(), gomock.Eq(tree.RawChangesPayload{ + AddRawChanges(gomock.Any(), gomock.Eq(objecttree.RawChangesPayload{ NewHeads: []string{"h1"}, RawChanges: []*treechangeproto.RawTreeChangeWithId{chWithId}, })). - Return(tree.AddResult{}, nil) + Return(objecttree.AddResult{}, nil) fx.receiveQueueMock.EXPECT().ClearQueue(senderId) err := fx.syncHandler.HandleMessage(ctx, senderId, objectMsg) diff --git a/common/commonspace/synctree/updatelistener/mock_updatelistener/mock_updatelistener.go b/common/commonspace/object/tree/synctree/updatelistener/mock_updatelistener/mock_updatelistener.go similarity index 83% rename from common/commonspace/synctree/updatelistener/mock_updatelistener/mock_updatelistener.go rename to common/commonspace/object/tree/synctree/updatelistener/mock_updatelistener/mock_updatelistener.go index c72db6e3..fcb65a56 100644 --- a/common/commonspace/synctree/updatelistener/mock_updatelistener/mock_updatelistener.go +++ b/common/commonspace/object/tree/synctree/updatelistener/mock_updatelistener/mock_updatelistener.go @@ -1,5 +1,5 @@ // Code generated by MockGen. DO NOT EDIT. -// Source: github.com/anytypeio/go-anytype-infrastructure-experiments/common/commonspace/synctree/updatelistener (interfaces: UpdateListener) +// Source: github.com/anytypeio/go-anytype-infrastructure-experiments/common/commonspace/object/tree/synctree/updatelistener (interfaces: UpdateListener) // Package mock_updatelistener is a generated GoMock package. package mock_updatelistener @@ -7,7 +7,7 @@ package mock_updatelistener import ( reflect "reflect" - tree "github.com/anytypeio/go-anytype-infrastructure-experiments/common/pkg/acl/tree" + objecttree "github.com/anytypeio/go-anytype-infrastructure-experiments/common/commonspace/object/tree/objecttree" gomock "github.com/golang/mock/gomock" ) @@ -35,7 +35,7 @@ func (m *MockUpdateListener) EXPECT() *MockUpdateListenerMockRecorder { } // Rebuild mocks base method. -func (m *MockUpdateListener) Rebuild(arg0 tree.ObjectTree) { +func (m *MockUpdateListener) Rebuild(arg0 objecttree.ObjectTree) { m.ctrl.T.Helper() m.ctrl.Call(m, "Rebuild", arg0) } @@ -47,7 +47,7 @@ func (mr *MockUpdateListenerMockRecorder) Rebuild(arg0 interface{}) *gomock.Call } // Update mocks base method. -func (m *MockUpdateListener) Update(arg0 tree.ObjectTree) { +func (m *MockUpdateListener) Update(arg0 objecttree.ObjectTree) { m.ctrl.T.Helper() m.ctrl.Call(m, "Update", arg0) } diff --git a/common/commonspace/synctree/updatelistener/updatelistener.go b/common/commonspace/object/tree/synctree/updatelistener/updatelistener.go similarity index 57% rename from common/commonspace/synctree/updatelistener/updatelistener.go rename to common/commonspace/object/tree/synctree/updatelistener/updatelistener.go index 5d8f6e2f..cee10947 100644 --- a/common/commonspace/synctree/updatelistener/updatelistener.go +++ b/common/commonspace/object/tree/synctree/updatelistener/updatelistener.go @@ -1,11 +1,11 @@ -//go:generate mockgen -destination mock_updatelistener/mock_updatelistener.go github.com/anytypeio/go-anytype-infrastructure-experiments/common/commonspace/synctree/updatelistener UpdateListener +//go:generate mockgen -destination mock_updatelistener/mock_updatelistener.go github.com/anytypeio/go-anytype-infrastructure-experiments/common/commonspace/object/tree/synctree/updatelistener UpdateListener package updatelistener import ( - "github.com/anytypeio/go-anytype-infrastructure-experiments/common/pkg/acl/tree" + "github.com/anytypeio/go-anytype-infrastructure-experiments/common/commonspace/object/tree/objecttree" ) type UpdateListener interface { - Update(tree tree.ObjectTree) - Rebuild(tree tree.ObjectTree) + Update(tree objecttree.ObjectTree) + Rebuild(tree objecttree.ObjectTree) } diff --git a/common/pkg/acl/treechangeproto/protos/treechange.proto b/common/commonspace/object/tree/treechangeproto/protos/treechange.proto similarity index 100% rename from common/pkg/acl/treechangeproto/protos/treechange.proto rename to common/commonspace/object/tree/treechangeproto/protos/treechange.proto diff --git a/common/pkg/acl/treechangeproto/treechange.go b/common/commonspace/object/tree/treechangeproto/treechange.go similarity index 100% rename from common/pkg/acl/treechangeproto/treechange.go rename to common/commonspace/object/tree/treechangeproto/treechange.go diff --git a/common/pkg/acl/treechangeproto/treechange.pb.go b/common/commonspace/object/tree/treechangeproto/treechange.pb.go similarity index 100% rename from common/pkg/acl/treechangeproto/treechange.pb.go rename to common/commonspace/object/tree/treechangeproto/treechange.pb.go diff --git a/common/pkg/acl/storage/helpers.go b/common/commonspace/object/tree/treestorage/helpers.go similarity index 96% rename from common/pkg/acl/storage/helpers.go rename to common/commonspace/object/tree/treestorage/helpers.go index 7796a15f..7cc35fef 100644 --- a/common/pkg/acl/storage/helpers.go +++ b/common/commonspace/object/tree/treestorage/helpers.go @@ -1,4 +1,4 @@ -package storage +package treestorage import ( "bytes" diff --git a/common/pkg/acl/storage/inmemory.go b/common/commonspace/object/tree/treestorage/inmemory.go similarity index 62% rename from common/pkg/acl/storage/inmemory.go rename to common/commonspace/object/tree/treestorage/inmemory.go index 87906b4a..f0281b27 100644 --- a/common/pkg/acl/storage/inmemory.go +++ b/common/commonspace/object/tree/treestorage/inmemory.go @@ -1,67 +1,12 @@ -package storage +package treestorage import ( "context" "fmt" - "github.com/anytypeio/go-anytype-infrastructure-experiments/common/pkg/acl/aclrecordproto" - "github.com/anytypeio/go-anytype-infrastructure-experiments/common/pkg/acl/treechangeproto" + "github.com/anytypeio/go-anytype-infrastructure-experiments/common/commonspace/object/tree/treechangeproto" "sync" ) -type inMemoryACLListStorage struct { - records []*aclrecordproto.RawACLRecordWithId - id string - - sync.RWMutex -} - -func NewInMemoryACLListStorage( - id string, - records []*aclrecordproto.RawACLRecordWithId) (ListStorage, error) { - return &inMemoryACLListStorage{ - id: id, - records: records, - RWMutex: sync.RWMutex{}, - }, nil -} - -func (i *inMemoryACLListStorage) Root() (*aclrecordproto.RawACLRecordWithId, error) { - i.RLock() - defer i.RUnlock() - return i.records[0], nil -} - -func (i *inMemoryACLListStorage) SetHead(headId string) error { - panic("implement me") -} - -func (i *inMemoryACLListStorage) Head() (string, error) { - i.RLock() - defer i.RUnlock() - return i.records[len(i.records)-1].Id, nil -} - -func (i *inMemoryACLListStorage) GetRawRecord(ctx context.Context, id string) (*aclrecordproto.RawACLRecordWithId, error) { - i.RLock() - defer i.RUnlock() - for _, rec := range i.records { - if rec.Id == id { - return rec, nil - } - } - return nil, fmt.Errorf("no such record") -} - -func (i *inMemoryACLListStorage) AddRawRecord(ctx context.Context, rec *aclrecordproto.RawACLRecordWithId) error { - panic("implement me") -} - -func (i *inMemoryACLListStorage) Id() string { - i.RLock() - defer i.RUnlock() - return i.id -} - type inMemoryTreeStorage struct { id string root *treechangeproto.RawTreeChangeWithId @@ -72,7 +17,6 @@ type inMemoryTreeStorage struct { } func NewInMemoryTreeStorage( - treeId string, root *treechangeproto.RawTreeChangeWithId, heads []string, changes []*treechangeproto.RawTreeChangeWithId) (TreeStorage, error) { @@ -80,10 +24,10 @@ func NewInMemoryTreeStorage( for _, ch := range changes { allChanges[ch.Id] = ch } - allChanges[treeId] = root + allChanges[root.Id] = root return &inMemoryTreeStorage{ - id: treeId, + id: root.Id, root: root, heads: heads, changes: allChanges, @@ -163,12 +107,12 @@ func (i *inMemoryStorageProvider) TreeStorage(id string) (TreeStorage, error) { func (i *inMemoryStorageProvider) CreateTreeStorage(payload TreeStorageCreatePayload) (TreeStorage, error) { i.Lock() defer i.Unlock() - res, err := NewInMemoryTreeStorage(payload.TreeId, payload.RootRawChange, payload.Heads, payload.Changes) + res, err := NewInMemoryTreeStorage(payload.RootRawChange, payload.Heads, payload.Changes) if err != nil { return nil, err } - i.objects[payload.TreeId] = res + i.objects[payload.RootRawChange.Id] = res return res, nil } diff --git a/common/pkg/acl/storage/mock_storage/mock_storage.go b/common/commonspace/object/tree/treestorage/mock_treestorage/mock_storage.go similarity index 97% rename from common/pkg/acl/storage/mock_storage/mock_storage.go rename to common/commonspace/object/tree/treestorage/mock_treestorage/mock_storage.go index d6361f69..e612ff99 100644 --- a/common/pkg/acl/storage/mock_storage/mock_storage.go +++ b/common/commonspace/object/tree/treestorage/mock_treestorage/mock_storage.go @@ -2,14 +2,14 @@ // Source: github.com/anytypeio/go-anytype-infrastructure-experiments/common/pkg/acl/storage (interfaces: ListStorage,TreeStorage) // Package mock_storage is a generated GoMock package. -package mock_storage +package mock_treestorage import ( context "context" + "github.com/anytypeio/go-anytype-infrastructure-experiments/common/commonspace/object/acl/aclrecordproto" + "github.com/anytypeio/go-anytype-infrastructure-experiments/common/commonspace/object/tree/treechangeproto" reflect "reflect" - aclrecordproto "github.com/anytypeio/go-anytype-infrastructure-experiments/common/pkg/acl/aclrecordproto" - treechangeproto "github.com/anytypeio/go-anytype-infrastructure-experiments/common/pkg/acl/treechangeproto" gomock "github.com/golang/mock/gomock" ) diff --git a/common/pkg/acl/storage/provider.go b/common/commonspace/object/tree/treestorage/provider.go similarity index 89% rename from common/pkg/acl/storage/provider.go rename to common/commonspace/object/tree/treestorage/provider.go index fd065f78..d1b25d17 100644 --- a/common/pkg/acl/storage/provider.go +++ b/common/commonspace/object/tree/treestorage/provider.go @@ -1,8 +1,8 @@ -package storage +package treestorage import ( "errors" - "github.com/anytypeio/go-anytype-infrastructure-experiments/common/pkg/acl/treechangeproto" + "github.com/anytypeio/go-anytype-infrastructure-experiments/common/commonspace/object/tree/treechangeproto" ) var ( diff --git a/common/pkg/acl/storage/treestorage.go b/common/commonspace/object/tree/treestorage/treestorage.go similarity index 89% rename from common/pkg/acl/storage/treestorage.go rename to common/commonspace/object/tree/treestorage/treestorage.go index dcb99fd0..74e48656 100644 --- a/common/pkg/acl/storage/treestorage.go +++ b/common/commonspace/object/tree/treestorage/treestorage.go @@ -1,8 +1,8 @@ -package storage +package treestorage import ( "context" - "github.com/anytypeio/go-anytype-infrastructure-experiments/common/pkg/acl/treechangeproto" + "github.com/anytypeio/go-anytype-infrastructure-experiments/common/commonspace/object/tree/treechangeproto" ) type TreeStorage interface { diff --git a/common/commonspace/treegetter/mock_treegetter/mock_treegetter.go b/common/commonspace/object/treegetter/mock_treegetter/mock_treegetter.go similarity index 93% rename from common/commonspace/treegetter/mock_treegetter/mock_treegetter.go rename to common/commonspace/object/treegetter/mock_treegetter/mock_treegetter.go index 4706000b..e64ace34 100644 --- a/common/commonspace/treegetter/mock_treegetter/mock_treegetter.go +++ b/common/commonspace/object/treegetter/mock_treegetter/mock_treegetter.go @@ -1,5 +1,5 @@ // Code generated by MockGen. DO NOT EDIT. -// Source: github.com/anytypeio/go-anytype-infrastructure-experiments/common/commonspace/treegetter (interfaces: TreeGetter) +// Source: github.com/anytypeio/go-anytype-infrastructure-experiments/common/commonspace/object/treegetter (interfaces: TreeGetter) // Package mock_treegetter is a generated GoMock package. package mock_treegetter @@ -9,7 +9,7 @@ import ( reflect "reflect" app "github.com/anytypeio/go-anytype-infrastructure-experiments/common/app" - tree "github.com/anytypeio/go-anytype-infrastructure-experiments/common/pkg/acl/tree" + objecttree "github.com/anytypeio/go-anytype-infrastructure-experiments/common/commonspace/object/tree/objecttree" gomock "github.com/golang/mock/gomock" ) @@ -65,10 +65,10 @@ func (mr *MockTreeGetterMockRecorder) DeleteTree(arg0, arg1, arg2 interface{}) * } // GetTree mocks base method. -func (m *MockTreeGetter) GetTree(arg0 context.Context, arg1, arg2 string) (tree.ObjectTree, error) { +func (m *MockTreeGetter) GetTree(arg0 context.Context, arg1, arg2 string) (objecttree.ObjectTree, error) { m.ctrl.T.Helper() ret := m.ctrl.Call(m, "GetTree", arg0, arg1, arg2) - ret0, _ := ret[0].(tree.ObjectTree) + ret0, _ := ret[0].(objecttree.ObjectTree) ret1, _ := ret[1].(error) return ret0, ret1 } diff --git a/common/commonspace/treegetter/treegetter.go b/common/commonspace/object/treegetter/treegetter.go similarity index 63% rename from common/commonspace/treegetter/treegetter.go rename to common/commonspace/object/treegetter/treegetter.go index 79e2913f..2f020e86 100644 --- a/common/commonspace/treegetter/treegetter.go +++ b/common/commonspace/object/treegetter/treegetter.go @@ -1,19 +1,16 @@ -//go:generate mockgen -destination mock_treegetter/mock_treegetter.go github.com/anytypeio/go-anytype-infrastructure-experiments/common/commonspace/treegetter TreeGetter +//go:generate mockgen -destination mock_treegetter/mock_treegetter.go github.com/anytypeio/go-anytype-infrastructure-experiments/common/commonspace/object/treegetter TreeGetter package treegetter import ( "context" - "errors" "github.com/anytypeio/go-anytype-infrastructure-experiments/common/app" - "github.com/anytypeio/go-anytype-infrastructure-experiments/common/pkg/acl/tree" + "github.com/anytypeio/go-anytype-infrastructure-experiments/common/commonspace/object/tree/objecttree" ) -const CName = "commonspace.treeGetter" - -var ErrSpaceNotFound = errors.New("space not found") +const CName = "object.treegetter" type TreeGetter interface { app.ComponentRunnable - GetTree(ctx context.Context, spaceId, treeId string) (tree.ObjectTree, error) + GetTree(ctx context.Context, spaceId, treeId string) (objecttree.ObjectTree, error) DeleteTree(ctx context.Context, spaceId, treeId string) error } diff --git a/common/commonspace/objectgetter/objectgetter.go b/common/commonspace/objectgetter/objectgetter.go deleted file mode 100644 index 11b9e835..00000000 --- a/common/commonspace/objectgetter/objectgetter.go +++ /dev/null @@ -1,14 +0,0 @@ -package objectgetter - -import ( - "context" - "github.com/anytypeio/go-anytype-infrastructure-experiments/common/commonspace/syncservice/synchandler" -) - -type Object interface { - synchandler.SyncHandler -} - -type ObjectGetter interface { - GetObject(ctx context.Context, objectId string) (Object, error) -} diff --git a/common/commonspace/syncservice/actionqueue.go b/common/commonspace/objectsync/actionqueue.go similarity index 98% rename from common/commonspace/syncservice/actionqueue.go rename to common/commonspace/objectsync/actionqueue.go index 17a5400a..bf76334f 100644 --- a/common/commonspace/syncservice/actionqueue.go +++ b/common/commonspace/objectsync/actionqueue.go @@ -1,4 +1,4 @@ -package syncservice +package objectsync import ( "context" diff --git a/common/commonspace/syncservice/mock_syncservice/mock_syncservice.go b/common/commonspace/objectsync/mock_objectsync/mock_objectsync.go similarity index 85% rename from common/commonspace/syncservice/mock_syncservice/mock_syncservice.go rename to common/commonspace/objectsync/mock_objectsync/mock_objectsync.go index 4617bf7f..97b17e10 100644 --- a/common/commonspace/syncservice/mock_syncservice/mock_syncservice.go +++ b/common/commonspace/objectsync/mock_objectsync/mock_objectsync.go @@ -1,13 +1,13 @@ // Code generated by MockGen. DO NOT EDIT. -// Source: github.com/anytypeio/go-anytype-infrastructure-experiments/common/commonspace/syncservice (interfaces: ActionQueue) +// Source: github.com/anytypeio/go-anytype-infrastructure-experiments/common/commonspace/objectsync (interfaces: ActionQueue) -// Package mock_syncservice is a generated GoMock package. -package mock_syncservice +// Package mock_objectsync is a generated GoMock package. +package mock_objectsync import ( reflect "reflect" - syncservice "github.com/anytypeio/go-anytype-infrastructure-experiments/common/commonspace/syncservice" + objectsync "github.com/anytypeio/go-anytype-infrastructure-experiments/common/commonspace/objectsync" gomock "github.com/golang/mock/gomock" ) @@ -59,7 +59,7 @@ func (mr *MockActionQueueMockRecorder) Run() *gomock.Call { } // Send mocks base method. -func (m *MockActionQueue) Send(arg0 syncservice.ActionFunc) error { +func (m *MockActionQueue) Send(arg0 objectsync.ActionFunc) error { m.ctrl.T.Helper() ret := m.ctrl.Call(m, "Send", arg0) ret0, _ := ret[0].(error) diff --git a/common/commonspace/syncservice/syncservice.go b/common/commonspace/objectsync/objectsync.go similarity index 69% rename from common/commonspace/syncservice/syncservice.go rename to common/commonspace/objectsync/objectsync.go index 574d5f6f..8b821193 100644 --- a/common/commonspace/syncservice/syncservice.go +++ b/common/commonspace/objectsync/objectsync.go @@ -1,51 +1,51 @@ -//go:generate mockgen -destination mock_syncservice/mock_syncservice.go github.com/anytypeio/go-anytype-infrastructure-experiments/common/commonspace/syncservice ActionQueue -package syncservice +//go:generate mockgen -destination mock_objectsync/mock_objectsync.go github.com/anytypeio/go-anytype-infrastructure-experiments/common/commonspace/objectsync ActionQueue +package objectsync import ( "context" "github.com/anytypeio/go-anytype-infrastructure-experiments/common/app/logger" - "github.com/anytypeio/go-anytype-infrastructure-experiments/common/commonspace/objectgetter" + "github.com/anytypeio/go-anytype-infrastructure-experiments/common/app/ocache" + "github.com/anytypeio/go-anytype-infrastructure-experiments/common/commonspace/object/syncobjectgetter" + "github.com/anytypeio/go-anytype-infrastructure-experiments/common/commonspace/objectsync/synchandler" "github.com/anytypeio/go-anytype-infrastructure-experiments/common/commonspace/spacesyncproto" - "github.com/anytypeio/go-anytype-infrastructure-experiments/common/commonspace/syncservice/synchandler" "github.com/anytypeio/go-anytype-infrastructure-experiments/common/nodeconf" - "github.com/anytypeio/go-anytype-infrastructure-experiments/common/pkg/ocache" "github.com/anytypeio/go-anytype-infrastructure-experiments/common/util/periodicsync" "go.uber.org/zap" "time" ) -var log = logger.NewNamed("commonspace.syncservice") +var log = logger.NewNamed("commonspace.objectsync") -type SyncService interface { +type ObjectSync interface { ocache.ObjectLastUsage synchandler.SyncHandler StreamPool() StreamPool StreamChecker() StreamChecker ActionQueue() ActionQueue - Init(getter objectgetter.ObjectGetter) + Init(getter syncobjectgetter.SyncObjectGetter) Close() (err error) } -type syncService struct { +type objectSync struct { spaceId string streamPool StreamPool checker StreamChecker periodicSync periodicsync.PeriodicSync - objectGetter objectgetter.ObjectGetter + objectGetter syncobjectgetter.SyncObjectGetter actionQueue ActionQueue syncCtx context.Context cancelSync context.CancelFunc } -func NewSyncService( +func NewObjectSync( spaceId string, confConnector nodeconf.ConfConnector, - periodicSeconds int) (syncService SyncService) { + periodicSeconds int) (objectSync ObjectSync) { streamPool := newStreamPool(func(ctx context.Context, senderId string, message *spacesyncproto.ObjectSyncMessage) (err error) { - return syncService.HandleMessage(ctx, senderId, message) + return objectSync.HandleMessage(ctx, senderId, message) }) clientFactory := spacesyncproto.ClientFactoryFunc(spacesyncproto.NewDRPCSpaceClient) syncLog := log.With(zap.String("id", spaceId)) @@ -61,7 +61,7 @@ func NewSyncService( checker.CheckResponsiblePeers() return nil }, syncLog) - syncService = newSyncService( + objectSync = newObjectSync( spaceId, streamPool, periodicSync, @@ -71,15 +71,15 @@ func NewSyncService( return } -func newSyncService( +func newObjectSync( spaceId string, streamPool StreamPool, periodicSync periodicsync.PeriodicSync, checker StreamChecker, syncCtx context.Context, cancel context.CancelFunc, -) *syncService { - return &syncService{ +) *objectSync { + return &objectSync{ periodicSync: periodicSync, streamPool: streamPool, spaceId: spaceId, @@ -90,24 +90,24 @@ func newSyncService( } } -func (s *syncService) Init(objectGetter objectgetter.ObjectGetter) { +func (s *objectSync) Init(objectGetter syncobjectgetter.SyncObjectGetter) { s.objectGetter = objectGetter s.actionQueue.Run() s.periodicSync.Run() } -func (s *syncService) Close() (err error) { +func (s *objectSync) Close() (err error) { s.actionQueue.Close() s.periodicSync.Close() s.cancelSync() return s.streamPool.Close() } -func (s *syncService) LastUsage() time.Time { +func (s *objectSync) LastUsage() time.Time { return s.streamPool.LastUsage() } -func (s *syncService) HandleMessage(ctx context.Context, senderId string, message *spacesyncproto.ObjectSyncMessage) (err error) { +func (s *objectSync) HandleMessage(ctx context.Context, senderId string, message *spacesyncproto.ObjectSyncMessage) (err error) { log.With(zap.String("peerId", senderId), zap.String("objectId", message.ObjectId)).Debug("handling message") obj, err := s.objectGetter.GetObject(ctx, message.ObjectId) if err != nil { @@ -116,14 +116,14 @@ func (s *syncService) HandleMessage(ctx context.Context, senderId string, messag return obj.HandleMessage(ctx, senderId, message) } -func (s *syncService) StreamPool() StreamPool { +func (s *objectSync) StreamPool() StreamPool { return s.streamPool } -func (s *syncService) StreamChecker() StreamChecker { +func (s *objectSync) StreamChecker() StreamChecker { return s.checker } -func (s *syncService) ActionQueue() ActionQueue { +func (s *objectSync) ActionQueue() ActionQueue { return s.actionQueue } diff --git a/common/commonspace/syncservice/streamchecker.go b/common/commonspace/objectsync/streamchecker.go similarity index 99% rename from common/commonspace/syncservice/streamchecker.go rename to common/commonspace/objectsync/streamchecker.go index 1ff06f7a..6d199676 100644 --- a/common/commonspace/syncservice/streamchecker.go +++ b/common/commonspace/objectsync/streamchecker.go @@ -1,4 +1,4 @@ -package syncservice +package objectsync import ( "context" diff --git a/common/commonspace/syncservice/streampool.go b/common/commonspace/objectsync/streampool.go similarity index 99% rename from common/commonspace/syncservice/streampool.go rename to common/commonspace/objectsync/streampool.go index b1bc0f09..accda6fc 100644 --- a/common/commonspace/syncservice/streampool.go +++ b/common/commonspace/objectsync/streampool.go @@ -1,12 +1,12 @@ -package syncservice +package objectsync import ( "context" "errors" "fmt" + "github.com/anytypeio/go-anytype-infrastructure-experiments/common/app/ocache" "github.com/anytypeio/go-anytype-infrastructure-experiments/common/commonspace/spacesyncproto" "github.com/anytypeio/go-anytype-infrastructure-experiments/common/net/peer" - "github.com/anytypeio/go-anytype-infrastructure-experiments/common/pkg/ocache" "go.uber.org/zap" "sync" "sync/atomic" diff --git a/common/commonspace/syncservice/streampool_test.go b/common/commonspace/objectsync/streampool_test.go similarity index 99% rename from common/commonspace/syncservice/streampool_test.go rename to common/commonspace/objectsync/streampool_test.go index 3fd7f746..bf32bbf9 100644 --- a/common/commonspace/syncservice/streampool_test.go +++ b/common/commonspace/objectsync/streampool_test.go @@ -1,4 +1,4 @@ -package syncservice +package objectsync import ( "context" diff --git a/common/commonspace/syncservice/synchandler/synchhandler.go b/common/commonspace/objectsync/synchandler/synchhandler.go similarity index 100% rename from common/commonspace/syncservice/synchandler/synchhandler.go rename to common/commonspace/objectsync/synchandler/synchhandler.go diff --git a/common/commonspace/payloads.go b/common/commonspace/payloads.go index cd6a4c1f..117df889 100644 --- a/common/commonspace/payloads.go +++ b/common/commonspace/payloads.go @@ -1,12 +1,12 @@ package commonspace import ( + aclrecordproto2 "github.com/anytypeio/go-anytype-infrastructure-experiments/common/commonspace/object/acl/aclrecordproto" + "github.com/anytypeio/go-anytype-infrastructure-experiments/common/commonspace/object/keychain" + "github.com/anytypeio/go-anytype-infrastructure-experiments/common/commonspace/object/tree/objecttree" + "github.com/anytypeio/go-anytype-infrastructure-experiments/common/commonspace/spacestorage" "github.com/anytypeio/go-anytype-infrastructure-experiments/common/commonspace/spacesyncproto" - "github.com/anytypeio/go-anytype-infrastructure-experiments/common/commonspace/storage" - aclrecordproto "github.com/anytypeio/go-anytype-infrastructure-experiments/common/pkg/acl/aclrecordproto" - "github.com/anytypeio/go-anytype-infrastructure-experiments/common/pkg/acl/common" - "github.com/anytypeio/go-anytype-infrastructure-experiments/common/pkg/acl/tree" - "github.com/anytypeio/go-anytype-infrastructure-experiments/common/util/cid" + "github.com/anytypeio/go-anytype-infrastructure-experiments/common/util/cidutil" "github.com/anytypeio/go-anytype-infrastructure-experiments/common/util/keys/asymmetric/signingkey" "hash/fnv" "math/rand" @@ -18,7 +18,7 @@ const ( SpaceDerivationScheme = "derivation.standard" ) -func storagePayloadForSpaceCreate(payload SpaceCreatePayload) (storagePayload storage.SpaceStorageCreatePayload, err error) { +func storagePayloadForSpaceCreate(payload SpaceCreatePayload) (storagePayload spacestorage.SpaceStorageCreatePayload, err error) { // unmarshalling signing and encryption keys identity, err := payload.SigningKey.GetPublic().Raw() if err != nil { @@ -55,7 +55,7 @@ func storagePayloadForSpaceCreate(payload SpaceCreatePayload) (storagePayload st if err != nil { return } - id, err := cid.NewCIDFromBytes(marshalled) + id, err := cidutil.NewCIDFromBytes(marshalled) spaceId := NewSpaceId(id, payload.ReplicationKey) rawHeaderWithId := &spacesyncproto.RawSpaceHeaderWithId{ RawHeader: marshalled, @@ -75,7 +75,7 @@ func storagePayloadForSpaceCreate(payload SpaceCreatePayload) (storagePayload st } // preparing acl - aclRoot := &aclrecordproto.ACLRoot{ + aclRoot := &aclrecordproto2.ACLRoot{ Identity: identity, EncryptionKey: encPubKey, SpaceId: spaceId, @@ -88,14 +88,14 @@ func storagePayloadForSpaceCreate(payload SpaceCreatePayload) (storagePayload st return } - builder := tree.NewChangeBuilder(common.NewKeychain(), nil) + builder := objecttree.NewChangeBuilder(keychain.NewKeychain(), nil) spaceSettingsSeed := make([]byte, 32) _, err = rand.Read(spaceSettingsSeed) if err != nil { return } - _, settingsRoot, err := builder.BuildInitialContent(tree.InitialContent{ + _, settingsRoot, err := builder.BuildInitialContent(objecttree.InitialContent{ AclHeadId: rawWithId.Id, Identity: aclRoot.Identity, SigningKey: payload.SigningKey, @@ -109,7 +109,7 @@ func storagePayloadForSpaceCreate(payload SpaceCreatePayload) (storagePayload st } // creating storage - storagePayload = storage.SpaceStorageCreatePayload{ + storagePayload = spacestorage.SpaceStorageCreatePayload{ AclWithId: rawWithId, SpaceHeaderWithId: rawHeaderWithId, SpaceSettingsWithId: settingsRoot, @@ -117,7 +117,7 @@ func storagePayloadForSpaceCreate(payload SpaceCreatePayload) (storagePayload st return } -func storagePayloadForSpaceDerive(payload SpaceDerivePayload) (storagePayload storage.SpaceStorageCreatePayload, err error) { +func storagePayloadForSpaceDerive(payload SpaceDerivePayload) (storagePayload spacestorage.SpaceStorageCreatePayload, err error) { // unmarshalling signing and encryption keys identity, err := payload.SigningKey.GetPublic().Raw() if err != nil { @@ -163,7 +163,7 @@ func storagePayloadForSpaceDerive(payload SpaceDerivePayload) (storagePayload st if err != nil { return } - id, err := cid.NewCIDFromBytes(marshalled) + id, err := cidutil.NewCIDFromBytes(marshalled) spaceId := NewSpaceId(id, repKey) rawHeaderWithId := &spacesyncproto.RawSpaceHeaderWithId{ RawHeader: marshalled, @@ -171,7 +171,7 @@ func storagePayloadForSpaceDerive(payload SpaceDerivePayload) (storagePayload st } // deriving and encrypting read key - readKey, err := aclrecordproto.ACLReadKeyDerive(signPrivKey, encPrivKey) + readKey, err := aclrecordproto2.ACLReadKeyDerive(signPrivKey, encPrivKey) if err != nil { return } @@ -187,7 +187,7 @@ func storagePayloadForSpaceDerive(payload SpaceDerivePayload) (storagePayload st } // preparing acl - aclRoot := &aclrecordproto.ACLRoot{ + aclRoot := &aclrecordproto2.ACLRoot{ Identity: identity, EncryptionKey: encPubKey, SpaceId: spaceId, @@ -200,8 +200,8 @@ func storagePayloadForSpaceDerive(payload SpaceDerivePayload) (storagePayload st return } - builder := tree.NewChangeBuilder(common.NewKeychain(), nil) - _, settingsRoot, err := builder.BuildInitialContent(tree.InitialContent{ + builder := objecttree.NewChangeBuilder(keychain.NewKeychain(), nil) + _, settingsRoot, err := builder.BuildInitialContent(objecttree.InitialContent{ AclHeadId: rawWithId.Id, Identity: aclRoot.Identity, SigningKey: payload.SigningKey, @@ -213,7 +213,7 @@ func storagePayloadForSpaceDerive(payload SpaceDerivePayload) (storagePayload st } // creating storage - storagePayload = storage.SpaceStorageCreatePayload{ + storagePayload = spacestorage.SpaceStorageCreatePayload{ AclWithId: rawWithId, SpaceHeaderWithId: rawHeaderWithId, SpaceSettingsWithId: settingsRoot, @@ -221,7 +221,7 @@ func storagePayloadForSpaceDerive(payload SpaceDerivePayload) (storagePayload st return } -func marshalACLRoot(aclRoot *aclrecordproto.ACLRoot, key signingkey.PrivKey) (rawWithId *aclrecordproto.RawACLRecordWithId, err error) { +func marshalACLRoot(aclRoot *aclrecordproto2.ACLRoot, key signingkey.PrivKey) (rawWithId *aclrecordproto2.RawACLRecordWithId, err error) { marshalledRoot, err := aclRoot.Marshal() if err != nil { return @@ -230,7 +230,7 @@ func marshalACLRoot(aclRoot *aclrecordproto.ACLRoot, key signingkey.PrivKey) (ra if err != nil { return } - raw := &aclrecordproto.RawACLRecord{ + raw := &aclrecordproto2.RawACLRecord{ Payload: marshalledRoot, Signature: signature, } @@ -238,11 +238,11 @@ func marshalACLRoot(aclRoot *aclrecordproto.ACLRoot, key signingkey.PrivKey) (ra if err != nil { return } - aclHeadId, err := cid.NewCIDFromBytes(marshalledRaw) + aclHeadId, err := cidutil.NewCIDFromBytes(marshalledRaw) if err != nil { return } - rawWithId = &aclrecordproto.RawACLRecordWithId{ + rawWithId = &aclrecordproto2.RawACLRecordWithId{ Payload: marshalledRaw, Id: aclHeadId, } diff --git a/common/commonspace/settings/deleter.go b/common/commonspace/settings/deleter.go index 3a07fe16..ce56444e 100644 --- a/common/commonspace/settings/deleter.go +++ b/common/commonspace/settings/deleter.go @@ -2,9 +2,9 @@ package settings import ( "context" + "github.com/anytypeio/go-anytype-infrastructure-experiments/common/commonspace/object/treegetter" "github.com/anytypeio/go-anytype-infrastructure-experiments/common/commonspace/settings/deletionstate" - "github.com/anytypeio/go-anytype-infrastructure-experiments/common/commonspace/storage" - "github.com/anytypeio/go-anytype-infrastructure-experiments/common/commonspace/treegetter" + "github.com/anytypeio/go-anytype-infrastructure-experiments/common/commonspace/spacestorage" "go.uber.org/zap" ) @@ -13,12 +13,12 @@ type Deleter interface { } type deleter struct { - st storage.SpaceStorage + st spacestorage.SpaceStorage state deletionstate.DeletionState getter treegetter.TreeGetter } -func newDeleter(st storage.SpaceStorage, state deletionstate.DeletionState, getter treegetter.TreeGetter) Deleter { +func newDeleter(st spacestorage.SpaceStorage, state deletionstate.DeletionState, getter treegetter.TreeGetter) Deleter { return &deleter{st, state, getter} } @@ -26,7 +26,7 @@ func (d *deleter) Delete() { allQueued := d.state.GetQueued() for _, id := range allQueued { err := d.getter.DeleteTree(context.Background(), d.st.Id(), id) - if err != nil && err != storage.ErrTreeStorageAlreadyDeleted { + if err != nil && err != spacestorage.ErrTreeStorageAlreadyDeleted { log.With(zap.String("id", id), zap.Error(err)).Error("failed to delete object") continue } diff --git a/common/commonspace/settings/deleter_test.go b/common/commonspace/settings/deleter_test.go index f2784bfc..4c2ac772 100644 --- a/common/commonspace/settings/deleter_test.go +++ b/common/commonspace/settings/deleter_test.go @@ -2,10 +2,10 @@ package settings import ( "fmt" + "github.com/anytypeio/go-anytype-infrastructure-experiments/common/commonspace/object/treegetter/mock_treegetter" "github.com/anytypeio/go-anytype-infrastructure-experiments/common/commonspace/settings/deletionstate/mock_deletionstate" - "github.com/anytypeio/go-anytype-infrastructure-experiments/common/commonspace/storage" - "github.com/anytypeio/go-anytype-infrastructure-experiments/common/commonspace/storage/mock_storage" - "github.com/anytypeio/go-anytype-infrastructure-experiments/common/commonspace/treegetter/mock_treegetter" + "github.com/anytypeio/go-anytype-infrastructure-experiments/common/commonspace/spacestorage" + "github.com/anytypeio/go-anytype-infrastructure-experiments/common/commonspace/spacestorage/mock_spacestorage" "github.com/golang/mock/gomock" "testing" ) @@ -13,7 +13,7 @@ import ( func TestDeleter_Delete(t *testing.T) { ctrl := gomock.NewController(t) treeGetter := mock_treegetter.NewMockTreeGetter(ctrl) - st := mock_storage.NewMockSpaceStorage(ctrl) + st := mock_spacestorage.NewMockSpaceStorage(ctrl) delState := mock_deletionstate.NewMockDeletionState(ctrl) deleter := newDeleter(st, delState, treeGetter) @@ -34,7 +34,7 @@ func TestDeleter_Delete(t *testing.T) { spaceId := "spaceId" delState.EXPECT().GetQueued().Return([]string{id}) st.EXPECT().Id().Return(spaceId) - treeGetter.EXPECT().DeleteTree(gomock.Any(), spaceId, id).Return(storage.ErrTreeStorageAlreadyDeleted) + treeGetter.EXPECT().DeleteTree(gomock.Any(), spaceId, id).Return(spacestorage.ErrTreeStorageAlreadyDeleted) delState.EXPECT().Delete(id).Return(nil) deleter.Delete() diff --git a/common/commonspace/settings/deletionstate/deletionstate.go b/common/commonspace/settings/deletionstate/deletionstate.go index e3d30f15..066e226e 100644 --- a/common/commonspace/settings/deletionstate/deletionstate.go +++ b/common/commonspace/settings/deletionstate/deletionstate.go @@ -2,8 +2,8 @@ package deletionstate import ( + "github.com/anytypeio/go-anytype-infrastructure-experiments/common/commonspace/spacestorage" "github.com/anytypeio/go-anytype-infrastructure-experiments/common/commonspace/spacesyncproto" - "github.com/anytypeio/go-anytype-infrastructure-experiments/common/commonspace/storage" "sync" ) @@ -24,10 +24,10 @@ type deletionState struct { queued map[string]struct{} deleted map[string]struct{} stateUpdateObservers []StateUpdateObserver - storage storage.SpaceStorage + storage spacestorage.SpaceStorage } -func NewDeletionState(storage storage.SpaceStorage) DeletionState { +func NewDeletionState(storage spacestorage.SpaceStorage) DeletionState { return &deletionState{ queued: map[string]struct{}{}, deleted: map[string]struct{}{}, @@ -68,13 +68,13 @@ func (st *deletionState) Add(ids []string) (err error) { } switch status { - case storage.TreeDeletedStatusQueued: + case spacestorage.TreeDeletedStatusQueued: st.queued[id] = struct{}{} - case storage.TreeDeletedStatusDeleted: + case spacestorage.TreeDeletedStatusDeleted: st.deleted[id] = struct{}{} default: st.queued[id] = struct{}{} - err = st.storage.SetTreeDeletedStatus(id, storage.TreeDeletedStatusQueued) + err = st.storage.SetTreeDeletedStatus(id, spacestorage.TreeDeletedStatusQueued) if err != nil { return } @@ -98,7 +98,7 @@ func (st *deletionState) Delete(id string) (err error) { defer st.Unlock() delete(st.queued, id) st.deleted[id] = struct{}{} - err = st.storage.SetTreeDeletedStatus(id, storage.TreeDeletedStatusDeleted) + err = st.storage.SetTreeDeletedStatus(id, spacestorage.TreeDeletedStatusDeleted) if err != nil { return } diff --git a/common/commonspace/settings/deletionstate/deletionstate_test.go b/common/commonspace/settings/deletionstate/deletionstate_test.go index d3feeae3..8a270d29 100644 --- a/common/commonspace/settings/deletionstate/deletionstate_test.go +++ b/common/commonspace/settings/deletionstate/deletionstate_test.go @@ -1,8 +1,8 @@ package deletionstate import ( - "github.com/anytypeio/go-anytype-infrastructure-experiments/common/commonspace/storage" - "github.com/anytypeio/go-anytype-infrastructure-experiments/common/commonspace/storage/mock_storage" + "github.com/anytypeio/go-anytype-infrastructure-experiments/common/commonspace/spacestorage" + "github.com/anytypeio/go-anytype-infrastructure-experiments/common/commonspace/spacestorage/mock_spacestorage" "github.com/golang/mock/gomock" "github.com/stretchr/testify/require" "testing" @@ -11,12 +11,12 @@ import ( type fixture struct { ctrl *gomock.Controller delState *deletionState - spaceStorage *mock_storage.MockSpaceStorage + spaceStorage *mock_spacestorage.MockSpaceStorage } func newFixture(t *testing.T) *fixture { ctrl := gomock.NewController(t) - spaceStorage := mock_storage.NewMockSpaceStorage(ctrl) + spaceStorage := mock_spacestorage.NewMockSpaceStorage(ctrl) delState := NewDeletionState(spaceStorage).(*deletionState) return &fixture{ ctrl: ctrl, @@ -35,7 +35,7 @@ func TestDeletionState_Add(t *testing.T) { defer fx.stop() id := "newId" fx.spaceStorage.EXPECT().TreeDeletedStatus(id).Return("", nil) - fx.spaceStorage.EXPECT().SetTreeDeletedStatus(id, storage.TreeDeletedStatusQueued).Return(nil) + fx.spaceStorage.EXPECT().SetTreeDeletedStatus(id, spacestorage.TreeDeletedStatusQueued).Return(nil) err := fx.delState.Add([]string{id}) require.NoError(t, err) require.Contains(t, fx.delState.queued, id) @@ -45,7 +45,7 @@ func TestDeletionState_Add(t *testing.T) { fx := newFixture(t) defer fx.stop() id := "newId" - fx.spaceStorage.EXPECT().TreeDeletedStatus(id).Return(storage.TreeDeletedStatusQueued, nil) + fx.spaceStorage.EXPECT().TreeDeletedStatus(id).Return(spacestorage.TreeDeletedStatusQueued, nil) err := fx.delState.Add([]string{id}) require.NoError(t, err) require.Contains(t, fx.delState.queued, id) @@ -55,7 +55,7 @@ func TestDeletionState_Add(t *testing.T) { fx := newFixture(t) defer fx.stop() id := "newId" - fx.spaceStorage.EXPECT().TreeDeletedStatus(id).Return(storage.TreeDeletedStatusDeleted, nil) + fx.spaceStorage.EXPECT().TreeDeletedStatus(id).Return(spacestorage.TreeDeletedStatusDeleted, nil) err := fx.delState.Add([]string{id}) require.NoError(t, err) require.Contains(t, fx.delState.deleted, id) @@ -95,7 +95,7 @@ func TestDeletionState_AddObserver(t *testing.T) { }) id := "newId" fx.spaceStorage.EXPECT().TreeDeletedStatus(id).Return("", nil) - fx.spaceStorage.EXPECT().SetTreeDeletedStatus(id, storage.TreeDeletedStatusQueued).Return(nil) + fx.spaceStorage.EXPECT().SetTreeDeletedStatus(id, spacestorage.TreeDeletedStatusQueued).Return(nil) err := fx.delState.Add([]string{id}) require.NoError(t, err) require.Contains(t, fx.delState.queued, id) @@ -108,7 +108,7 @@ func TestDeletionState_Delete(t *testing.T) { id := "deletedId" fx.delState.queued[id] = struct{}{} - fx.spaceStorage.EXPECT().SetTreeDeletedStatus(id, storage.TreeDeletedStatusDeleted).Return(nil) + fx.spaceStorage.EXPECT().SetTreeDeletedStatus(id, spacestorage.TreeDeletedStatusDeleted).Return(nil) err := fx.delState.Delete(id) require.NoError(t, err) require.Contains(t, fx.delState.deleted, id) @@ -124,4 +124,4 @@ func TestDeletionState_Exists(t *testing.T) { require.True(t, fx.delState.Exists("id1")) require.True(t, fx.delState.Exists("id2")) require.False(t, fx.delState.Exists("id3")) -} \ No newline at end of file +} diff --git a/common/commonspace/settings/idprovider.go b/common/commonspace/settings/idprovider.go index 1d15afb0..7af4067b 100644 --- a/common/commonspace/settings/idprovider.go +++ b/common/commonspace/settings/idprovider.go @@ -1,18 +1,18 @@ package settings import ( + "github.com/anytypeio/go-anytype-infrastructure-experiments/common/commonspace/object/tree/objecttree" "github.com/anytypeio/go-anytype-infrastructure-experiments/common/commonspace/spacesyncproto" - "github.com/anytypeio/go-anytype-infrastructure-experiments/common/pkg/acl/tree" "github.com/gogo/protobuf/proto" ) type DeletedIdsProvider interface { - ProvideIds(tr tree.ObjectTree, startId string) (ids []string, lastId string, err error) + ProvideIds(tr objecttree.ObjectTree, startId string) (ids []string, lastId string, err error) } type provider struct{} -func (p *provider) processChange(change *tree.Change, rootId, startId string, ids []string) []string { +func (p *provider) processChange(change *objecttree.Change, rootId, startId string, ids []string) []string { // ignoring root change which has empty model or startId change if change.Model == nil || (change.Id == startId && startId != "") { return ids @@ -34,9 +34,9 @@ func (p *provider) processChange(change *tree.Change, rootId, startId string, id return ids } -func (p *provider) ProvideIds(tr tree.ObjectTree, startId string) (ids []string, lastId string, err error) { +func (p *provider) ProvideIds(tr objecttree.ObjectTree, startId string) (ids []string, lastId string, err error) { rootId := tr.Root().Id - process := func(change *tree.Change) bool { + process := func(change *objecttree.Change) bool { lastId = change.Id ids = p.processChange(change, rootId, startId, ids) return true diff --git a/common/commonspace/settings/idprovider_test.go b/common/commonspace/settings/idprovider_test.go index 5f412ec0..7f52f051 100644 --- a/common/commonspace/settings/idprovider_test.go +++ b/common/commonspace/settings/idprovider_test.go @@ -1,9 +1,9 @@ package settings import ( + "github.com/anytypeio/go-anytype-infrastructure-experiments/common/commonspace/object/tree/objecttree" + "github.com/anytypeio/go-anytype-infrastructure-experiments/common/commonspace/object/tree/objecttree/mock_objecttree" "github.com/anytypeio/go-anytype-infrastructure-experiments/common/commonspace/spacesyncproto" - "github.com/anytypeio/go-anytype-infrastructure-experiments/common/pkg/acl/tree" - mock_tree "github.com/anytypeio/go-anytype-infrastructure-experiments/common/pkg/acl/tree/mock_objecttree" "github.com/golang/mock/gomock" "github.com/stretchr/testify/require" "testing" @@ -16,7 +16,7 @@ func TestProvider_ProcessChange(t *testing.T) { //defer ctrl.Finish() t.Run("empty model", func(t *testing.T) { - ch := &tree.Change{} + ch := &objecttree.Change{} startId := "startId" rootId := "rootId" ids := []string{startId} @@ -25,7 +25,7 @@ func TestProvider_ProcessChange(t *testing.T) { }) t.Run("changeId is equal to startId", func(t *testing.T) { - ch := &tree.Change{} + ch := &objecttree.Change{} ch.Model = &spacesyncproto.SettingsData{} ch.Id = "startId" @@ -37,7 +37,7 @@ func TestProvider_ProcessChange(t *testing.T) { }) t.Run("changeId is equal to rootId, startId is empty", func(t *testing.T) { - ch := &tree.Change{} + ch := &objecttree.Change{} ch.Model = &spacesyncproto.SettingsData{ Snapshot: &spacesyncproto.SpaceSettingsSnapshot{ DeletedIds: []string{"id1", "id2"}, @@ -52,7 +52,7 @@ func TestProvider_ProcessChange(t *testing.T) { }) t.Run("changeId is equal to rootId, startId is empty", func(t *testing.T) { - ch := &tree.Change{} + ch := &objecttree.Change{} ch.Model = &spacesyncproto.SettingsData{ Content: []*spacesyncproto.SpaceSettingsContent{ {&spacesyncproto.SpaceSettingsContent_ObjectDelete{ @@ -71,12 +71,12 @@ func TestProvider_ProcessChange(t *testing.T) { func TestProvider_ProvideIds(t *testing.T) { ctrl := gomock.NewController(t) - objTree := mock_tree.NewMockObjectTree(ctrl) + objTree := mock_objecttree.NewMockObjectTree(ctrl) prov := &provider{} defer ctrl.Finish() t.Run("startId is empty", func(t *testing.T) { - ch := &tree.Change{Id: "rootId"} + ch := &objecttree.Change{Id: "rootId"} objTree.EXPECT().Root().Return(ch) objTree.EXPECT().ID().Return("id") objTree.EXPECT().IterateFrom("id", gomock.Any(), gomock.Any()).Return(nil) @@ -85,7 +85,7 @@ func TestProvider_ProvideIds(t *testing.T) { }) t.Run("startId is not empty", func(t *testing.T) { - ch := &tree.Change{Id: "rootId"} + ch := &objecttree.Change{Id: "rootId"} objTree.EXPECT().Root().Return(ch) objTree.EXPECT().IterateFrom("startId", gomock.Any(), gomock.Any()).Return(nil) _, _, err := prov.ProvideIds(objTree, "startId") diff --git a/common/commonspace/settings/mock_settings/mock_settings.go b/common/commonspace/settings/mock_settings/mock_settings.go index c9814bfd..1e24b27f 100644 --- a/common/commonspace/settings/mock_settings/mock_settings.go +++ b/common/commonspace/settings/mock_settings/mock_settings.go @@ -7,7 +7,7 @@ package mock_settings import ( reflect "reflect" - tree "github.com/anytypeio/go-anytype-infrastructure-experiments/common/pkg/acl/tree" + objecttree "github.com/anytypeio/go-anytype-infrastructure-experiments/common/commonspace/object/tree/objecttree" gomock "github.com/golang/mock/gomock" ) @@ -35,7 +35,7 @@ func (m *MockDeletedIdsProvider) EXPECT() *MockDeletedIdsProviderMockRecorder { } // ProvideIds mocks base method. -func (m *MockDeletedIdsProvider) ProvideIds(arg0 tree.ObjectTree, arg1 string) ([]string, string, error) { +func (m *MockDeletedIdsProvider) ProvideIds(arg0 objecttree.ObjectTree, arg1 string) ([]string, string, error) { m.ctrl.T.Helper() ret := m.ctrl.Call(m, "ProvideIds", arg0, arg1) ret0, _ := ret[0].([]string) diff --git a/common/commonspace/settings/mock_settings/mock_settingsdocument.go b/common/commonspace/settings/mock_settings/mock_settingsdocument.go deleted file mode 100644 index c9814bfd..00000000 --- a/common/commonspace/settings/mock_settings/mock_settingsdocument.go +++ /dev/null @@ -1,86 +0,0 @@ -// Code generated by MockGen. DO NOT EDIT. -// Source: github.com/anytypeio/go-anytype-infrastructure-experiments/common/commonspace/settings (interfaces: DeletedIdsProvider,Deleter) - -// Package mock_settings is a generated GoMock package. -package mock_settings - -import ( - reflect "reflect" - - tree "github.com/anytypeio/go-anytype-infrastructure-experiments/common/pkg/acl/tree" - gomock "github.com/golang/mock/gomock" -) - -// MockDeletedIdsProvider is a mock of DeletedIdsProvider interface. -type MockDeletedIdsProvider struct { - ctrl *gomock.Controller - recorder *MockDeletedIdsProviderMockRecorder -} - -// MockDeletedIdsProviderMockRecorder is the mock recorder for MockDeletedIdsProvider. -type MockDeletedIdsProviderMockRecorder struct { - mock *MockDeletedIdsProvider -} - -// NewMockDeletedIdsProvider creates a new mock instance. -func NewMockDeletedIdsProvider(ctrl *gomock.Controller) *MockDeletedIdsProvider { - mock := &MockDeletedIdsProvider{ctrl: ctrl} - mock.recorder = &MockDeletedIdsProviderMockRecorder{mock} - return mock -} - -// EXPECT returns an object that allows the caller to indicate expected use. -func (m *MockDeletedIdsProvider) EXPECT() *MockDeletedIdsProviderMockRecorder { - return m.recorder -} - -// ProvideIds mocks base method. -func (m *MockDeletedIdsProvider) ProvideIds(arg0 tree.ObjectTree, arg1 string) ([]string, string, error) { - m.ctrl.T.Helper() - ret := m.ctrl.Call(m, "ProvideIds", arg0, arg1) - ret0, _ := ret[0].([]string) - ret1, _ := ret[1].(string) - ret2, _ := ret[2].(error) - return ret0, ret1, ret2 -} - -// ProvideIds indicates an expected call of ProvideIds. -func (mr *MockDeletedIdsProviderMockRecorder) ProvideIds(arg0, arg1 interface{}) *gomock.Call { - mr.mock.ctrl.T.Helper() - return mr.mock.ctrl.RecordCallWithMethodType(mr.mock, "ProvideIds", reflect.TypeOf((*MockDeletedIdsProvider)(nil).ProvideIds), arg0, arg1) -} - -// MockDeleter is a mock of Deleter interface. -type MockDeleter struct { - ctrl *gomock.Controller - recorder *MockDeleterMockRecorder -} - -// MockDeleterMockRecorder is the mock recorder for MockDeleter. -type MockDeleterMockRecorder struct { - mock *MockDeleter -} - -// NewMockDeleter creates a new mock instance. -func NewMockDeleter(ctrl *gomock.Controller) *MockDeleter { - mock := &MockDeleter{ctrl: ctrl} - mock.recorder = &MockDeleterMockRecorder{mock} - return mock -} - -// EXPECT returns an object that allows the caller to indicate expected use. -func (m *MockDeleter) EXPECT() *MockDeleterMockRecorder { - return m.recorder -} - -// Delete mocks base method. -func (m *MockDeleter) Delete() { - m.ctrl.T.Helper() - m.ctrl.Call(m, "Delete") -} - -// Delete indicates an expected call of Delete. -func (mr *MockDeleterMockRecorder) Delete() *gomock.Call { - mr.mock.ctrl.T.Helper() - return mr.mock.ctrl.RecordCallWithMethodType(mr.mock, "Delete", reflect.TypeOf((*MockDeleter)(nil).Delete)) -} diff --git a/common/commonspace/settings/settings.go b/common/commonspace/settings/settings.go index 33ce129d..c6396192 100644 --- a/common/commonspace/settings/settings.go +++ b/common/commonspace/settings/settings.go @@ -4,14 +4,14 @@ package settings import ( "context" "errors" - "github.com/anytypeio/go-anytype-infrastructure-experiments/common/account" + "github.com/anytypeio/go-anytype-infrastructure-experiments/common/accountservice" "github.com/anytypeio/go-anytype-infrastructure-experiments/common/app/logger" + "github.com/anytypeio/go-anytype-infrastructure-experiments/common/commonspace/object/tree/objecttree" + "github.com/anytypeio/go-anytype-infrastructure-experiments/common/commonspace/object/tree/synctree" + "github.com/anytypeio/go-anytype-infrastructure-experiments/common/commonspace/object/tree/synctree/updatelistener" + "github.com/anytypeio/go-anytype-infrastructure-experiments/common/commonspace/object/treegetter" "github.com/anytypeio/go-anytype-infrastructure-experiments/common/commonspace/settings/deletionstate" - spacestorage "github.com/anytypeio/go-anytype-infrastructure-experiments/common/commonspace/storage" - "github.com/anytypeio/go-anytype-infrastructure-experiments/common/commonspace/synctree" - "github.com/anytypeio/go-anytype-infrastructure-experiments/common/commonspace/synctree/updatelistener" - "github.com/anytypeio/go-anytype-infrastructure-experiments/common/commonspace/treegetter" - "github.com/anytypeio/go-anytype-infrastructure-experiments/common/pkg/acl/tree" + spacestorage "github.com/anytypeio/go-anytype-infrastructure-experiments/common/commonspace/spacestorage" "go.uber.org/zap" ) @@ -33,7 +33,7 @@ type BuildTreeFunc func(ctx context.Context, id string, listener updatelistener. type Deps struct { BuildFunc BuildTreeFunc - Account account.Service + Account accountservice.Service TreeGetter treegetter.TreeGetter Store spacestorage.SpaceStorage DeletionState deletionstate.DeletionState @@ -44,7 +44,7 @@ type Deps struct { type settingsObject struct { synctree.SyncTree - account account.Service + account accountservice.Service spaceId string treeGetter treegetter.TreeGetter store spacestorage.SpaceStorage @@ -92,7 +92,7 @@ func NewSettingsObject(deps Deps, spaceId string) (obj SettingsObject) { return } -func (s *settingsObject) updateIds(tr tree.ObjectTree, lastChangeId string) { +func (s *settingsObject) updateIds(tr objecttree.ObjectTree, lastChangeId string) { s.lastChangeId = lastChangeId ids, lastId, err := s.prov.ProvideIds(tr, s.lastChangeId) if err != nil { @@ -106,12 +106,12 @@ func (s *settingsObject) updateIds(tr tree.ObjectTree, lastChangeId string) { } // Update is called as part of UpdateListener interface -func (s *settingsObject) Update(tr tree.ObjectTree) { +func (s *settingsObject) Update(tr objecttree.ObjectTree) { s.updateIds(tr, s.lastChangeId) } // Rebuild is called as part of UpdateListener interface (including when the object is built for the first time, e.g. on Init call) -func (s *settingsObject) Rebuild(tr tree.ObjectTree) { +func (s *settingsObject) Rebuild(tr objecttree.ObjectTree) { // at initial build "s" may not contain the object tree, so it is safer to provide it from the function parameter s.updateIds(tr, "") } @@ -157,7 +157,7 @@ func (s *settingsObject) DeleteObject(id string) (err error) { } accountData := s.account.Account() - _, err = s.AddContent(context.Background(), tree.SignableChangeContent{ + _, err = s.AddContent(context.Background(), objecttree.SignableChangeContent{ Data: res, Key: accountData.SignKey, Identity: accountData.Identity, diff --git a/common/commonspace/settings/settings_test.go b/common/commonspace/settings/settings_test.go index ef9d4ac1..45e4e90a 100644 --- a/common/commonspace/settings/settings_test.go +++ b/common/commonspace/settings/settings_test.go @@ -2,16 +2,16 @@ package settings import ( "context" - "github.com/anytypeio/go-anytype-infrastructure-experiments/common/account/mock_account" + "github.com/anytypeio/go-anytype-infrastructure-experiments/common/accountservice/mock_accountservice" + "github.com/anytypeio/go-anytype-infrastructure-experiments/common/commonspace/object/accountdata" + "github.com/anytypeio/go-anytype-infrastructure-experiments/common/commonspace/object/tree/objecttree" + "github.com/anytypeio/go-anytype-infrastructure-experiments/common/commonspace/object/tree/synctree" + "github.com/anytypeio/go-anytype-infrastructure-experiments/common/commonspace/object/tree/synctree/mock_synctree" + "github.com/anytypeio/go-anytype-infrastructure-experiments/common/commonspace/object/tree/synctree/updatelistener" + "github.com/anytypeio/go-anytype-infrastructure-experiments/common/commonspace/object/treegetter/mock_treegetter" "github.com/anytypeio/go-anytype-infrastructure-experiments/common/commonspace/settings/deletionstate/mock_deletionstate" "github.com/anytypeio/go-anytype-infrastructure-experiments/common/commonspace/settings/mock_settings" - "github.com/anytypeio/go-anytype-infrastructure-experiments/common/commonspace/storage/mock_storage" - "github.com/anytypeio/go-anytype-infrastructure-experiments/common/commonspace/synctree" - "github.com/anytypeio/go-anytype-infrastructure-experiments/common/commonspace/synctree/mock_synctree" - "github.com/anytypeio/go-anytype-infrastructure-experiments/common/commonspace/synctree/updatelistener" - "github.com/anytypeio/go-anytype-infrastructure-experiments/common/commonspace/treegetter/mock_treegetter" - "github.com/anytypeio/go-anytype-infrastructure-experiments/common/pkg/acl/account" - "github.com/anytypeio/go-anytype-infrastructure-experiments/common/pkg/acl/tree" + "github.com/anytypeio/go-anytype-infrastructure-experiments/common/commonspace/spacestorage/mock_spacestorage" "github.com/anytypeio/go-anytype-infrastructure-experiments/common/util/keys/asymmetric/signingkey" "github.com/golang/mock/gomock" "github.com/stretchr/testify/require" @@ -45,12 +45,12 @@ type settingsFixture struct { doc *settingsObject ctrl *gomock.Controller treeGetter *mock_treegetter.MockTreeGetter - spaceStorage *mock_storage.MockSpaceStorage + spaceStorage *mock_spacestorage.MockSpaceStorage provider *mock_settings.MockDeletedIdsProvider deleter *mock_settings.MockDeleter syncTree *mock_synctree.MockSyncTree delState *mock_deletionstate.MockDeletionState - account *mock_account.MockService + account *mock_accountservice.MockService } func newSettingsFixture(t *testing.T) *settingsFixture { @@ -58,9 +58,9 @@ func newSettingsFixture(t *testing.T) *settingsFixture { objectId := "objectId" ctrl := gomock.NewController(t) - acc := mock_account.NewMockService(ctrl) + acc := mock_accountservice.NewMockService(ctrl) treeGetter := mock_treegetter.NewMockTreeGetter(ctrl) - st := mock_storage.NewMockSpaceStorage(ctrl) + st := mock_spacestorage.NewMockSpaceStorage(ctrl) delState := mock_deletionstate.NewMockDeletionState(ctrl) prov := mock_settings.NewMockDeletedIdsProvider(ctrl) syncTree := mock_synctree.NewMockSyncTree(ctrl) @@ -135,20 +135,20 @@ func TestSettingsObject_DeleteObject(t *testing.T) { res := []byte("settingsData") fx.delState.EXPECT().CreateDeleteChange(delId, false).Return(res, nil) - accountData := &account.AccountData{ + accountData := &accountdata.AccountData{ Identity: []byte("id"), PeerKey: nil, SignKey: &signingkey.Ed25519PrivateKey{}, EncKey: nil, } fx.account.EXPECT().Account().Return(accountData) - fx.syncTree.EXPECT().AddContent(gomock.Any(), tree.SignableChangeContent{ + fx.syncTree.EXPECT().AddContent(gomock.Any(), objecttree.SignableChangeContent{ Data: res, Key: accountData.SignKey, Identity: accountData.Identity, IsSnapshot: false, IsEncrypted: false, - }).Return(tree.AddResult{}, nil) + }).Return(objecttree.AddResult{}, nil) lastChangeId := "someId" retIds := []string{"id1", "id2"} diff --git a/common/commonspace/space.go b/common/commonspace/space.go index 09e11ebb..43f99cea 100644 --- a/common/commonspace/space.go +++ b/common/commonspace/space.go @@ -4,22 +4,22 @@ import ( "context" "errors" "fmt" - "github.com/anytypeio/go-anytype-infrastructure-experiments/common/account" + "github.com/anytypeio/go-anytype-infrastructure-experiments/common/accountservice" + "github.com/anytypeio/go-anytype-infrastructure-experiments/common/app/ocache" "github.com/anytypeio/go-anytype-infrastructure-experiments/common/commonspace/headsync" + "github.com/anytypeio/go-anytype-infrastructure-experiments/common/commonspace/object/acl/list" + "github.com/anytypeio/go-anytype-infrastructure-experiments/common/commonspace/object/acl/syncacl" + "github.com/anytypeio/go-anytype-infrastructure-experiments/common/commonspace/object/tree/objecttree" + "github.com/anytypeio/go-anytype-infrastructure-experiments/common/commonspace/object/tree/synctree" + "github.com/anytypeio/go-anytype-infrastructure-experiments/common/commonspace/object/tree/synctree/updatelistener" + "github.com/anytypeio/go-anytype-infrastructure-experiments/common/commonspace/object/treegetter" + "github.com/anytypeio/go-anytype-infrastructure-experiments/common/commonspace/objectsync" "github.com/anytypeio/go-anytype-infrastructure-experiments/common/commonspace/settings" "github.com/anytypeio/go-anytype-infrastructure-experiments/common/commonspace/settings/deletionstate" + "github.com/anytypeio/go-anytype-infrastructure-experiments/common/commonspace/spacestorage" "github.com/anytypeio/go-anytype-infrastructure-experiments/common/commonspace/spacesyncproto" - "github.com/anytypeio/go-anytype-infrastructure-experiments/common/commonspace/storage" - "github.com/anytypeio/go-anytype-infrastructure-experiments/common/commonspace/syncacl" - "github.com/anytypeio/go-anytype-infrastructure-experiments/common/commonspace/syncservice" "github.com/anytypeio/go-anytype-infrastructure-experiments/common/commonspace/syncstatus" - "github.com/anytypeio/go-anytype-infrastructure-experiments/common/commonspace/synctree" - "github.com/anytypeio/go-anytype-infrastructure-experiments/common/commonspace/synctree/updatelistener" - "github.com/anytypeio/go-anytype-infrastructure-experiments/common/commonspace/treegetter" "github.com/anytypeio/go-anytype-infrastructure-experiments/common/nodeconf" - "github.com/anytypeio/go-anytype-infrastructure-experiments/common/pkg/acl/list" - "github.com/anytypeio/go-anytype-infrastructure-experiments/common/pkg/acl/tree" - "github.com/anytypeio/go-anytype-infrastructure-experiments/common/pkg/ocache" "github.com/anytypeio/go-anytype-infrastructure-experiments/common/util/keys/asymmetric/encryptionkey" "github.com/anytypeio/go-anytype-infrastructure-experiments/common/util/keys/asymmetric/signingkey" "github.com/zeebo/errs" @@ -76,12 +76,12 @@ type Space interface { SpaceSyncRpc() RpcHandler - DeriveTree(ctx context.Context, payload tree.ObjectTreeCreatePayload) (string, error) - CreateTree(ctx context.Context, payload tree.ObjectTreeCreatePayload) (string, error) - BuildTree(ctx context.Context, id string, listener updatelistener.UpdateListener) (tree.ObjectTree, error) + DeriveTree(ctx context.Context, payload objecttree.ObjectTreeCreatePayload) (string, error) + CreateTree(ctx context.Context, payload objecttree.ObjectTreeCreatePayload) (string, error) + BuildTree(ctx context.Context, id string, listener updatelistener.UpdateListener) (objecttree.ObjectTree, error) DeleteTree(ctx context.Context, id string) (err error) - StatusService() syncstatus.SyncStatusUpdater + SyncStatus() syncstatus.SyncStatusUpdater Close() error } @@ -93,12 +93,12 @@ type space struct { rpc *rpcHandler - objectSync syncservice.SyncService + objectSync objectsync.ObjectSync headSync headsync.HeadSync syncStatus syncstatus.SyncStatusUpdater - storage storage.SpaceStorage + storage spacestorage.SpaceStorage cache treegetter.TreeGetter - account account.Service + account accountservice.Service aclList *syncacl.SyncACL configuration nodeconf.Configuration settingsObject settings.SettingsObject @@ -199,7 +199,7 @@ func (s *space) SpaceSyncRpc() RpcHandler { return s.rpc } -func (s *space) ObjectSync() syncservice.SyncService { +func (s *space) ObjectSync() objectsync.ObjectSync { return s.objectSync } @@ -207,7 +207,7 @@ func (s *space) HeadSync() headsync.HeadSync { return s.headSync } -func (s *space) StatusService() syncstatus.SyncStatusUpdater { +func (s *space) SyncStatus() syncstatus.SyncStatusUpdater { return s.syncStatus } @@ -219,7 +219,7 @@ func (s *space) DebugAllHeads() []headsync.TreeHeads { return s.headSync.DebugAllHeads() } -func (s *space) DeriveTree(ctx context.Context, payload tree.ObjectTreeCreatePayload) (id string, err error) { +func (s *space) DeriveTree(ctx context.Context, payload objecttree.ObjectTreeCreatePayload) (id string, err error) { if s.isClosed.Load() { err = ErrSpaceClosed return @@ -227,7 +227,7 @@ func (s *space) DeriveTree(ctx context.Context, payload tree.ObjectTreeCreatePay deps := synctree.CreateDeps{ SpaceId: s.id, Payload: payload, - SyncService: s.objectSync, + ObjectSync: s.objectSync, Configuration: s.configuration, AclList: s.aclList, SpaceStorage: s.storage, @@ -237,7 +237,7 @@ func (s *space) DeriveTree(ctx context.Context, payload tree.ObjectTreeCreatePay return synctree.DeriveSyncTree(ctx, deps) } -func (s *space) CreateTree(ctx context.Context, payload tree.ObjectTreeCreatePayload) (id string, err error) { +func (s *space) CreateTree(ctx context.Context, payload objecttree.ObjectTreeCreatePayload) (id string, err error) { if s.isClosed.Load() { err = ErrSpaceClosed return @@ -245,7 +245,7 @@ func (s *space) CreateTree(ctx context.Context, payload tree.ObjectTreeCreatePay deps := synctree.CreateDeps{ SpaceId: s.id, Payload: payload, - SyncService: s.objectSync, + ObjectSync: s.objectSync, Configuration: s.configuration, AclList: s.aclList, SpaceStorage: s.storage, @@ -255,14 +255,14 @@ func (s *space) CreateTree(ctx context.Context, payload tree.ObjectTreeCreatePay return synctree.CreateSyncTree(ctx, deps) } -func (s *space) BuildTree(ctx context.Context, id string, listener updatelistener.UpdateListener) (t tree.ObjectTree, err error) { +func (s *space) BuildTree(ctx context.Context, id string, listener updatelistener.UpdateListener) (t objecttree.ObjectTree, err error) { if s.isClosed.Load() { err = ErrSpaceClosed return } deps := synctree.BuildDeps{ SpaceId: s.id, - SyncService: s.objectSync, + ObjectSync: s.objectSync, Configuration: s.configuration, HeadNotifiable: s.headSync, Listener: listener, diff --git a/common/commonspace/service.go b/common/commonspace/spaceservice.go similarity index 76% rename from common/commonspace/service.go rename to common/commonspace/spaceservice.go index 5b0f443b..914fd950 100644 --- a/common/commonspace/service.go +++ b/common/commonspace/spaceservice.go @@ -2,66 +2,66 @@ package commonspace import ( "context" - "github.com/anytypeio/go-anytype-infrastructure-experiments/common/account" + "github.com/anytypeio/go-anytype-infrastructure-experiments/common/accountservice" "github.com/anytypeio/go-anytype-infrastructure-experiments/common/app" "github.com/anytypeio/go-anytype-infrastructure-experiments/common/app/logger" "github.com/anytypeio/go-anytype-infrastructure-experiments/common/commonspace/headsync" + "github.com/anytypeio/go-anytype-infrastructure-experiments/common/commonspace/object/acl/aclrecordproto" + "github.com/anytypeio/go-anytype-infrastructure-experiments/common/commonspace/object/tree/treechangeproto" + "github.com/anytypeio/go-anytype-infrastructure-experiments/common/commonspace/object/treegetter" + "github.com/anytypeio/go-anytype-infrastructure-experiments/common/commonspace/objectsync" + "github.com/anytypeio/go-anytype-infrastructure-experiments/common/commonspace/spacestorage" "github.com/anytypeio/go-anytype-infrastructure-experiments/common/commonspace/spacesyncproto" - "github.com/anytypeio/go-anytype-infrastructure-experiments/common/commonspace/storage" - "github.com/anytypeio/go-anytype-infrastructure-experiments/common/commonspace/syncservice" "github.com/anytypeio/go-anytype-infrastructure-experiments/common/commonspace/syncstatus" - "github.com/anytypeio/go-anytype-infrastructure-experiments/common/commonspace/treegetter" "github.com/anytypeio/go-anytype-infrastructure-experiments/common/config" "github.com/anytypeio/go-anytype-infrastructure-experiments/common/net/peer" "github.com/anytypeio/go-anytype-infrastructure-experiments/common/net/pool" "github.com/anytypeio/go-anytype-infrastructure-experiments/common/nodeconf" - "github.com/anytypeio/go-anytype-infrastructure-experiments/common/pkg/acl/aclrecordproto" - "github.com/anytypeio/go-anytype-infrastructure-experiments/common/pkg/acl/treechangeproto" ) const CName = "common.commonspace" var log = logger.NewNamed(CName) -func New() Service { - return &service{} +func New() SpaceService { + return &spaceService{} } type ctxKey int const AddSpaceCtxKey ctxKey = 0 -type Service interface { +type SpaceService interface { DeriveSpace(ctx context.Context, payload SpaceDerivePayload) (string, error) CreateSpace(ctx context.Context, payload SpaceCreatePayload) (string, error) NewSpace(ctx context.Context, id string) (sp Space, err error) app.Component } -type service struct { +type spaceService struct { config config.Space - account account.Service + account accountservice.Service configurationService nodeconf.Service - storageProvider storage.SpaceStorageProvider + storageProvider spacestorage.SpaceStorageProvider treeGetter treegetter.TreeGetter pool pool.Pool } -func (s *service) Init(a *app.App) (err error) { +func (s *spaceService) Init(a *app.App) (err error) { s.config = a.MustComponent(config.CName).(*config.Config).Space - s.account = a.MustComponent(account.CName).(account.Service) - s.storageProvider = a.MustComponent(storage.CName).(storage.SpaceStorageProvider) + s.account = a.MustComponent(accountservice.CName).(accountservice.Service) + s.storageProvider = a.MustComponent(spacestorage.CName).(spacestorage.SpaceStorageProvider) s.configurationService = a.MustComponent(nodeconf.CName).(nodeconf.Service) s.treeGetter = a.MustComponent(treegetter.CName).(treegetter.TreeGetter) s.pool = a.MustComponent(pool.CName).(pool.Pool) return nil } -func (s *service) Name() (name string) { +func (s *spaceService) Name() (name string) { return CName } -func (s *service) CreateSpace(ctx context.Context, payload SpaceCreatePayload) (id string, err error) { +func (s *spaceService) CreateSpace(ctx context.Context, payload SpaceCreatePayload) (id string, err error) { storageCreate, err := storagePayloadForSpaceCreate(payload) if err != nil { return @@ -74,7 +74,7 @@ func (s *service) CreateSpace(ctx context.Context, payload SpaceCreatePayload) ( return store.Id(), nil } -func (s *service) DeriveSpace(ctx context.Context, payload SpaceDerivePayload) (id string, err error) { +func (s *spaceService) DeriveSpace(ctx context.Context, payload SpaceDerivePayload) (id string, err error) { storageCreate, err := storagePayloadForSpaceDerive(payload) if err != nil { return @@ -87,10 +87,10 @@ func (s *service) DeriveSpace(ctx context.Context, payload SpaceDerivePayload) ( return store.Id(), nil } -func (s *service) NewSpace(ctx context.Context, id string) (Space, error) { +func (s *spaceService) NewSpace(ctx context.Context, id string) (Space, error) { st, err := s.storageProvider.SpaceStorage(id) if err != nil { - if err != storage.ErrSpaceStorageMissing { + if err != spacestorage.ErrSpaceStorageMissing { return nil, err } @@ -118,7 +118,7 @@ func (s *service) NewSpace(ctx context.Context, id string) (Space, error) { } headSync := headsync.NewHeadSync(id, s.config.SyncPeriod, st, confConnector, s.treeGetter, syncStatus, log) - objectSync := syncservice.NewSyncService(id, confConnector, s.config.SyncPeriod) + objectSync := objectsync.NewObjectSync(id, confConnector, s.config.SyncPeriod) sp := &space{ id: id, objectSync: objectSync, @@ -132,8 +132,8 @@ func (s *service) NewSpace(ctx context.Context, id string) (Space, error) { return sp, nil } -func (s *service) addSpaceStorage(ctx context.Context, spaceDescription SpaceDescription) (st storage.SpaceStorage, err error) { - payload := storage.SpaceStorageCreatePayload{ +func (s *spaceService) addSpaceStorage(ctx context.Context, spaceDescription SpaceDescription) (st spacestorage.SpaceStorage, err error) { + payload := spacestorage.SpaceStorageCreatePayload{ AclWithId: &aclrecordproto.RawACLRecordWithId{ Payload: spaceDescription.AclPayload, Id: spaceDescription.AclId, @@ -147,7 +147,7 @@ func (s *service) addSpaceStorage(ctx context.Context, spaceDescription SpaceDes st, err = s.storageProvider.CreateSpaceStorage(payload) if err != nil { err = spacesyncproto.ErrUnexpected - if err == storage.ErrSpaceStorageExists { + if err == spacestorage.ErrSpaceStorageExists { err = spacesyncproto.ErrSpaceExists } return @@ -155,7 +155,7 @@ func (s *service) addSpaceStorage(ctx context.Context, spaceDescription SpaceDes return } -func (s *service) getSpaceStorageFromRemote(ctx context.Context, id string) (st storage.SpaceStorage, err error) { +func (s *spaceService) getSpaceStorageFromRemote(ctx context.Context, id string) (st spacestorage.SpaceStorage, err error) { var p peer.Peer lastConfiguration := s.configurationService.GetLast() // we can't connect to client if it is a node @@ -175,7 +175,7 @@ func (s *service) getSpaceStorageFromRemote(ctx context.Context, id string) (st return } - st, err = s.storageProvider.CreateSpaceStorage(storage.SpaceStorageCreatePayload{ + st, err = s.storageProvider.CreateSpaceStorage(spacestorage.SpaceStorageCreatePayload{ AclWithId: &aclrecordproto.RawACLRecordWithId{ Payload: res.Payload.AclPayload, Id: res.Payload.AclPayloadId, diff --git a/common/commonspace/storage/mock_storage/mock_storage.go b/common/commonspace/spacestorage/mock_spacestorage/mock_storage.go similarity index 93% rename from common/commonspace/storage/mock_storage/mock_storage.go rename to common/commonspace/spacestorage/mock_spacestorage/mock_storage.go index c8ab901e..9ce586a8 100644 --- a/common/commonspace/storage/mock_storage/mock_storage.go +++ b/common/commonspace/spacestorage/mock_spacestorage/mock_storage.go @@ -2,15 +2,16 @@ // Source: github.com/anytypeio/go-anytype-infrastructure-experiments/common/commonspace/storage (interfaces: SpaceStorageProvider,SpaceStorage) // Package mock_storage is a generated GoMock package. -package mock_storage +package mock_spacestorage import ( + "github.com/anytypeio/go-anytype-infrastructure-experiments/common/commonspace/object/acl/liststorage" + storage3 "github.com/anytypeio/go-anytype-infrastructure-experiments/common/commonspace/object/tree/treestorage" reflect "reflect" app "github.com/anytypeio/go-anytype-infrastructure-experiments/common/app" + storage "github.com/anytypeio/go-anytype-infrastructure-experiments/common/commonspace/spacestorage" spacesyncproto "github.com/anytypeio/go-anytype-infrastructure-experiments/common/commonspace/spacesyncproto" - storage "github.com/anytypeio/go-anytype-infrastructure-experiments/common/commonspace/storage" - storage0 "github.com/anytypeio/go-anytype-infrastructure-experiments/common/pkg/acl/storage" gomock "github.com/golang/mock/gomock" ) @@ -119,10 +120,10 @@ func (m *MockSpaceStorage) EXPECT() *MockSpaceStorageMockRecorder { } // ACLStorage mocks base method. -func (m *MockSpaceStorage) ACLStorage() (storage0.ListStorage, error) { +func (m *MockSpaceStorage) ACLStorage() (liststorage.ListStorage, error) { m.ctrl.T.Helper() ret := m.ctrl.Call(m, "ACLStorage") - ret0, _ := ret[0].(storage0.ListStorage) + ret0, _ := ret[0].(liststorage.ListStorage) ret1, _ := ret[1].(error) return ret0, ret1 } @@ -148,10 +149,10 @@ func (mr *MockSpaceStorageMockRecorder) Close() *gomock.Call { } // CreateTreeStorage mocks base method. -func (m *MockSpaceStorage) CreateTreeStorage(arg0 storage0.TreeStorageCreatePayload) (storage0.TreeStorage, error) { +func (m *MockSpaceStorage) CreateTreeStorage(arg0 storage3.TreeStorageCreatePayload) (storage3.TreeStorage, error) { m.ctrl.T.Helper() ret := m.ctrl.Call(m, "CreateTreeStorage", arg0) - ret0, _ := ret[0].(storage0.TreeStorage) + ret0, _ := ret[0].(storage3.TreeStorage) ret1, _ := ret[1].(error) return ret0, ret1 } @@ -250,10 +251,10 @@ func (mr *MockSpaceStorageMockRecorder) TreeDeletedStatus(arg0 interface{}) *gom } // TreeStorage mocks base method. -func (m *MockSpaceStorage) TreeStorage(arg0 string) (storage0.TreeStorage, error) { +func (m *MockSpaceStorage) TreeStorage(arg0 string) (storage3.TreeStorage, error) { m.ctrl.T.Helper() ret := m.ctrl.Call(m, "TreeStorage", arg0) - ret0, _ := ret[0].(storage0.TreeStorage) + ret0, _ := ret[0].(storage3.TreeStorage) ret1, _ := ret[1].(error) return ret0, ret1 } diff --git a/common/commonspace/spacestorage/mock_storage/mock_storage.go b/common/commonspace/spacestorage/mock_storage/mock_storage.go new file mode 100644 index 00000000..b9b71ae5 --- /dev/null +++ b/common/commonspace/spacestorage/mock_storage/mock_storage.go @@ -0,0 +1,266 @@ +// Code generated by MockGen. DO NOT EDIT. +// Source: github.com/anytypeio/go-anytype-infrastructure-experiments/common/commonspace/spacestorage (interfaces: SpaceStorageProvider,SpaceStorage) + +// Package mock_spacestorage is a generated GoMock package. +package mock_spacestorage + +import ( + reflect "reflect" + + app "github.com/anytypeio/go-anytype-infrastructure-experiments/common/app" + liststorage "github.com/anytypeio/go-anytype-infrastructure-experiments/common/commonspace/object/acl/liststorage" + treestorage "github.com/anytypeio/go-anytype-infrastructure-experiments/common/commonspace/object/tree/treestorage" + spacestorage "github.com/anytypeio/go-anytype-infrastructure-experiments/common/commonspace/spacestorage" + spacesyncproto "github.com/anytypeio/go-anytype-infrastructure-experiments/common/commonspace/spacesyncproto" + gomock "github.com/golang/mock/gomock" +) + +// MockSpaceStorageProvider is a mock of SpaceStorageProvider interface. +type MockSpaceStorageProvider struct { + ctrl *gomock.Controller + recorder *MockSpaceStorageProviderMockRecorder +} + +// MockSpaceStorageProviderMockRecorder is the mock recorder for MockSpaceStorageProvider. +type MockSpaceStorageProviderMockRecorder struct { + mock *MockSpaceStorageProvider +} + +// NewMockSpaceStorageProvider creates a new mock instance. +func NewMockSpaceStorageProvider(ctrl *gomock.Controller) *MockSpaceStorageProvider { + mock := &MockSpaceStorageProvider{ctrl: ctrl} + mock.recorder = &MockSpaceStorageProviderMockRecorder{mock} + return mock +} + +// EXPECT returns an object that allows the caller to indicate expected use. +func (m *MockSpaceStorageProvider) EXPECT() *MockSpaceStorageProviderMockRecorder { + return m.recorder +} + +// CreateSpaceStorage mocks base method. +func (m *MockSpaceStorageProvider) CreateSpaceStorage(arg0 spacestorage.SpaceStorageCreatePayload) (spacestorage.SpaceStorage, error) { + m.ctrl.T.Helper() + ret := m.ctrl.Call(m, "CreateSpaceStorage", arg0) + ret0, _ := ret[0].(spacestorage.SpaceStorage) + ret1, _ := ret[1].(error) + return ret0, ret1 +} + +// CreateSpaceStorage indicates an expected call of CreateSpaceStorage. +func (mr *MockSpaceStorageProviderMockRecorder) CreateSpaceStorage(arg0 interface{}) *gomock.Call { + mr.mock.ctrl.T.Helper() + return mr.mock.ctrl.RecordCallWithMethodType(mr.mock, "CreateSpaceStorage", reflect.TypeOf((*MockSpaceStorageProvider)(nil).CreateSpaceStorage), arg0) +} + +// Init mocks base method. +func (m *MockSpaceStorageProvider) Init(arg0 *app.App) error { + m.ctrl.T.Helper() + ret := m.ctrl.Call(m, "Init", arg0) + ret0, _ := ret[0].(error) + return ret0 +} + +// Init indicates an expected call of Init. +func (mr *MockSpaceStorageProviderMockRecorder) Init(arg0 interface{}) *gomock.Call { + mr.mock.ctrl.T.Helper() + return mr.mock.ctrl.RecordCallWithMethodType(mr.mock, "Init", reflect.TypeOf((*MockSpaceStorageProvider)(nil).Init), arg0) +} + +// Name mocks base method. +func (m *MockSpaceStorageProvider) Name() string { + m.ctrl.T.Helper() + ret := m.ctrl.Call(m, "Name") + ret0, _ := ret[0].(string) + return ret0 +} + +// Name indicates an expected call of Name. +func (mr *MockSpaceStorageProviderMockRecorder) Name() *gomock.Call { + mr.mock.ctrl.T.Helper() + return mr.mock.ctrl.RecordCallWithMethodType(mr.mock, "Name", reflect.TypeOf((*MockSpaceStorageProvider)(nil).Name)) +} + +// SpaceStorage mocks base method. +func (m *MockSpaceStorageProvider) SpaceStorage(arg0 string) (spacestorage.SpaceStorage, error) { + m.ctrl.T.Helper() + ret := m.ctrl.Call(m, "SpaceStorage", arg0) + ret0, _ := ret[0].(spacestorage.SpaceStorage) + ret1, _ := ret[1].(error) + return ret0, ret1 +} + +// SpaceStorage indicates an expected call of SpaceStorage. +func (mr *MockSpaceStorageProviderMockRecorder) SpaceStorage(arg0 interface{}) *gomock.Call { + mr.mock.ctrl.T.Helper() + return mr.mock.ctrl.RecordCallWithMethodType(mr.mock, "SpaceStorage", reflect.TypeOf((*MockSpaceStorageProvider)(nil).SpaceStorage), arg0) +} + +// MockSpaceStorage is a mock of SpaceStorage interface. +type MockSpaceStorage struct { + ctrl *gomock.Controller + recorder *MockSpaceStorageMockRecorder +} + +// MockSpaceStorageMockRecorder is the mock recorder for MockSpaceStorage. +type MockSpaceStorageMockRecorder struct { + mock *MockSpaceStorage +} + +// NewMockSpaceStorage creates a new mock instance. +func NewMockSpaceStorage(ctrl *gomock.Controller) *MockSpaceStorage { + mock := &MockSpaceStorage{ctrl: ctrl} + mock.recorder = &MockSpaceStorageMockRecorder{mock} + return mock +} + +// EXPECT returns an object that allows the caller to indicate expected use. +func (m *MockSpaceStorage) EXPECT() *MockSpaceStorageMockRecorder { + return m.recorder +} + +// ACLStorage mocks base method. +func (m *MockSpaceStorage) ACLStorage() (liststorage.ListStorage, error) { + m.ctrl.T.Helper() + ret := m.ctrl.Call(m, "ACLStorage") + ret0, _ := ret[0].(liststorage.ListStorage) + ret1, _ := ret[1].(error) + return ret0, ret1 +} + +// ACLStorage indicates an expected call of ACLStorage. +func (mr *MockSpaceStorageMockRecorder) ACLStorage() *gomock.Call { + mr.mock.ctrl.T.Helper() + return mr.mock.ctrl.RecordCallWithMethodType(mr.mock, "ACLStorage", reflect.TypeOf((*MockSpaceStorage)(nil).ACLStorage)) +} + +// Close mocks base method. +func (m *MockSpaceStorage) Close() error { + m.ctrl.T.Helper() + ret := m.ctrl.Call(m, "Close") + ret0, _ := ret[0].(error) + return ret0 +} + +// Close indicates an expected call of Close. +func (mr *MockSpaceStorageMockRecorder) Close() *gomock.Call { + mr.mock.ctrl.T.Helper() + return mr.mock.ctrl.RecordCallWithMethodType(mr.mock, "Close", reflect.TypeOf((*MockSpaceStorage)(nil).Close)) +} + +// CreateTreeStorage mocks base method. +func (m *MockSpaceStorage) CreateTreeStorage(arg0 treestorage.TreeStorageCreatePayload) (treestorage.TreeStorage, error) { + m.ctrl.T.Helper() + ret := m.ctrl.Call(m, "CreateTreeStorage", arg0) + ret0, _ := ret[0].(treestorage.TreeStorage) + ret1, _ := ret[1].(error) + return ret0, ret1 +} + +// CreateTreeStorage indicates an expected call of CreateTreeStorage. +func (mr *MockSpaceStorageMockRecorder) CreateTreeStorage(arg0 interface{}) *gomock.Call { + mr.mock.ctrl.T.Helper() + return mr.mock.ctrl.RecordCallWithMethodType(mr.mock, "CreateTreeStorage", reflect.TypeOf((*MockSpaceStorage)(nil).CreateTreeStorage), arg0) +} + +// Id mocks base method. +func (m *MockSpaceStorage) Id() string { + m.ctrl.T.Helper() + ret := m.ctrl.Call(m, "Id") + ret0, _ := ret[0].(string) + return ret0 +} + +// Id indicates an expected call of Id. +func (mr *MockSpaceStorageMockRecorder) Id() *gomock.Call { + mr.mock.ctrl.T.Helper() + return mr.mock.ctrl.RecordCallWithMethodType(mr.mock, "Id", reflect.TypeOf((*MockSpaceStorage)(nil).Id)) +} + +// SetTreeDeletedStatus mocks base method. +func (m *MockSpaceStorage) SetTreeDeletedStatus(arg0, arg1 string) error { + m.ctrl.T.Helper() + ret := m.ctrl.Call(m, "SetTreeDeletedStatus", arg0, arg1) + ret0, _ := ret[0].(error) + return ret0 +} + +// SetTreeDeletedStatus indicates an expected call of SetTreeDeletedStatus. +func (mr *MockSpaceStorageMockRecorder) SetTreeDeletedStatus(arg0, arg1 interface{}) *gomock.Call { + mr.mock.ctrl.T.Helper() + return mr.mock.ctrl.RecordCallWithMethodType(mr.mock, "SetTreeDeletedStatus", reflect.TypeOf((*MockSpaceStorage)(nil).SetTreeDeletedStatus), arg0, arg1) +} + +// SpaceHeader mocks base method. +func (m *MockSpaceStorage) SpaceHeader() (*spacesyncproto.RawSpaceHeaderWithId, error) { + m.ctrl.T.Helper() + ret := m.ctrl.Call(m, "SpaceHeader") + ret0, _ := ret[0].(*spacesyncproto.RawSpaceHeaderWithId) + ret1, _ := ret[1].(error) + return ret0, ret1 +} + +// SpaceHeader indicates an expected call of SpaceHeader. +func (mr *MockSpaceStorageMockRecorder) SpaceHeader() *gomock.Call { + mr.mock.ctrl.T.Helper() + return mr.mock.ctrl.RecordCallWithMethodType(mr.mock, "SpaceHeader", reflect.TypeOf((*MockSpaceStorage)(nil).SpaceHeader)) +} + +// SpaceSettingsId mocks base method. +func (m *MockSpaceStorage) SpaceSettingsId() string { + m.ctrl.T.Helper() + ret := m.ctrl.Call(m, "SpaceSettingsId") + ret0, _ := ret[0].(string) + return ret0 +} + +// SpaceSettingsId indicates an expected call of SpaceSettingsId. +func (mr *MockSpaceStorageMockRecorder) SpaceSettingsId() *gomock.Call { + mr.mock.ctrl.T.Helper() + return mr.mock.ctrl.RecordCallWithMethodType(mr.mock, "SpaceSettingsId", reflect.TypeOf((*MockSpaceStorage)(nil).SpaceSettingsId)) +} + +// StoredIds mocks base method. +func (m *MockSpaceStorage) StoredIds() ([]string, error) { + m.ctrl.T.Helper() + ret := m.ctrl.Call(m, "StoredIds") + ret0, _ := ret[0].([]string) + ret1, _ := ret[1].(error) + return ret0, ret1 +} + +// StoredIds indicates an expected call of StoredIds. +func (mr *MockSpaceStorageMockRecorder) StoredIds() *gomock.Call { + mr.mock.ctrl.T.Helper() + return mr.mock.ctrl.RecordCallWithMethodType(mr.mock, "StoredIds", reflect.TypeOf((*MockSpaceStorage)(nil).StoredIds)) +} + +// TreeDeletedStatus mocks base method. +func (m *MockSpaceStorage) TreeDeletedStatus(arg0 string) (string, error) { + m.ctrl.T.Helper() + ret := m.ctrl.Call(m, "TreeDeletedStatus", arg0) + ret0, _ := ret[0].(string) + ret1, _ := ret[1].(error) + return ret0, ret1 +} + +// TreeDeletedStatus indicates an expected call of TreeDeletedStatus. +func (mr *MockSpaceStorageMockRecorder) TreeDeletedStatus(arg0 interface{}) *gomock.Call { + mr.mock.ctrl.T.Helper() + return mr.mock.ctrl.RecordCallWithMethodType(mr.mock, "TreeDeletedStatus", reflect.TypeOf((*MockSpaceStorage)(nil).TreeDeletedStatus), arg0) +} + +// TreeStorage mocks base method. +func (m *MockSpaceStorage) TreeStorage(arg0 string) (treestorage.TreeStorage, error) { + m.ctrl.T.Helper() + ret := m.ctrl.Call(m, "TreeStorage", arg0) + ret0, _ := ret[0].(treestorage.TreeStorage) + ret1, _ := ret[1].(error) + return ret0, ret1 +} + +// TreeStorage indicates an expected call of TreeStorage. +func (mr *MockSpaceStorageMockRecorder) TreeStorage(arg0 interface{}) *gomock.Call { + mr.mock.ctrl.T.Helper() + return mr.mock.ctrl.RecordCallWithMethodType(mr.mock, "TreeStorage", reflect.TypeOf((*MockSpaceStorage)(nil).TreeStorage), arg0) +} diff --git a/common/commonspace/storage/storage.go b/common/commonspace/spacestorage/storage.go similarity index 79% rename from common/commonspace/storage/storage.go rename to common/commonspace/spacestorage/storage.go index bbca9c55..21716aaa 100644 --- a/common/commonspace/storage/storage.go +++ b/common/commonspace/spacestorage/storage.go @@ -1,16 +1,17 @@ -//go:generate mockgen -destination mock_storage/mock_storage.go github.com/anytypeio/go-anytype-infrastructure-experiments/common/commonspace/storage SpaceStorageProvider,SpaceStorage -package storage +//go:generate mockgen -destination mock_storage/mock_storage.go github.com/anytypeio/go-anytype-infrastructure-experiments/common/commonspace/spacestorage SpaceStorageProvider,SpaceStorage +package spacestorage import ( "errors" "github.com/anytypeio/go-anytype-infrastructure-experiments/common/app" + "github.com/anytypeio/go-anytype-infrastructure-experiments/common/commonspace/object/acl/aclrecordproto" + "github.com/anytypeio/go-anytype-infrastructure-experiments/common/commonspace/object/acl/liststorage" + "github.com/anytypeio/go-anytype-infrastructure-experiments/common/commonspace/object/tree/treechangeproto" + "github.com/anytypeio/go-anytype-infrastructure-experiments/common/commonspace/object/tree/treestorage" "github.com/anytypeio/go-anytype-infrastructure-experiments/common/commonspace/spacesyncproto" - "github.com/anytypeio/go-anytype-infrastructure-experiments/common/pkg/acl/aclrecordproto" - "github.com/anytypeio/go-anytype-infrastructure-experiments/common/pkg/acl/storage" - "github.com/anytypeio/go-anytype-infrastructure-experiments/common/pkg/acl/treechangeproto" ) -const CName = "commonspace.storage" +const CName = "commonspace.spacestorage" var ( ErrSpaceStorageExists = errors.New("space storage exists") @@ -25,12 +26,12 @@ const ( ) type SpaceStorage interface { - storage.Provider + treestorage.Provider Id() string SetTreeDeletedStatus(id, state string) error TreeDeletedStatus(id string) (string, error) SpaceSettingsId() string - ACLStorage() (storage.ListStorage, error) + ACLStorage() (liststorage.ListStorage, error) SpaceHeader() (*spacesyncproto.RawSpaceHeaderWithId, error) StoredIds() ([]string, error) Close() error diff --git a/common/commonspace/syncstatus/syncstatus.go b/common/commonspace/syncstatus/syncstatus.go index 16f41aad..5de90f1a 100644 --- a/common/commonspace/syncstatus/syncstatus.go +++ b/common/commonspace/syncstatus/syncstatus.go @@ -4,9 +4,9 @@ import ( "context" "fmt" "github.com/anytypeio/go-anytype-infrastructure-experiments/common/app/logger" - "github.com/anytypeio/go-anytype-infrastructure-experiments/common/commonspace/storage" + treestorage "github.com/anytypeio/go-anytype-infrastructure-experiments/common/commonspace/object/tree/treestorage" + "github.com/anytypeio/go-anytype-infrastructure-experiments/common/commonspace/spacestorage" "github.com/anytypeio/go-anytype-infrastructure-experiments/common/nodeconf" - treestorage "github.com/anytypeio/go-anytype-infrastructure-experiments/common/pkg/acl/storage" "github.com/anytypeio/go-anytype-infrastructure-experiments/common/util/periodicsync" "github.com/anytypeio/go-anytype-infrastructure-experiments/common/util/slice" "golang.org/x/exp/slices" @@ -74,7 +74,7 @@ type syncStatusProvider struct { configuration nodeconf.Configuration periodicSync periodicsync.PeriodicSync updateReceiver UpdateReceiver - storage storage.SpaceStorage + storage spacestorage.SpaceStorage spaceId string treeHeads map[string]treeHeadsEntry @@ -92,10 +92,10 @@ type SyncStatusDeps struct { UpdateIntervalSecs int UpdateTimeout time.Duration Configuration nodeconf.Configuration - Storage storage.SpaceStorage + Storage spacestorage.SpaceStorage } -func DefaultDeps(configuration nodeconf.Configuration, store storage.SpaceStorage) SyncStatusDeps { +func DefaultDeps(configuration nodeconf.Configuration, store spacestorage.SpaceStorage) SyncStatusDeps { return SyncStatusDeps{ UpdateIntervalSecs: syncUpdateInterval, UpdateTimeout: syncTimeout, diff --git a/common/net/dialer/dialer.go b/common/net/dialer/dialer.go index 44b23b54..f016646e 100644 --- a/common/net/dialer/dialer.go +++ b/common/net/dialer/dialer.go @@ -7,7 +7,7 @@ import ( "github.com/anytypeio/go-anytype-infrastructure-experiments/common/app/logger" "github.com/anytypeio/go-anytype-infrastructure-experiments/common/config" "github.com/anytypeio/go-anytype-infrastructure-experiments/common/net/peer" - "github.com/anytypeio/go-anytype-infrastructure-experiments/common/net/secure" + "github.com/anytypeio/go-anytype-infrastructure-experiments/common/net/secureservice" "github.com/anytypeio/go-anytype-infrastructure-experiments/common/net/timeoutconn" "github.com/libp2p/go-libp2p/core/sec" "go.uber.org/zap" @@ -37,7 +37,7 @@ type Dialer interface { } type dialer struct { - transport secure.Service + transport secureservice.SecureService config *config.Config peerAddrs map[string][]string @@ -45,7 +45,7 @@ type dialer struct { } func (d *dialer) Init(a *app.App) (err error) { - d.transport = a.MustComponent(secure.CName).(secure.Service) + d.transport = a.MustComponent(secureservice.CName).(secureservice.SecureService) d.config = a.MustComponent(config.CName).(*config.Config) d.peerAddrs = map[string][]string{} for _, n := range d.config.Nodes { diff --git a/common/net/pool/pool.go b/common/net/pool/pool.go index 819fee23..9e50d2ce 100644 --- a/common/net/pool/pool.go +++ b/common/net/pool/pool.go @@ -5,9 +5,9 @@ import ( "errors" "github.com/anytypeio/go-anytype-infrastructure-experiments/common/app" "github.com/anytypeio/go-anytype-infrastructure-experiments/common/app/logger" + "github.com/anytypeio/go-anytype-infrastructure-experiments/common/app/ocache" "github.com/anytypeio/go-anytype-infrastructure-experiments/common/net/dialer" "github.com/anytypeio/go-anytype-infrastructure-experiments/common/net/peer" - "github.com/anytypeio/go-anytype-infrastructure-experiments/common/pkg/ocache" "math/rand" "time" ) diff --git a/common/net/rpc/server/baseserver.go b/common/net/rpc/server/baseserver.go index 02e12fd8..cb9902ee 100644 --- a/common/net/rpc/server/baseserver.go +++ b/common/net/rpc/server/baseserver.go @@ -2,7 +2,7 @@ package server import ( "context" - "github.com/anytypeio/go-anytype-infrastructure-experiments/common/net/secure" + "github.com/anytypeio/go-anytype-infrastructure-experiments/common/net/secureservice" "github.com/zeebo/errs" "go.uber.org/zap" "io" @@ -17,14 +17,14 @@ import ( type BaseDrpcServer struct { drpcServer *drpcserver.Server - transport secure.Service - listeners []secure.ContextListener + transport secureservice.SecureService + listeners []secureservice.ContextListener cancel func() *drpcmux.Mux } type DRPCHandlerWrapper func(handler drpc.Handler) drpc.Handler -type ListenerConverter func(listener net.Listener, timeoutMillis int) secure.ContextListener +type ListenerConverter func(listener net.Listener, timeoutMillis int) secureservice.ContextListener type Params struct { BufferSizeMb int @@ -54,7 +54,7 @@ func (s *BaseDrpcServer) Run(ctx context.Context, params Params) (err error) { return } -func (s *BaseDrpcServer) serve(ctx context.Context, lis secure.ContextListener) { +func (s *BaseDrpcServer) serve(ctx context.Context, lis secureservice.ContextListener) { l := log.With(zap.String("localAddr", lis.Addr().String())) l.Info("drpc listener started") defer func() { @@ -78,7 +78,7 @@ func (s *BaseDrpcServer) serve(ctx context.Context, lis secure.ContextListener) } continue } - if _, ok := err.(secure.HandshakeError); ok { + if _, ok := err.(secureservice.HandshakeError); ok { l.Warn("listener handshake error", zap.Error(err)) continue } diff --git a/common/net/rpc/server/drpcserver.go b/common/net/rpc/server/drpcserver.go index aaa3f759..5b022486 100644 --- a/common/net/rpc/server/drpcserver.go +++ b/common/net/rpc/server/drpcserver.go @@ -6,7 +6,7 @@ import ( "github.com/anytypeio/go-anytype-infrastructure-experiments/common/app/logger" "github.com/anytypeio/go-anytype-infrastructure-experiments/common/config" "github.com/anytypeio/go-anytype-infrastructure-experiments/common/metric" - "github.com/anytypeio/go-anytype-infrastructure-experiments/common/net/secure" + "github.com/anytypeio/go-anytype-infrastructure-experiments/common/net/secureservice" "github.com/prometheus/client_golang/prometheus" "storj.io/drpc" ) @@ -32,14 +32,14 @@ type configGetter interface { type drpcServer struct { config configGetter metric metric.Metric - transport secure.Service + transport secureservice.SecureService *BaseDrpcServer } func (s *drpcServer) Init(a *app.App) (err error) { s.config = a.MustComponent(config.CName).(configGetter) s.metric = a.MustComponent(metric.CName).(metric.Metric) - s.transport = a.MustComponent(secure.CName).(secure.Service) + s.transport = a.MustComponent(secureservice.CName).(secureservice.SecureService) return nil } diff --git a/common/net/secure/basiclistener.go b/common/net/secureservice/basiclistener.go similarity index 96% rename from common/net/secure/basiclistener.go rename to common/net/secureservice/basiclistener.go index 927965af..b645db7d 100644 --- a/common/net/secure/basiclistener.go +++ b/common/net/secureservice/basiclistener.go @@ -1,4 +1,4 @@ -package secure +package secureservice import ( "context" diff --git a/common/net/secure/service.go b/common/net/secureservice/secureservice.go similarity index 72% rename from common/net/secure/service.go rename to common/net/secureservice/secureservice.go index 9e919582..49353e91 100644 --- a/common/net/secure/service.go +++ b/common/net/secureservice/secureservice.go @@ -1,8 +1,8 @@ -package secure +package secureservice import ( "context" - commonaccount "github.com/anytypeio/go-anytype-infrastructure-experiments/common/account" + commonaccount "github.com/anytypeio/go-anytype-infrastructure-experiments/common/accountservice" "github.com/anytypeio/go-anytype-infrastructure-experiments/common/app" "github.com/anytypeio/go-anytype-infrastructure-experiments/common/app/logger" "github.com/anytypeio/go-anytype-infrastructure-experiments/common/config" @@ -20,22 +20,22 @@ const CName = "common.net.secure" var log = logger.NewNamed(CName) -func New() Service { - return &service{} +func New() SecureService { + return &secureService{} } -type Service interface { +type SecureService interface { TLSListener(lis net.Listener, timeoutMillis int) ContextListener BasicListener(lis net.Listener, timeoutMillis int) ContextListener TLSConn(ctx context.Context, conn net.Conn) (sec.SecureConn, error) app.Component } -type service struct { +type secureService struct { key crypto.PrivKey } -func (s *service) Init(a *app.App) (err error) { +func (s *secureService) Init(a *app.App) (err error) { account := a.MustComponent(config.CName).(commonaccount.ConfigGetter).GetAccount() pkb, err := keys.DecodeBytesFromString(account.PeerKey) if err != nil { @@ -50,19 +50,19 @@ func (s *service) Init(a *app.App) (err error) { return nil } -func (s *service) Name() (name string) { +func (s *secureService) Name() (name string) { return CName } -func (s *service) TLSListener(lis net.Listener, timeoutMillis int) ContextListener { +func (s *secureService) TLSListener(lis net.Listener, timeoutMillis int) ContextListener { return newTLSListener(s.key, lis, timeoutMillis) } -func (s *service) BasicListener(lis net.Listener, timeoutMillis int) ContextListener { +func (s *secureService) BasicListener(lis net.Listener, timeoutMillis int) ContextListener { return newBasicListener(lis, timeoutMillis) } -func (s *service) TLSConn(ctx context.Context, conn net.Conn) (sec.SecureConn, error) { +func (s *secureService) TLSConn(ctx context.Context, conn net.Conn) (sec.SecureConn, error) { tr, err := libp2ptls.New(s.key) if err != nil { return nil, err diff --git a/common/net/secure/tlslistener.go b/common/net/secureservice/tlslistener.go similarity index 98% rename from common/net/secure/tlslistener.go rename to common/net/secureservice/tlslistener.go index 120c6f01..cb7d24d6 100644 --- a/common/net/secure/tlslistener.go +++ b/common/net/secureservice/tlslistener.go @@ -1,4 +1,4 @@ -package secure +package secureservice import ( "context" diff --git a/common/pkg/acl/common/keychain.go b/common/pkg/acl/common/keychain.go deleted file mode 100644 index b6de00b2..00000000 --- a/common/pkg/acl/common/keychain.go +++ /dev/null @@ -1,28 +0,0 @@ -package common - -import ( - signingkey2 "github.com/anytypeio/go-anytype-infrastructure-experiments/common/util/keys/asymmetric/signingkey" -) - -type Keychain struct { - keys map[string]signingkey2.PubKey -} - -func NewKeychain() *Keychain { - return &Keychain{ - keys: make(map[string]signingkey2.PubKey), - } -} - -func (k *Keychain) GetOrAdd(identity string) (signingkey2.PubKey, error) { - if key, exists := k.keys[identity]; exists { - return key, nil - } - res, err := signingkey2.NewSigningEd25519PubKeyFromBytes([]byte(identity)) - if err != nil { - return nil, err - } - - k.keys[identity] = res.(signingkey2.PubKey) - return res.(signingkey2.PubKey), nil -} diff --git a/common/pkg/acl/tree/rawtreevalidator.go b/common/pkg/acl/tree/rawtreevalidator.go deleted file mode 100644 index aac7dd99..00000000 --- a/common/pkg/acl/tree/rawtreevalidator.go +++ /dev/null @@ -1,17 +0,0 @@ -package tree - -import ( - "github.com/anytypeio/go-anytype-infrastructure-experiments/common/pkg/acl/list" - storage2 "github.com/anytypeio/go-anytype-infrastructure-experiments/common/pkg/acl/storage" -) - -func ValidateRawTree(payload storage2.TreeStorageCreatePayload, aclList list.ACLList) (err error) { - provider := storage2.NewInMemoryTreeStorageProvider() - treeStorage, err := provider.CreateTreeStorage(payload) - if err != nil { - return - } - - _, err = BuildObjectTree(treeStorage, aclList) - return -} diff --git a/common/testutil/testaccount/service.go b/common/testutil/accounttest/accountservice.go similarity index 82% rename from common/testutil/testaccount/service.go rename to common/testutil/accounttest/accountservice.go index 7995621d..d653e98d 100644 --- a/common/testutil/testaccount/service.go +++ b/common/testutil/accounttest/accountservice.go @@ -1,16 +1,16 @@ -package testaccount +package accounttest import ( - accountService "github.com/anytypeio/go-anytype-infrastructure-experiments/common/account" + accountService "github.com/anytypeio/go-anytype-infrastructure-experiments/common/accountservice" "github.com/anytypeio/go-anytype-infrastructure-experiments/common/app" - "github.com/anytypeio/go-anytype-infrastructure-experiments/common/pkg/acl/account" + "github.com/anytypeio/go-anytype-infrastructure-experiments/common/commonspace/object/accountdata" "github.com/anytypeio/go-anytype-infrastructure-experiments/common/util/keys/asymmetric/encryptionkey" "github.com/anytypeio/go-anytype-infrastructure-experiments/common/util/keys/asymmetric/signingkey" ) // AccountTestService provides service for test purposes, generates new random account every Init type AccountTestService struct { - acc *account.AccountData + acc *accountdata.AccountData } func (s *AccountTestService) Init(a *app.App) (err error) { @@ -27,7 +27,7 @@ func (s *AccountTestService) Init(a *app.App) (err error) { if err != nil { return } - s.acc = &account.AccountData{ + s.acc = &accountdata.AccountData{ Identity: ident, SignKey: signKey, EncKey: encKey, @@ -39,6 +39,6 @@ func (s *AccountTestService) Name() (name string) { return accountService.CName } -func (s *AccountTestService) Account() *account.AccountData { +func (s *AccountTestService) Account() *accountdata.AccountData { return s.acc } diff --git a/common/util/cid/cid.go b/common/util/cidutil/cid.go similarity index 96% rename from common/util/cid/cid.go rename to common/util/cidutil/cid.go index 437d23f9..1d80e97f 100644 --- a/common/util/cid/cid.go +++ b/common/util/cidutil/cid.go @@ -1,4 +1,4 @@ -package cid +package cidutil import ( "github.com/ipfs/go-cid" diff --git a/consensus/account/service.go b/consensus/account/service.go index 6f81b4fe..629a0de4 100644 --- a/consensus/account/service.go +++ b/consensus/account/service.go @@ -1,21 +1,21 @@ package account import ( - commonaccount "github.com/anytypeio/go-anytype-infrastructure-experiments/common/account" + commonaccount "github.com/anytypeio/go-anytype-infrastructure-experiments/common/accountservice" "github.com/anytypeio/go-anytype-infrastructure-experiments/common/app" + "github.com/anytypeio/go-anytype-infrastructure-experiments/common/commonspace/object/accountdata" "github.com/anytypeio/go-anytype-infrastructure-experiments/common/config" - "github.com/anytypeio/go-anytype-infrastructure-experiments/common/pkg/acl/account" "github.com/anytypeio/go-anytype-infrastructure-experiments/common/util/keys" "github.com/anytypeio/go-anytype-infrastructure-experiments/common/util/keys/asymmetric/encryptionkey" "github.com/anytypeio/go-anytype-infrastructure-experiments/common/util/keys/asymmetric/signingkey" ) type service struct { - accountData *account.AccountData + accountData *accountdata.AccountData peerId string } -func (s *service) Account() *account.AccountData { +func (s *service) Account() *accountdata.AccountData { return s.accountData } @@ -47,7 +47,7 @@ func (s *service) Init(a *app.App) (err error) { return err } - s.accountData = &account.AccountData{ + s.accountData = &accountdata.AccountData{ Identity: identity, SignKey: decodedSigningKey, EncKey: decodedEncryptionKey, diff --git a/consensus/cmd/consensusnode.go b/consensus/cmd/consensusnode.go index 136f2af9..8a56d5c5 100644 --- a/consensus/cmd/consensusnode.go +++ b/consensus/cmd/consensusnode.go @@ -8,7 +8,7 @@ import ( "github.com/anytypeio/go-anytype-infrastructure-experiments/common/app/logger" "github.com/anytypeio/go-anytype-infrastructure-experiments/common/metric" "github.com/anytypeio/go-anytype-infrastructure-experiments/common/net/rpc/server" - "github.com/anytypeio/go-anytype-infrastructure-experiments/common/net/secure" + "github.com/anytypeio/go-anytype-infrastructure-experiments/common/net/secureservice" "github.com/anytypeio/go-anytype-infrastructure-experiments/consensus/account" "github.com/anytypeio/go-anytype-infrastructure-experiments/consensus/config" "github.com/anytypeio/go-anytype-infrastructure-experiments/consensus/consensusrpc" @@ -89,7 +89,7 @@ func main() { func Bootstrap(a *app.App) { a.Register(metric.New()). Register(account.New()). - Register(secure.New()). + Register(secureservice.New()). Register(server.New()). Register(db.New()). Register(stream.New()). diff --git a/consensus/stream/service.go b/consensus/stream/service.go index 3f6a6063..4197a40e 100644 --- a/consensus/stream/service.go +++ b/consensus/stream/service.go @@ -4,8 +4,8 @@ import ( "context" "github.com/anytypeio/go-anytype-infrastructure-experiments/common/app" "github.com/anytypeio/go-anytype-infrastructure-experiments/common/app/logger" + "github.com/anytypeio/go-anytype-infrastructure-experiments/common/app/ocache" "github.com/anytypeio/go-anytype-infrastructure-experiments/common/metric" - "github.com/anytypeio/go-anytype-infrastructure-experiments/common/pkg/ocache" "github.com/anytypeio/go-anytype-infrastructure-experiments/consensus" "github.com/anytypeio/go-anytype-infrastructure-experiments/consensus/db" "github.com/cheggaaa/mb/v3" diff --git a/filenode/account/service.go b/filenode/account/service.go index 91f237b4..cf7c5a44 100644 --- a/filenode/account/service.go +++ b/filenode/account/service.go @@ -1,21 +1,21 @@ package account import ( - commonaccount "github.com/anytypeio/go-anytype-infrastructure-experiments/common/account" + commonaccount "github.com/anytypeio/go-anytype-infrastructure-experiments/common/accountservice" "github.com/anytypeio/go-anytype-infrastructure-experiments/common/app" + "github.com/anytypeio/go-anytype-infrastructure-experiments/common/commonspace/object/accountdata" "github.com/anytypeio/go-anytype-infrastructure-experiments/common/config" - "github.com/anytypeio/go-anytype-infrastructure-experiments/common/pkg/acl/account" "github.com/anytypeio/go-anytype-infrastructure-experiments/common/util/keys" "github.com/anytypeio/go-anytype-infrastructure-experiments/common/util/keys/asymmetric/encryptionkey" "github.com/anytypeio/go-anytype-infrastructure-experiments/common/util/keys/asymmetric/signingkey" ) type service struct { - accountData *account.AccountData + accountData *accountdata.AccountData peerId string } -func (s *service) Account() *account.AccountData { +func (s *service) Account() *accountdata.AccountData { return s.accountData } @@ -55,7 +55,7 @@ func (s *service) Init(a *app.App) (err error) { return err } - s.accountData = &account.AccountData{ + s.accountData = &accountdata.AccountData{ Identity: identity, PeerKey: decodedPeerKey, SignKey: decodedSigningKey, diff --git a/filenode/cmd/filenode.go b/filenode/cmd/filenode.go index 46cf7429..b3e18864 100644 --- a/filenode/cmd/filenode.go +++ b/filenode/cmd/filenode.go @@ -8,7 +8,7 @@ import ( "github.com/anytypeio/go-anytype-infrastructure-experiments/common/app/logger" "github.com/anytypeio/go-anytype-infrastructure-experiments/common/metric" "github.com/anytypeio/go-anytype-infrastructure-experiments/common/net/rpc/server" - "github.com/anytypeio/go-anytype-infrastructure-experiments/common/net/secure" + "github.com/anytypeio/go-anytype-infrastructure-experiments/common/net/secureservice" "github.com/anytypeio/go-anytype-infrastructure-experiments/filenode/config" "github.com/anytypeio/go-anytype-infrastructure-experiments/filenode/filepogreb" "github.com/anytypeio/go-anytype-infrastructure-experiments/filenode/fileserver" @@ -85,7 +85,7 @@ func main() { } func Bootstrap(a *app.App) { - a.Register(secure.New()). + a.Register(secureservice.New()). Register(server.New()). Register(filepogreb.New()). Register(fileserver.New()). diff --git a/node/account/service.go b/node/account/service.go index 91f237b4..cf7c5a44 100644 --- a/node/account/service.go +++ b/node/account/service.go @@ -1,21 +1,21 @@ package account import ( - commonaccount "github.com/anytypeio/go-anytype-infrastructure-experiments/common/account" + commonaccount "github.com/anytypeio/go-anytype-infrastructure-experiments/common/accountservice" "github.com/anytypeio/go-anytype-infrastructure-experiments/common/app" + "github.com/anytypeio/go-anytype-infrastructure-experiments/common/commonspace/object/accountdata" "github.com/anytypeio/go-anytype-infrastructure-experiments/common/config" - "github.com/anytypeio/go-anytype-infrastructure-experiments/common/pkg/acl/account" "github.com/anytypeio/go-anytype-infrastructure-experiments/common/util/keys" "github.com/anytypeio/go-anytype-infrastructure-experiments/common/util/keys/asymmetric/encryptionkey" "github.com/anytypeio/go-anytype-infrastructure-experiments/common/util/keys/asymmetric/signingkey" ) type service struct { - accountData *account.AccountData + accountData *accountdata.AccountData peerId string } -func (s *service) Account() *account.AccountData { +func (s *service) Account() *accountdata.AccountData { return s.accountData } @@ -55,7 +55,7 @@ func (s *service) Init(a *app.App) (err error) { return err } - s.accountData = &account.AccountData{ + s.accountData = &accountdata.AccountData{ Identity: identity, PeerKey: decodedPeerKey, SignKey: decodedSigningKey, diff --git a/node/acl/service.go b/node/acl/service.go index a417778c..8eaf7322 100644 --- a/node/acl/service.go +++ b/node/acl/service.go @@ -2,12 +2,12 @@ package acl import ( "context" - "github.com/anytypeio/go-anytype-infrastructure-experiments/common/account" + "github.com/anytypeio/go-anytype-infrastructure-experiments/common/accountservice" "github.com/anytypeio/go-anytype-infrastructure-experiments/common/app" "github.com/anytypeio/go-anytype-infrastructure-experiments/common/app/logger" - "github.com/anytypeio/go-anytype-infrastructure-experiments/common/commonspace/syncservice/synchandler" - "github.com/anytypeio/go-anytype-infrastructure-experiments/common/pkg/acl/aclrecordproto" - "github.com/anytypeio/go-anytype-infrastructure-experiments/common/util/cid" + "github.com/anytypeio/go-anytype-infrastructure-experiments/common/commonspace/object/acl/aclrecordproto" + "github.com/anytypeio/go-anytype-infrastructure-experiments/common/commonspace/objectsync/synchandler" + "github.com/anytypeio/go-anytype-infrastructure-experiments/common/util/cidutil" "github.com/anytypeio/go-anytype-infrastructure-experiments/consensus/consensusclient" "github.com/anytypeio/go-anytype-infrastructure-experiments/consensus/consensusproto" "time" @@ -31,12 +31,12 @@ type Service interface { type service struct { consService consensusclient.Service - account account.Service + account accountservice.Service } func (s *service) Init(a *app.App) (err error) { s.consService = a.MustComponent(consensusclient.CName).(consensusclient.Service) - s.account = a.MustComponent(account.CName).(account.Service) + s.account = a.MustComponent(accountservice.CName).(accountservice.Service) return } @@ -125,7 +125,7 @@ func (s *service) signAndMarshal(rawRec *aclrecordproto.RawACLRecord) (recId, pr if payload, err = rawRec.Marshal(); err != nil { return } - recCid, err := cid.NewCIDFromBytes(payload) + recCid, err := cidutil.NewCIDFromBytes(payload) if err != nil { return } diff --git a/node/acl/service_test.go b/node/acl/service_test.go index eb720d64..ed2df63a 100644 --- a/node/acl/service_test.go +++ b/node/acl/service_test.go @@ -4,10 +4,10 @@ import ( "context" "fmt" "github.com/anytypeio/go-anytype-infrastructure-experiments/common/app" + "github.com/anytypeio/go-anytype-infrastructure-experiments/common/commonspace/object/acl/aclrecordproto" "github.com/anytypeio/go-anytype-infrastructure-experiments/common/commonspace/spacesyncproto" - "github.com/anytypeio/go-anytype-infrastructure-experiments/common/pkg/acl/aclrecordproto" - "github.com/anytypeio/go-anytype-infrastructure-experiments/common/testutil/testaccount" - "github.com/anytypeio/go-anytype-infrastructure-experiments/common/util/cid" + "github.com/anytypeio/go-anytype-infrastructure-experiments/common/testutil/accounttest" + "github.com/anytypeio/go-anytype-infrastructure-experiments/common/util/cidutil" "github.com/anytypeio/go-anytype-infrastructure-experiments/consensus/consensusclient" "github.com/anytypeio/go-anytype-infrastructure-experiments/consensus/consensusclient/mock_consensusclient" "github.com/anytypeio/go-anytype-infrastructure-experiments/consensus/consensusproto" @@ -28,7 +28,7 @@ func TestService_CreateLog(t *testing.T) { clog = l }) - aclId, _ := cid.NewCIDFromBytes([]byte("aclId")) + aclId, _ := cidutil.NewCIDFromBytes([]byte("aclId")) rec := &aclrecordproto.ACLRecord{ PrevId: "", @@ -63,7 +63,7 @@ func TestService_AddRecord(t *testing.T) { clog = l }) - aclId, _ := cid.NewCIDFromBytes([]byte("aclId")) + aclId, _ := cidutil.NewCIDFromBytes([]byte("aclId")) rec := &aclrecordproto.ACLRecord{ PrevId: "", @@ -108,7 +108,7 @@ func TestService_Watch(t *testing.T) { fx := newFixture(t) defer fx.Finish(t) var expErr = fmt.Errorf("error") - aclId, _ := cid.NewCIDFromBytes([]byte("aclId")) + aclId, _ := cidutil.NewCIDFromBytes([]byte("aclId")) aclIdBytes, _ := cidToByte(aclId) fx.mockClient.EXPECT().Watch(aclIdBytes, gomock.Any()).Do(func(aid []byte, w consensusclient.Watcher) { assert.Equal(t, aclIdBytes, aid) @@ -125,14 +125,14 @@ func TestService_Watch(t *testing.T) { t.Run("success", func(t *testing.T) { fx := newFixture(t) defer fx.Finish(t) - aclId, _ := cid.NewCIDFromBytes([]byte("aclId")) + aclId, _ := cidutil.NewCIDFromBytes([]byte("aclId")) aclIdBytes, _ := cidToByte(aclId) fx.mockClient.EXPECT().Watch(aclIdBytes, gomock.Any()).Do(func(aid []byte, w consensusclient.Watcher) { assert.Equal(t, aclIdBytes, aid) go func() { time.Sleep(time.Millisecond * 10) - r1cid, _ := cid.NewCIDFromBytes([]byte("r1")) - r2cid, _ := cid.NewCIDFromBytes([]byte("r2")) + r1cid, _ := cidutil.NewCIDFromBytes([]byte("r1")) + r2cid, _ := cidutil.NewCIDFromBytes([]byte("r2")) r1cidB, _ := cidToByte(r1cid) r2cidB, _ := cidToByte(r2cid) w.AddConsensusRecords([]*consensusproto.Record{ @@ -159,7 +159,7 @@ func newFixture(t *testing.T) *fixture { fx := &fixture{ a: new(app.App), ctrl: gomock.NewController(t), - account: &testaccount.AccountTestService{}, + account: &accounttest.AccountTestService{}, } fx.mockClient = mock_consensusclient.NewMockService(fx.ctrl) fx.mockClient.EXPECT().Name().Return(consensusclient.CName).AnyTimes() @@ -177,7 +177,7 @@ type fixture struct { mockClient *mock_consensusclient.MockService ctrl *gomock.Controller a *app.App - account *testaccount.AccountTestService + account *accounttest.AccountTestService } func (fx *fixture) Finish(t *testing.T) { diff --git a/node/acl/util_test.go b/node/acl/util_test.go index 1ebe5fcb..e042c49e 100644 --- a/node/acl/util_test.go +++ b/node/acl/util_test.go @@ -1,13 +1,13 @@ package acl import ( - "github.com/anytypeio/go-anytype-infrastructure-experiments/common/util/cid" + "github.com/anytypeio/go-anytype-infrastructure-experiments/common/util/cidutil" "github.com/stretchr/testify/assert" "testing" ) func TestCIDLen(t *testing.T) { - s, _ := cid.NewCIDFromBytes([]byte("some data")) + s, _ := cidutil.NewCIDFromBytes([]byte("some data")) t.Log(s, len(s)) b, _ := cidToByte(s) t.Log(b, len(b)) diff --git a/node/acl/watcher.go b/node/acl/watcher.go index 6a88cb0e..1f5cbe60 100644 --- a/node/acl/watcher.go +++ b/node/acl/watcher.go @@ -2,9 +2,9 @@ package acl import ( "context" + "github.com/anytypeio/go-anytype-infrastructure-experiments/common/commonspace/object/acl/aclrecordproto" + "github.com/anytypeio/go-anytype-infrastructure-experiments/common/commonspace/objectsync/synchandler" "github.com/anytypeio/go-anytype-infrastructure-experiments/common/commonspace/spacesyncproto" - "github.com/anytypeio/go-anytype-infrastructure-experiments/common/commonspace/syncservice/synchandler" - "github.com/anytypeio/go-anytype-infrastructure-experiments/common/pkg/acl/aclrecordproto" "github.com/anytypeio/go-anytype-infrastructure-experiments/consensus/consensusproto" "go.uber.org/zap" "sync" diff --git a/node/cmd/node.go b/node/cmd/node.go index a931bdc4..65ece374 100644 --- a/node/cmd/node.go +++ b/node/cmd/node.go @@ -12,10 +12,10 @@ import ( "github.com/anytypeio/go-anytype-infrastructure-experiments/common/net/dialer" "github.com/anytypeio/go-anytype-infrastructure-experiments/common/net/pool" "github.com/anytypeio/go-anytype-infrastructure-experiments/common/net/rpc/server" - "github.com/anytypeio/go-anytype-infrastructure-experiments/common/net/secure" + "github.com/anytypeio/go-anytype-infrastructure-experiments/common/net/secureservice" "github.com/anytypeio/go-anytype-infrastructure-experiments/common/nodeconf" "github.com/anytypeio/go-anytype-infrastructure-experiments/node/account" - "github.com/anytypeio/go-anytype-infrastructure-experiments/node/api" + "github.com/anytypeio/go-anytype-infrastructure-experiments/node/debug/nodedebugrpc" "github.com/anytypeio/go-anytype-infrastructure-experiments/node/nodespace" "github.com/anytypeio/go-anytype-infrastructure-experiments/node/nodespace/nodecache" "github.com/anytypeio/go-anytype-infrastructure-experiments/node/storage" @@ -97,11 +97,11 @@ func Bootstrap(a *app.App) { Register(storage.New()). Register(nodecache.New(200)). Register(nodeconf.New()). - Register(secure.New()). + Register(secureservice.New()). Register(dialer.New()). Register(pool.New()). Register(nodespace.New()). Register(commonspace.New()). Register(server.New()). - Register(api.New()) + Register(nodedebugrpc.New()) } diff --git a/node/api/service.go b/node/debug/nodedebugrpc/nodedebugrpc.go similarity index 65% rename from node/api/service.go rename to node/debug/nodedebugrpc/nodedebugrpc.go index 710e0914..17f1a6b1 100644 --- a/node/api/service.go +++ b/node/debug/nodedebugrpc/nodedebugrpc.go @@ -1,35 +1,35 @@ -package api +package nodedebugrpc import ( "context" "github.com/anytypeio/go-anytype-infrastructure-experiments/common/app" "github.com/anytypeio/go-anytype-infrastructure-experiments/common/app/logger" - "github.com/anytypeio/go-anytype-infrastructure-experiments/common/commonspace/storage" - "github.com/anytypeio/go-anytype-infrastructure-experiments/common/commonspace/treegetter" + "github.com/anytypeio/go-anytype-infrastructure-experiments/common/commonspace/object/treegetter" + "github.com/anytypeio/go-anytype-infrastructure-experiments/common/commonspace/spacestorage" "github.com/anytypeio/go-anytype-infrastructure-experiments/common/config" "github.com/anytypeio/go-anytype-infrastructure-experiments/common/net/rpc/server" - "github.com/anytypeio/go-anytype-infrastructure-experiments/common/net/secure" - "github.com/anytypeio/go-anytype-infrastructure-experiments/node/api/apiproto" + "github.com/anytypeio/go-anytype-infrastructure-experiments/common/net/secureservice" + "github.com/anytypeio/go-anytype-infrastructure-experiments/node/debug/nodedebugrpc/nodedebugrpcproto" "github.com/anytypeio/go-anytype-infrastructure-experiments/node/nodespace" nodestorage "github.com/anytypeio/go-anytype-infrastructure-experiments/node/storage" "storj.io/drpc" ) -const CName = "api.service" +const CName = "debug.nodedebugrpc" var log = logger.NewNamed(CName) -func New() Service { - return &service{BaseDrpcServer: server.NewBaseDrpcServer()} +func New() NodeDebugRpc { + return &nodeDebugRpc{BaseDrpcServer: server.NewBaseDrpcServer()} } -type Service interface { +type NodeDebugRpc interface { app.ComponentRunnable drpc.Mux } -type service struct { - transport secure.Service +type nodeDebugRpc struct { + transport secureservice.SecureService cfg *config.Config treeCache treegetter.TreeGetter spaceService nodespace.Service @@ -37,20 +37,20 @@ type service struct { *server.BaseDrpcServer } -func (s *service) Init(a *app.App) (err error) { +func (s *nodeDebugRpc) Init(a *app.App) (err error) { s.treeCache = a.MustComponent(treegetter.CName).(treegetter.TreeGetter) s.spaceService = a.MustComponent(nodespace.CName).(nodespace.Service) - s.storageService = a.MustComponent(storage.CName).(nodestorage.NodeStorage) + s.storageService = a.MustComponent(spacestorage.CName).(nodestorage.NodeStorage) s.cfg = a.MustComponent(config.CName).(*config.Config) - s.transport = a.MustComponent(secure.CName).(secure.Service) + s.transport = a.MustComponent(secureservice.CName).(secureservice.SecureService) return nil } -func (s *service) Name() (name string) { +func (s *nodeDebugRpc) Name() (name string) { return CName } -func (s *service) Run(ctx context.Context) (err error) { +func (s *nodeDebugRpc) Run(ctx context.Context) (err error) { params := server.Params{ BufferSizeMb: s.cfg.Stream.MaxMsgSizeMb, TimeoutMillis: s.cfg.Stream.TimeoutMilliseconds, @@ -64,9 +64,9 @@ func (s *service) Run(ctx context.Context) (err error) { if err != nil { return } - return apiproto.DRPCRegisterNodeApi(s, &rpcHandler{s.treeCache, s.spaceService, s.storageService}) + return nodedebugrpcproto.DRPCRegisterNodeApi(s, &rpcHandler{s.treeCache, s.spaceService, s.storageService}) } -func (s *service) Close(ctx context.Context) (err error) { +func (s *nodeDebugRpc) Close(ctx context.Context) (err error) { return s.BaseDrpcServer.Close(ctx) } diff --git a/node/api/apiproto/api.pb.go b/node/debug/nodedebugrpc/nodedebugrpcproto/api.pb.go similarity index 99% rename from node/api/apiproto/api.pb.go rename to node/debug/nodedebugrpc/nodedebugrpcproto/api.pb.go index d7302194..718de42a 100644 --- a/node/api/apiproto/api.pb.go +++ b/node/debug/nodedebugrpc/nodedebugrpcproto/api.pb.go @@ -1,7 +1,7 @@ // Code generated by protoc-gen-gogo. DO NOT EDIT. // source: api/apiproto/protos/api.proto -package apiproto +package nodedebugrpcproto import ( fmt "fmt" diff --git a/node/api/apiproto/api_drpc.pb.go b/node/debug/nodedebugrpc/nodedebugrpcproto/api_drpc.pb.go similarity index 99% rename from node/api/apiproto/api_drpc.pb.go rename to node/debug/nodedebugrpc/nodedebugrpcproto/api_drpc.pb.go index 22440c92..f13b466b 100644 --- a/node/api/apiproto/api_drpc.pb.go +++ b/node/debug/nodedebugrpc/nodedebugrpcproto/api_drpc.pb.go @@ -2,7 +2,7 @@ // protoc-gen-go-drpc version: v0.0.32 // source: api/apiproto/protos/api.proto -package apiproto +package nodedebugrpcproto import ( bytes "bytes" diff --git a/node/api/apiproto/protos/api.proto b/node/debug/nodedebugrpc/nodedebugrpcproto/protos/api.proto similarity index 100% rename from node/api/apiproto/protos/api.proto rename to node/debug/nodedebugrpc/nodedebugrpcproto/protos/api.proto diff --git a/node/api/rpchandler.go b/node/debug/nodedebugrpc/rpchandler.go similarity index 52% rename from node/api/rpchandler.go rename to node/debug/nodedebugrpc/rpchandler.go index 98718ab1..6092cd70 100644 --- a/node/api/rpchandler.go +++ b/node/debug/nodedebugrpc/rpchandler.go @@ -1,9 +1,9 @@ -package api +package nodedebugrpc import ( "context" - "github.com/anytypeio/go-anytype-infrastructure-experiments/common/commonspace/treegetter" - "github.com/anytypeio/go-anytype-infrastructure-experiments/node/api/apiproto" + "github.com/anytypeio/go-anytype-infrastructure-experiments/common/commonspace/object/treegetter" + "github.com/anytypeio/go-anytype-infrastructure-experiments/node/debug/nodedebugrpc/nodedebugrpcproto" "github.com/anytypeio/go-anytype-infrastructure-experiments/node/nodespace" "github.com/anytypeio/go-anytype-infrastructure-experiments/node/storage" ) @@ -14,7 +14,7 @@ type rpcHandler struct { storageService storage.NodeStorage } -func (r *rpcHandler) DumpTree(ctx context.Context, request *apiproto.DumpTreeRequest) (resp *apiproto.DumpTreeResponse, err error) { +func (r *rpcHandler) DumpTree(ctx context.Context, request *nodedebugrpcproto.DumpTreeRequest) (resp *nodedebugrpcproto.DumpTreeResponse, err error) { tree, err := r.treeCache.GetTree(context.Background(), request.SpaceId, request.DocumentId) if err != nil { return @@ -23,44 +23,44 @@ func (r *rpcHandler) DumpTree(ctx context.Context, request *apiproto.DumpTreeReq if err != nil { return } - resp = &apiproto.DumpTreeResponse{ + resp = &nodedebugrpcproto.DumpTreeResponse{ Dump: dump, } return } -func (r *rpcHandler) AllTrees(ctx context.Context, request *apiproto.AllTreesRequest) (resp *apiproto.AllTreesResponse, err error) { +func (r *rpcHandler) AllTrees(ctx context.Context, request *nodedebugrpcproto.AllTreesRequest) (resp *nodedebugrpcproto.AllTreesResponse, err error) { space, err := r.spaceService.GetSpace(ctx, request.SpaceId) if err != nil { return } heads := space.DebugAllHeads() - var trees []*apiproto.Tree + var trees []*nodedebugrpcproto.Tree for _, head := range heads { - trees = append(trees, &apiproto.Tree{ + trees = append(trees, &nodedebugrpcproto.Tree{ Id: head.Id, Heads: head.Heads, }) } - resp = &apiproto.AllTreesResponse{Trees: trees} + resp = &nodedebugrpcproto.AllTreesResponse{Trees: trees} return } -func (r *rpcHandler) AllSpaces(ctx context.Context, request *apiproto.AllSpacesRequest) (resp *apiproto.AllSpacesResponse, err error) { +func (r *rpcHandler) AllSpaces(ctx context.Context, request *nodedebugrpcproto.AllSpacesRequest) (resp *nodedebugrpcproto.AllSpacesResponse, err error) { ids, err := r.storageService.AllSpaceIds() if err != nil { return } - resp = &apiproto.AllSpacesResponse{SpaceIds: ids} + resp = &nodedebugrpcproto.AllSpacesResponse{SpaceIds: ids} return } -func (r *rpcHandler) TreeParams(ctx context.Context, request *apiproto.TreeParamsRequest) (resp *apiproto.TreeParamsResponse, err error) { +func (r *rpcHandler) TreeParams(ctx context.Context, request *nodedebugrpcproto.TreeParamsRequest) (resp *nodedebugrpcproto.TreeParamsResponse, err error) { tree, err := r.treeCache.GetTree(context.Background(), request.SpaceId, request.DocumentId) if err != nil { return } - resp = &apiproto.TreeParamsResponse{ + resp = &nodedebugrpcproto.TreeParamsResponse{ RootId: tree.Root().Id, HeadIds: tree.Heads(), } diff --git a/node/nodespace/nodecache/treecache.go b/node/nodespace/nodecache/treecache.go index e14f9247..4757b3ba 100644 --- a/node/nodespace/nodecache/treecache.go +++ b/node/nodespace/nodecache/treecache.go @@ -5,9 +5,9 @@ import ( "errors" "github.com/anytypeio/go-anytype-infrastructure-experiments/common/app" "github.com/anytypeio/go-anytype-infrastructure-experiments/common/app/logger" - "github.com/anytypeio/go-anytype-infrastructure-experiments/common/commonspace/treegetter" - "github.com/anytypeio/go-anytype-infrastructure-experiments/common/pkg/acl/tree" - "github.com/anytypeio/go-anytype-infrastructure-experiments/common/pkg/ocache" + "github.com/anytypeio/go-anytype-infrastructure-experiments/common/app/ocache" + "github.com/anytypeio/go-anytype-infrastructure-experiments/common/commonspace/object/tree/objecttree" + "github.com/anytypeio/go-anytype-infrastructure-experiments/common/commonspace/object/treegetter" "github.com/anytypeio/go-anytype-infrastructure-experiments/node/nodespace" "time" ) @@ -61,13 +61,13 @@ func (c *treeCache) Name() (name string) { return treegetter.CName } -func (c *treeCache) GetTree(ctx context.Context, spaceId, id string) (tr tree.ObjectTree, err error) { +func (c *treeCache) GetTree(ctx context.Context, spaceId, id string) (tr objecttree.ObjectTree, err error) { ctx = context.WithValue(ctx, spaceKey, spaceId) value, err := c.cache.Get(ctx, id) if err != nil { return } - tr = value.(tree.ObjectTree) + tr = value.(objecttree.ObjectTree) return } diff --git a/node/nodespace/service.go b/node/nodespace/service.go index 82faa71f..1d07efbb 100644 --- a/node/nodespace/service.go +++ b/node/nodespace/service.go @@ -4,12 +4,12 @@ import ( "context" "github.com/anytypeio/go-anytype-infrastructure-experiments/common/app" "github.com/anytypeio/go-anytype-infrastructure-experiments/common/app/logger" + "github.com/anytypeio/go-anytype-infrastructure-experiments/common/app/ocache" "github.com/anytypeio/go-anytype-infrastructure-experiments/common/commonspace" + "github.com/anytypeio/go-anytype-infrastructure-experiments/common/commonspace/spacestorage" "github.com/anytypeio/go-anytype-infrastructure-experiments/common/commonspace/spacesyncproto" - "github.com/anytypeio/go-anytype-infrastructure-experiments/common/commonspace/storage" "github.com/anytypeio/go-anytype-infrastructure-experiments/common/config" "github.com/anytypeio/go-anytype-infrastructure-experiments/common/net/rpc/server" - "github.com/anytypeio/go-anytype-infrastructure-experiments/common/pkg/ocache" "time" ) @@ -29,14 +29,14 @@ type Service interface { type service struct { conf config.Space spaceCache ocache.OCache - commonSpace commonspace.Service - spaceStorageProvider storage.SpaceStorageProvider + commonSpace commonspace.SpaceService + spaceStorageProvider spacestorage.SpaceStorageProvider } func (s *service) Init(a *app.App) (err error) { s.conf = a.MustComponent(config.CName).(*config.Config).Space - s.commonSpace = a.MustComponent(commonspace.CName).(commonspace.Service) - s.spaceStorageProvider = a.MustComponent(storage.CName).(storage.SpaceStorageProvider) + s.commonSpace = a.MustComponent(commonspace.CName).(commonspace.SpaceService) + s.spaceStorageProvider = a.MustComponent(spacestorage.CName).(spacestorage.SpaceStorageProvider) s.spaceCache = ocache.New( s.loadSpace, ocache.WithLogger(log.Sugar()), diff --git a/node/storage/keys.go b/node/storage/keys.go index 650d392c..902c58ac 100644 --- a/node/storage/keys.go +++ b/node/storage/keys.go @@ -2,7 +2,7 @@ package storage import ( "fmt" - "github.com/anytypeio/go-anytype-infrastructure-experiments/common/pkg/acl/storage" + "github.com/anytypeio/go-anytype-infrastructure-experiments/common/commonspace/object/tree/treestorage" "strings" ) @@ -21,7 +21,7 @@ func (a aclKeys) RootIdKey() []byte { } func (a aclKeys) RawRecordKey(id string) []byte { - return storage.JoinStringsToBytes("a", id) + return treestorage.JoinStringsToBytes("a", id) } type treeKeys struct { @@ -33,7 +33,7 @@ type treeKeys struct { func newTreeKeys(id string) treeKeys { return treeKeys{ id: id, - headsKey: storage.JoinStringsToBytes("t", id, "heads"), + headsKey: treestorage.JoinStringsToBytes("t", id, "heads"), prefix: fmt.Sprintf("t/%s", id), } } @@ -43,7 +43,7 @@ func (t treeKeys) HeadsKey() []byte { } func (t treeKeys) RawChangeKey(id string) []byte { - return storage.JoinStringsToBytes("t", t.id, id) + return treestorage.JoinStringsToBytes("t", t.id, id) } func (t treeKeys) isTreeRelatedKey(key string) bool { @@ -55,7 +55,7 @@ type spaceKeys struct { } func newSpaceKeys(spaceId string) spaceKeys { - return spaceKeys{headerKey: storage.JoinStringsToBytes("s", spaceId)} + return spaceKeys{headerKey: treestorage.JoinStringsToBytes("s", spaceId)} } var ( @@ -76,7 +76,7 @@ func (s spaceKeys) SpaceSettingsIdKey() []byte { } func (s spaceKeys) TreeDeletedKey(id string) []byte { - return storage.JoinStringsToBytes("del", id) + return treestorage.JoinStringsToBytes("del", id) } func isTreeHeadsKey(key string) bool { diff --git a/node/storage/liststorage.go b/node/storage/liststorage.go index e7fa3aba..d83150da 100644 --- a/node/storage/liststorage.go +++ b/node/storage/liststorage.go @@ -3,8 +3,8 @@ package storage import ( "context" "github.com/akrylysov/pogreb" - "github.com/anytypeio/go-anytype-infrastructure-experiments/common/pkg/acl/aclrecordproto" - "github.com/anytypeio/go-anytype-infrastructure-experiments/common/pkg/acl/storage" + "github.com/anytypeio/go-anytype-infrastructure-experiments/common/commonspace/object/acl/aclrecordproto" + "github.com/anytypeio/go-anytype-infrastructure-experiments/common/commonspace/object/acl/liststorage" ) type listStorage struct { @@ -14,14 +14,14 @@ type listStorage struct { root *aclrecordproto.RawACLRecordWithId } -func newListStorage(db *pogreb.DB) (ls storage.ListStorage, err error) { +func newListStorage(db *pogreb.DB) (ls liststorage.ListStorage, err error) { keys := aclKeys{} rootId, err := db.Get(keys.RootIdKey()) if err != nil { return } if rootId == nil { - err = storage.ErrUnknownACLId + err = liststorage.ErrUnknownACLId return } @@ -30,7 +30,7 @@ func newListStorage(db *pogreb.DB) (ls storage.ListStorage, err error) { return } if root == nil { - err = storage.ErrUnknownACLId + err = liststorage.ErrUnknownACLId return } @@ -48,7 +48,7 @@ func newListStorage(db *pogreb.DB) (ls storage.ListStorage, err error) { return } -func createListStorage(db *pogreb.DB, root *aclrecordproto.RawACLRecordWithId) (ls storage.ListStorage, err error) { +func createListStorage(db *pogreb.DB, root *aclrecordproto.RawACLRecordWithId) (ls liststorage.ListStorage, err error) { keys := aclKeys{} has, err := db.Has(keys.RootIdKey()) if err != nil { @@ -96,7 +96,7 @@ func (l *listStorage) Head() (head string, err error) { return } if bytes == nil { - err = storage.ErrUnknownACLId + err = liststorage.ErrUnknownACLId return } head = string(bytes) @@ -109,7 +109,7 @@ func (l *listStorage) GetRawRecord(ctx context.Context, id string) (raw *aclreco return } if res == nil { - err = storage.ErrUnknownRecord + err = liststorage.ErrUnknownRecord return } diff --git a/node/storage/liststorage_test.go b/node/storage/liststorage_test.go index ae04e3af..a84cde5d 100644 --- a/node/storage/liststorage_test.go +++ b/node/storage/liststorage_test.go @@ -2,14 +2,14 @@ package storage import ( "context" - "github.com/anytypeio/go-anytype-infrastructure-experiments/common/pkg/acl/aclrecordproto" - "github.com/anytypeio/go-anytype-infrastructure-experiments/common/pkg/acl/storage" + "github.com/anytypeio/go-anytype-infrastructure-experiments/common/commonspace/object/acl/aclrecordproto" + "github.com/anytypeio/go-anytype-infrastructure-experiments/common/commonspace/object/acl/liststorage" "github.com/stretchr/testify/require" "testing" ) -func testList(t *testing.T, store storage.ListStorage, root *aclrecordproto.RawACLRecordWithId, head string) { - require.Equal(t, store.ID(), root.Id) +func testList(t *testing.T, store liststorage.ListStorage, root *aclrecordproto.RawACLRecordWithId, head string) { + require.Equal(t, store.Id(), root.Id) aclRoot, err := store.Root() require.NoError(t, err) diff --git a/node/storage/spacestorage.go b/node/storage/spacestorage.go index 15a88cf0..e24a14c2 100644 --- a/node/storage/spacestorage.go +++ b/node/storage/spacestorage.go @@ -3,10 +3,11 @@ package storage import ( "github.com/akrylysov/pogreb" "github.com/anytypeio/go-anytype-infrastructure-experiments/common/app/logger" + "github.com/anytypeio/go-anytype-infrastructure-experiments/common/commonspace/object/acl/liststorage" + "github.com/anytypeio/go-anytype-infrastructure-experiments/common/commonspace/object/tree/treechangeproto" + "github.com/anytypeio/go-anytype-infrastructure-experiments/common/commonspace/object/tree/treestorage" + spacestorage "github.com/anytypeio/go-anytype-infrastructure-experiments/common/commonspace/spacestorage" "github.com/anytypeio/go-anytype-infrastructure-experiments/common/commonspace/spacesyncproto" - spacestorage "github.com/anytypeio/go-anytype-infrastructure-experiments/common/commonspace/storage" - "github.com/anytypeio/go-anytype-infrastructure-experiments/common/pkg/acl/storage" - "github.com/anytypeio/go-anytype-infrastructure-experiments/common/pkg/acl/treechangeproto" "go.uber.org/zap" "os" "path" @@ -24,7 +25,7 @@ type spaceStorage struct { spaceSettingsId string objDb *pogreb.DB keys spaceKeys - aclStorage storage.ListStorage + aclStorage liststorage.ListStorage header *spacesyncproto.RawSpaceHeaderWithId } @@ -138,7 +139,7 @@ func createSpaceStorage(rootPath string, payload spacestorage.SpaceStorageCreate header: payload.SpaceHeaderWithId, } - _, err = store.CreateTreeStorage(storage.TreeStorageCreatePayload{ + _, err = store.CreateTreeStorage(treestorage.TreeStorageCreatePayload{ RootRawChange: payload.SpaceSettingsWithId, Changes: []*treechangeproto.RawTreeChangeWithId{payload.SpaceSettingsWithId}, Heads: []string{payload.SpaceSettingsWithId.Id}, @@ -173,15 +174,15 @@ func (s *spaceStorage) SpaceSettingsId() string { return s.spaceSettingsId } -func (s *spaceStorage) TreeStorage(id string) (storage.TreeStorage, error) { +func (s *spaceStorage) TreeStorage(id string) (treestorage.TreeStorage, error) { return newTreeStorage(s.objDb, id) } -func (s *spaceStorage) CreateTreeStorage(payload storage.TreeStorageCreatePayload) (ts storage.TreeStorage, err error) { +func (s *spaceStorage) CreateTreeStorage(payload treestorage.TreeStorageCreatePayload) (ts treestorage.TreeStorage, err error) { return createTreeStorage(s.objDb, payload) } -func (s *spaceStorage) ACLStorage() (storage.ListStorage, error) { +func (s *spaceStorage) ACLStorage() (liststorage.ListStorage, error) { return s.aclStorage, nil } diff --git a/node/storage/spacestorage_test.go b/node/storage/spacestorage_test.go index 8b4460e0..52be2e12 100644 --- a/node/storage/spacestorage_test.go +++ b/node/storage/spacestorage_test.go @@ -1,10 +1,10 @@ package storage import ( + "github.com/anytypeio/go-anytype-infrastructure-experiments/common/commonspace/object/acl/aclrecordproto" + "github.com/anytypeio/go-anytype-infrastructure-experiments/common/commonspace/object/tree/treechangeproto" + spacestorage "github.com/anytypeio/go-anytype-infrastructure-experiments/common/commonspace/spacestorage" "github.com/anytypeio/go-anytype-infrastructure-experiments/common/commonspace/spacesyncproto" - spacestorage "github.com/anytypeio/go-anytype-infrastructure-experiments/common/commonspace/storage" - "github.com/anytypeio/go-anytype-infrastructure-experiments/common/pkg/acl/aclrecordproto" - "github.com/anytypeio/go-anytype-infrastructure-experiments/common/pkg/acl/treechangeproto" "github.com/stretchr/testify/require" "os" "sort" diff --git a/node/storage/storageservice.go b/node/storage/storageservice.go index 24943a62..5c69b652 100644 --- a/node/storage/storageservice.go +++ b/node/storage/storageservice.go @@ -2,7 +2,7 @@ package storage import ( "github.com/anytypeio/go-anytype-infrastructure-experiments/common/app" - "github.com/anytypeio/go-anytype-infrastructure-experiments/common/commonspace/storage" + "github.com/anytypeio/go-anytype-infrastructure-experiments/common/commonspace/spacestorage" "github.com/anytypeio/go-anytype-infrastructure-experiments/common/config" "os" ) @@ -12,7 +12,7 @@ type storageService struct { } type NodeStorage interface { - storage.SpaceStorageProvider + spacestorage.SpaceStorageProvider AllSpaceIds() (ids []string, err error) } @@ -27,14 +27,14 @@ func (s *storageService) Init(a *app.App) (err error) { } func (s *storageService) Name() (name string) { - return storage.CName + return spacestorage.CName } -func (s *storageService) SpaceStorage(id string) (storage.SpaceStorage, error) { +func (s *storageService) SpaceStorage(id string) (spacestorage.SpaceStorage, error) { return newSpaceStorage(s.rootPath, id) } -func (s *storageService) CreateSpaceStorage(payload storage.SpaceStorageCreatePayload) (storage.SpaceStorage, error) { +func (s *storageService) CreateSpaceStorage(payload spacestorage.SpaceStorageCreatePayload) (spacestorage.SpaceStorage, error) { return createSpaceStorage(s.rootPath, payload) } diff --git a/node/storage/treestorage.go b/node/storage/treestorage.go index 4877203e..65b8e20c 100644 --- a/node/storage/treestorage.go +++ b/node/storage/treestorage.go @@ -3,8 +3,8 @@ package storage import ( "context" "github.com/akrylysov/pogreb" - "github.com/anytypeio/go-anytype-infrastructure-experiments/common/pkg/acl/storage" - "github.com/anytypeio/go-anytype-infrastructure-experiments/common/pkg/acl/treechangeproto" + "github.com/anytypeio/go-anytype-infrastructure-experiments/common/commonspace/object/tree/treechangeproto" + "github.com/anytypeio/go-anytype-infrastructure-experiments/common/commonspace/object/tree/treestorage" ) type treeStorage struct { @@ -14,14 +14,14 @@ type treeStorage struct { root *treechangeproto.RawTreeChangeWithId } -func newTreeStorage(db *pogreb.DB, treeId string) (ts storage.TreeStorage, err error) { +func newTreeStorage(db *pogreb.DB, treeId string) (ts treestorage.TreeStorage, err error) { keys := newTreeKeys(treeId) heads, err := db.Get(keys.HeadsKey()) if err != nil { return } if heads == nil { - err = storage.ErrUnknownTreeId + err = treestorage.ErrUnknownTreeId return } @@ -30,7 +30,7 @@ func newTreeStorage(db *pogreb.DB, treeId string) (ts storage.TreeStorage, err e return } if root == nil { - err = storage.ErrUnknownTreeId + err = treestorage.ErrUnknownTreeId return } @@ -47,18 +47,18 @@ func newTreeStorage(db *pogreb.DB, treeId string) (ts storage.TreeStorage, err e return } -func createTreeStorage(db *pogreb.DB, payload storage.TreeStorageCreatePayload) (ts storage.TreeStorage, err error) { - keys := newTreeKeys(payload.TreeId) +func createTreeStorage(db *pogreb.DB, payload treestorage.TreeStorageCreatePayload) (ts treestorage.TreeStorage, err error) { + keys := newTreeKeys(payload.RootRawChange.Id) has, err := db.Has(keys.HeadsKey()) if err != nil { return } if has { - err = storage.ErrTreeExists + err = treestorage.ErrTreeExists return } - heads := storage.CreateHeadsPayload(payload.Heads) + heads := treestorage.CreateHeadsPayload(payload.Heads) for _, ch := range payload.Changes { err = db.Put(keys.RawChangeKey(ch.Id), ch.GetRawChange()) @@ -100,15 +100,15 @@ func (t *treeStorage) Heads() (heads []string, err error) { return } if headsBytes == nil { - err = storage.ErrUnknownTreeId + err = treestorage.ErrUnknownTreeId return } - heads = storage.ParseHeads(headsBytes) + heads = treestorage.ParseHeads(headsBytes) return } func (t *treeStorage) SetHeads(heads []string) (err error) { - payload := storage.CreateHeadsPayload(heads) + payload := treestorage.CreateHeadsPayload(heads) return t.db.Put(t.keys.HeadsKey(), payload) } @@ -122,7 +122,7 @@ func (t *treeStorage) GetRawChange(ctx context.Context, id string) (raw *treecha return } if res == nil { - err = storage.ErrUnknownChange + err = treestorage.ErrUnknownChange } raw = &treechangeproto.RawTreeChangeWithId{ diff --git a/node/storage/treestorage_test.go b/node/storage/treestorage_test.go index 6fe391f4..118d557c 100644 --- a/node/storage/treestorage_test.go +++ b/node/storage/treestorage_test.go @@ -3,18 +3,18 @@ package storage import ( "context" "github.com/akrylysov/pogreb" - "github.com/anytypeio/go-anytype-infrastructure-experiments/common/pkg/acl/storage" - "github.com/anytypeio/go-anytype-infrastructure-experiments/common/pkg/acl/treechangeproto" + "github.com/anytypeio/go-anytype-infrastructure-experiments/common/commonspace/object/tree/treechangeproto" + "github.com/anytypeio/go-anytype-infrastructure-experiments/common/commonspace/object/tree/treestorage" "github.com/stretchr/testify/require" "os" "testing" ) -func treeTestPayload() storage.TreeStorageCreatePayload { +func treeTestPayload() treestorage.TreeStorageCreatePayload { rootRawChange := &treechangeproto.RawTreeChangeWithId{RawChange: []byte("some"), Id: "rootId"} otherChange := &treechangeproto.RawTreeChangeWithId{RawChange: []byte("some other"), Id: "otherId"} changes := []*treechangeproto.RawTreeChangeWithId{rootRawChange, otherChange} - return storage.TreeStorageCreatePayload{ + return treestorage.TreeStorageCreatePayload{ RootRawChange: rootRawChange, Changes: changes, Heads: []string{rootRawChange.Id}, @@ -62,8 +62,8 @@ func (fx *fixture) testNoKeysExist(t *testing.T, treeId string) { require.False(t, res) } -func testTreePayload(t *testing.T, store storage.TreeStorage, payload storage.TreeStorageCreatePayload) { - require.Equal(t, payload.RootRawChange.Id, store.ID()) +func testTreePayload(t *testing.T, store treestorage.TreeStorage, payload treestorage.TreeStorageCreatePayload) { + require.Equal(t, payload.RootRawChange.Id, store.Id()) root, err := store.Root() require.NoError(t, err) @@ -162,7 +162,7 @@ func TestTreeStorage_Delete(t *testing.T) { require.NoError(t, err) _, err = newTreeStorage(fx.db, payload.RootRawChange.Id) - require.Equal(t, err, storage.ErrUnknownTreeId) + require.Equal(t, err, treestorage.ErrUnknownTreeId) fx.testNoKeysExist(t, payload.RootRawChange.Id) }) diff --git a/util/cmd/debug/commands/client/service.go b/util/cmd/debug/commands/client/service.go index 778f4c5e..f370e0e0 100644 --- a/util/cmd/debug/commands/client/service.go +++ b/util/cmd/debug/commands/client/service.go @@ -2,7 +2,7 @@ package client import ( "context" - "github.com/anytypeio/go-anytype-infrastructure-experiments/client/api/apiproto" + "github.com/anytypeio/go-anytype-infrastructure-experiments/client/debug/clientdebugrpc/clientdebugrpcproto" "github.com/anytypeio/go-anytype-infrastructure-experiments/common/app" "github.com/anytypeio/go-anytype-infrastructure-experiments/common/app/logger" "github.com/anytypeio/go-anytype-infrastructure-experiments/util/cmd/debug/drpcclient" @@ -14,18 +14,21 @@ var log = logger.NewNamed(CName) type Service interface { app.Component - CreateSpace(ctx context.Context, ip string, request *apiproto.CreateSpaceRequest) (resp *apiproto.CreateSpaceResponse, err error) - DeriveSpace(ctx context.Context, ip string, request *apiproto.DeriveSpaceRequest) (resp *apiproto.DeriveSpaceResponse, err error) - CreateDocument(ctx context.Context, ip string, request *apiproto.CreateDocumentRequest) (resp *apiproto.CreateDocumentResponse, err error) - DeleteDocument(ctx context.Context, ip string, request *apiproto.DeleteDocumentRequest) (resp *apiproto.DeleteDocumentResponse, err error) - AddText(ctx context.Context, ip string, request *apiproto.AddTextRequest) (resp *apiproto.AddTextResponse, err error) - DumpTree(ctx context.Context, ip string, request *apiproto.DumpTreeRequest) (resp *apiproto.DumpTreeResponse, err error) - TreeParams(ctx context.Context, ip string, request *apiproto.TreeParamsRequest) (resp *apiproto.TreeParamsResponse, err error) - AllTrees(ctx context.Context, ip string, request *apiproto.AllTreesRequest) (resp *apiproto.AllTreesResponse, err error) - AllSpaces(ctx context.Context, ip string, request *apiproto.AllSpacesRequest) (resp *apiproto.AllSpacesResponse, err error) - LoadSpace(ctx context.Context, ip string, request *apiproto.LoadSpaceRequest) (res *apiproto.LoadSpaceResponse, err error) - Watch(ctx context.Context, ip string, request *apiproto.WatchRequest) (res *apiproto.WatchResponse, err error) - Unwatch(ctx context.Context, ip string, request *apiproto.UnwatchRequest) (res *apiproto.UnwatchResponse, err error) + CreateSpace(ctx context.Context, ip string, request *clientdebugrpcproto.CreateSpaceRequest) (resp *clientdebugrpcproto.CreateSpaceResponse, err error) + DeriveSpace(ctx context.Context, ip string, request *clientdebugrpcproto.DeriveSpaceRequest) (resp *clientdebugrpcproto.DeriveSpaceResponse, err error) + CreateDocument(ctx context.Context, ip string, request *clientdebugrpcproto.CreateDocumentRequest) (resp *clientdebugrpcproto.CreateDocumentResponse, err error) + DeleteDocument(ctx context.Context, ip string, request *clientdebugrpcproto.DeleteDocumentRequest) (resp *clientdebugrpcproto.DeleteDocumentResponse, err error) + AddText(ctx context.Context, ip string, request *clientdebugrpcproto.AddTextRequest) (resp *clientdebugrpcproto.AddTextResponse, err error) + DumpTree(ctx context.Context, ip string, request *clientdebugrpcproto.DumpTreeRequest) (resp *clientdebugrpcproto.DumpTreeResponse, err error) + TreeParams(ctx context.Context, ip string, request *clientdebugrpcproto.TreeParamsRequest) (resp *clientdebugrpcproto.TreeParamsResponse, err error) + AllTrees(ctx context.Context, ip string, request *clientdebugrpcproto.AllTreesRequest) (resp *clientdebugrpcproto.AllTreesResponse, err error) + AllSpaces(ctx context.Context, ip string, request *clientdebugrpcproto.AllSpacesRequest) (resp *clientdebugrpcproto.AllSpacesResponse, err error) + LoadSpace(ctx context.Context, ip string, request *clientdebugrpcproto.LoadSpaceRequest) (res *clientdebugrpcproto.LoadSpaceResponse, err error) + Watch(ctx context.Context, ip string, request *clientdebugrpcproto.WatchRequest) (res *clientdebugrpcproto.WatchResponse, err error) + Unwatch(ctx context.Context, ip string, request *clientdebugrpcproto.UnwatchRequest) (res *clientdebugrpcproto.UnwatchResponse, err error) + PutFile(ctx context.Context, ip string, request *clientdebugrpcproto.PutFileRequest) (resp *clientdebugrpcproto.PutFileResponse, err error) + GetFile(ctx context.Context, ip string, request *clientdebugrpcproto.GetFileRequest) (resp *clientdebugrpcproto.GetFileResponse, err error) + DeleteFile(ctx context.Context, ip string, request *clientdebugrpcproto.DeleteFileRequest) (resp *clientdebugrpcproto.DeleteFileResponse, err error) } type service struct { @@ -45,7 +48,7 @@ func (s *service) Name() (name string) { return CName } -func (s *service) CreateSpace(ctx context.Context, ip string, request *apiproto.CreateSpaceRequest) (resp *apiproto.CreateSpaceResponse, err error) { +func (s *service) CreateSpace(ctx context.Context, ip string, request *clientdebugrpcproto.CreateSpaceRequest) (resp *clientdebugrpcproto.CreateSpaceResponse, err error) { cl, err := s.client.GetClient(ctx, ip) if err != nil { return @@ -53,7 +56,7 @@ func (s *service) CreateSpace(ctx context.Context, ip string, request *apiproto. return cl.CreateSpace(ctx, request) } -func (s *service) DeriveSpace(ctx context.Context, ip string, request *apiproto.DeriveSpaceRequest) (resp *apiproto.DeriveSpaceResponse, err error) { +func (s *service) DeriveSpace(ctx context.Context, ip string, request *clientdebugrpcproto.DeriveSpaceRequest) (resp *clientdebugrpcproto.DeriveSpaceResponse, err error) { cl, err := s.client.GetClient(ctx, ip) if err != nil { return @@ -61,7 +64,7 @@ func (s *service) DeriveSpace(ctx context.Context, ip string, request *apiproto. return cl.DeriveSpace(ctx, request) } -func (s *service) CreateDocument(ctx context.Context, ip string, request *apiproto.CreateDocumentRequest) (resp *apiproto.CreateDocumentResponse, err error) { +func (s *service) CreateDocument(ctx context.Context, ip string, request *clientdebugrpcproto.CreateDocumentRequest) (resp *clientdebugrpcproto.CreateDocumentResponse, err error) { cl, err := s.client.GetClient(ctx, ip) if err != nil { return @@ -69,7 +72,7 @@ func (s *service) CreateDocument(ctx context.Context, ip string, request *apipro return cl.CreateDocument(ctx, request) } -func (s *service) DeleteDocument(ctx context.Context, ip string, request *apiproto.DeleteDocumentRequest) (resp *apiproto.DeleteDocumentResponse, err error) { +func (s *service) DeleteDocument(ctx context.Context, ip string, request *clientdebugrpcproto.DeleteDocumentRequest) (resp *clientdebugrpcproto.DeleteDocumentResponse, err error) { cl, err := s.client.GetClient(ctx, ip) if err != nil { return @@ -77,7 +80,7 @@ func (s *service) DeleteDocument(ctx context.Context, ip string, request *apipro return cl.DeleteDocument(ctx, request) } -func (s *service) AddText(ctx context.Context, ip string, request *apiproto.AddTextRequest) (resp *apiproto.AddTextResponse, err error) { +func (s *service) AddText(ctx context.Context, ip string, request *clientdebugrpcproto.AddTextRequest) (resp *clientdebugrpcproto.AddTextResponse, err error) { cl, err := s.client.GetClient(ctx, ip) if err != nil { return @@ -85,7 +88,7 @@ func (s *service) AddText(ctx context.Context, ip string, request *apiproto.AddT return cl.AddText(ctx, request) } -func (s *service) DumpTree(ctx context.Context, ip string, request *apiproto.DumpTreeRequest) (resp *apiproto.DumpTreeResponse, err error) { +func (s *service) DumpTree(ctx context.Context, ip string, request *clientdebugrpcproto.DumpTreeRequest) (resp *clientdebugrpcproto.DumpTreeResponse, err error) { cl, err := s.client.GetClient(ctx, ip) if err != nil { return @@ -93,7 +96,7 @@ func (s *service) DumpTree(ctx context.Context, ip string, request *apiproto.Dum return cl.DumpTree(ctx, request) } -func (s *service) TreeParams(ctx context.Context, ip string, request *apiproto.TreeParamsRequest) (resp *apiproto.TreeParamsResponse, err error) { +func (s *service) TreeParams(ctx context.Context, ip string, request *clientdebugrpcproto.TreeParamsRequest) (resp *clientdebugrpcproto.TreeParamsResponse, err error) { cl, err := s.client.GetClient(ctx, ip) if err != nil { return @@ -101,7 +104,7 @@ func (s *service) TreeParams(ctx context.Context, ip string, request *apiproto.T return cl.TreeParams(ctx, request) } -func (s *service) AllTrees(ctx context.Context, ip string, request *apiproto.AllTreesRequest) (resp *apiproto.AllTreesResponse, err error) { +func (s *service) AllTrees(ctx context.Context, ip string, request *clientdebugrpcproto.AllTreesRequest) (resp *clientdebugrpcproto.AllTreesResponse, err error) { cl, err := s.client.GetClient(ctx, ip) if err != nil { return @@ -109,7 +112,7 @@ func (s *service) AllTrees(ctx context.Context, ip string, request *apiproto.All return cl.AllTrees(ctx, request) } -func (s *service) AllSpaces(ctx context.Context, ip string, request *apiproto.AllSpacesRequest) (resp *apiproto.AllSpacesResponse, err error) { +func (s *service) AllSpaces(ctx context.Context, ip string, request *clientdebugrpcproto.AllSpacesRequest) (resp *clientdebugrpcproto.AllSpacesResponse, err error) { cl, err := s.client.GetClient(ctx, ip) if err != nil { return @@ -117,7 +120,7 @@ func (s *service) AllSpaces(ctx context.Context, ip string, request *apiproto.Al return cl.AllSpaces(ctx, request) } -func (s *service) LoadSpace(ctx context.Context, ip string, request *apiproto.LoadSpaceRequest) (res *apiproto.LoadSpaceResponse, err error) { +func (s *service) LoadSpace(ctx context.Context, ip string, request *clientdebugrpcproto.LoadSpaceRequest) (res *clientdebugrpcproto.LoadSpaceResponse, err error) { cl, err := s.client.GetClient(ctx, ip) if err != nil { return @@ -125,7 +128,7 @@ func (s *service) LoadSpace(ctx context.Context, ip string, request *apiproto.Lo return cl.LoadSpace(ctx, request) } -func (s *service) Watch(ctx context.Context, ip string, request *apiproto.WatchRequest) (res *apiproto.WatchResponse, err error) { +func (s *service) Watch(ctx context.Context, ip string, request *clientdebugrpcproto.WatchRequest) (res *clientdebugrpcproto.WatchResponse, err error) { cl, err := s.client.GetClient(ctx, ip) if err != nil { return @@ -133,10 +136,34 @@ func (s *service) Watch(ctx context.Context, ip string, request *apiproto.WatchR return cl.Watch(ctx, request) } -func (s *service) Unwatch(ctx context.Context, ip string, request *apiproto.UnwatchRequest) (res *apiproto.UnwatchResponse, err error) { +func (s *service) Unwatch(ctx context.Context, ip string, request *clientdebugrpcproto.UnwatchRequest) (res *clientdebugrpcproto.UnwatchResponse, err error) { cl, err := s.client.GetClient(ctx, ip) if err != nil { return } return cl.Unwatch(ctx, request) } + +func (s *service) PutFile(ctx context.Context, ip string, request *clientdebugrpcproto.PutFileRequest) (resp *clientdebugrpcproto.PutFileResponse, err error) { + cl, err := s.client.GetClient(ctx, ip) + if err != nil { + return + } + return cl.PutFile(ctx, request) +} + +func (s *service) GetFile(ctx context.Context, ip string, request *clientdebugrpcproto.GetFileRequest) (resp *clientdebugrpcproto.GetFileResponse, err error) { + cl, err := s.client.GetClient(ctx, ip) + if err != nil { + return + } + return cl.GetFile(ctx, request) +} + +func (s *service) DeleteFile(ctx context.Context, ip string, request *clientdebugrpcproto.DeleteFileRequest) (resp *clientdebugrpcproto.DeleteFileResponse, err error) { + cl, err := s.client.GetClient(ctx, ip) + if err != nil { + return + } + return cl.DeleteFile(ctx, request) +} diff --git a/util/cmd/debug/commands/clientcmds.go b/util/cmd/debug/commands/clientcmds.go index d7bf156b..84e3a39c 100644 --- a/util/cmd/debug/commands/clientcmds.go +++ b/util/cmd/debug/commands/clientcmds.go @@ -3,7 +3,7 @@ package commands import ( "context" "fmt" - clientproto "github.com/anytypeio/go-anytype-infrastructure-experiments/client/api/apiproto" + clientproto "github.com/anytypeio/go-anytype-infrastructure-experiments/client/debug/clientdebugrpc/clientdebugrpcproto" "github.com/spf13/cobra" ) diff --git a/util/cmd/debug/commands/node/service.go b/util/cmd/debug/commands/node/service.go index cc09f9f6..32b81fcb 100644 --- a/util/cmd/debug/commands/node/service.go +++ b/util/cmd/debug/commands/node/service.go @@ -4,7 +4,7 @@ import ( "context" "github.com/anytypeio/go-anytype-infrastructure-experiments/common/app" "github.com/anytypeio/go-anytype-infrastructure-experiments/common/app/logger" - "github.com/anytypeio/go-anytype-infrastructure-experiments/node/api/apiproto" + "github.com/anytypeio/go-anytype-infrastructure-experiments/node/debug/nodedebugrpc/nodedebugrpcproto" "github.com/anytypeio/go-anytype-infrastructure-experiments/util/cmd/debug/drpcclient" ) @@ -14,10 +14,10 @@ var log = logger.NewNamed(CName) type Service interface { app.Component - DumpTree(ctx context.Context, ip string, request *apiproto.DumpTreeRequest) (resp *apiproto.DumpTreeResponse, err error) - TreeParams(ctx context.Context, ip string, request *apiproto.TreeParamsRequest) (resp *apiproto.TreeParamsResponse, err error) - AllTrees(ctx context.Context, ip string, request *apiproto.AllTreesRequest) (resp *apiproto.AllTreesResponse, err error) - AllSpaces(ctx context.Context, ip string, request *apiproto.AllSpacesRequest) (resp *apiproto.AllSpacesResponse, err error) + DumpTree(ctx context.Context, ip string, request *nodedebugrpcproto.DumpTreeRequest) (resp *nodedebugrpcproto.DumpTreeResponse, err error) + TreeParams(ctx context.Context, ip string, request *nodedebugrpcproto.TreeParamsRequest) (resp *nodedebugrpcproto.TreeParamsResponse, err error) + AllTrees(ctx context.Context, ip string, request *nodedebugrpcproto.AllTreesRequest) (resp *nodedebugrpcproto.AllTreesResponse, err error) + AllSpaces(ctx context.Context, ip string, request *nodedebugrpcproto.AllSpacesRequest) (resp *nodedebugrpcproto.AllSpacesResponse, err error) } type service struct { @@ -37,7 +37,7 @@ func (s *service) Name() (name string) { return CName } -func (s *service) DumpTree(ctx context.Context, ip string, request *apiproto.DumpTreeRequest) (resp *apiproto.DumpTreeResponse, err error) { +func (s *service) DumpTree(ctx context.Context, ip string, request *nodedebugrpcproto.DumpTreeRequest) (resp *nodedebugrpcproto.DumpTreeResponse, err error) { cl, err := s.client.GetNode(ctx, ip) if err != nil { return @@ -45,7 +45,7 @@ func (s *service) DumpTree(ctx context.Context, ip string, request *apiproto.Dum return cl.DumpTree(ctx, request) } -func (s *service) TreeParams(ctx context.Context, ip string, request *apiproto.TreeParamsRequest) (resp *apiproto.TreeParamsResponse, err error) { +func (s *service) TreeParams(ctx context.Context, ip string, request *nodedebugrpcproto.TreeParamsRequest) (resp *nodedebugrpcproto.TreeParamsResponse, err error) { cl, err := s.client.GetNode(ctx, ip) if err != nil { return @@ -53,7 +53,7 @@ func (s *service) TreeParams(ctx context.Context, ip string, request *apiproto.T return cl.TreeParams(ctx, request) } -func (s *service) AllTrees(ctx context.Context, ip string, request *apiproto.AllTreesRequest) (resp *apiproto.AllTreesResponse, err error) { +func (s *service) AllTrees(ctx context.Context, ip string, request *nodedebugrpcproto.AllTreesRequest) (resp *nodedebugrpcproto.AllTreesResponse, err error) { cl, err := s.client.GetNode(ctx, ip) if err != nil { return @@ -61,7 +61,7 @@ func (s *service) AllTrees(ctx context.Context, ip string, request *apiproto.All return cl.AllTrees(ctx, request) } -func (s *service) AllSpaces(ctx context.Context, ip string, request *apiproto.AllSpacesRequest) (resp *apiproto.AllSpacesResponse, err error) { +func (s *service) AllSpaces(ctx context.Context, ip string, request *nodedebugrpcproto.AllSpacesRequest) (resp *nodedebugrpcproto.AllSpacesResponse, err error) { cl, err := s.client.GetNode(ctx, ip) if err != nil { return diff --git a/util/cmd/debug/commands/nodecmds.go b/util/cmd/debug/commands/nodecmds.go index 4e86875e..572cd710 100644 --- a/util/cmd/debug/commands/nodecmds.go +++ b/util/cmd/debug/commands/nodecmds.go @@ -3,7 +3,7 @@ package commands import ( "context" "fmt" - nodeproto "github.com/anytypeio/go-anytype-infrastructure-experiments/node/api/apiproto" + nodeproto "github.com/anytypeio/go-anytype-infrastructure-experiments/node/debug/nodedebugrpc/nodedebugrpcproto" "github.com/spf13/cobra" ) diff --git a/util/cmd/debug/commands/scripts.go b/util/cmd/debug/commands/scripts.go index 5f1c14f4..1101f8dd 100644 --- a/util/cmd/debug/commands/scripts.go +++ b/util/cmd/debug/commands/scripts.go @@ -3,7 +3,7 @@ package commands import ( "context" "fmt" - clientproto "github.com/anytypeio/go-anytype-infrastructure-experiments/client/api/apiproto" + clientproto "github.com/anytypeio/go-anytype-infrastructure-experiments/client/debug/clientdebugrpc/clientdebugrpcproto" "github.com/spf13/cobra" "github.com/zeebo/errs" "math/rand" diff --git a/util/cmd/debug/drpcclient/service.go b/util/cmd/debug/drpcclient/service.go index 2f59cfd0..8a374170 100644 --- a/util/cmd/debug/drpcclient/service.go +++ b/util/cmd/debug/drpcclient/service.go @@ -2,11 +2,11 @@ package drpcclient import ( "context" - clientproto "github.com/anytypeio/go-anytype-infrastructure-experiments/client/api/apiproto" + clientproto "github.com/anytypeio/go-anytype-infrastructure-experiments/client/debug/clientdebugrpc/clientdebugrpcproto" "github.com/anytypeio/go-anytype-infrastructure-experiments/common/app" "github.com/anytypeio/go-anytype-infrastructure-experiments/common/app/logger" - "github.com/anytypeio/go-anytype-infrastructure-experiments/common/pkg/ocache" - nodeproto "github.com/anytypeio/go-anytype-infrastructure-experiments/node/api/apiproto" + "github.com/anytypeio/go-anytype-infrastructure-experiments/common/app/ocache" + nodeproto "github.com/anytypeio/go-anytype-infrastructure-experiments/node/debug/nodedebugrpc/nodedebugrpcproto" "net" "storj.io/drpc/drpcconn" "time"