swarmfs.go 1.6 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566
  1. // Copyright 2017 The go-ethereum Authors
  2. // This file is part of the go-ethereum library.
  3. //
  4. // The go-ethereum library is free software: you can redistribute it and/or modify
  5. // it under the terms of the GNU Lesser General Public License as published by
  6. // the Free Software Foundation, either version 3 of the License, or
  7. // (at your option) any later version.
  8. //
  9. // The go-ethereum library is distributed in the hope that it will be useful,
  10. // but WITHOUT ANY WARRANTY; without even the implied warranty of
  11. // MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
  12. // GNU Lesser General Public License for more details.
  13. //
  14. // You should have received a copy of the GNU Lesser General Public License
  15. // along with the go-ethereum library. If not, see <http://www.gnu.org/licenses/>.
  16. package fuse
  17. import (
  18. "sync"
  19. "time"
  20. "github.com/ethereum/go-ethereum/swarm/api"
  21. )
  22. const (
  23. Swarmfs_Version = "0.1"
  24. mountTimeout = time.Second * 5
  25. unmountTimeout = time.Second * 10
  26. maxFuseMounts = 5
  27. )
  28. var (
  29. swarmfs *SwarmFS // Swarm file system singleton
  30. swarmfsLock sync.Once
  31. inode uint64 = 1 // global inode
  32. inodeLock sync.RWMutex
  33. )
  34. type SwarmFS struct {
  35. swarmApi *api.Api
  36. activeMounts map[string]*MountInfo
  37. swarmFsLock *sync.RWMutex
  38. }
  39. func NewSwarmFS(api *api.Api) *SwarmFS {
  40. swarmfsLock.Do(func() {
  41. swarmfs = &SwarmFS{
  42. swarmApi: api,
  43. swarmFsLock: &sync.RWMutex{},
  44. activeMounts: map[string]*MountInfo{},
  45. }
  46. })
  47. return swarmfs
  48. }
  49. // Inode numbers need to be unique, they are used for caching inside fuse
  50. func NewInode() uint64 {
  51. inodeLock.Lock()
  52. defer inodeLock.Unlock()
  53. inode += 1
  54. return inode
  55. }