diff --git a/uid/assigner.go b/uid/assigner.go index ef835558cfb37e7e61065d44821283acc11a8999..43b80352dfb00e14be8de500d2f18cb095280bf8 100644 --- a/uid/assigner.go +++ b/uid/assigner.go @@ -33,6 +33,11 @@ import ( var glog = x.Log("uid") var lmgr *lockManager var uidStore *store.Store +var eidPool = sync.Pool{ + New: func() interface{} { + return new(entry) + }, +} type entry struct { sync.Mutex @@ -63,7 +68,7 @@ func (lm *lockManager) newOrExisting(xid string) *entry { if e, ok := lm.locks[xid]; ok { return e } - e := new(entry) + e := eidPool.Get().(*entry) e.ts = time.Now() lm.locks[xid] = e return e @@ -78,6 +83,7 @@ func (lm *lockManager) clean() { if e.isOld() { count += 1 delete(lm.locks, xid) + eidPool.Put(e) } } lm.Unlock() @@ -181,9 +187,8 @@ func assignNew(pl *posting.List, xid string, instanceIdx uint64, } func stringKey(xid string) []byte { - buf := new(bytes.Buffer) - buf.WriteString("_uid_") - buf.WriteString("|") + var buf bytes.Buffer + buf.WriteString("_uid_|") buf.WriteString(xid) return buf.Bytes() }