diff --git a/db.go b/db.go index cff7d1c..5b9abd1 100755 --- a/db.go +++ b/db.go @@ -52,10 +52,6 @@ func New(key Type, params ...string) (db DB, err error) { db, err = NewCache(params...) case LEVELDB: db, err = NewLevelDB(params[0]) - case MEMCACHE: - db, err = NewMemcache(params[0], params[1:]...) - case MEMCACHECLUSTER: - db, err = NewMemcacheCluster(params[0], params[1:]...) case MONGO: db, err = NewMongo(params[0], params[1:]...) } diff --git a/db_test.go b/db_test.go index 67122fe..08f3e98 100755 --- a/db_test.go +++ b/db_test.go @@ -146,26 +146,6 @@ func TestImplementations(t *testing.T) { t.Log("$MONGO not set. Skipping") } - if _, ok := os.LookupEnv("MEMCACHED"); ok { - if memcache, err := NewMemcache("localhost:11211"); err != nil { - t.Logf("cannot make memcache: %v", err) - } else { - cases = append(cases, memcache) - } - } else { - t.Log("$MEMCACHED not set. Skipping") - } - - if _, ok := os.LookupEnv("MEMCACHEDCLUSTER"); ok { - if memcacheCluster, err := NewMemcacheCluster("localhost:11211"); err != nil { - t.Logf("cannot make memcacheCluster: %v", err) - } else { - cases = append(cases, memcacheCluster) - } - } else { - t.Log("$MEMCACHEDCLUSTER not set. Skipping") - } - if _, ok := os.LookupEnv("MINIO"); ok { if minio, err := minio.NewMinio("localhost:9000", "accesskey", "secretkey"); err != nil { t.Logf("cannot make minio: %v", err) @@ -281,14 +261,6 @@ func TestToFromString(t *testing.T) { key: "leveldb", t: LEVELDB, }, - { - key: "memcache", - t: MEMCACHE, - }, - { - key: "memcachecluster", - t: MEMCACHECLUSTER, - }, { key: "mongo", t: MONGO, diff --git a/go.mod b/go.mod index b71097d..9439887 100644 --- a/go.mod +++ b/go.mod @@ -4,9 +4,6 @@ go 1.16 require ( github.com/boltdb/bolt v1.3.1 - github.com/bradfitz/gomemcache v0.0.0-20190913173617-a41fca850d0b - github.com/buraksezer/consistent v0.9.0 - github.com/cespare/xxhash v1.1.0 github.com/gomodule/redigo v1.8.5 github.com/google/uuid v1.3.0 github.com/minio/minio-go/v6 v6.0.57 @@ -14,7 +11,8 @@ require ( github.com/patrickmn/go-cache v2.1.0+incompatible github.com/syndtr/goleveldb v1.0.0 go.mongodb.org/mongo-driver v1.7.2 - gopkg.in/yaml.v2 v2.2.8 // indirect + golang.org/x/sys v0.0.0-20220503163025-988cb79eb6c6 // indirect + gopkg.in/yaml.v2 v2.2.8 local/logb v0.0.0-00010101000000-000000000000 ) diff --git a/go.sum b/go.sum index a37d178..4f11dae 100644 --- a/go.sum +++ b/go.sum @@ -5,8 +5,6 @@ github.com/Azure/azure-pipeline-go v0.1.8/go.mod h1:XA1kFWRVhSK+KNFiOhfv83Fv8L9a github.com/Azure/azure-storage-blob-go v0.0.0-20181023070848-cf01652132cc/go.mod h1:oGfmITT1V6x//CswqY2gtAHND+xIP64/qL7a5QJix0Y= github.com/Azure/go-ansiterm v0.0.0-20170929234023-d6e3b3328b78/go.mod h1:LmzpDX56iTiv29bbRTIsUNlaFfuhWRQBWjQdVyAevI8= github.com/BurntSushi/toml v0.3.1/go.mod h1:xHWCNGjB5oqiDr8zfno3MHue2Ht5sIBksp03qcyfWMU= -github.com/OneOfOne/xxhash v1.2.2 h1:KMrpdQIwFcEqXDklaen+P1axHaj9BSKzvpUUfnHldSE= -github.com/OneOfOne/xxhash v1.2.2/go.mod h1:HSdplMjZKSmBqAxg5vPj2TmRDmfkzw+cTzAElWljhcU= github.com/Unknwon/goconfig v0.0.0-20181105214110-56bd8ab18619 h1:6X8iB881g299aNEv6KXrcjL31iLOH7yA6NXoQX+MbDg= github.com/Unknwon/goconfig v0.0.0-20181105214110-56bd8ab18619/go.mod h1:wngxua9XCNjvHjDiTiV26DaKDT+0c63QR6H5hjVUUxw= github.com/a8m/tree v0.0.0-20180321023834-3cf936ce15d6/go.mod h1:FSdwKX97koS5efgm8WevNf7XS3PqtyFkKDDXrz778cg= @@ -18,12 +16,6 @@ github.com/aws/aws-sdk-go v1.15.81/go.mod h1:E3/ieXAlvM0XWO57iftYVDLLvQ824smPP3A github.com/billziss-gh/cgofuse v1.1.0/go.mod h1:LJjoaUojlVjgo5GQoEJTcJNqZJeRU0nCR84CyxKt2YM= github.com/boltdb/bolt v1.3.1 h1:JQmyP4ZBrce+ZQu0dY660FMfatumYDLun9hBCUVIkF4= github.com/boltdb/bolt v1.3.1/go.mod h1:clJnj/oiGkjum5o1McbSZDSLxVThjynRyGBgiAx27Ps= -github.com/bradfitz/gomemcache v0.0.0-20190913173617-a41fca850d0b h1:L/QXpzIa3pOvUGt1D1lA5KjYhPBAN/3iWdP7xeFS9F0= -github.com/bradfitz/gomemcache v0.0.0-20190913173617-a41fca850d0b/go.mod h1:H0wQNHz2YrLsuXOZozoeDmnHXkNCRmMW0gwFWDfEZDA= -github.com/buraksezer/consistent v0.9.0 h1:Zfs6bX62wbP3QlbPGKUhqDw7SmNkOzY5bHZIYXYpR5g= -github.com/buraksezer/consistent v0.9.0/go.mod h1:6BrVajWq7wbKZlTOUPs/XVfR8c0maujuPowduSpZqmw= -github.com/cespare/xxhash v1.1.0 h1:a6HrQnmkObjyL+Gs60czilIUGqrzKutQD6XZog3p+ko= -github.com/cespare/xxhash v1.1.0/go.mod h1:XrSqR1VqqWfGrhpAt58auRo0WTKS1nRRg3ghfAqPWnc= github.com/coreos/bbolt v0.0.0-20180318001526-af9db2027c98/go.mod h1:iRUV2dpdMOn7Bo10OQBFzIJO9kkE559Wcmn+qkEiiKk= github.com/cpuguy83/go-md2man v1.0.8/go.mod h1:N6JayAiVKtlHSnuTCeuLSQVs75hb8q+dYQLjr7cDsKY= github.com/davecgh/go-spew v1.1.0/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38= @@ -100,8 +92,10 @@ github.com/klauspost/cpuid v1.2.3/go.mod h1:Pj4uuM528wm8OyEC2QMXAi2YiTZ96dNQPGgo github.com/konsorten/go-windows-terminal-sequences v1.0.1/go.mod h1:T0+1ngSBFLxvqU3pZ+m/2kptfBszLMUkC4ZK/EgS/cQ= github.com/konsorten/go-windows-terminal-sequences v1.0.2/go.mod h1:T0+1ngSBFLxvqU3pZ+m/2kptfBszLMUkC4ZK/EgS/cQ= github.com/kr/fs v0.1.0/go.mod h1:FFnZGqtBN9Gxj7eW1uZ42v5BccTP0vu6NEaFoC2HwRg= +github.com/kr/pretty v0.1.0 h1:L/CwN0zerZDmRFUapSPitk6f+Q3+0za1rQkzVuMiMFI= github.com/kr/pretty v0.1.0/go.mod h1:dAy3ld7l9f0ibDNOQOHHMYYIIbhfbHSm3C4ZsoJORNo= github.com/kr/pty v1.1.1/go.mod h1:pFQYn66WHrOpPYNljwOMqo10TkYh1fy3cYio2l3bCsQ= +github.com/kr/text v0.1.0 h1:45sCR5RtlFHMR4UwH9sdQ5TC8v0qDQCHnXt+kaKSTVE= github.com/kr/text v0.1.0/go.mod h1:4Jbv+DJW3UT/LiOwJeYQe1efqtUx/iVham/4vfdArNI= github.com/markbates/oncer v0.0.0-20181203154359-bf2de49a0be2/go.mod h1:Ld9puTsIW75CHf65OeIOkyKbteujpZVXDpWK6YGZbxE= github.com/markbates/safe v1.0.1/go.mod h1:nAqgmRi7cY2nqMc92/bSEeQA+R4OheNU2T1kNSCBdG0= @@ -162,8 +156,6 @@ github.com/smartystreets/assertions v0.0.0-20180927180507-b2de0cb4f26d/go.mod h1 github.com/smartystreets/goconvey v0.0.0-20181108003508-044398e4856c/go.mod h1:XDJAKZRPZ1CvBcN2aX5YOUTYGHki24fSF0Iv48Ibg0s= github.com/smartystreets/goconvey v0.0.0-20190330032615-68dc04aab96a h1:pa8hGb/2YqsZKovtsgrwcDH1RZhVbTKCjLp47XpqCDs= github.com/smartystreets/goconvey v0.0.0-20190330032615-68dc04aab96a/go.mod h1:syvi0/a8iFYH4r/RixwvyeAJjdLS9QV7WQ/tjFTllLA= -github.com/spaolacci/murmur3 v0.0.0-20180118202830-f09979ecbc72 h1:qLC7fQah7D6K1B0ujays3HV9gkFtllcxhzImRR7ArPQ= -github.com/spaolacci/murmur3 v0.0.0-20180118202830-f09979ecbc72/go.mod h1:JwIasOWyU6f++ZhiEuf87xNszmSA2myDM2Kzu9HwQUA= github.com/spf13/cobra v0.0.3/go.mod h1:1l0Ry5zgKvJasoi3XT1TypsSe7PqH0Sj9dhYf7v3XqQ= github.com/spf13/pflag v1.0.3 h1:zPAT6CGy6wXeQ7NtTnaTerfKOsV6V6F8agHXFiazDkg= github.com/spf13/pflag v1.0.3/go.mod h1:DYY7MBk1bdzusC3SYhjObp+wFpr4gzcvqqNjLnInEg4= @@ -224,6 +216,8 @@ golang.org/x/sys v0.0.0-20190419153524-e8e3143a4f4a/go.mod h1:h1NjWce9XRLGQEsW7w golang.org/x/sys v0.0.0-20190422165155-953cdadca894/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20190531175056-4c3a928424d2 h1:T5DasATyLQfmbTpfEXx/IOL9vfjzW6up+ZDkmHvIf2s= golang.org/x/sys v0.0.0-20190531175056-4c3a928424d2/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= +golang.org/x/sys v0.0.0-20220503163025-988cb79eb6c6 h1:nonptSpoQ4vQjyraW20DXPAglgQfVnM9ZC6MmNLMR60= +golang.org/x/sys v0.0.0-20220503163025-988cb79eb6c6/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= golang.org/x/text v0.3.0/go.mod h1:NqM8EUOU14njkJ3fqMW+pc6Ldnwhi/IjpwHt7yyuwOQ= golang.org/x/text v0.3.5 h1:i6eZZ+zk0SOf0xgBpEpPD18qWcJda6q1sxt3S0kzyUQ= golang.org/x/text v0.3.5/go.mod h1:5Zoc/QRtKVWzQhOtBMvqHzDpF6irO9z98xDceosuGiQ= @@ -243,6 +237,7 @@ google.golang.org/appengine v1.3.0 h1:FBSsiFRMz3LBeXIomRnVzrQwSDj4ibvcRexLG0LZGQ google.golang.org/appengine v1.3.0/go.mod h1:xpcJRLb0r/rnEns0DIKYYv+WjYCduHsrkT7/EB5XEv4= gopkg.in/check.v1 v0.0.0-20161208181325-20d25e280405/go.mod h1:Co6ibVJAznAaIkqp8huTwlJQCZ016jof/cbN4VW5Yz0= gopkg.in/check.v1 v1.0.0-20161208181325-20d25e280405/go.mod h1:Co6ibVJAznAaIkqp8huTwlJQCZ016jof/cbN4VW5Yz0= +gopkg.in/check.v1 v1.0.0-20180628173108-788fd7840127 h1:qIbj1fsPNlZgppZ+VLlY7N33q108Sa+fhmuc+sWQYwY= gopkg.in/check.v1 v1.0.0-20180628173108-788fd7840127/go.mod h1:Co6ibVJAznAaIkqp8huTwlJQCZ016jof/cbN4VW5Yz0= gopkg.in/errgo.v2 v2.1.0/go.mod h1:hNsd1EY+bozCKY1Ytp96fpM3vjJbqLJn88ws8XvfDNI= gopkg.in/fsnotify.v1 v1.4.7 h1:xOHLXZwVvI9hhs+cLKq5+I5onOuwQLhQwiu63xxlHs4= diff --git a/memcache.go b/memcache.go deleted file mode 100755 index bed1653..0000000 --- a/memcache.go +++ /dev/null @@ -1,78 +0,0 @@ -package storage - -import ( - "errors" - "local/storage/resolve" - "net" - "path" - - "github.com/bradfitz/gomemcache/memcache" -) - -type Memcache struct { - db *memcache.Client -} - -type netAddr struct { - network string - addr string -} - -func (a *netAddr) Network() string { - return a.network -} - -func (a *netAddr) String() string { - return a.addr -} - -func NewMemcache(addr string, addrs ...string) (*Memcache, error) { - for i := len(addrs) - 1; i >= 0; i-- { - if len(addrs[i]) == 0 { - addrs = append(addrs[:i], addrs[i+1:]...) - } - } - ss := &memcache.ServerList{} - if err := ss.SetServers(append([]string{addr}, addrs...)...); err != nil { - return nil, err - } - if err := ss.Each(func(addr net.Addr) error { - conn, err := net.Dial("tcp", addr.String()) - if err != nil { - return err - } - return conn.Close() - }); err != nil { - return nil, err - } - db := memcache.NewFromSelector(ss) - return &Memcache{db: db}, nil -} - -func (mc *Memcache) List(ns []string, limits ...string) ([]string, error) { - return nil, errors.New("not impl") -} - -func (mc *Memcache) Get(key string, ns ...string) ([]byte, error) { - namespace := resolve.Namespace(ns) - v, err := mc.db.Get(path.Join(namespace, key)) - if err != nil { - return nil, err - } - if v == nil { - return nil, ErrNotFound - } - return v.Value, err -} - -func (mc *Memcache) Set(key string, value []byte, ns ...string) error { - namespace := resolve.Namespace(ns) - return mc.db.Set(&memcache.Item{ - Key: path.Join(namespace, key), - Value: value, - }) -} - -func (mc *Memcache) Close() error { - return mc.db.FlushAll() -} diff --git a/memcachecluster.go b/memcachecluster.go deleted file mode 100755 index bf775dc..0000000 --- a/memcachecluster.go +++ /dev/null @@ -1,94 +0,0 @@ -package storage - -import ( - "errors" - "local/storage/resolve" - "net" - "path" - - "github.com/bradfitz/gomemcache/memcache" - "github.com/buraksezer/consistent" - "github.com/cespare/xxhash" -) - -type MemcacheCluster struct { - db *memcache.Client -} - -type serverSelector struct { - hash *consistent.Consistent -} - -func (ss *serverSelector) PickServer(key string) (net.Addr, error) { - return &netAddr{ - network: "tcp", - addr: ss.hash.LocateKey([]byte(key)).String(), - }, nil -} - -func (ss *serverSelector) Each(each func(net.Addr) error) error { - for _, member := range ss.hash.GetMembers() { - if err := each(&netAddr{ - network: "tcp", - addr: member.String(), - }); err != nil { - return err - } - } - return nil -} - -type hasher struct{} - -func (h hasher) Sum64(data []byte) uint64 { - return xxhash.Sum64(data) -} - -func NewMemcacheCluster(addr string, addrs ...string) (*MemcacheCluster, error) { - cfg := consistent.Config{ - PartitionCount: 71, - ReplicationFactor: 20, - Load: 1.25, - Hasher: hasher{}, - } - hash := consistent.New(nil, cfg) - for _, addr := range append(addrs, addr) { - hash.Add(&netAddr{addr: addr}) - } - ss := &serverSelector{ - hash: hash, - } - if err := ss.Each(func(addr net.Addr) error { - conn, err := net.Dial("tcp", addr.String()) - if err != nil { - return err - } - return conn.Close() - }); err != nil { - return nil, err - } - db := memcache.NewFromSelector(ss) - return &MemcacheCluster{db: db}, nil -} - -func (mc *MemcacheCluster) List(ns []string, limits ...string) ([]string, error) { - return nil, errors.New("not impl") -} - -func (mc *MemcacheCluster) Get(key string, ns ...string) ([]byte, error) { - namespace := resolve.Namespace(ns) - v, err := mc.db.Get(path.Join(namespace, key)) - return v.Value, err -} - -func (mc *MemcacheCluster) Set(key string, value []byte, ns ...string) error { - namespace := resolve.Namespace(ns) - return mc.db.Set(&memcache.Item{ - Key: path.Join(namespace, key), - Value: value, - }) -} - -func (mc *MemcacheCluster) Close() error { - return mc.db.FlushAll() -} diff --git a/type.go b/type.go index ef4975c..d6e7f64 100755 --- a/type.go +++ b/type.go @@ -7,21 +7,19 @@ import ( type Type int const ( - MAP = Type(iota) - REDIS = Type(iota) - DYNOMITE = Type(iota) - BOLT = Type(iota) - FILES = Type(iota) - COCKROACH = Type(iota) - CACHE = Type(iota) - LEVELDB = Type(iota) - MEMCACHE = Type(iota) - MEMCACHECLUSTER = Type(iota) - MONGO = Type(iota) - MINIO = Type(iota) - RCLONE = Type(iota) - MAPSTREAM = Type(iota) - YAML = Type(iota) + MAP = Type(iota) + REDIS = Type(iota) + DYNOMITE = Type(iota) + BOLT = Type(iota) + FILES = Type(iota) + COCKROACH = Type(iota) + CACHE = Type(iota) + LEVELDB = Type(iota) + MONGO = Type(iota) + MINIO = Type(iota) + RCLONE = Type(iota) + MAPSTREAM = Type(iota) + YAML = Type(iota) ) func (t Type) String() string { @@ -50,10 +48,6 @@ func (t Type) String() string { return "cache" case LEVELDB: return "leveldb" - case MEMCACHE: - return "memcache" - case MEMCACHECLUSTER: - return "memcachecluster" case MONGO: return "mongo" }