rec_meta.go 2.4 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566
  1. // package rec_meta -- мета-информация записи KV-хранилища
  2. package rec_meta
  3. import (
  4. "gitp78su.ipnodns.ru/svi/kern/v4/lev0/helpers"
  5. "gitp78su.ipnodns.ru/svi/kern/v4/lev0/kalias"
  6. "gitp78su.ipnodns.ru/svi/kern/v4/lev0/ktypes"
  7. )
  8. var (
  9. hassert = helpers.Hassert
  10. )
  11. // RecMeta -- мета-информация записи KV-хранилища
  12. //
  13. // Вся информация о записи хранится в JSON-строке, без форматирования
  14. // для того, что можно было файл индексов бакета писать построчно.
  15. // Даже если ключ содержит пробелы или экранированное форматирование
  16. // JSON их экранирует внутри.
  17. type RecMeta struct {
  18. Key_ kalias.AKey `json:"key"` // Ключ
  19. Vers_ int64 `json:"vers"` // Версия записи
  20. Operation_ string `json:"operation"` // Тип операции над записью
  21. CreatedAt_ kalias.ATime `json:"created_at"` // Дата создания записи
  22. UpdateAt_ kalias.ATime `json:"update_at"` // Дата последнего обновления
  23. Sha_ string `json:"sha"` // Хеш мета-информации записи (вместе с значением, но без этого поля разумеется)
  24. Offset_ int64 `json:"-"` // Смещение в файле, игнорируется при записи
  25. }
  26. // NewRecMeta -- создание новой мета-информации записи KV-хранилища
  27. func NewRecMeta(key kalias.AKey) *RecMeta {
  28. hassert(key != "", "NewRecMeta: key is empty")
  29. sf := &RecMeta{
  30. Key_: key,
  31. Vers_: 1,
  32. Operation_: "create",
  33. CreatedAt_: helpers.TimeNowStr(),
  34. }
  35. _ = ktypes.IRecMeta(sf)
  36. return sf
  37. }
  38. // Key -- ключ записи
  39. func (sf *RecMeta) Key() kalias.AKey {
  40. return sf.Key_
  41. }
  42. // Vers -- версия записи
  43. func (sf *RecMeta) Vers() int64 {
  44. return sf.Vers_
  45. }
  46. // Operation -- тип операции над записью
  47. func (sf *RecMeta) Operation() string {
  48. return sf.Operation_
  49. }
  50. // CreatedAt -- дата создания записи
  51. func (sf *RecMeta) CreatedAt() kalias.ATime {
  52. return sf.CreatedAt_
  53. }
  54. // UpdateAt -- дата последнего обновления
  55. func (sf *RecMeta) UpdateAt() kalias.ATime {
  56. return sf.UpdateAt_
  57. }