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.

67 lines
1.8 KiB

4 years ago
  1. package hbase
  2. import (
  3. "context"
  4. "github.com/chrislusf/seaweedfs/weed/filer"
  5. "github.com/tsuna/gohbase/hrpc"
  6. )
  7. const(
  8. COLUMN_NAME = "a"
  9. )
  10. func (store *HbaseStore) KvPut(ctx context.Context, key []byte, value []byte) (err error) {
  11. return store.doPut(ctx, store.cfKv, key, value)
  12. }
  13. func (store *HbaseStore) KvGet(ctx context.Context, key []byte) (value []byte, err error) {
  14. return store.doGet(ctx, store.cfKv, key)
  15. }
  16. func (store *HbaseStore) KvDelete(ctx context.Context, key []byte) (err error) {
  17. return store.doDelete(ctx, store.cfKv, key)
  18. }
  19. func (store *HbaseStore) doPut(ctx context.Context, cf string, key, value []byte) (err error) {
  20. values := map[string]map[string][]byte{store.cfKv: map[string][]byte{}}
  21. values[cf][COLUMN_NAME] = value
  22. putRequest, err := hrpc.NewPut(ctx, store.table, key, values)
  23. if err != nil {
  24. return err
  25. }
  26. _, err = store.Client.Put(putRequest)
  27. if err != nil {
  28. return err
  29. }
  30. return nil
  31. }
  32. func (store *HbaseStore) doGet(ctx context.Context, cf string, key []byte) (value []byte, err error) {
  33. family := map[string][]string{cf: {COLUMN_NAME}}
  34. getRequest, err := hrpc.NewGet(context.Background(), store.table, key, hrpc.Families(family))
  35. if err != nil {
  36. return nil, err
  37. }
  38. getResp, err := store.Client.Get(getRequest)
  39. if err != nil {
  40. return nil, err
  41. }
  42. if len(getResp.Cells) == 0 {
  43. return nil, filer.ErrKvNotFound
  44. }
  45. return getResp.Cells[0].Value, nil
  46. }
  47. func (store *HbaseStore) doDelete(ctx context.Context, cf string, key []byte) (err error) {
  48. values := map[string]map[string][]byte{store.cfKv: map[string][]byte{}}
  49. values[cf][COLUMN_NAME] = nil
  50. deleteRequest, err := hrpc.NewDel(ctx, store.table, key, values)
  51. if err != nil {
  52. return err
  53. }
  54. _, err = store.Client.Delete(deleteRequest)
  55. if err != nil {
  56. return err
  57. }
  58. return nil
  59. }