mirror of
https://github.com/octoleo/restic.git
synced 2024-12-23 19:38:57 +00:00
uid lookup cache
This commit is contained in:
parent
d8e1482abe
commit
6e20eba852
31
node.go
31
node.go
@ -6,6 +6,7 @@ import (
|
||||
"os"
|
||||
"os/user"
|
||||
"strconv"
|
||||
"sync"
|
||||
"syscall"
|
||||
"time"
|
||||
|
||||
@ -339,15 +340,41 @@ func (node *Node) fillUser(stat *syscall.Stat_t) error {
|
||||
node.UID = stat.Uid
|
||||
node.GID = stat.Gid
|
||||
|
||||
u, err := user.LookupId(strconv.Itoa(int(stat.Uid)))
|
||||
username, err := lookupUsername(strconv.Itoa(int(stat.Uid)))
|
||||
if err != nil {
|
||||
return err
|
||||
}
|
||||
|
||||
node.User = u.Username
|
||||
node.User = username
|
||||
return nil
|
||||
}
|
||||
|
||||
var (
|
||||
uidLookupCache = make(map[string]string)
|
||||
uidLookupCacheMutex = sync.RWMutex{}
|
||||
)
|
||||
|
||||
func lookupUsername(uid string) (string, error) {
|
||||
uidLookupCacheMutex.RLock()
|
||||
value, ok := uidLookupCache[uid]
|
||||
uidLookupCacheMutex.RUnlock()
|
||||
|
||||
if ok {
|
||||
return value, nil
|
||||
}
|
||||
|
||||
u, err := user.LookupId(uid)
|
||||
if err != nil {
|
||||
return "", err
|
||||
}
|
||||
|
||||
uidLookupCacheMutex.Lock()
|
||||
uidLookupCache[uid] = u.Username
|
||||
uidLookupCacheMutex.Unlock()
|
||||
|
||||
return u.Username, nil
|
||||
}
|
||||
|
||||
func (node *Node) fillExtra(path string, fi os.FileInfo) error {
|
||||
stat, ok := fi.Sys().(*syscall.Stat_t)
|
||||
if !ok {
|
||||
|
Loading…
Reference in New Issue
Block a user