Browse Source

randomizing next file handle id

pull/5876/head
chrislu 5 months ago
parent
commit
57dc39c451
  1. 5
      weed/mount/filehandle_map.go
  2. 3
      weed/mount/weedfs_dir_read.go
  3. 6
      weed/util/bytes.go

5
weed/mount/filehandle_map.go

@ -1,6 +1,7 @@
package mount package mount
import ( import (
"github.com/seaweedfs/seaweedfs/weed/util"
"sync" "sync"
"github.com/seaweedfs/seaweedfs/weed/pb/filer_pb" "github.com/seaweedfs/seaweedfs/weed/pb/filer_pb"
@ -17,7 +18,7 @@ func NewFileHandleToInode() *FileHandleToInode {
return &FileHandleToInode{ return &FileHandleToInode{
inode2fh: make(map[uint64]*FileHandle), inode2fh: make(map[uint64]*FileHandle),
fh2inode: make(map[FileHandleId]uint64), fh2inode: make(map[FileHandleId]uint64),
nextFh: 0,
nextFh: FileHandleId(util.RandomUint64()),
} }
} }
@ -44,7 +45,7 @@ func (i *FileHandleToInode) AcquireFileHandle(wfs *WFS, inode uint64, entry *fil
fh, found := i.inode2fh[inode] fh, found := i.inode2fh[inode]
if !found { if !found {
fh = newFileHandle(wfs, i.nextFh, inode, entry) fh = newFileHandle(wfs, i.nextFh, inode, entry)
i.nextFh++
i.nextFh = FileHandleId(util.RandomUint64())
i.inode2fh[inode] = fh i.inode2fh[inode] = fh
i.fh2inode[fh.fh] = inode i.fh2inode[fh.fh] = inode
} else { } else {

3
weed/mount/weedfs_dir_read.go

@ -6,6 +6,7 @@ import (
"github.com/seaweedfs/seaweedfs/weed/filer" "github.com/seaweedfs/seaweedfs/weed/filer"
"github.com/seaweedfs/seaweedfs/weed/glog" "github.com/seaweedfs/seaweedfs/weed/glog"
"github.com/seaweedfs/seaweedfs/weed/mount/meta_cache" "github.com/seaweedfs/seaweedfs/weed/mount/meta_cache"
"github.com/seaweedfs/seaweedfs/weed/util"
"math" "math"
"sync" "sync"
) )
@ -45,7 +46,7 @@ func NewDirectoryHandleToInode() *DirectoryHandleToInode {
func (wfs *WFS) AcquireDirectoryHandle() (DirectoryHandleId, *DirectoryHandle) { func (wfs *WFS) AcquireDirectoryHandle() (DirectoryHandleId, *DirectoryHandle) {
wfs.fhmap.Lock() wfs.fhmap.Lock()
fh := wfs.fhmap.nextFh fh := wfs.fhmap.nextFh
wfs.fhmap.nextFh++
wfs.fhmap.nextFh = FileHandleId(util.RandomUint64())
wfs.fhmap.Unlock() wfs.fhmap.Unlock()
wfs.dhmap.Lock() wfs.dhmap.Lock()

6
weed/util/bytes.go

@ -148,6 +148,12 @@ func RandomInt32() int32 {
return int32(BytesToUint32(buf)) return int32(BytesToUint32(buf))
} }
func RandomUint64() int32 {
buf := make([]byte, 8)
rand.Read(buf)
return int32(BytesToUint64(buf))
}
func RandomBytes(byteCount int) []byte { func RandomBytes(byteCount int) []byte {
buf := make([]byte, byteCount) buf := make([]byte, byteCount)
rand.Read(buf) rand.Read(buf)

Loading…
Cancel
Save