diff options
| author | yourchanges <yourchanges@gmail.com> | 2015-01-10 02:51:26 +0800 |
|---|---|---|
| committer | yourchanges <yourchanges@gmail.com> | 2015-01-10 02:51:26 +0800 |
| commit | 9601880e323bbdf9540f2c79fb21d66374245b50 (patch) | |
| tree | 14fd3b36a89955ec6e0be6d51186031e978b519d /go/util | |
| parent | f7bcd8e958ef185baeca0c455a397d49fcb62256 (diff) | |
| parent | 2c1a846279c172bcae457e70efa142c29a18892e (diff) | |
| download | seaweedfs-9601880e323bbdf9540f2c79fb21d66374245b50.tar.xz seaweedfs-9601880e323bbdf9540f2c79fb21d66374245b50.zip | |
Merge pull request #2 from chrislusf/master
merge
Diffstat (limited to 'go/util')
| -rw-r--r-- | go/util/concurrent_read_map.go | 39 | ||||
| -rw-r--r-- | go/util/config.go | 3 | ||||
| -rw-r--r-- | go/util/constants.go | 4 | ||||
| -rw-r--r-- | go/util/file_util.go | 3 | ||||
| -rw-r--r-- | go/util/net_timeout.go | 3 |
5 files changed, 46 insertions, 6 deletions
diff --git a/go/util/concurrent_read_map.go b/go/util/concurrent_read_map.go new file mode 100644 index 000000000..880fe54e3 --- /dev/null +++ b/go/util/concurrent_read_map.go @@ -0,0 +1,39 @@ +package util + +import ( + "sync" +) + +// A mostly for read map, which can thread-safely +// initialize the map entries. +type ConcurrentReadMap struct { + rmutex sync.RWMutex + mutex sync.Mutex + Items map[string]interface{} +} + +func NewConcurrentReadMap() *ConcurrentReadMap { + return &ConcurrentReadMap{Items: make(map[string]interface{})} +} + +func (m *ConcurrentReadMap) initMapEntry(key string, newEntry func() interface{}) (value interface{}) { + m.mutex.Lock() + defer m.mutex.Unlock() + if value, ok := m.Items[key]; ok { + return value + } + value = newEntry() + m.Items[key] = value + return value +} + +func (m *ConcurrentReadMap) Get(key string, newEntry func() interface{}) interface{} { + m.rmutex.RLock() + if value, ok := m.Items[key]; ok { + m.rmutex.RUnlock() + return value + } else { + m.rmutex.RUnlock() + return m.initMapEntry(key, newEntry) + } +} diff --git a/go/util/config.go b/go/util/config.go index 050fd0e64..4cf1d7c64 100644 --- a/go/util/config.go +++ b/go/util/config.go @@ -10,9 +10,10 @@ package util import ( "bytes" - "github.com/chrislusf/weed-fs/go/glog" "encoding/json" "os" + + "github.com/chrislusf/weed-fs/go/glog" ) type Config struct { diff --git a/go/util/constants.go b/go/util/constants.go index db1ca38e5..d677ba44f 100644 --- a/go/util/constants.go +++ b/go/util/constants.go @@ -1,7 +1,5 @@ package util -import () - const ( - VERSION = "0.64" + VERSION = "0.67" ) diff --git a/go/util/file_util.go b/go/util/file_util.go index 412d98458..30e24f001 100644 --- a/go/util/file_util.go +++ b/go/util/file_util.go @@ -2,9 +2,10 @@ package util import ( "bufio" - "github.com/chrislusf/weed-fs/go/glog" "errors" "os" + + "github.com/chrislusf/weed-fs/go/glog" ) func TestFolderWritable(folder string) (err error) { diff --git a/go/util/net_timeout.go b/go/util/net_timeout.go index eb80822b5..f274e4802 100644 --- a/go/util/net_timeout.go +++ b/go/util/net_timeout.go @@ -1,9 +1,10 @@ package util import ( - "github.com/chrislusf/weed-fs/go/stats" "net" "time" + + "github.com/chrislusf/weed-fs/go/stats" ) // Listener wraps a net.Listener, and gives a place to store the timeout |
