Update tryclose with ttl
This commit is contained in:
parent
82828cba6f
commit
307b741dc7
@ -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)
|
||||
}
|
||||
|
||||
@ -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")
|
||||
}
|
||||
|
||||
@ -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()
|
||||
}
|
||||
|
||||
|
||||
@ -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.
|
||||
|
||||
@ -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()
|
||||
}
|
||||
|
||||
|
||||
@ -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.
|
||||
|
||||
@ -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()
|
||||
}
|
||||
|
||||
|
||||
@ -106,15 +106,14 @@ 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
|
||||
}
|
||||
|
||||
type space struct {
|
||||
id string
|
||||
mu sync.RWMutex
|
||||
header *spacesyncproto.RawSpaceHeaderWithId
|
||||
spaceTTL time.Duration
|
||||
id string
|
||||
mu sync.RWMutex
|
||||
header *spacesyncproto.RawSpaceHeaderWithId
|
||||
|
||||
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
|
||||
|
||||
@ -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
|
||||
}
|
||||
|
||||
@ -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) {
|
||||
|
||||
@ -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()
|
||||
|
||||
@ -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()
|
||||
}
|
||||
|
||||
|
||||
@ -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()
|
||||
}
|
||||
|
||||
|
||||
Loading…
x
Reference in New Issue
Block a user