Threaded gdbm #76
@ -18,7 +18,6 @@ import (
|
|||||||
"git.defalsify.org/vise.git/logging"
|
"git.defalsify.org/vise.git/logging"
|
||||||
"git.defalsify.org/vise.git/resource"
|
"git.defalsify.org/vise.git/resource"
|
||||||
"git.defalsify.org/vise.git/state"
|
"git.defalsify.org/vise.git/state"
|
||||||
gdbmdb "git.defalsify.org/vise.git/db/gdbm"
|
|
||||||
|
|
||||||
"git.grassecon.net/urdt/ussd/internal/handlers"
|
"git.grassecon.net/urdt/ussd/internal/handlers"
|
||||||
"git.grassecon.net/urdt/ussd/internal/storage"
|
"git.grassecon.net/urdt/ussd/internal/storage"
|
||||||
@ -282,8 +281,11 @@ func(s *sshRunner) Run(ctx context.Context) {//, mss *storage.MenuStorageService
|
|||||||
|
|
||||||
func sshLoadKeys(ctx context.Context, dbDir string) error {
|
func sshLoadKeys(ctx context.Context, dbDir string) error {
|
||||||
keyStoreFile := path.Join(dbDir, "ssh_authorized_keys.gdbm")
|
keyStoreFile := path.Join(dbDir, "ssh_authorized_keys.gdbm")
|
||||||
keyStore = gdbmdb.NewGdbmDb()
|
keyStore = storage.NewThreadGdbmDb()
|
||||||
keyStore.Connect(ctx, keyStoreFile)
|
err := keyStore.Connect(ctx, keyStoreFile)
|
||||||
|
if err != nil {
|
||||||
|
return err
|
||||||
|
}
|
||||||
pubKey, _, _, _, err := ssh.ParseAuthorizedKey([]byte("ssh-rsa AAAAB3NzaC1yc2EAAAADAQABAAABgQCu5rYCxMBsVAL1TEkMQgmElAYEZj5zYDdyHjUxZ6qzHBOZD9GAzdxx9GyQDx2vdYm3329tLH/69ky1YA3nUz8SnJGBD6hC5XrqwN6zo9R9oOHAKTwiPGhey2NTVmheP+9XNHukBnOlkkWOQlpDDvMbWOztaZOWDaA8OIeP0t6qzFqLyelyg65lxzM3BKd7bCmmfzl/64BcP1MotAmB9DUxmY0Wb4Q2hYZfNYBx50Z4xthTgKV+Xoo8CbTduKotIz6hluQGvWdtxlCJQEiZ2f4RYY87JSA6/BAH2fhxuLHMXRpzocJNqARqCWpdcTGSg7bzxbKvTFH9OU4wZtr9ie40OR4zsc1lOBZL0rnp8GLkG8ZmeBQrgEDlmR9TTlz4okgtL+c5TCS37rjZYVjmtGwihws0EL9+wyv2dSQibirklC4wK5eWHKXl5vab19qzw/qRLdoRBK40DxbRKggxA7gqSsKrmrf+z7CuLIz/kxF+169FBLbh1MfBOGdx1awm6aU= lash@furioso"))
|
pubKey, _, _, _, err := ssh.ParseAuthorizedKey([]byte("ssh-rsa AAAAB3NzaC1yc2EAAAADAQABAAABgQCu5rYCxMBsVAL1TEkMQgmElAYEZj5zYDdyHjUxZ6qzHBOZD9GAzdxx9GyQDx2vdYm3329tLH/69ky1YA3nUz8SnJGBD6hC5XrqwN6zo9R9oOHAKTwiPGhey2NTVmheP+9XNHukBnOlkkWOQlpDDvMbWOztaZOWDaA8OIeP0t6qzFqLyelyg65lxzM3BKd7bCmmfzl/64BcP1MotAmB9DUxmY0Wb4Q2hYZfNYBx50Z4xthTgKV+Xoo8CbTduKotIz6hluQGvWdtxlCJQEiZ2f4RYY87JSA6/BAH2fhxuLHMXRpzocJNqARqCWpdcTGSg7bzxbKvTFH9OU4wZtr9ie40OR4zsc1lOBZL0rnp8GLkG8ZmeBQrgEDlmR9TTlz4okgtL+c5TCS37rjZYVjmtGwihws0EL9+wyv2dSQibirklC4wK5eWHKXl5vab19qzw/qRLdoRBK40DxbRKggxA7gqSsKrmrf+z7CuLIz/kxF+169FBLbh1MfBOGdx1awm6aU= lash@furioso"))
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return err
|
return err
|
||||||
|
116
internal/storage/gdbm.go
Normal file
116
internal/storage/gdbm.go
Normal file
@ -0,0 +1,116 @@
|
|||||||
|
package storage
|
||||||
|
|
||||||
|
import (
|
||||||
|
"context"
|
||||||
|
|
||||||
|
"git.defalsify.org/vise.git/db"
|
||||||
|
"git.defalsify.org/vise.git/lang"
|
||||||
|
gdbmdb "git.defalsify.org/vise.git/db/gdbm"
|
||||||
|
)
|
||||||
|
|
||||||
|
var (
|
||||||
|
dbC map[string]chan db.Db
|
||||||
|
)
|
||||||
|
|
||||||
|
type ThreadGdbmDb struct {
|
||||||
|
db db.Db
|
||||||
|
registered bool
|
||||||
|
connStr string
|
||||||
|
}
|
||||||
|
|
||||||
|
func NewThreadGdbmDb() *ThreadGdbmDb {
|
||||||
|
if dbC == nil {
|
||||||
|
dbC = make(map[string]chan db.Db)
|
||||||
|
}
|
||||||
|
return &ThreadGdbmDb{}
|
||||||
|
}
|
||||||
|
|
||||||
|
func(tdb *ThreadGdbmDb) Connect(ctx context.Context, connStr string) error {
|
||||||
|
var ok bool
|
||||||
|
_, ok = dbC[connStr]
|
||||||
|
if ok {
|
||||||
|
logg.WarnCtxf(ctx, "already registered thread gdbm, skipping", "connStr", connStr)
|
||||||
|
}
|
||||||
|
gdb := gdbmdb.NewGdbmDb()
|
||||||
|
err := gdb.Connect(ctx, connStr)
|
||||||
|
if err != nil {
|
||||||
|
return err
|
||||||
|
}
|
||||||
|
dbC[connStr] = make(chan db.Db, 1)
|
||||||
|
dbC[connStr]<- gdb
|
||||||
|
tdb.connStr = connStr
|
||||||
|
tdb.registered = true
|
||||||
|
return nil
|
||||||
|
}
|
||||||
|
|
||||||
|
func(tdb *ThreadGdbmDb) reserve() {
|
||||||
|
if tdb.db == nil {
|
||||||
|
tdb.db = <-dbC[tdb.connStr]
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
func(tdb *ThreadGdbmDb) release() {
|
||||||
|
if tdb.db == nil {
|
||||||
|
return
|
||||||
|
}
|
||||||
|
dbC[tdb.connStr] <- tdb.db
|
||||||
|
tdb.db = nil
|
||||||
|
}
|
||||||
|
|
||||||
|
func(tdb *ThreadGdbmDb) SetPrefix(pfx uint8) {
|
||||||
|
tdb.reserve()
|
||||||
|
tdb.db.SetPrefix(pfx)
|
||||||
|
}
|
||||||
|
|
||||||
|
func(tdb *ThreadGdbmDb) SetSession(sessionId string) {
|
||||||
|
tdb.reserve()
|
||||||
|
tdb.db.SetSession(sessionId)
|
||||||
|
}
|
||||||
|
|
||||||
|
func(tdb *ThreadGdbmDb) SetLanguage(lng *lang.Language) {
|
||||||
|
tdb.reserve()
|
||||||
|
tdb.db.SetLanguage(lng)
|
||||||
|
}
|
||||||
|
|
||||||
|
func(tdb *ThreadGdbmDb) Safe() bool {
|
||||||
|
tdb.reserve()
|
||||||
|
v := tdb.db.Safe()
|
||||||
|
tdb.release()
|
||||||
|
return v
|
||||||
|
}
|
||||||
|
|
||||||
|
func(tdb *ThreadGdbmDb) Prefix() uint8 {
|
||||||
|
tdb.reserve()
|
||||||
|
v := tdb.db.Prefix()
|
||||||
|
tdb.release()
|
||||||
|
return v
|
||||||
|
}
|
||||||
|
|
||||||
|
func(tdb *ThreadGdbmDb) SetLock(typ uint8, locked bool) error {
|
||||||
|
tdb.reserve()
|
||||||
|
err := tdb.db.SetLock(typ, locked)
|
||||||
|
tdb.release()
|
||||||
|
return err
|
||||||
|
}
|
||||||
|
|
||||||
|
func(tdb *ThreadGdbmDb) Put(ctx context.Context, key []byte, val []byte) error {
|
||||||
|
tdb.reserve()
|
||||||
|
err := tdb.db.Put(ctx, key, val)
|
||||||
|
tdb.release()
|
||||||
|
return err
|
||||||
|
}
|
||||||
|
|
||||||
|
func(tdb *ThreadGdbmDb) Get(ctx context.Context, key []byte) ([]byte, error) {
|
||||||
|
tdb.reserve()
|
||||||
|
v, err := tdb.db.Get(ctx, key)
|
||||||
|
tdb.release()
|
||||||
|
return v, err
|
||||||
|
}
|
||||||
|
|
||||||
|
func(tdb *ThreadGdbmDb) Close() error {
|
||||||
|
tdb.reserve()
|
||||||
|
close(dbC[tdb.connStr])
|
||||||
|
err := tdb.db.Close()
|
||||||
|
tdb.db = nil
|
||||||
|
return err
|
||||||
|
}
|
Loading…
Reference in New Issue
Block a user