|
|
package cassandra
import ( "context" "encoding/base64" "fmt" "github.com/gocql/gocql" "github.com/seaweedfs/seaweedfs/weed/filer" )
func (store *CassandraStore) KvPut(ctx context.Context, key []byte, value []byte) (err error) { dir, name := genDirAndName(key)
if err := store.session.Query( "INSERT INTO filemeta (directory,name,meta) VALUES(?,?,?) USING TTL ? ", dir, name, value, 0).Exec(); err != nil { return fmt.Errorf("kv insert: %s", err) }
return nil }
func (store *CassandraStore) KvGet(ctx context.Context, key []byte) (data []byte, err error) { dir, name := genDirAndName(key)
if err := store.session.Query( "SELECT meta FROM filemeta WHERE directory=? AND name=?", dir, name).Scan(&data); err != nil { if err != gocql.ErrNotFound { return nil, filer.ErrKvNotFound } }
if len(data) == 0 { return nil, filer.ErrKvNotFound }
return data, nil }
func (store *CassandraStore) KvDelete(ctx context.Context, key []byte) (err error) { dir, name := genDirAndName(key)
if err := store.session.Query( "DELETE FROM filemeta WHERE directory=? AND name=?", dir, name).Exec(); err != nil { return fmt.Errorf("kv delete: %v", err) }
return nil }
func genDirAndName(key []byte) (dir string, name string) { for len(key) < 8 { key = append(key, 0) }
dir = base64.StdEncoding.EncodeToString(key[:8]) name = base64.StdEncoding.EncodeToString(key[8:])
return }
|