rec_meta.go 2.9 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182838485868788
  1. // package rec_meta -- мета-информация записи KV-хранилища.
  2. package rec_meta
  3. import (
  4. "gitp78su.ipnodns.ru/svi/kern/v4/d0"
  5. "gitp78su.ipnodns.ru/svi/kern/v4/d2/lsi/store_ent/rec_key"
  6. )
  7. // IRecMeta -- интерфейс мета-информации записи KV-хранилища.
  8. type IRecMeta interface {
  9. // Vers -- версия записи
  10. Vers() int64
  11. // Operation -- тип операции над записью
  12. Operation() *d0.LTxt
  13. // CreatedAt -- дата создания записи
  14. CreatedAt() *d0.LTime
  15. // UpdateAt -- дата последнего обновления
  16. UpdateAt() *d0.MTime
  17. }
  18. // RecMeta -- мета-информация записи KV-хранилища.
  19. //
  20. // Вся информация о записи хранится в JSON-строке, без форматирования
  21. // для того, что можно было файл индексов бакета писать построчно.
  22. // Даже если ключ содержит пробелы или экранированное форматирование
  23. // JSON их экранирует внутри.
  24. type RecMeta struct {
  25. owner *d0.LOwner
  26. Key_ rec_key.ARecKey `json:"key"` // Ключ
  27. Vers_ int64 `json:"vers"` // Версия записи
  28. Operation_ *d0.LTxt `json:"operation"` // Тип операции над записью
  29. createdAt_ *d0.LTime `voc:"created_at"` // Дата создания записи
  30. updateAt_ *d0.MTime `voc:"update_at"` // Дата последнего обновления
  31. // Хеш мета-информации записи (вместе с значением, но без этого поля разумеется)
  32. Sha_ *d0.LTxt `json:"sha"`
  33. Offset_ int64 `json:"-"` // Смещение в файле, игнорируется при записи
  34. }
  35. // NewRecMeta -- создание новой мета-информации записи KV-хранилища.
  36. func NewRecMeta(owner *d0.LOwner, key rec_key.IRecKeyFix) *RecMeta {
  37. d0.If(key == nil).Hassert("NewRecMeta: key==nil")
  38. sf := &RecMeta{
  39. owner: owner,
  40. Key_: key.Get(),
  41. Vers_: 1,
  42. Operation_: d0.LetTxt(owner, "create"),
  43. createdAt_: d0.LetTimeAuto(),
  44. updateAt_: d0.MutTimeAuto(),
  45. }
  46. _ = IRecMeta(sf)
  47. return sf
  48. }
  49. // Key -- ключ записи.
  50. //
  51. func (sf *RecMeta) Key() rec_key.IRecKeyFix {
  52. return rec_key.NewRecKey(sf.Key_)
  53. }
  54. // Vers -- версия записи.
  55. //
  56. func (sf *RecMeta) Vers() int64 {
  57. return sf.Vers_
  58. }
  59. // Operation -- тип операции над записью.
  60. //
  61. func (sf *RecMeta) Operation() *d0.LTxt {
  62. return sf.Operation_
  63. }
  64. // CreatedAt -- дата создания записи.
  65. //
  66. func (sf *RecMeta) CreatedAt() *d0.LTime {
  67. return sf.createdAt_
  68. }
  69. // UpdateAt -- дата последнего обновления.
  70. //
  71. func (sf *RecMeta) UpdateAt() *d0.MTime {
  72. return sf.updateAt_
  73. }