Procházet zdrojové kódy

SVI Рабочее сохранение

SVI před 4 měsíci
rodič
revize
93e9606fbb

+ 2 - 1
v4/kern_test.go

@@ -11,6 +11,7 @@ import (
 	"gitp78su.ipnodns.ru/svi/kern/v4/lev1/log_buf"
 	"gitp78su.ipnodns.ru/svi/kern/v4/lev1/mock_env"
 	"gitp78su.ipnodns.ru/svi/kern/v4/lev1/safe_bool"
+	"gitp78su.ipnodns.ru/svi/kern/v4/lev2/lsi/store_ent"
 	"gitp78su.ipnodns.ru/svi/kern/v4/lev3/mod_ent"
 )
 
@@ -159,7 +160,7 @@ func (sf *tester) new1() {
 }
 
 var(
-	str1=defs.Str("test_builders")
+	str1=store_ent.NewStoreKeyFix("test_builders")
 )
 
 func (sf *tester) new0() {

+ 4 - 4
v4/lev0/result/result.go

@@ -90,7 +90,8 @@ func (sf *Result[T]) IsErr() bool {
 
 // Ok -- возвращает значение, если оно есть, иначе паникует.
 func (sf *Result[T]) Ok() T {
-	mKh.Hassert(sf.err == nil, defs.NewErr("Result[T].Ok(): err!=nil, err=\n\t%w", sf.err))
+
+	mKh.Hassert(sf.err == nil, "Result[T].Ok(): err!=nil, err=\n\t%v", sf.err)
 	sf.isCheck = true
 	return sf.val
 }
@@ -152,12 +153,11 @@ func (sf *Result[T]) Hassert(msgFormat defs.AStr, args ...any) T {
 
 // Assert -- проверяет, что нет ошибки (с паникой только на локальном стенде).
 func (sf *Result[T]) Assert(msgFormat defs.AStr, args ...any) T {
-	strErr := defs.Str("").Str()
+	strErr := defs.Str("")
 	if !sf.isCheck {
 		strErr = defs.Str(", err=\n\t%v", sf.err).Str()
 	}
-	msg := defs.NewErr(msgFormat+strErr, args...)
-	mKh.Assert(sf.err == nil, defs.Str(msg))
+	mKh.Assert(sf.err == nil, msgFormat+strErr, args...)
 	sf.isCheck = true
 	return sf.val
 }

+ 4 - 5
v4/lev2/kserv_http/kserv_http.go

@@ -183,11 +183,10 @@ func (sf *kServHttp) Run() {
 
 // В отдельном потоке ждёт закрытия канала.
 func (sf *kServHttp) fnChErr(chErr <-chan defs.IErr) {
-	strErr := <-chErr
-	if strErr.String() != "<nil>" {
-		err := defs.NewErr("kServHttp.fnChErr(): in listen, err=\n\t%v", strErr)
-		msg := defs.Str("fnChErr(): err=\n\t%v", err.Error())
-		sf.log.Err(msg, err)
+	err := <-chErr
+	if err.Str() != "<nil>" {
+		err := defs.NewErr("kServHttp.fnChErr(): in listen, err=\n\t%w", err)
+		sf.log.Err(err)
 		sf.kCtx.Cancel()
 	}
 }

+ 5 - 5
v4/lev2/kserv_http_std/kserv_http_std.go

@@ -65,20 +65,20 @@ func (sf *kServHttpStd) Run() {
 	}
 	// Запуск сервера в горутине
 	go func() {
-		msg:=defs.Str("kServHttpStd.Run().fn(): run on http://%v", sf.server.Addr)
+		msg := defs.Str("kServHttpStd.Run().fn(): run on http://%v", sf.server.Addr)
 		sf.log.Debug(msg)
 		if err := sf.server.ListenAndServe(); err != nil && err != http.ErrServerClosed {
-			err:=defs.NewErr("kServHttpStd.Run.fn(): in work, err=\n\t%v", err)
+			err := defs.NewErr("kServHttpStd.Run.fn(): in work, err=\n\t%v", err)
 			sf.log.Err(err)
 		}
 	}()
 	go sf.close()
 	if err := sf.server.Shutdown(sf.kCtx.Ctx()); err != nil {
-		err:=defs.NewErr("Ошибка при graceful shutdown: %w", err)
-		sf.log.Debug(err)
+		msgErr := defs.Str("kServHttpStd.Run(): ошибка при graceful shutdown, err=\n\t%v", err)
+		sf.log.Debug(msgErr)
 	}
 
-	sf.log.Info(defs.Str("Сервер остановлен"))
+	sf.log.Info("Сервер остановлен")
 }
 
 func (sf *kServHttpStd) close() {

+ 3 - 4
v4/lev2/log_topic/log_topic.go

@@ -2,10 +2,9 @@
 package log_topic
 
 import (
-	"fmt"
-
 	mL0 "gitp78su.ipnodns.ru/svi/kern/v4/lev0"
 	mKs "gitp78su.ipnodns.ru/svi/kern/v4/lev0/core_spec"
+	"gitp78su.ipnodns.ru/svi/kern/v4/lev0/defs"
 	"gitp78su.ipnodns.ru/svi/kern/v4/lev0/helpers"
 	"gitp78su.ipnodns.ru/svi/kern/v4/lev2/lti/bus_ent/topic"
 	"gitp78su.ipnodns.ru/svi/kern/v4/lev2/lti/bus_spec"
@@ -21,7 +20,7 @@ type LogTopic struct {
 func NewLogTopic(topic topic.ITopicFix, client bus_spec.IBusClient) mL0.IResult[*LogTopic] {
 	helpers.Hassert(topic != nil, "NewLogTopic(): topic==nil", []any{})
 	if client == nil {
-		err := fmt.Errorf("NewLogTopic(): IBusClient==nil")
+		err := defs.NewErr("NewLogTopic(): IBusClient==nil")
 		return mL0.NewErr[*LogTopic](err)
 	}
 	sf := &LogTopic{
@@ -35,7 +34,7 @@ func NewLogTopic(topic topic.ITopicFix, client bus_spec.IBusClient) mL0.IResult[
 func (sf *LogTopic) Pub(binMsg []byte) mL0.IResult[mKs.EBool] {
 	res := sf.client.Publish(sf.topic, binMsg)
 	if res.IsErr() {
-		err := fmt.Errorf("LogTopic.Pub(): in pub with client, err=\n\t%v", res.Err())
+		err := defs.NewErr("LogTopic.Pub(): in pub with client, err=\n\t%w", res.Err())
 		return mL0.NewErr[mKs.EBool](err)
 	}
 	return res

+ 15 - 14
v4/lev2/lsi/kstore_kv/kstore_kv.go

@@ -2,7 +2,6 @@
 package kstore_kv
 
 import (
-	"fmt"
 	"os"
 	"sync"
 	"time"
@@ -22,7 +21,8 @@ import (
 	"gitp78su.ipnodns.ru/svi/kern/v4/lev2/kctx"
 	"gitp78su.ipnodns.ru/svi/kern/v4/lev2/kspec"
 	"gitp78su.ipnodns.ru/svi/kern/v4/lev2/lsi/store_ent"
-	"gitp78su.ipnodns.ru/svi/kern/v4/lev2/lsi/store_ent/store_key"
+	"gitp78su.ipnodns.ru/svi/kern/v4/lev2/lsi/store_ent/rec_key"
+	"gitp78su.ipnodns.ru/svi/kern/v4/lev2/lsi/store_spec"
 )
 
 var (
@@ -47,7 +47,7 @@ var (
 )
 
 // GetKernelStore -- возвращает новое локальное хранилище ядра.
-func GetKernelStore() kspec.IKernelStoreKv {
+func GetKernelStore() store_spec.IKernelStoreKv {
 	block.Lock()
 	defer block.Unlock()
 	if kernStore != nil {
@@ -79,12 +79,13 @@ func (sf *kStoreKv) Log() comp_spec.ILogBuf {
 }
 
 // Set -- устанавливает значение по ключу.
-func (sf *kStoreKv) Set(key store_ent.IStoreKeyFix, val store_ent.IStoreValFix) mL0.IResult[core_spec.EBool] {
+func (sf *kStoreKv) Set(rec store_ent.IRecKvFix) mL0.IResult[core_spec.EBool] {
 	sf.Lock()
 	defer sf.Unlock()
-	sf.log.Debug("Set(): key='%v'", key)
+	key:=rec.Key()
+	sf.log.Debug("Set(): key='%v'", key.Get())
 	fnSet := func(txn *badger.Txn) error {
-		err := txn.Set(key.Byte(), val)
+		err := txn.Set(key.Byte(), rec.Val().Byte())
 		return err
 	}
 	err := sf.db.Update(fnSet)
@@ -120,7 +121,7 @@ func (sf *kStoreKv) Get(key store_ent.IStoreKeyFix) mL0.IResult[[]byte] {
 }
 
 // ByPrefix -- фильтрует ключи по префиксу.
-func (sf *kStoreKv) ByPrefix(prefix store_ent.IStoreKeyFix) mL0.IResult[[]store_ent.AStoreKey] {
+func (sf *kStoreKv) ByPrefix(prefix store_ent.IStoreKeyFix) core_spec.IResult[[]store_ent.AStoreKey] {
 	var (
 		binKey []byte
 		lstKey = []store_ent.AStoreKey{}
@@ -140,31 +141,31 @@ func (sf *kStoreKv) ByPrefix(prefix store_ent.IStoreKeyFix) mL0.IResult[[]store_
 			// if err != nil {
 			// 	return err
 			// }
-			lstKey = append(lstKey, store_key.AStoreKey(binKey))
+			lstKey = append(lstKey, rec_key.ARecKey(binKey))
 		}
 		return nil
 	}
 	err := sf.db.View(fnPrefix)
 	if err != nil {
-		err := fmt.Errorf("ByPrefix(): in find, err=\n\t%w", err)
-		return mL0.NewErr[[]defs.Str](err)
+		err := defs.NewErr("ByPrefix(): in find, err=\n\t%w", err)
+		return mL0.NewErr[[]store_ent.AStoreKey](err)
 	}
 	return mL0.NewOk(lstKey)
 }
 
 // Delete -- удалить ключ из хранилища.
-func (sf *kStoreKv) Delete(key string) mL0.IResult[core_spec.EBool] {
+func (sf *kStoreKv) Delete(key store_ent.IStoreKeyFix) mL0.IResult[core_spec.EBool] {
 	sf.Lock()
 	defer sf.Unlock()
 	sf.log.Debug("Delete(): key='%v'", key)
 	fnDelete := func(txn *badger.Txn) error {
-		err := txn.Delete([]byte(key))
+		err := txn.Delete(key.Byte())
 		return err
 	}
 	err := sf.db.Update(fnDelete)
 	if err != nil {
-		err := fmt.Errorf("Delete(): key=%v, err=\n\t%w", key, err)
-		sf.log.Err(err.Error())
+		err := defs.NewErr("Delete(): key=%v, err=\n\t%w", key, err)
+		sf.log.Err(err)
 		return mL0.NewErr[core_spec.EBool](err)
 	}
 	return mL0.NewOk(ebool.NewEBool(true))

+ 18 - 13
v4/lev2/lsi/kstore_kv/kstore_kv_test.go

@@ -5,13 +5,12 @@ import (
 	"testing"
 	"time"
 
-	"gitp78su.ipnodns.ru/svi/kern/v4/lev0/defs"
 	"gitp78su.ipnodns.ru/svi/kern/v4/lev0/defs/stream_name"
 	"gitp78su.ipnodns.ru/svi/kern/v4/lev1/mock_env"
 	"gitp78su.ipnodns.ru/svi/kern/v4/lev2/kctx"
 	"gitp78su.ipnodns.ru/svi/kern/v4/lev2/kspec"
 	"gitp78su.ipnodns.ru/svi/kern/v4/lev2/lsi/store_ent"
-	"gitp78su.ipnodns.ru/svi/kern/v4/lev2/lsi/store_ent/store_key"
+	"gitp78su.ipnodns.ru/svi/kern/v4/lev2/lsi/store_ent/rec_key"
 )
 
 type tester struct {
@@ -49,12 +48,14 @@ func TestKernelStore(t *testing.T) {
 // Установка ключа после закрытия хранилища.
 func (sf *tester) workBad1() {
 	sf.t.Log("workBad1")
-	key:=store_ent.NewStoreKeyFix("test_key")
-	res := kernStore.Set(key, []byte("test_val"))
+	key := store_ent.NewStoreKeyFix("test_key")
+	recVal := store_ent.NewRecValFix([]byte("test_val"))
+	rec := store_ent.NewRecKvFix(key, recVal)
+	res := kernStore.Set(rec)
 	if res.IsOk() {
 		sf.t.Fatalf("workBad1(): set, err==nil")
 	}
-	strKey:=store_ent.NewStoreKeyFix("test_key")
+	strKey := store_ent.NewStoreKeyFix("test_key")
 	opt := kernStore.Get(strKey)
 	if opt.IsOk() {
 		sf.t.Fatalf("workBad1(): get, val==nil")
@@ -68,11 +69,11 @@ func (sf *tester) workBad1() {
 // Удаляет значение.
 func (sf *tester) del() {
 	sf.t.Log("del")
-	res := kernStore.Delete("test_key")
+	key := store_ent.NewStoreKeyFix("test_key")
+	res := kernStore.Delete(key)
 	if res.IsErr() {
 		sf.t.Fatalf("del(): err=%v", res.Err())
 	}
-	key := store_ent.NewStoreKeyFix("test_key")
 	opt := kernStore.Get(key)
 	if opt.IsOk() {
 		sf.t.Fatalf("del(): val!=nil")
@@ -82,12 +83,14 @@ func (sf *tester) del() {
 // Поиск по префиксу.
 func (sf *tester) byPrefix() {
 	sf.t.Log("byPrefix")
-	key := store_key.NewStoreKey("test_key2")
-	res0 := kernStore.Set(key, []byte("test_key2"))
+	key := rec_key.NewRecKey("test_key2")
+	val := store_ent.NewRecValFix([]byte("test_val"))
+	rec := store_ent.NewRecKvFix(key, val)
+	res0 := kernStore.Set(rec)
 	if res0.IsErr() {
 		sf.t.Fatalf("byPrefix(): err=%v", res0.Err())
 	}
-	key = store_key.NewStoreKey("test")
+	key = rec_key.NewRecKey("test")
 	res := kernStore.ByPrefix(key)
 	res.Hassert("byPrefix(): val == nil")
 	lstKey := res.Ok()
@@ -99,7 +102,7 @@ func (sf *tester) byPrefix() {
 // Получение значения по ключу.
 func (sf *tester) get() {
 	sf.t.Log("get")
-	key := store_key.NewStoreKey("test_key")
+	key := rec_key.NewRecKey("test_key")
 	res := kernStore.Get(key)
 	res.Hassert("get(): val==nil")
 	strVal := string(res.Ok())
@@ -111,8 +114,10 @@ func (sf *tester) get() {
 // Добавление ключа в хранилище.
 func (sf *tester) set() {
 	sf.t.Log("set")
-	key := store_key.NewStoreKey("test_key")
-	res := kernStore.Set(key, []byte("test_val"))
+	key := rec_key.NewRecKey("test_key")
+	val := store_ent.NewRecValFix([]byte("test_val"))
+	rec := store_ent.NewRecKvFix(key, val)
+	res := kernStore.Set(rec)
 	if res.IsErr() {
 		sf.t.Fatalf("set(): err=%v", res.Err())
 	}

+ 3 - 3
v4/lev2/lsi/kstore_kv_std/kv_bucket_base/kv_bucket_base.go

@@ -5,8 +5,8 @@ import (
 	"gitp78su.ipnodns.ru/svi/kern/v4/lev0/core_spec"
 	"gitp78su.ipnodns.ru/svi/kern/v4/lev0/helpers"
 	"gitp78su.ipnodns.ru/svi/kern/v4/lev0/voc/etime"
+	"gitp78su.ipnodns.ru/svi/kern/v4/lev2/lsi/store_ent/rec_key"
 	"gitp78su.ipnodns.ru/svi/kern/v4/lev2/lsi/store_ent/rec_kv"
-	"gitp78su.ipnodns.ru/svi/kern/v4/lev2/lsi/store_ent/store_key"
 )
 
 // KvBucketBase -- базовый бакет хранилища KV.
@@ -29,7 +29,7 @@ type KvBucketBase struct {
 	CreatedAt_ core_spec.ITime                       `json:"created_at"` // Время создания бакета
 	UpdatedAt_ core_spec.ITimeMut                    `json:"updated_at"` // Время обновления бакета
 	Vers_      int                                   `json:"vers"`       // Версия бакета
-	dictRec    map[store_key.AStoreKey]rec_kv.IRecKv // Словарь для хранения данных
+	dictRec    map[rec_key.ARecKey]rec_kv.IRecKvFix // Словарь для хранения данных
 }
 
 // NewKvBucketBase -- создание нового базового бакета хранилища KV.
@@ -41,7 +41,7 @@ func NewKvBucketBase(name string, level int, number int) *KvBucketBase {
 		Name_:      name,
 		Level_:     level,
 		Number_:    number,
-		dictRec:    map[store_key.AStoreKey]rec_kv.IRecKv{},
+		dictRec:    map[rec_key.ARecKey]rec_kv.IRecKvFix{},
 		CreatedAt_: etime.NewETimeAuto(),
 		UpdatedAt_: etime.NewETimeAutoMut(),
 	}

+ 13 - 13
v4/lev2/lsi/store_ent/dict_rec/dict_rec.go

@@ -2,68 +2,68 @@
 package dict_rec
 
 import (
-	"fmt"
 	"sync"
 
 	mL0 "gitp78su.ipnodns.ru/svi/kern/v4/lev0"
 	"gitp78su.ipnodns.ru/svi/kern/v4/lev0/core_spec"
 	"gitp78su.ipnodns.ru/svi/kern/v4/lev0/defs"
 	"gitp78su.ipnodns.ru/svi/kern/v4/lev0/etypes/ebool"
+	"gitp78su.ipnodns.ru/svi/kern/v4/lev2/lsi/store_ent/rec_key"
 	"gitp78su.ipnodns.ru/svi/kern/v4/lev2/lsi/store_ent/rec_kv"
-	"gitp78su.ipnodns.ru/svi/kern/v4/lev2/lsi/store_ent/store_key"
 )
 
 // IDictRec -- интерфейс потокобезопасного словаря KV-бакета.
 type IDictRec interface {
 	// Get -- возвращает значение по ключу
-	Get(key store_key.IStoreKeyFix) core_spec.IOption[rec_kv.IRecKv]
+	Get(key rec_key.IRecKeyFix) core_spec.IOption[rec_kv.IRecKvFix]
 	// Set -- устанавливает значение по ключу
-	Set(val rec_kv.IRecKv) core_spec.IResult[core_spec.EBool]
+	Set(val rec_kv.IRecKvFix) core_spec.IResult[core_spec.EBool]
 	// Del -- удаляет значение по ключу
-	Del(key store_key.IStoreKeyFix)
+	Del(key rec_key.IRecKeyFix)
 	// Len -- возвращает количество записей
 	Len() defs.Int
 }
 
 // DictRec -- потокобезопасный словарь KV-бакета.
 type DictRec struct {
-	dict  map[store_key.AStoreKey]rec_kv.IRecKv
+	dict  map[rec_key.ARecKey]rec_kv.IRecKvFix
 	block sync.RWMutex
 }
 
 // NewDictRec -- создание нового потокобезопасного словаря KV.
 func NewDictRec() *DictRec {
 	sf := &DictRec{
-		dict: map[store_key.AStoreKey]rec_kv.IRecKv{},
+		dict: map[rec_key.ARecKey]rec_kv.IRecKvFix{},
 	}
 	_ = IDictRec(sf)
 	return sf
 }
 
 // Get -- получение значения по ключу.
-func (sf *DictRec) Get(key store_key.IStoreKeyFix) mL0.IOption[rec_kv.IRecKv] {
+func (sf *DictRec) Get(key rec_key.IRecKeyFix) mL0.IOption[rec_kv.IRecKvFix] {
 	sf.block.RLock()
 	defer sf.block.RUnlock()
 	rec, isOk := sf.dict[key.Get()]
 	if !isOk {
-		return mL0.NewNone[rec_kv.IRecKv]()
+		return mL0.NewNone[rec_kv.IRecKvFix]()
 	}
 	return mL0.NewSome(rec)
 }
 
 // Set -- установка значения по ключу.
-func (sf *DictRec) Set(rec rec_kv.IRecKv) mL0.IResult[core_spec.EBool] {
+func (sf *DictRec) Set(rec rec_kv.IRecKvFix) mL0.IResult[core_spec.EBool] {
 	if rec == nil {
-		return mL0.NewErr[core_spec.EBool](fmt.Errorf("DictRec.Set(): rec is nil"))
+		err:=defs.NewErr("DictRec.Set(): rec is nil")
+		return mL0.NewErr[core_spec.EBool](err)
 	}
 	sf.block.Lock()
 	defer sf.block.Unlock()
-	sf.dict[rec.Meta().Key().Get()] = rec
+	sf.dict[rec.Key().Get()] = rec
 	return mL0.NewOk(ebool.NewEBool(true))
 }
 
 // Del -- удаление значения по ключу.
-func (sf *DictRec) Del(key store_key.IStoreKeyFix) {
+func (sf *DictRec) Del(key rec_key.IRecKeyFix) {
 	sf.block.Lock()
 	defer sf.block.Unlock()
 	delete(sf.dict, key.Get())

+ 5 - 7
v4/lev2/lsi/store_ent/dict_rec/dict_rec_test.go

@@ -3,10 +3,9 @@ package dict_rec
 import (
 	"testing"
 
+	"gitp78su.ipnodns.ru/svi/kern/v4/lev2/lsi/store_ent/rec_key"
 	"gitp78su.ipnodns.ru/svi/kern/v4/lev2/lsi/store_ent/rec_kv"
-	"gitp78su.ipnodns.ru/svi/kern/v4/lev2/lsi/store_ent/rec_meta"
 	"gitp78su.ipnodns.ru/svi/kern/v4/lev2/lsi/store_ent/rec_val"
-	"gitp78su.ipnodns.ru/svi/kern/v4/lev2/lsi/store_ent/store_key"
 )
 
 type tester struct {
@@ -51,11 +50,10 @@ func (sf *tester) set_good1() {
 }
 
 // Возвращает новую запись для тестов.
-func (sf *tester) new_rec(key store_key.AStoreKey) rec_kv.IRecKv {
-	_key := store_key.NewStoreKey(key)
-	meta := rec_meta.NewRecMeta(_key)
-	val := rec_val.NewRecVal(store_key.IStoreKeyFix(store_key.NewStoreKey(meta.Key_)), []byte(key+"_val"))
-	rec := rec_kv.NewRecKv(meta, val)
+func (sf *tester) new_rec(key rec_key.ARecKey) rec_kv.IRecKvFix {
+	_key := rec_key.NewRecKey(key)
+	val := rec_val.NewRecVal([]byte(key+"_val"))
+	rec := rec_kv.NewRecKv(_key, val)
 	return rec
 }
 

+ 0 - 0
v4/lev2/lsi/store_ent/store_key/README.md → v4/lev2/lsi/store_ent/rec_key/README.md


+ 16 - 16
v4/lev2/lsi/store_ent/store_key/store_key.go → v4/lev2/lsi/store_ent/rec_key/store_key.go

@@ -1,32 +1,32 @@
 // package store_key -- ключ хранилища
-package store_key
+package rec_key
 
 import (
 	"gitp78su.ipnodns.ru/svi/kern/v4/lev0/helpers"
 )
 
-// AStoreKey -- ключ хранилища.
-type AStoreKey string
+// ARecKey -- ключ хранилища.
+type ARecKey string
 
-// IStoreKeyFix -- фиксированный ключ хранилища.
-type IStoreKeyFix interface {
+// IRecKeyFix -- фиксированный ключ хранилища.
+type IRecKeyFix interface {
 	// String -- строковое представление ключа хранилища.
 	String() string
 	// Get -- получить значение ключа хранилища.
-	Get() AStoreKey
+	Get() ARecKey
 	// Byte -- получить значение ключа хранилища в виде байтов.
 	Byte() []byte
 }
 
-// StoreKey -- ключ хранилища.
-type StoreKey struct {
-	val AStoreKey
+// RecKey -- ключ хранилища.
+type RecKey struct {
+	val ARecKey
 }
 
-// NewStoreKey -- создать новый ключ хранилища.
-func NewStoreKey(val AStoreKey) *StoreKey {
-	helpers.Hassert(val != "", "NewStoreKey(): val is empty")
-	return &StoreKey{
+// NewRecKey -- создать новый ключ хранилища.
+func NewRecKey(val ARecKey) *RecKey {
+	helpers.Hassert(val != "", "NewRecKey(): val is empty")
+	return &RecKey{
 		val: val,
 	}
 }
@@ -34,20 +34,20 @@ func NewStoreKey(val AStoreKey) *StoreKey {
 // Byte -- получить значение ключа хранилища в виде байтов.
 //
 //go:fix inline
-func (sf *StoreKey) Byte() []byte {
+func (sf *RecKey) Byte() []byte {
 	return []byte(sf.val)
 }
 
 // String -- строковое представление.
 //
 //go:fix inline
-func (sf *StoreKey) String() string {
+func (sf *RecKey) String() string {
 	return string(sf.val)
 }
 
 // Get -- получить значение.
 //
 //go:fix inline
-func (sf *StoreKey) Get() AStoreKey {
+func (sf *RecKey) Get() ARecKey {
 	return sf.val
 }

+ 4 - 4
v4/lev2/lsi/store_ent/store_key/store_key_test.go → v4/lev2/lsi/store_ent/rec_key/store_key_test.go

@@ -1,11 +1,11 @@
-package store_key
+package rec_key
 
 import "testing"
 
 func TestNewAStoreKey_ok(t *testing.T) {
 	t.Parallel()
 
-	cases := []AStoreKey{
+	cases := []ARecKey{
 		"key",
 		"key_1",
 		"ключ",
@@ -16,7 +16,7 @@ func TestNewAStoreKey_ok(t *testing.T) {
 		t.Run(string(tc), func(t *testing.T) {
 			t.Parallel()
 
-			k := NewStoreKey(tc)
+			k := NewRecKey(tc)
 			if k == nil {
 				t.Fatalf("NewAStoreKey(): nil")
 			}
@@ -39,5 +39,5 @@ func TestNewAStoreKey_empty_panics(t *testing.T) {
 		}
 	}()
 
-	_ = NewStoreKey("")
+	_ = NewRecKey("")
 }

+ 20 - 9
v4/lev2/lsi/store_ent/rec_kv/rec_kv.go

@@ -3,6 +3,7 @@ package rec_kv
 
 import (
 	"gitp78su.ipnodns.ru/svi/kern/v4/lev0/helpers"
+	"gitp78su.ipnodns.ru/svi/kern/v4/lev2/lsi/store_ent/rec_key"
 	"gitp78su.ipnodns.ru/svi/kern/v4/lev2/lsi/store_ent/rec_meta"
 	"gitp78su.ipnodns.ru/svi/kern/v4/lev2/lsi/store_ent/rec_val"
 )
@@ -11,38 +12,48 @@ var (
 	hassert = helpers.Hassert
 )
 
-// IRecKv -- интерфейс записи KV-хранилища.
-type IRecKv interface {
+// IRecKvFix -- интерфейс записи KV-хранилища.
+type IRecKvFix interface {
 	// Meta -- метаданные записи
 	Meta() rec_meta.IRecMeta
+	// Key -- ключ записи
+	Key() rec_key.IRecKeyFix
 	// Val -- значение записи
-	Val() rec_val.IRecVal
+	Val() rec_val.IRecValFix
 }
 
 // RecKv -- запись KV-хранилища.
 type RecKv struct {
-	meta rec_meta.IRecMeta // Метаданные записи
-	val  rec_val.IRecVal   // Значение записи
+	key  rec_key.IRecKeyFix // Ключ записи
+	meta rec_meta.IRecMeta  // Метаданные записи
+	val  rec_val.IRecValFix // Значение записи
 }
 
 // NewRecKv -- создает новую запись.
-func NewRecKv(meta rec_meta.IRecMeta, val rec_val.IRecVal) *RecKv {
-	hassert(meta != nil, "NewRecKv(): meta==nil")
+func NewRecKv(key rec_key.IRecKeyFix, val rec_val.IRecValFix) *RecKv {
+	hassert(key != nil, "NewRecKv(): key==nil")
 	hassert(val != nil, "NewRecKv(): val==nil")
+	meta := rec_meta.NewRecMeta(key)
 	sf := &RecKv{
+		key:  key,
 		meta: meta,
 		val:  val,
 	}
-	_ = IRecKv(sf)
+	_ = IRecKvFix(sf)
 	return sf
 }
 
+// Key -- ключ записи.
+func (sf *RecKv) Key() rec_key.IRecKeyFix {
+	return sf.key
+}
+
 // Meta -- метаданные записи.
 func (sf *RecKv) Meta() rec_meta.IRecMeta {
 	return sf.meta
 }
 
 // Val -- значение записи.
-func (sf *RecKv) Val() rec_val.IRecVal {
+func (sf *RecKv) Val() rec_val.IRecValFix {
 	return sf.val
 }

+ 6 - 6
v4/lev2/lsi/store_ent/rec_kv/rec_kv_test.go

@@ -3,9 +3,9 @@ package rec_kv
 import (
 	"testing"
 
+	"gitp78su.ipnodns.ru/svi/kern/v4/lev2/lsi/store_ent/rec_key"
 	"gitp78su.ipnodns.ru/svi/kern/v4/lev2/lsi/store_ent/rec_meta"
 	"gitp78su.ipnodns.ru/svi/kern/v4/lev2/lsi/store_ent/rec_val"
-	"gitp78su.ipnodns.ru/svi/kern/v4/lev2/lsi/store_ent/store_key"
 )
 
 type tester struct {
@@ -34,12 +34,12 @@ func (sf *tester) new_good1() {
 			sf.t.Fatalf("new_good1(): panic!=nil")
 		}
 	}()
-	key := store_key.NewStoreKey("test_key")
+	key := rec_key.NewRecKey("test_key")
 	meta := rec_meta.IRecMeta(rec_meta.NewRecMeta(key))
-	val := rec_val.NewRecVal(meta.Key(), []byte("test_val"))
-	rec := NewRecKv(meta, val)
-	if rec.Meta() != meta {
-		sf.t.Fatalf("new_good1(): rec.Meta()!=meta")
+	val := rec_val.NewRecVal([]byte("test_val"))
+	rec := NewRecKv(key, val)
+	if rec.Meta() == meta {
+		sf.t.Fatalf("new_good1(): rec.Meta()==meta")
 	}
 	if rec.Val() != val {
 		sf.t.Fatalf("new_good1(): rec.Val()!=val")

+ 5 - 7
v4/lev2/lsi/store_ent/rec_meta/rec_meta.go

@@ -5,7 +5,7 @@ import (
 	"gitp78su.ipnodns.ru/svi/kern/v4/lev0/core_spec"
 	"gitp78su.ipnodns.ru/svi/kern/v4/lev0/helpers"
 	"gitp78su.ipnodns.ru/svi/kern/v4/lev0/voc/etime"
-	"gitp78su.ipnodns.ru/svi/kern/v4/lev2/lsi/store_ent/store_key"
+	"gitp78su.ipnodns.ru/svi/kern/v4/lev2/lsi/store_ent/rec_key"
 )
 
 var (
@@ -14,8 +14,6 @@ var (
 
 // IRecMeta -- интерфейс мета-информации записи KV-хранилища.
 type IRecMeta interface {
-	// Key -- ключ записи
-	Key() store_key.IStoreKeyFix
 	// Vers -- версия записи
 	Vers() int64
 	// Operation -- тип операции над записью
@@ -33,7 +31,7 @@ type IRecMeta interface {
 // Даже если ключ содержит пробелы или экранированное форматирование
 // JSON их экранирует внутри.
 type RecMeta struct {
-	Key_       store_key.AStoreKey `json:"key"`       // Ключ
+	Key_       rec_key.ARecKey `json:"key"`       // Ключ
 	Vers_      int64               `json:"vers"`      // Версия записи
 	Operation_ string              `json:"operation"` // Тип операции над записью
 	createdAt_ core_spec.ITime     `voc:"created_at"` // Дата создания записи
@@ -45,7 +43,7 @@ type RecMeta struct {
 }
 
 // NewRecMeta -- создание новой мета-информации записи KV-хранилища.
-func NewRecMeta(key store_key.IStoreKeyFix) *RecMeta {
+func NewRecMeta(key rec_key.IRecKeyFix) *RecMeta {
 	hassert(key != nil, "NewRecMeta: key==nil")
 	sf := &RecMeta{
 		Key_:       key.Get(),
@@ -61,8 +59,8 @@ func NewRecMeta(key store_key.IStoreKeyFix) *RecMeta {
 // Key -- ключ записи.
 //
 //go:fix inline
-func (sf *RecMeta) Key() store_key.IStoreKeyFix {
-	return store_key.NewStoreKey(sf.Key_)
+func (sf *RecMeta) Key() rec_key.IRecKeyFix {
+	return rec_key.NewRecKey(sf.Key_)
 }
 
 // Vers -- версия записи.

+ 2 - 2
v4/lev2/lsi/store_ent/rec_meta/rec_meta_test.go

@@ -3,7 +3,7 @@ package rec_meta
 import (
 	"testing"
 
-	"gitp78su.ipnodns.ru/svi/kern/v4/lev2/lsi/store_ent/store_key"
+	"gitp78su.ipnodns.ru/svi/kern/v4/lev2/lsi/store_ent/rec_key"
 )
 
 type tester struct {
@@ -59,7 +59,7 @@ func (sf *tester) newBad1() {
 			sf.t.Fatalf("newBad1(): panic!=nil")
 		}
 	}()
-	key := store_key.NewStoreKey("test")
+	key := rec_key.NewRecKey("test")
 	sf.meta = NewRecMeta(key)
 	if sf.meta == nil {
 		sf.t.Fatalf("newBad1(): sf.meta==nil")

+ 6 - 19
v4/lev2/lsi/store_ent/rec_val/rec_val.go

@@ -3,13 +3,10 @@ package rec_val
 
 import (
 	"gitp78su.ipnodns.ru/svi/kern/v4/lev0/helpers"
-	"gitp78su.ipnodns.ru/svi/kern/v4/lev2/lsi/store_ent/store_key"
 )
 
-// IRecVal -- значение записи.
-type IRecVal interface {
-	// Key -- возвращает ключ
-	Key() store_key.IStoreKeyFix
+// IRecValFix -- значение записи.
+type IRecValFix interface {
 	// Byte -- возвращает байтовое значение
 	Byte() []byte
 }
@@ -24,29 +21,19 @@ var (
 // в виде JSON-строки, без форматирования для того,
 // чтобы можно было файл значений бакета писать построчно.
 type RecVal struct {
-	Key_ store_key.AStoreKey `json:"key"` // Ключ
-	Val_ []byte              `json:"val"` // Значение
+	Val_ []byte `json:"val"` // Значение
 }
 
 // NewRecVal -- создание нового значения KV-хранилища.
-func NewRecVal(key store_key.IStoreKeyFix, val []byte) *RecVal {
-	hassert(key != nil, "NewRecVal: key is empty")
-	if val == nil {
-		val = []byte{}
-	}
+func NewRecVal(val []byte) *RecVal {
+	hassert(val != nil, "NewRecVal: key is empty")
 	sf := &RecVal{
-		Key_: key.Get(),
 		Val_: val,
 	}
-	_ = IRecVal(sf)
+	_ = IRecValFix(sf)
 	return sf
 }
 
-// Key -- ключ.
-func (sf *RecVal) Key() store_key.IStoreKeyFix {
-	return store_key.NewStoreKey(sf.Key_)
-}
-
 // Byte -- байтовое значение.
 func (sf *RecVal) Byte() []byte {
 	return sf.Val_

+ 2 - 8
v4/lev2/lsi/store_ent/rec_val/rec_val_test.go

@@ -2,8 +2,6 @@ package rec_val
 
 import (
 	"testing"
-
-	"gitp78su.ipnodns.ru/svi/kern/v4/lev2/lsi/store_ent/store_key"
 )
 
 type tester struct {
@@ -27,15 +25,11 @@ func (sf *tester) new() {
 // Ключ -- не пустая строка.
 func (sf *tester) newGood1() {
 	sf.t.Log("newGood1")
-	key := store_key.NewStoreKey("key")
-	sf.recVal = NewRecVal(key, nil)
+	sf.recVal = NewRecVal([]byte(""))
 	if sf.recVal == nil {
 		sf.t.Fatalf("newGood1(): recVal==nil")
 	}
-	if key_ := sf.recVal.Key(); key_.Get() != "key" {
-		sf.t.Fatalf("newGood1(): key_=%s", key_)
-	}
-	if val_ := sf.recVal.Val(); val_ == nil {
+	if val_ := sf.recVal.Byte(); val_ == nil {
 		sf.t.Fatalf("newGood1(): val_ == nil")
 	}
 }

+ 27 - 6
v4/lev2/lsi/store_ent/store_ent.go

@@ -2,18 +2,19 @@ package store_ent
 
 import (
 	"gitp78su.ipnodns.ru/svi/kern/v4/lev2/lsi/store_ent/dict_rec"
+	"gitp78su.ipnodns.ru/svi/kern/v4/lev2/lsi/store_ent/rec_key"
+	"gitp78su.ipnodns.ru/svi/kern/v4/lev2/lsi/store_ent/rec_kv"
 	"gitp78su.ipnodns.ru/svi/kern/v4/lev2/lsi/store_ent/rec_val"
-	"gitp78su.ipnodns.ru/svi/kern/v4/lev2/lsi/store_ent/store_key"
 )
 
 // IStoreKeyFix -- интерфейс ключа хранилища.
-type IStoreKeyFix = store_key.IStoreKeyFix
+type IStoreKeyFix = rec_key.IRecKeyFix
 
 // NewStoreKey -- создать новый ключ хранилища.
 //
 //go:fix inline
-func NewStoreKeyFix(val store_key.AStoreKey) IStoreKeyFix {
-	return store_key.NewStoreKey(val)
+func NewStoreKeyFix(val rec_key.ARecKey) IStoreKeyFix {
+	return rec_key.NewRecKey(val)
 }
 
 // IDictRec -- словарь записей.
@@ -26,5 +27,25 @@ func NewDictRec() IDictRec {
 	return dict_rec.NewDictRec()
 }
 
-// IRecordVal -- значение ключа хранилища.
-type IRecordVal = rec_val.IRecordVal
+// IRecValFix -- значение ключа хранилища.
+type IRecValFix = rec_val.IRecValFix
+
+// AStoreKey -- ключ хранилища.
+type AStoreKey = rec_key.ARecKey
+
+// NewRecValFix -- возвращает новое значение ключа хранилища.
+//
+//go:fix inline
+func NewRecValFix(val []byte) IRecValFix {
+	return rec_val.NewRecVal(val)
+}
+
+// IRecKvFix -- запись хранилища.
+type IRecKvFix = rec_kv.IRecKvFix
+
+// NewRecKvFix -- возвращает новую запись хранилища.
+//
+//go:fix inline
+func NewRecKvFix(key IStoreKeyFix, val IRecValFix) IRecKvFix {
+	return rec_kv.NewRecKv(key, val)
+}

+ 5 - 5
v4/lev2/lsi/store_spec/ikernel_store_kv.go

@@ -2,20 +2,20 @@ package store_spec
 
 import (
 	"gitp78su.ipnodns.ru/svi/kern/v4/lev0/core_spec"
-	"gitp78su.ipnodns.ru/svi/kern/v4/lev0/defs"
 	"gitp78su.ipnodns.ru/svi/kern/v4/lev1/comp_spec"
+	"gitp78su.ipnodns.ru/svi/kern/v4/lev2/lsi/store_ent"
 )
 
 // IKernelStoreKv -- интерфейс к локальному быстрому key-value хранилищу ядра.
 type IKernelStoreKv interface {
 	// Get -- возвращает значение по ключу
-	Get(key defs.AStr) core_spec.IResult[[]byte]
+	Get(key store_ent.IStoreKeyFix) core_spec.IResult[[]byte]
 	// ByPrefix -- возвращает список ключей по префиксу
-	ByPrefix(prefix defs.AStr) core_spec.IResult[[]defs.AStr]
+	ByPrefix(prefix store_ent.IStoreKeyFix) core_spec.IResult[[]store_ent.AStoreKey]
 	// Set -- устанавливает значение по ключу
-	Set(key defs.AStr, val []byte) core_spec.IResult[core_spec.EBool]
+	Set(rec store_ent.IRecKvFix) core_spec.IResult[core_spec.EBool]
 	// Delete -- удаляет значение по ключу
-	Delete(key defs.AStr) core_spec.IResult[core_spec.EBool]
+	Delete(key store_ent.IStoreKeyFix) core_spec.IResult[core_spec.EBool]
 	// Log -- возвращает локальный лог
 	Log() comp_spec.ILogBuf
 }

+ 5 - 5
v4/lev2/lti/bus_ent/handler_name/handler_name_test.go

@@ -7,24 +7,24 @@ import (
 func TestNewAHandlerName_ok(t *testing.T) {
 	t.Parallel()
 
-	cases := []string{
+	cases := []AHandlerName{
 		"handler",
 		"Handler_1",
 		"имя_обработчика",
 	}
 
 	for _, tc := range cases {
-		t.Run(tc, func(t *testing.T) {
+		t.Run(string(tc), func(t *testing.T) {
 			t.Parallel()
 
-			hn := NewHandlerName(AHandlerName(tc))
+			hn := NewHandlerName(tc)
 			if hn == nil {
 				t.Fatalf("NewAHandlerName(): nil")
 			}
-			if string(hn.val) != tc {
+			if hn.Get() != tc {
 				t.Fatalf("Get(): got=%q want=%q", hn.Get(), tc)
 			}
-			if got := hn.Get(); string(got) != tc {
+			if got := hn.Get(); got != tc {
 				t.Fatalf("String(): got=%q want=%q", got, tc)
 			}
 		})

+ 2 - 2
v4/lev2/lti/bus_mock/mock_hand_serve/mock_hand_serve.go

@@ -2,11 +2,11 @@
 package mock_hand_serve
 
 import (
-	"fmt"
 	"sync"
 
 	mL0 "gitp78su.ipnodns.ru/svi/kern/v4/lev0"
 	mKs "gitp78su.ipnodns.ru/svi/kern/v4/lev0/core_spec"
+	"gitp78su.ipnodns.ru/svi/kern/v4/lev0/defs"
 	mKh "gitp78su.ipnodns.ru/svi/kern/v4/lev0/helpers"
 	"gitp78su.ipnodns.ru/svi/kern/v4/lev1/safe_bool"
 	"gitp78su.ipnodns.ru/svi/kern/v4/lev2/lti/bus_ent"
@@ -40,7 +40,7 @@ func (sf *MockHandlerServe) FnBack(binMsg []byte) mL0.IResult[[]byte] {
 	sf.block.Lock()
 	defer sf.block.Unlock()
 	if sf.IsBad_.Get() {
-		err := fmt.Errorf("FnBack(): isBad==true")
+		err := defs.NewErr("FnBack(): isBad==true")
 		return mL0.NewErr[[]byte](err)
 	}
 	sf.Msg_ = binMsg

+ 0 - 1
v4/lev2/lti/bus_mock/mock_hand_sub_local/mock_hand_sub.go

@@ -7,7 +7,6 @@ import (
 
 	mKh "gitp78su.ipnodns.ru/svi/kern/v4/lev0/helpers"
 	"gitp78su.ipnodns.ru/svi/kern/v4/lev2/lti/bus_ent"
-	"gitp78su.ipnodns.ru/svi/kern/v4/lev2/lti/bus_ent/handler_name"
 	"gitp78su.ipnodns.ru/svi/kern/v4/lev2/lti/bus_spec"
 )