Update tryclose with ttl

This commit is contained in:
mcrakhman 2023-03-10 10:17:57 +01:00 committed by Mikhail Iudin
parent 82828cba6f
commit 307b741dc7
No known key found for this signature in database
GPG Key ID: FAAAA8BAABDFF1C0
13 changed files with 33 additions and 32 deletions

View File

@ -67,7 +67,7 @@ func New(loadFunc LoadFunc, opts ...Option) OCache {
type Object interface {
Close() (err error)
TryClose() (res bool, err error)
TryClose(objectTTL time.Duration) (res bool, err error)
}
type OCache interface {
@ -127,6 +127,7 @@ Load:
load = true
c.data[id] = e
}
e.lastUsage = time.Now()
c.mu.Unlock()
reload, err := e.waitClose(ctx, id)
if err != nil {
@ -281,7 +282,7 @@ func (c *oCache) GC() {
if prevState == entryStateClosing || prevState == entryStateClosed {
continue
}
closed, err := e.value.TryClose()
closed, err := e.value.TryClose(c.ttl)
if err != nil {
c.log.With("object_id", e.id).Warnf("GC: object close error: %v", err)
}

View File

@ -41,7 +41,7 @@ func (t *testObject) Close() (err error) {
return t.closeErr
}
func (t *testObject) TryClose() (res bool, err error) {
func (t *testObject) TryClose(objectTTL time.Duration) (res bool, err error) {
if t.closeCalled || (t.tryCloseCalled && t.tryReturn) {
panic("close called twice")
}

View File

@ -51,7 +51,7 @@ func (p pushSpaceRequestMatcher) String() string {
type mockPeer struct{}
func (m mockPeer) TryClose() (res bool, err error) {
func (m mockPeer) TryClose(objectTTL time.Duration) (res bool, err error) {
return true, m.Close()
}

View File

@ -7,6 +7,7 @@ package mock_objecttree
import (
context "context"
reflect "reflect"
time "time"
list "github.com/anytypeio/any-sync/commonspace/object/acl/list"
objecttree "github.com/anytypeio/any-sync/commonspace/object/tree/objecttree"
@ -351,18 +352,18 @@ func (mr *MockObjectTreeMockRecorder) Storage() *gomock.Call {
}
// TryClose mocks base method.
func (m *MockObjectTree) TryClose() (bool, error) {
func (m *MockObjectTree) TryClose(arg0 time.Duration) (bool, error) {
m.ctrl.T.Helper()
ret := m.ctrl.Call(m, "TryClose")
ret := m.ctrl.Call(m, "TryClose", arg0)
ret0, _ := ret[0].(bool)
ret1, _ := ret[1].(error)
return ret0, ret1
}
// TryClose indicates an expected call of TryClose.
func (mr *MockObjectTreeMockRecorder) TryClose() *gomock.Call {
func (mr *MockObjectTreeMockRecorder) TryClose(arg0 interface{}) *gomock.Call {
mr.mock.ctrl.T.Helper()
return mr.mock.ctrl.RecordCallWithMethodType(mr.mock, "TryClose", reflect.TypeOf((*MockObjectTree)(nil).TryClose))
return mr.mock.ctrl.RecordCallWithMethodType(mr.mock, "TryClose", reflect.TypeOf((*MockObjectTree)(nil).TryClose), arg0)
}
// TryLock mocks base method.

View File

@ -5,6 +5,7 @@ import (
"context"
"errors"
"sync"
"time"
"github.com/anytypeio/any-sync/commonspace/object/acl/aclrecordproto"
"github.com/anytypeio/any-sync/commonspace/object/acl/list"
@ -82,7 +83,7 @@ type ObjectTree interface {
Delete() error
Close() error
TryClose() (bool, error)
TryClose(objectTTL time.Duration) (bool, error)
}
type objectTree struct {
@ -561,7 +562,7 @@ func (ot *objectTree) Root() *Change {
return ot.tree.Root()
}
func (ot *objectTree) TryClose() (bool, error) {
func (ot *objectTree) TryClose(objectTTL time.Duration) (bool, error) {
return true, ot.Close()
}

View File

@ -7,6 +7,7 @@ package mock_synctree
import (
context "context"
reflect "reflect"
time "time"
list "github.com/anytypeio/any-sync/commonspace/object/acl/list"
objecttree "github.com/anytypeio/any-sync/commonspace/object/tree/objecttree"
@ -502,18 +503,18 @@ func (mr *MockSyncTreeMockRecorder) SyncWithPeer(arg0, arg1 interface{}) *gomock
}
// TryClose mocks base method.
func (m *MockSyncTree) TryClose() (bool, error) {
func (m *MockSyncTree) TryClose(arg0 time.Duration) (bool, error) {
m.ctrl.T.Helper()
ret := m.ctrl.Call(m, "TryClose")
ret := m.ctrl.Call(m, "TryClose", arg0)
ret0, _ := ret[0].(bool)
ret1, _ := ret[1].(error)
return ret0, ret1
}
// TryClose indicates an expected call of TryClose.
func (mr *MockSyncTreeMockRecorder) TryClose() *gomock.Call {
func (mr *MockSyncTreeMockRecorder) TryClose(arg0 interface{}) *gomock.Call {
mr.mock.ctrl.T.Helper()
return mr.mock.ctrl.RecordCallWithMethodType(mr.mock, "TryClose", reflect.TypeOf((*MockSyncTree)(nil).TryClose))
return mr.mock.ctrl.RecordCallWithMethodType(mr.mock, "TryClose", reflect.TypeOf((*MockSyncTree)(nil).TryClose), arg0)
}
// TryLock mocks base method.

View File

@ -3,6 +3,7 @@ package synctree
import (
"context"
"errors"
"time"
"github.com/anytypeio/any-sync/app/logger"
"github.com/anytypeio/any-sync/commonspace/object/acl/list"
@ -209,7 +210,7 @@ func (s *syncTree) Delete() (err error) {
return
}
func (s *syncTree) TryClose() (bool, error) {
func (s *syncTree) TryClose(objectTTL time.Duration) (bool, error) {
return true, s.Close()
}

View File

@ -106,7 +106,7 @@ type Space interface {
HandleMessage(ctx context.Context, msg HandleMessage) (err error)
TryClose() (close bool, err error)
TryClose(objectTTL time.Duration) (close bool, err error)
Close() error
}
@ -114,7 +114,6 @@ type space struct {
id string
mu sync.RWMutex
header *spacesyncproto.RawSpaceHeaderWithId
spaceTTL time.Duration
objectSync objectsync.ObjectSync
headSync headsync.HeadSync
@ -453,8 +452,8 @@ func (s *space) Close() error {
return mError.Err()
}
func (s *space) TryClose() (close bool, err error) {
if time.Now().Sub(s.objectSync.LastUsage()) < s.spaceTTL {
func (s *space) TryClose(objectTTL time.Duration) (close bool, err error) {
if time.Now().Sub(s.objectSync.LastUsage()) < objectTTL {
return false, nil
}
locked := s.treesUsed.Load() > 1

View File

@ -19,7 +19,6 @@ import (
"github.com/anytypeio/any-sync/net/pool"
"github.com/anytypeio/any-sync/nodeconf"
"sync/atomic"
"time"
)
const CName = "common.commonspace"
@ -163,7 +162,6 @@ func (s *spaceService) NewSpace(ctx context.Context, id string) (Space, error) {
treesUsed: &atomic.Int32{},
isClosed: spaceIsClosed,
isDeleted: spaceIsDeleted,
spaceTTL: time.Duration(s.config.GCTTL) * time.Second,
}
return sp, nil
}

View File

@ -100,7 +100,7 @@ func (d *dialer) Dial(ctx context.Context, peerId string) (p peer.Peer, err erro
if err != nil {
return
}
return peer.NewPeer(sc, conn, time.Minute), nil
return peer.NewPeer(sc, conn), nil
}
func (d *dialer) handshake(ctx context.Context, addr string) (conn drpc.Conn, sc sec.SecureConn, err error) {

View File

@ -12,11 +12,10 @@ import (
var log = logger.NewNamed("peer")
func NewPeer(sc sec.SecureConn, conn drpc.Conn, ttl time.Duration) Peer {
func NewPeer(sc sec.SecureConn, conn drpc.Conn) Peer {
return &peer{
id: sc.RemotePeer().String(),
lastUsage: time.Now().Unix(),
ttl: ttl,
sc: sc,
Conn: conn,
}
@ -26,7 +25,7 @@ type Peer interface {
Id() string
LastUsage() time.Time
UpdateLastUsage()
TryClose() (res bool, err error)
TryClose(objectTTL time.Duration) (res bool, err error)
drpc.Conn
}
@ -79,8 +78,8 @@ func (p *peer) UpdateLastUsage() {
atomic.StoreInt64(&p.lastUsage, time.Now().Unix())
}
func (p *peer) TryClose() (res bool, err error) {
if time.Now().Sub(p.LastUsage()) < p.ttl {
func (p *peer) TryClose(objectTTL time.Duration) (res bool, err error) {
if time.Now().Sub(p.LastUsage()) < objectTTL {
return false, nil
}
return true, p.Close()

View File

@ -194,7 +194,7 @@ func (t *testPeer) LastUsage() time.Time {
func (t *testPeer) UpdateLastUsage() {}
func (t *testPeer) TryClose() (res bool, err error) {
func (t *testPeer) TryClose(objectTTL time.Duration) (res bool, err error) {
return true, t.Close()
}

View File

@ -103,7 +103,7 @@ type testPeer struct {
drpc.Conn
}
func (t testPeer) TryClose() (res bool, err error) {
func (t testPeer) TryClose(objectTTL time.Duration) (res bool, err error) {
return true, t.Close()
}