rec_meta.go 3.1 KB

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