Skip to content

Commit ef4d3d3

Browse files
authored
Merge pull request #2826 from anyproto/GO-6514-one-to-one-deletion
GO-6514 one-to-one delete and restore
2 parents 53fa80d + 9390fcb commit ef4d3d3

File tree

9 files changed

+60
-21
lines changed

9 files changed

+60
-21
lines changed

go.mod

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -15,7 +15,7 @@ require (
1515
github.com/anyproto/anytype-push-server/pushclient v0.0.0-20250801122506-553f6c085a23
1616
github.com/anyproto/go-chash v0.1.0
1717
github.com/anyproto/go-naturaldate/v2 v2.0.2-0.20230524105841-9829cfd13438
18-
github.com/anyproto/go-slip10 v1.0.1-0.20250818123350-f910c27dd080
18+
github.com/anyproto/go-slip10 v1.0.1
1919
github.com/anyproto/lexid v0.0.6
2020
github.com/anyproto/tantivy-go v1.0.4
2121
github.com/araddon/dateparse v0.0.0-20210429162001-6b43995a97de
@@ -106,7 +106,7 @@ require (
106106
go.uber.org/atomic v1.11.0
107107
go.uber.org/mock v0.6.0
108108
go.uber.org/multierr v1.11.0
109-
go.uber.org/zap v1.27.0
109+
go.uber.org/zap v1.27.1
110110
golang.org/x/exp v0.0.0-20251023183803-a4bb9ffd2546
111111
golang.org/x/image v0.27.0
112112
golang.org/x/mobile v0.0.0-20250218173827-cd096645fcd3
@@ -250,7 +250,7 @@ require (
250250
github.com/prometheus/common v0.66.1 // indirect
251251
github.com/prometheus/procfs v0.17.0 // indirect
252252
github.com/pseudomuto/protokit v0.2.1 // indirect
253-
github.com/quic-go/quic-go v0.56.0 // indirect
253+
github.com/quic-go/quic-go v0.57.0 // indirect
254254
github.com/remyoudompheng/bigfft v0.0.0-20230129092748-24d4a6f8daec // indirect
255255
github.com/rs/cors v1.11.0 // indirect
256256
github.com/rs/zerolog v1.29.0 // indirect
@@ -284,7 +284,7 @@ require (
284284
go.opentelemetry.io/otel/trace v1.38.0 // indirect
285285
go.yaml.in/yaml/v2 v2.4.3 // indirect
286286
golang.org/x/arch v0.8.0 // indirect
287-
golang.org/x/crypto v0.44.0 // indirect
287+
golang.org/x/crypto v0.45.0 // indirect
288288
golang.org/x/mod v0.30.0 // indirect
289289
golang.org/x/sync v0.18.0 // indirect
290290
golang.org/x/term v0.37.0 // indirect

go.sum

Lines changed: 8 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -100,8 +100,8 @@ github.com/anyproto/go-multiaddr v0.8.1-0.20250307125826-51ba58e2ebc7 h1:SD0mX7D
100100
github.com/anyproto/go-multiaddr v0.8.1-0.20250307125826-51ba58e2ebc7/go.mod h1:JSVUmXDjsVFiW7RjIFMP7+Ev+h1DTbiJgVeTV/tcmP0=
101101
github.com/anyproto/go-naturaldate/v2 v2.0.2-0.20230524105841-9829cfd13438 h1:flfZXdcXB2iVHrTZDwSMlJ7RCRS/ydiPw63xWr+waSU=
102102
github.com/anyproto/go-naturaldate/v2 v2.0.2-0.20230524105841-9829cfd13438/go.mod h1:cmdcU4pcVTftMlM89z+d8dLBJc02HtY5tI12yQucUxM=
103-
github.com/anyproto/go-slip10 v1.0.1-0.20250818123350-f910c27dd080 h1:bbHmaibcUbctrXG6LT6136H0oDlBUDoDANX2qBpqhkU=
104-
github.com/anyproto/go-slip10 v1.0.1-0.20250818123350-f910c27dd080/go.mod h1:BCmIlM1KB8wX6K4/8pOvxPl9oVKfEvZ5vsmO5rkK6vg=
103+
github.com/anyproto/go-slip10 v1.0.1 h1:Pa/OpYoOE668fip4ygAd4T07chLBx4XoBa5fwnGq0/M=
104+
github.com/anyproto/go-slip10 v1.0.1/go.mod h1:BCmIlM1KB8wX6K4/8pOvxPl9oVKfEvZ5vsmO5rkK6vg=
105105
github.com/anyproto/go-slip21 v1.0.0 h1:CI7lUqTIwmPOEGVAj4jyNLoICvueh++0U2HoAi3m2ZY=
106106
github.com/anyproto/go-slip21 v1.0.0/go.mod h1:gbIJt7HAdr5DuT4f2pFTKCBSUWYsm/fysHBNqgsuxT0=
107107
github.com/anyproto/go-sqlite v1.4.2-any h1:ZTIcq/u2mYYJ6rJB4I3Ds5QH/7IlONebMiG14FyZcD4=
@@ -905,8 +905,8 @@ github.com/pseudomuto/protoc-gen-doc v1.5.1 h1:Ah259kcrio7Ix1Rhb6u8FCaOkzf9qRBqX
905905
github.com/pseudomuto/protoc-gen-doc v1.5.1/go.mod h1:XpMKYg6zkcpgfpCfQ8GcWBDRtRxOmMR5w7pz4Xo+dYM=
906906
github.com/pseudomuto/protokit v0.2.1 h1:kCYpE3thoR6Esm0CUvd5xbrDTOZPvQPTDeyXpZfrJdk=
907907
github.com/pseudomuto/protokit v0.2.1/go.mod h1:gt7N5Rz2flBzYafvaxyIxMZC0TTF5jDZfRnw25hAAyo=
908-
github.com/quic-go/quic-go v0.56.0 h1:q/TW+OLismmXAehgFLczhCDTYB3bFmua4D9lsNBWxvY=
909-
github.com/quic-go/quic-go v0.56.0/go.mod h1:9gx5KsFQtw2oZ6GZTyh+7YEvOxWCL9WZAepnHxgAo6c=
908+
github.com/quic-go/quic-go v0.57.0 h1:AsSSrrMs4qI/hLrKlTH/TGQeTMY0ib1pAOX7vA3AdqE=
909+
github.com/quic-go/quic-go v0.57.0/go.mod h1:ly4QBAjHA2VhdnxhojRsCUOeJwKYg+taDlos92xb1+s=
910910
github.com/rcrowley/go-metrics v0.0.0-20181016184325-3113b8401b8a/go.mod h1:bCqnVzQkZxMG4s8nGwiZ5l3QUCyqpo9Y+/ZMZ9VjZe4=
911911
github.com/remyoudompheng/bigfft v0.0.0-20230129092748-24d4a6f8daec h1:W09IVJc94icq4NjY3clb7Lk8O1qJ8BdBEF8z0ibU0rE=
912912
github.com/remyoudompheng/bigfft v0.0.0-20230129092748-24d4a6f8daec/go.mod h1:qqbHyh8v60DhA7CoWK5oRCqLrMHRGoxYCSS9EjAz6Eo=
@@ -1119,8 +1119,8 @@ go.uber.org/zap v1.13.0/go.mod h1:zwrFLgMcdUuIBviXEYEH1YKNaOBnKXsx2IPda5bBwHM=
11191119
go.uber.org/zap v1.16.0/go.mod h1:MA8QOfq0BHJwdXa996Y4dYkAqRKB8/1K1QMMZVaNZjQ=
11201120
go.uber.org/zap v1.18.1/go.mod h1:xg/QME4nWcxGxrpdeYfq7UvYrLh66cuVKdrbD1XF/NI=
11211121
go.uber.org/zap v1.19.1/go.mod h1:j3DNczoxDZroyBnOT1L/Q79cfUMGZxlv/9dzN7SM1rI=
1122-
go.uber.org/zap v1.27.0 h1:aJMhYGrd5QSmlpLMr2MftRKl7t8J8PTZPA732ud/XR8=
1123-
go.uber.org/zap v1.27.0/go.mod h1:GB2qFLM7cTU87MWRP2mPIjqfIDnGu+VIO4V/SdhGo2E=
1122+
go.uber.org/zap v1.27.1 h1:08RqriUEv8+ArZRYSTXy1LeBScaMpVSTBhCeaZYfMYc=
1123+
go.uber.org/zap v1.27.1/go.mod h1:GB2qFLM7cTU87MWRP2mPIjqfIDnGu+VIO4V/SdhGo2E=
11241124
go.yaml.in/yaml/v2 v2.4.3 h1:6gvOSjQoTB3vt1l+CU+tSyi/HOjfOjRLJ4YwYZGwRO0=
11251125
go.yaml.in/yaml/v2 v2.4.3/go.mod h1:zSxWcmIDjOzPXpjlTTbAsKokqkDNAVtZO0WOMiT90s8=
11261126
golang.org/x/arch v0.8.0 h1:3wRIsP3pM4yUptoR96otTUOXI367OS0+c9eeRi9doIc=
@@ -1143,8 +1143,8 @@ golang.org/x/crypto v0.13.0/go.mod h1:y6Z2r+Rw4iayiXXAIxJIDAJ1zMW4yaTpebo8fPOliY
11431143
golang.org/x/crypto v0.19.0/go.mod h1:Iy9bg/ha4yyC70EfRS8jz+B6ybOBKMaSxLj6P6oBDfU=
11441144
golang.org/x/crypto v0.23.0/go.mod h1:CKFgDieR+mRhux2Lsu27y0fO304Db0wZe70UKqHu0v8=
11451145
golang.org/x/crypto v0.31.0/go.mod h1:kDsLvtWBEx7MV9tJOj9bnXsPbxwJQ6csT/x4KIN4Ssk=
1146-
golang.org/x/crypto v0.44.0 h1:A97SsFvM3AIwEEmTBiaxPPTYpDC47w720rdiiUvgoAU=
1147-
golang.org/x/crypto v0.44.0/go.mod h1:013i+Nw79BMiQiMsOPcVCB5ZIJbYkerPrGnOa00tvmc=
1146+
golang.org/x/crypto v0.45.0 h1:jMBrvKuj23MTlT0bQEOBcAE0mjg8mK9RXFhRH6nyF3Q=
1147+
golang.org/x/crypto v0.45.0/go.mod h1:XTGrrkGJve7CYK7J8PEww4aY7gM3qMCElcJQ8n8JdX4=
11481148
golang.org/x/exp v0.0.0-20180321215751-8460e604b9de/go.mod h1:CJ0aWSM057203Lf6IL+f9T1iT9GByDxfZKAQTCR3kQA=
11491149
golang.org/x/exp v0.0.0-20180807140117-3d87b88a115f/go.mod h1:CJ0aWSM057203Lf6IL+f9T1iT9GByDxfZKAQTCR3kQA=
11501150
golang.org/x/exp v0.0.0-20190121172915-509febef88a4/go.mod h1:CJ0aWSM057203Lf6IL+f9T1iT9GByDxfZKAQTCR3kQA=

space/create.go

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -34,6 +34,7 @@ func (s *service) CreateOneToOneSendInbox(ctx context.Context, description *spac
3434
description.IconImage = bobProfile.IdentityProfile.IconCid
3535
sp, err = s.CreateOneToOne(ctx, description, bobProfile)
3636
if err != nil {
37+
err = fmt.Errorf("create onetoone: %w", err)
3738
return
3839
}
3940

@@ -58,6 +59,7 @@ func (s *service) CreateOneToOne(ctx context.Context, description *spaceinfo.Spa
5859

5960
coreSpace, err := s.spaceCore.CreateOneToOneSpace(ctx, bPk)
6061
if err != nil {
62+
err = fmt.Errorf("spacecore: create onetoone: %w", err)
6163
return
6264
}
6365
s.mu.Lock()
@@ -80,6 +82,7 @@ func (s *service) CreateOneToOne(ctx context.Context, description *spaceinfo.Spa
8082
err: err,
8183
}
8284
s.mu.Unlock()
85+
err = fmt.Errorf("factory: create onetoone: %w", err)
8386
return nil, err
8487
}
8588

@@ -92,6 +95,7 @@ func (s *service) CreateOneToOne(ctx context.Context, description *spaceinfo.Spa
9295
err: err,
9396
}
9497
s.mu.Unlock()
98+
err = fmt.Errorf("loader: create onetoone: %w", err)
9599
return nil, err
96100
}
97101
s.spaceControllers[ctrl.SpaceId()] = ctrl

space/deletioncontroller/deletioncontroller.go

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -15,7 +15,7 @@ import (
1515
"github.com/anyproto/anytype-heart/space/spaceinfo"
1616
)
1717

18-
const CName = "mockClient.space.deletioncontroller"
18+
const CName = "space.deletioncontroller"
1919

2020
var log = logger.NewNamed(CName)
2121

space/internal/objectprovider/objectprovider.go

Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -8,6 +8,7 @@ import (
88

99
"github.com/anyproto/any-sync/app/logger"
1010
"github.com/anyproto/any-sync/commonspace/object/tree/treechangeproto"
11+
"github.com/anyproto/any-sync/commonspace/object/tree/treestorage"
1112
"github.com/anyproto/any-sync/commonspace/spacestorage"
1213
"go.uber.org/zap"
1314

@@ -178,6 +179,8 @@ func (o *objectProvider) loadObjectsAsync(ctx context.Context, objIDs []string)
178179
}
179180

180181
func (o *objectProvider) CreateMandatoryObjects(ctx context.Context, space smartblock.Space) (err error) {
182+
log = log.With(zap.String("spaceId", o.spaceId))
183+
181184
var sbTypes []coresb.SmartBlockType
182185
if o.isPersonal() {
183186
sbTypes = threads.PersonalSpaceTypes
@@ -201,6 +204,10 @@ func (o *objectProvider) CreateMandatoryObjects(ctx context.Context, space smart
201204
},
202205
})
203206
if err != nil {
207+
if errors.Is(err, treestorage.ErrTreeExists) {
208+
log.Info("tree object already exists", zap.String("uniqueKey", uk.Marshal()))
209+
return nil
210+
}
204211
log.Error("create payload for derived object", zap.Error(err), zap.String("uniqueKey", uk.Marshal()))
205212
return fmt.Errorf("derive tree object: %w", err)
206213
}

space/spacecore/service.go

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -157,6 +157,7 @@ func (s *service) Derive(ctx context.Context, spaceType spacedomain.SpaceType) (
157157
func (s *service) CreateOneToOneSpace(ctx context.Context, bPk crypto.PubKey) (space *AnySpace, err error) {
158158
id, err := s.commonSpace.DeriveOneToOneSpace(ctx, s.wallet.GetAccountPrivkey(), bPk)
159159
if err != nil {
160+
err = fmt.Errorf("derive one to one: %w", err)
160161
return
161162
}
162163

space/spacecore/storage/anystorage/storageservice.go

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -140,10 +140,12 @@ func (s *storageService) CreateSpaceStorage(ctx context.Context, payload spacest
140140
}
141141
db, err := s.createDb(ctx, payload.SpaceHeaderWithId.Id)
142142
if err != nil {
143+
err = fmt.Errorf("failed to create db: %w", err)
143144
return nil, err
144145
}
145146
st, err := spacestorage.Create(ctx, db, payload)
146147
if err != nil {
148+
err = fmt.Errorf("failed to create spacestorage: %w", err)
147149
return nil, err
148150
}
149151
return NewClientStorage(ctx, st)

space/spacefactory/spacefactory.go

Lines changed: 32 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -290,8 +290,8 @@ func (s *spaceFactory) CreateMarketplaceSpace(ctx context.Context) (sp spacecont
290290
return ctrl, err
291291
}
292292

293-
func (s *spaceFactory) CreateOneToOneSpace(ctx context.Context, id string, description *spaceinfo.SpaceDescription, participantData spaceinfo.OneToOneParticipantData) (sp spacecontroller.SpaceController, err error) {
294-
oneToOneSpace, err := s.spaceCore.Get(ctx, id)
293+
func (s *spaceFactory) CreateOneToOneSpace(ctx context.Context, spaceId string, description *spaceinfo.SpaceDescription, participantData spaceinfo.OneToOneParticipantData) (sp spacecontroller.SpaceController, err error) {
294+
oneToOneSpace, err := s.spaceCore.Get(ctx, spaceId)
295295
if err != nil {
296296
return
297297
}
@@ -301,19 +301,44 @@ func (s *spaceFactory) CreateOneToOneSpace(ctx context.Context, id string, descr
301301
return
302302
}
303303

304-
info := spaceinfo.NewSpacePersistentInfo(id)
305-
304+
info := spaceinfo.NewSpacePersistentInfo(spaceId)
306305
info.OneToOneIdentity = participantData.Identity
307306
info.Name = description.Name
308307
requestMetadataKeyStr := base64.StdEncoding.EncodeToString(participantData.RequestMetadataKey)
309308
info.OneToOneRequestMetadataKey = requestMetadataKeyStr
310309
info.SetAccountStatus(spaceinfo.AccountStatusUnknown)
311310

312-
if err := s.techSpace.SpaceViewCreate(ctx, id, true, info, description); err != nil {
313-
return nil, err
311+
spaceView, spaceViewErr := s.techSpace.GetSpaceView(ctx, spaceId)
312+
if spaceViewErr != nil {
313+
if !errors.Is(err, techspace.ErrSpaceViewNotExists) {
314+
return nil, fmt.Errorf("get space view: %w", spaceViewErr)
315+
}
314316
}
315317

316-
ctrl, err := shareablespace.NewSpaceController(id, info, s.app)
318+
// nolint: nestif
319+
if spaceView == nil {
320+
if err := s.techSpace.SpaceViewCreate(ctx, spaceId, true, info, description); err != nil {
321+
return nil, err
322+
}
323+
} else {
324+
// check if space is active
325+
existingLocalInfo := spaceView.GetLocalInfo()
326+
if existingLocalInfo.GetLocalStatus() == spaceinfo.LocalStatusOk {
327+
return nil, fmt.Errorf("space already active")
328+
}
329+
// space has been removed, reset statuses and recreate
330+
localInfo := spaceinfo.NewSpaceLocalInfo(spaceId)
331+
localInfo.SetLocalStatus(spaceinfo.LocalStatusUnknown)
332+
localInfo.SetRemoteStatus(spaceinfo.RemoteStatusUnknown)
333+
if err := spaceView.SetSpaceLocalInfo(localInfo); err != nil {
334+
return nil, err
335+
}
336+
if err := spaceView.SetSpacePersistentInfo(info); err != nil {
337+
return nil, err
338+
}
339+
}
340+
341+
ctrl, err := shareablespace.NewSpaceController(spaceId, info, s.app)
317342
if err != nil {
318343
return nil, err
319344
}

space/techspace/techspace.go

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -203,7 +203,7 @@ func (s *techSpace) GetSpaceView(ctx context.Context, spaceId string) (SpaceView
203203
}
204204
obj, err := s.objectCache.GetObject(ctx, viewId)
205205
if err != nil {
206-
return nil, err
206+
return nil, errors.Join(ErrSpaceViewNotExists, err)
207207
}
208208
spaceView, ok := obj.(SpaceView)
209209
if !ok {

0 commit comments

Comments
 (0)