github.com/linapex/ethereum-go-chinese@v0.0.0-20190316121929-f8b7a73c3fa1/swarm/fuse/swarmfs.go (about)

     1  
     2  //<developer>
     3  //    <name>linapex 曹一峰</name>
     4  //    <email>linapex@163.com</email>
     5  //    <wx>superexc</wx>
     6  //    <qqgroup>128148617</qqgroup>
     7  //    <url>https://jsq.ink</url>
     8  //    <role>pku engineer</role>
     9  //    <date>2019-03-16 19:16:43</date>
    10  //</624450112919179264>
    11  
    12  
    13  package fuse
    14  
    15  import (
    16  	"sync"
    17  	"time"
    18  
    19  	"github.com/ethereum/go-ethereum/swarm/api"
    20  )
    21  
    22  const (
    23  	Swarmfs_Version = "0.1"
    24  	mountTimeout    = time.Second * 5
    25  	unmountTimeout  = time.Second * 10
    26  	maxFuseMounts   = 5
    27  )
    28  
    29  var (
    30  swarmfs     *SwarmFS //swarm文件系统singleton
    31  	swarmfsLock sync.Once
    32  
    33  inode     uint64 = 1 //全局索引
    34  	inodeLock sync.RWMutex
    35  )
    36  
    37  type SwarmFS struct {
    38  	swarmApi     *api.API
    39  	activeMounts map[string]*MountInfo
    40  	swarmFsLock  *sync.RWMutex
    41  }
    42  
    43  func NewSwarmFS(api *api.API) *SwarmFS {
    44  	swarmfsLock.Do(func() {
    45  		swarmfs = &SwarmFS{
    46  			swarmApi:     api,
    47  			swarmFsLock:  &sync.RWMutex{},
    48  			activeMounts: map[string]*MountInfo{},
    49  		}
    50  	})
    51  	return swarmfs
    52  
    53  }
    54  
    55  //inode编号必须是唯一的,它们用于在fuse中缓存
    56  func NewInode() uint64 {
    57  	inodeLock.Lock()
    58  	defer inodeLock.Unlock()
    59  	inode += 1
    60  	return inode
    61  }
    62