mirror of
https://github.com/anyproto/anytype-heart.git
synced 2025-06-11 02:13:41 +09:00
GO-3062 Implement write-read limits update
This commit is contained in:
parent
63995c458a
commit
22fd2ff418
17 changed files with 125 additions and 30 deletions
|
@ -144,6 +144,8 @@ func (s *SpaceView) setSpaceLocalInfo(st *state.State, info spaceinfo.SpaceLocal
|
|||
st.SetLocalDetail(bundle.RelationKeyTargetSpaceId.String(), pbtypes.String(info.SpaceID))
|
||||
st.SetLocalDetail(bundle.RelationKeySpaceLocalStatus.String(), pbtypes.Int64(int64(info.LocalStatus)))
|
||||
st.SetLocalDetail(bundle.RelationKeySpaceRemoteStatus.String(), pbtypes.Int64(int64(info.RemoteStatus)))
|
||||
st.SetLocalDetail(bundle.RelationKeySpaceMembersWriteLimit.String(), pbtypes.Int64(int64(info.WriteLimit)))
|
||||
st.SetLocalDetail(bundle.RelationKeySpaceMembersReadLimit.String(), pbtypes.Int64(int64(info.ReadLimit)))
|
||||
s.log.Infof("set space local status: %s, remote status: %s", info.LocalStatus.String(), info.RemoteStatus.String())
|
||||
}
|
||||
|
||||
|
|
|
@ -16,13 +16,32 @@ type rpcHandler struct {
|
|||
spaceStorage storage.ClientStorage
|
||||
}
|
||||
|
||||
func (r *rpcHandler) BlockPush(ctx context.Context, request *fileproto.BlockPushRequest) (*fileproto.Ok, error) {
|
||||
return nil, fileprotoerr.ErrForbidden
|
||||
}
|
||||
|
||||
func (r *rpcHandler) BlocksBind(ctx context.Context, request *fileproto.BlocksBindRequest) (*fileproto.Ok, error) {
|
||||
return nil, fileprotoerr.ErrForbidden
|
||||
}
|
||||
|
||||
func (r *rpcHandler) FilesGet(request *fileproto.FilesGetRequest, stream fileproto.DRPCFile_FilesGetStream) error {
|
||||
return fileprotoerr.ErrForbidden
|
||||
}
|
||||
|
||||
func (r *rpcHandler) AccountLimitSet(ctx context.Context, request *fileproto.AccountLimitSetRequest) (*fileproto.Ok, error) {
|
||||
return nil, fileprotoerr.ErrForbidden
|
||||
}
|
||||
|
||||
func (r *rpcHandler) SpaceLimitSet(ctx context.Context, request *fileproto.SpaceLimitSetRequest) (*fileproto.Ok, error) {
|
||||
return nil, fileprotoerr.ErrForbidden
|
||||
}
|
||||
|
||||
func (r *rpcHandler) FilesDelete(ctx context.Context, request *fileproto.FilesDeleteRequest) (*fileproto.FilesDeleteResponse, error) {
|
||||
return nil, fileprotoerr.ErrForbidden
|
||||
}
|
||||
|
||||
func (r *rpcHandler) FilesInfo(ctx context.Context, request *fileproto.FilesInfoRequest) (*fileproto.FilesInfoResponse, error) {
|
||||
return nil, fileprotoerr.ErrForbidden
|
||||
|
||||
}
|
||||
|
||||
func (r *rpcHandler) SpaceInfo(ctx context.Context, request *fileproto.SpaceInfoRequest) (*fileproto.SpaceInfoResponse, error) {
|
||||
|
@ -50,11 +69,6 @@ func (r *rpcHandler) BlockGet(ctx context.Context, req *fileproto.BlockGetReques
|
|||
return
|
||||
}
|
||||
|
||||
func (r *rpcHandler) BlockPush(ctx context.Context, req *fileproto.BlockPushRequest) (*fileproto.BlockPushResponse, error) {
|
||||
return nil, fileprotoerr.ErrForbidden
|
||||
|
||||
}
|
||||
|
||||
func (r *rpcHandler) BlocksCheck(ctx context.Context, req *fileproto.BlocksCheckRequest) (*fileproto.BlocksCheckResponse, error) {
|
||||
cids := make([]cid.Cid, 0, len(req.Cids))
|
||||
for _, cd := range req.Cids {
|
||||
|
@ -72,10 +86,6 @@ func (r *rpcHandler) BlocksCheck(ctx context.Context, req *fileproto.BlocksCheck
|
|||
}, nil
|
||||
}
|
||||
|
||||
func (r *rpcHandler) BlocksBind(ctx context.Context, req *fileproto.BlocksBindRequest) (*fileproto.BlocksBindResponse, error) {
|
||||
return nil, fileprotoerr.ErrForbidden
|
||||
}
|
||||
|
||||
func (r *rpcHandler) Check(ctx context.Context, request *fileproto.CheckRequest) (resp *fileproto.CheckResponse, err error) {
|
||||
resp = &fileproto.CheckResponse{
|
||||
AllowWrite: false,
|
||||
|
|
4
go.mod
4
go.mod
|
@ -7,7 +7,7 @@ require (
|
|||
github.com/PuerkitoBio/goquery v1.9.1
|
||||
github.com/VividCortex/ewma v1.2.0
|
||||
github.com/adrium/goheif v0.0.0-20230113233934-ca402e77a786
|
||||
github.com/anyproto/any-sync v0.3.32
|
||||
github.com/anyproto/any-sync v0.3.34-0.20240318171113-37270166778b
|
||||
github.com/anyproto/go-naturaldate/v2 v2.0.2-0.20230524105841-9829cfd13438
|
||||
github.com/araddon/dateparse v0.0.0-20210429162001-6b43995a97de
|
||||
github.com/blevesearch/bleve/v2 v2.3.10
|
||||
|
@ -96,7 +96,7 @@ require (
|
|||
google.golang.org/grpc v1.62.1
|
||||
gopkg.in/Graylog2/go-gelf.v2 v2.0.0-20180125164251-1832d8546a9f
|
||||
gopkg.in/yaml.v3 v3.0.1
|
||||
storj.io/drpc v0.0.33
|
||||
storj.io/drpc v0.0.34
|
||||
|
||||
)
|
||||
|
||||
|
|
4
go.sum
4
go.sum
|
@ -91,6 +91,8 @@ github.com/andybalholm/cascadia v1.3.2 h1:3Xi6Dw5lHF15JtdcmAHD3i1+T8plmv7BQ/nsVi
|
|||
github.com/andybalholm/cascadia v1.3.2/go.mod h1:7gtRlve5FxPPgIgX36uWBX58OdBsSS6lUvCFb+h7KvU=
|
||||
github.com/anyproto/any-sync v0.3.32 h1:SKSzA4YOCVPwdT6Mf9p0yKnRE3xkvax/EUflspd5pbY=
|
||||
github.com/anyproto/any-sync v0.3.32/go.mod h1:q7O3a4p3DwhFzIACjh6I6rv2RzgqPQesZNZv27B8Xdo=
|
||||
github.com/anyproto/any-sync v0.3.34-0.20240318171113-37270166778b h1:n1S4s1IeMIBnV0JwGcTekfnqHfLf3ibbdDveDFh5pYc=
|
||||
github.com/anyproto/any-sync v0.3.34-0.20240318171113-37270166778b/go.mod h1:/SXsrmYZz51c5CJMV79h3RCxqyL2o3S4Wd9/fjhAt4M=
|
||||
github.com/anyproto/badger/v4 v4.2.1-0.20240110160636-80743fa3d580 h1:Ba80IlCCxkZ9H1GF+7vFu/TSpPvbpDCxXJ5ogc4euYc=
|
||||
github.com/anyproto/badger/v4 v4.2.1-0.20240110160636-80743fa3d580/go.mod h1:T/uWAYxrXdaXw64ihI++9RMbKTCpKd/yE9+saARew7k=
|
||||
github.com/anyproto/go-chash v0.1.0 h1:I9meTPjXFRfXZHRJzjOHC/XF7Q5vzysKkiT/grsogXY=
|
||||
|
@ -2036,3 +2038,5 @@ sigs.k8s.io/yaml v1.1.0/go.mod h1:UJmg0vDUVViEyp3mgSv9WPwZCDxu4rQW1olrI1uml+o=
|
|||
sourcegraph.com/sourcegraph/appdash v0.0.0-20190731080439-ebfcffb1b5c0/go.mod h1:hI742Nqp5OhwiqlzhgfbWU4mW4yO10fP+LoT9WOswdU=
|
||||
storj.io/drpc v0.0.33 h1:yCGZ26r66ZdMP0IcTYsj7WDAUIIjzXk6DJhbhvt9FHI=
|
||||
storj.io/drpc v0.0.33/go.mod h1:vR804UNzhBa49NOJ6HeLjd2H3MakC1j5Gv8bsOQT6N4=
|
||||
storj.io/drpc v0.0.34 h1:q9zlQKfJ5A7x8NQNFk8x7eKUF78FMhmAbZLnFK+og7I=
|
||||
storj.io/drpc v0.0.34/go.mod h1:Y9LZaa8esL1PW2IDMqJE7CFSNq7d5bQ3RI7mGPtmKMg=
|
||||
|
|
|
@ -9,7 +9,7 @@ import (
|
|||
"github.com/anyproto/anytype-heart/pkg/lib/pb/model"
|
||||
)
|
||||
|
||||
const RelationChecksum = "182c2b3268428bd633d4a92322070958e778a9c54d4dfd9b66d8ca416f80ca17"
|
||||
const RelationChecksum = "1fe26c5c7e1e64a1f8894a2770e27ea046b8f94686a20a21bdda696f9fb17aad"
|
||||
const (
|
||||
RelationKeyTag domain.RelationKey = "tag"
|
||||
RelationKeyCamera domain.RelationKey = "camera"
|
||||
|
@ -26,6 +26,8 @@ const (
|
|||
RelationKeyTemplateIsBundled domain.RelationKey = "templateIsBundled"
|
||||
RelationKeyDateOfBirth domain.RelationKey = "dateOfBirth"
|
||||
RelationKeyRestrictions domain.RelationKey = "restrictions"
|
||||
RelationKeySpaceMembersReadLimit domain.RelationKey = "spaceMembersReadLimit"
|
||||
RelationKeySpaceMembersWriteLimit domain.RelationKey = "spaceMembersWriteLimit"
|
||||
RelationKeyIsHighlighted domain.RelationKey = "isHighlighted"
|
||||
RelationKeyThumbnailImage domain.RelationKey = "thumbnailImage"
|
||||
RelationKeyAttachments domain.RelationKey = "attachments"
|
||||
|
@ -2096,6 +2098,34 @@ var (
|
|||
ReadOnlyRelation: true,
|
||||
Scope: model.Relation_type,
|
||||
},
|
||||
RelationKeySpaceMembersReadLimit: {
|
||||
|
||||
DataSource: model.Relation_details,
|
||||
Description: "Space members read limit",
|
||||
Format: model.RelationFormat_number,
|
||||
Hidden: true,
|
||||
Id: "_brspaceMembersReadLimit",
|
||||
Key: "spaceMembersReadLimit",
|
||||
MaxCount: 1,
|
||||
Name: "Space members read limit",
|
||||
ReadOnly: true,
|
||||
ReadOnlyRelation: true,
|
||||
Scope: model.Relation_type,
|
||||
},
|
||||
RelationKeySpaceMembersWriteLimit: {
|
||||
|
||||
DataSource: model.Relation_details,
|
||||
Description: "Space members write limit",
|
||||
Format: model.RelationFormat_number,
|
||||
Hidden: true,
|
||||
Id: "_brspaceMembersWriteLimit",
|
||||
Key: "spaceMembersWriteLimit",
|
||||
MaxCount: 1,
|
||||
Name: "Space members write limit",
|
||||
ReadOnly: true,
|
||||
ReadOnlyRelation: true,
|
||||
Scope: model.Relation_type,
|
||||
},
|
||||
RelationKeySpaceRemoteStatus: {
|
||||
|
||||
DataSource: model.Relation_derived,
|
||||
|
|
|
@ -146,6 +146,26 @@
|
|||
"readonly": true,
|
||||
"source": "derived"
|
||||
},
|
||||
{
|
||||
"description": "Space members read limit",
|
||||
"format": "number",
|
||||
"hidden": true,
|
||||
"key": "spaceMembersReadLimit",
|
||||
"maxCount": 1,
|
||||
"name": "Space members read limit",
|
||||
"readonly": true,
|
||||
"source": "derived"
|
||||
},
|
||||
{
|
||||
"description": "Space members write limit",
|
||||
"format": "number",
|
||||
"hidden": true,
|
||||
"key": "spaceMembersWriteLimit",
|
||||
"maxCount": 1,
|
||||
"name": "Space members write limit",
|
||||
"readonly": true,
|
||||
"source": "derived"
|
||||
},
|
||||
{
|
||||
"description": "Adds the object to the highlighted dataview in space",
|
||||
"format": "checkbox",
|
||||
|
|
|
@ -6,7 +6,7 @@ package bundle
|
|||
|
||||
import domain "github.com/anyproto/anytype-heart/core/domain"
|
||||
|
||||
const SystemRelationsChecksum = "f005078664bd162ec27289eeb2024aaddb83d3e9128bb25ee589ef914f4e055b"
|
||||
const SystemRelationsChecksum = "182f66b62f27dfd9e7a2553eda4624bb1ac72b80707e7a6cf58391880b947613"
|
||||
|
||||
// SystemRelations contains relations that have some special biz logic depends on them in some objects
|
||||
// in case EVERY object depend on the relation please add it to RequiredInternalRelations
|
||||
|
@ -59,6 +59,8 @@ var SystemRelations = append(RequiredInternalRelations, []domain.RelationKey{
|
|||
RelationKeySpaceAccessType,
|
||||
RelationKeySpaceInviteFileCid,
|
||||
RelationKeySpaceInviteFileKey,
|
||||
RelationKeySpaceMembersReadLimit,
|
||||
RelationKeySpaceMembersWriteLimit,
|
||||
RelationKeyParticipantPermissions,
|
||||
RelationKeyParticipantStatus,
|
||||
RelationKeyLatestAclHeadId,
|
||||
|
|
|
@ -73,6 +73,8 @@
|
|||
"spaceAccessType",
|
||||
"spaceInviteFileCid",
|
||||
"spaceInviteFileKey",
|
||||
"spaceMembersReadLimit",
|
||||
"spaceMembersWriteLimit",
|
||||
"participantPermissions",
|
||||
"participantStatus",
|
||||
"latestAclHeadId",
|
||||
|
|
|
@ -38,7 +38,7 @@ func New() DeletionController {
|
|||
}
|
||||
|
||||
type spaceManager interface {
|
||||
UpdateRemoteStatus(ctx context.Context, spaceId string, status spaceinfo.RemoteStatus, isOwned bool) error
|
||||
UpdateRemoteStatus(ctx context.Context, spaceStatusInfo spaceinfo.SpaceRemoteStatusInfo) error
|
||||
AllSpaceIds() (ids []string)
|
||||
}
|
||||
|
||||
|
@ -126,7 +126,16 @@ func (d *deletionController) updateStatuses(ctx context.Context) (ownedIds []str
|
|||
ownedIds = append(ownedIds, ids[idx])
|
||||
}
|
||||
remoteStatus := convStatus(nodeStatus.Status)
|
||||
err := d.spaceManager.UpdateRemoteStatus(ctx, ids[idx], remoteStatus, isOwned)
|
||||
statusInfo := spaceinfo.SpaceRemoteStatusInfo{
|
||||
SpaceId: ids[idx],
|
||||
RemoteStatus: remoteStatus,
|
||||
IsOwned: isOwned,
|
||||
}
|
||||
if nodeStatus.Limits != nil {
|
||||
statusInfo.WriteLimit = nodeStatus.Limits.WriteMembers
|
||||
statusInfo.ReadLimit = nodeStatus.Limits.ReadMembers
|
||||
}
|
||||
err := d.spaceManager.UpdateRemoteStatus(ctx, statusInfo)
|
||||
if err != nil {
|
||||
log.Warn("remote status update error", zap.Error(err), zap.String("spaceId", ids[idx]))
|
||||
return
|
||||
|
|
|
@ -23,7 +23,7 @@ type SpaceStatus interface {
|
|||
LatestAclHeadId() string
|
||||
UpdatePersistentStatus(ctx context.Context, status spaceinfo.AccountStatus)
|
||||
UpdatePersistentInfo(ctx context.Context, info spaceinfo.SpacePersistentInfo)
|
||||
SetRemoteStatus(ctx context.Context, status spaceinfo.RemoteStatus) error
|
||||
SetRemoteStatus(ctx context.Context, status spaceinfo.SpaceRemoteStatusInfo) error
|
||||
SetPersistentStatus(ctx context.Context, status spaceinfo.AccountStatus) (err error)
|
||||
SetPersistentInfo(ctx context.Context, info spaceinfo.SpacePersistentInfo) (err error)
|
||||
SetLocalStatus(ctx context.Context, status spaceinfo.LocalStatus) error
|
||||
|
@ -40,6 +40,8 @@ type spaceStatus struct {
|
|||
latestAclHeadId string
|
||||
techSpace techspace.TechSpace
|
||||
statService debugstat.StatService
|
||||
readLimit uint32
|
||||
writeLimit uint32
|
||||
}
|
||||
|
||||
func (s *spaceStatus) ProvideStat() any {
|
||||
|
@ -120,8 +122,10 @@ func (s *spaceStatus) LatestAclHeadId() string {
|
|||
return s.latestAclHeadId
|
||||
}
|
||||
|
||||
func (s *spaceStatus) SetRemoteStatus(ctx context.Context, status spaceinfo.RemoteStatus) error {
|
||||
s.remoteStatus = status
|
||||
func (s *spaceStatus) SetRemoteStatus(ctx context.Context, status spaceinfo.SpaceRemoteStatusInfo) error {
|
||||
s.remoteStatus = status.RemoteStatus
|
||||
s.readLimit = status.ReadLimit
|
||||
s.writeLimit = status.WriteLimit
|
||||
return s.setCurrentLocalInfo(ctx)
|
||||
}
|
||||
|
||||
|
@ -172,6 +176,8 @@ func (s *spaceStatus) setCurrentLocalInfo(ctx context.Context) (err error) {
|
|||
SpaceID: s.spaceId,
|
||||
LocalStatus: s.localStatus,
|
||||
RemoteStatus: s.remoteStatus,
|
||||
ReadLimit: s.readLimit,
|
||||
WriteLimit: s.writeLimit,
|
||||
})
|
||||
}
|
||||
|
||||
|
|
|
@ -84,7 +84,7 @@ func (s *spaceController) SetInfo(ctx context.Context, info spaceinfo.SpacePersi
|
|||
return nil
|
||||
}
|
||||
|
||||
func (s *spaceController) UpdateRemoteStatus(ctx context.Context, status spaceinfo.RemoteStatus) error {
|
||||
func (s *spaceController) UpdateRemoteStatus(ctx context.Context, status spaceinfo.SpaceRemoteStatusInfo) error {
|
||||
return nil
|
||||
}
|
||||
|
||||
|
|
|
@ -38,7 +38,7 @@ type spaceController struct {
|
|||
techSpace techspace.TechSpace
|
||||
}
|
||||
|
||||
func (s *spaceController) UpdateRemoteStatus(ctx context.Context, status spaceinfo.RemoteStatus) error {
|
||||
func (s *spaceController) UpdateRemoteStatus(ctx context.Context, status spaceinfo.SpaceRemoteStatusInfo) error {
|
||||
return nil
|
||||
}
|
||||
|
||||
|
|
|
@ -114,7 +114,7 @@ func (s *spaceController) UpdateInfo(ctx context.Context, info spaceinfo.SpacePe
|
|||
}
|
||||
}
|
||||
|
||||
func (s *spaceController) UpdateRemoteStatus(ctx context.Context, status spaceinfo.RemoteStatus) error {
|
||||
func (s *spaceController) UpdateRemoteStatus(ctx context.Context, status spaceinfo.SpaceRemoteStatusInfo) error {
|
||||
s.status.Lock()
|
||||
defer s.status.Unlock()
|
||||
return s.status.SetRemoteStatus(ctx, status)
|
||||
|
|
|
@ -94,8 +94,8 @@ func (s *spaceStatusMock) UpdatePersistentStatus(ctx context.Context, status spa
|
|||
s.accountStatus = status
|
||||
}
|
||||
|
||||
func (s *spaceStatusMock) SetRemoteStatus(ctx context.Context, status spaceinfo.RemoteStatus) error {
|
||||
s.remoteStatus = status
|
||||
func (s *spaceStatusMock) SetRemoteStatus(ctx context.Context, status spaceinfo.SpaceRemoteStatusInfo) error {
|
||||
s.remoteStatus = status.RemoteStatus
|
||||
return nil
|
||||
}
|
||||
|
||||
|
|
|
@ -14,7 +14,7 @@ type SpaceController interface {
|
|||
Current() any
|
||||
UpdateInfo(ctx context.Context, info spaceinfo.SpacePersistentInfo) error
|
||||
SetInfo(ctx context.Context, info spaceinfo.SpacePersistentInfo) error
|
||||
UpdateRemoteStatus(ctx context.Context, status spaceinfo.RemoteStatus) error
|
||||
UpdateRemoteStatus(ctx context.Context, status spaceinfo.SpaceRemoteStatusInfo) error
|
||||
Close(ctx context.Context) error
|
||||
}
|
||||
|
||||
|
|
|
@ -233,20 +233,20 @@ func (s *service) AccountMetadataPayload() []byte {
|
|||
return s.accountMetadataPayload
|
||||
}
|
||||
|
||||
func (s *service) UpdateRemoteStatus(ctx context.Context, spaceId string, status spaceinfo.RemoteStatus, isOwned bool) error {
|
||||
func (s *service) UpdateRemoteStatus(ctx context.Context, status spaceinfo.SpaceRemoteStatusInfo) error {
|
||||
s.mu.Lock()
|
||||
ctrl := s.spaceControllers[spaceId]
|
||||
ctrl := s.spaceControllers[status.SpaceId]
|
||||
s.mu.Unlock()
|
||||
if ctrl == nil {
|
||||
return fmt.Errorf("no such space: %s", spaceId)
|
||||
return fmt.Errorf("no such space: %s", status.SpaceId)
|
||||
}
|
||||
err := ctrl.UpdateRemoteStatus(ctx, status)
|
||||
if err != nil {
|
||||
return fmt.Errorf("updateRemoteStatus: %w", err)
|
||||
}
|
||||
if !isOwned && status == spaceinfo.RemoteStatusDeleted {
|
||||
if !status.IsOwned && status.RemoteStatus == spaceinfo.RemoteStatusDeleted {
|
||||
return ctrl.SetInfo(ctx, spaceinfo.SpacePersistentInfo{
|
||||
SpaceID: spaceId,
|
||||
SpaceID: status.SpaceId,
|
||||
AccountStatus: spaceinfo.AccountStatusRemoving,
|
||||
})
|
||||
}
|
||||
|
|
|
@ -81,10 +81,20 @@ func (a AccountStatus) String() string {
|
|||
return ""
|
||||
}
|
||||
|
||||
type SpaceRemoteStatusInfo struct {
|
||||
SpaceId string
|
||||
RemoteStatus RemoteStatus
|
||||
WriteLimit uint32
|
||||
ReadLimit uint32
|
||||
IsOwned bool
|
||||
}
|
||||
|
||||
type SpaceLocalInfo struct {
|
||||
SpaceID string
|
||||
LocalStatus LocalStatus
|
||||
RemoteStatus RemoteStatus
|
||||
WriteLimit uint32
|
||||
ReadLimit uint32
|
||||
}
|
||||
|
||||
type SpacePersistentInfo struct {
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue