You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

62 lines
1.4 KiB

  1. package arangodb
  2. import (
  3. "context"
  4. "fmt"
  5. "github.com/chrislusf/seaweedfs/weed/filer"
  6. "github.com/chrislusf/seaweedfs/weed/glog"
  7. )
  8. func (store *ArangodbStore) KvPut(ctx context.Context, key []byte, value []byte) (err error) {
  9. dir, name := genDirAndName(key)
  10. model := &Model{
  11. Key: hashString(string(key)),
  12. Directory: dir,
  13. Name: name,
  14. Meta: bytesToArray(value),
  15. }
  16. exists, err := store.collection.DocumentExists(ctx, model.Key)
  17. if err != nil {
  18. return fmt.Errorf("kv put: %v", err)
  19. }
  20. if exists {
  21. _, err = store.collection.UpdateDocument(ctx, model.Key, model)
  22. } else {
  23. _, err = store.collection.CreateDocument(ctx, model)
  24. }
  25. if err != nil {
  26. return fmt.Errorf("kv put: %v", err)
  27. }
  28. return nil
  29. }
  30. func (store *ArangodbStore) KvGet(ctx context.Context, key []byte) (value []byte, err error) {
  31. var model Model
  32. _, err = store.collection.ReadDocument(ctx, hashString(string(key)), &model)
  33. if err != nil {
  34. glog.Errorf("kv get: %v", err)
  35. return nil, filer.ErrKvNotFound
  36. }
  37. return arrayToBytes(model.Meta), nil
  38. }
  39. func (store *ArangodbStore) KvDelete(ctx context.Context, key []byte) (err error) {
  40. _, err = store.collection.RemoveDocument(ctx, hashString(string(key)))
  41. if err != nil {
  42. glog.Errorf("kv del: %v", err)
  43. return filer.ErrKvNotFound
  44. }
  45. return nil
  46. }
  47. func genDirAndName(key []byte) (dir string, name string) {
  48. for len(key) < 8 {
  49. key = append(key, 0)
  50. }
  51. dir = string(key[:8])
  52. name = string(key[8:])
  53. return
  54. }