Skip to content

Commit

Permalink
Merge branch 'release/v0.3.0'
Browse files Browse the repository at this point in the history
* release/v0.3.0:
  refactor: use time.NewTimer instead of time.After to optimize memory usage and prevent potential memory leak problems
  • Loading branch information
buraksezer committed Dec 11, 2020
2 parents 594e6bd + 09b41ad commit 3740c81
Show file tree
Hide file tree
Showing 5 changed files with 25 additions and 5 deletions.
5 changes: 4 additions & 1 deletion client/stream.go
Expand Up @@ -156,6 +156,9 @@ func (c *Client) createStream() (uint64, *stream, error) {
s.errCh <- createStreamFunction(ctx, addr, s.read, s.write)
}()

timer := time.NewTimer(5 * time.Second)
defer timer.Stop()

select {
case err := <-s.errCh:
return 0, nil, err
Expand Down Expand Up @@ -187,7 +190,7 @@ func (c *Client) createStream() (uint64, *stream, error) {
}()

return streamID, s, nil
case <-time.After(5 * time.Second):
case <-timer.C:
return 0, nil, fmt.Errorf("streamID could not be retrieved")
}
}
Expand Down
6 changes: 5 additions & 1 deletion dmap_lock.go
Expand Up @@ -117,11 +117,15 @@ func (db *Olric) tryLock(w *writeop, deadline time.Duration) error {
ctx, cancel := context.WithTimeout(context.Background(), deadline)
defer cancel()

timer := time.NewTimer(10 * time.Millisecond)
defer timer.Stop()

// Try to acquire lock.
LOOP:
for {
timer.Reset(10 * time.Millisecond)
select {
case <-time.After(10 * time.Millisecond):
case <-timer.C:
err = db.put(w)
if err == ErrKeyFound {
// not released by the other process/goroutine. try again.
Expand Down
6 changes: 5 additions & 1 deletion dmap_put.go
Expand Up @@ -453,9 +453,13 @@ func (db *Olric) putReplicaOperation(w, r protocol.EncodeDecoder) {

func (db *Olric) compactTables(dm *dmap) {
defer db.wg.Done()
timer := time.NewTimer(50 * time.Millisecond)
defer timer.Stop()

for {
timer.Reset(50 * time.Millisecond)
select {
case <-time.After(50 * time.Millisecond):
case <-timer.C:
dm.Lock()
if done := dm.storage.CompactTables(); done {
// Fragmented tables are merged. Quit.
Expand Down
7 changes: 6 additions & 1 deletion internal/discovery/discovery.go
Expand Up @@ -193,7 +193,12 @@ func (d *Discovery) dialDeadMember(member string) {
func (d *Discovery) deadMemberTracker() {
d.wg.Done()

timer := time.NewTimer(time.Second)
defer timer.Stop()

for {
timer.Reset(time.Second)

select {
case <-d.ctx.Done():
return
Expand All @@ -207,7 +212,7 @@ func (d *Discovery) deadMemberTracker() {
d.log.V(2).Printf("[ERROR] Unknown memberlist event received for: %s: %v",
e.NodeName, e.Event)
}
case <-time.After(time.Second):
case <-timer.C:
// TODO: make this parametric
// Try to reconnect a random dead member every second.
// The Go runtime selects a random item in the map
Expand Down
6 changes: 5 additions & 1 deletion olric.go
Expand Up @@ -393,9 +393,13 @@ func (db *Olric) startDiscovery() error {
func (db *Olric) callStartedCallback() {
defer db.wg.Done()

timer := time.NewTimer(10 * time.Millisecond)
defer timer.Stop()

for {
timer.Reset(10 * time.Millisecond)
select {
case <-time.After(10 * time.Millisecond):
case <-timer.C:
if requiredCheckpoints == atomic.LoadInt32(&db.passedCheckpoints) {
if db.started != nil {
db.started()
Expand Down

0 comments on commit 3740c81

Please sign in to comment.