fusen-render/queue.go
2023-07-29 21:58:11 +08:00

126 lines
2.4 KiB
Go

package fusenrender
// import (
// "encoding/json"
// "fmt"
// "log"
// "github.com/dgraph-io/badger/v3"
// )
// import (
// "bytes"
// "encoding/gob"
// "encoding/json"
// "fmt"
// "log"
// "time"
// "github.com/dgraph-io/badger/v3"
// )
// type ApplyTask struct {
// Name string
// Object []byte
// }
// func (t *ApplyTask) Encode() ([]byte, error) {
// var buf bytes.Buffer
// enc := gob.NewEncoder(&buf)
// err := enc.Encode(t)
// if err != nil {
// return nil, err
// }
// return buf.Bytes(), nil
// }
// func (t *ApplyTask) Decode(data []byte) error {
// buf := bytes.NewBuffer(data)
// dec := gob.NewDecoder(buf)
// return dec.Decode(t)
// }
// type QueueItem struct {
// Group string `json:"group"` // 组名
// Priority uint32 `json:"priority"` // 处理的优先级
// CreateAt time.Time `json:"create_at"` // 创建时间 统一utc
// Data any `json:"data"` // 操作的数据结构
// }
// func (item *QueueItem) Encode() ([]byte, error) {
// val, err := json.Marshal(item)
// if err != nil {
// return nil, err
// }
// return val, nil
// }
// type Queue struct {
// db *badger.DB
// }
// func NewQueue(datapath string) (*Queue, error) {
// opts := badger.DefaultOptions(datapath)
// db, err := badger.Open(opts)
// if err != nil {
// return nil, err
// }
// return &Queue{
// db: db,
// }, nil
// }
// func (q *Queue) GetKey(item *QueueItem) []byte {
// return []byte(fmt.Sprintf("%s_%d_%d", item.Group, -item.Priority, item.CreateAt.UTC().Unix()))
// }
// func (q *Queue) Enqueue(item *QueueItem) error {
// // Badger存储
// val, err := json.Marshal(item)
// if err != nil {
// return err
// }
// err = q.db.Update(func(txn *badger.Txn) error {
// return txn.Set([]byte(q.GetKey(item)), val)
// })
// return err
// }
// func (q *Queue) Dequeue(group string) (item *QueueItem, err error) {
// prefix := []byte(fmt.Sprintf("%s_", group))
// err = q.db.Update(func(txn *badger.Txn) error {
// it := txn.NewIterator(badger.DefaultIteratorOptions)
// defer it.Close()
// it.Seek(prefix)
// if !it.ValidForPrefix(prefix) {
// return nil
// }
// itemKey := it.Item().Key()
// err = it.Item().Value(func(val []byte) error {
// item = &QueueItem{}
// return json.Unmarshal(val, item)
// })
// if err != nil {
// log.Println(err)
// }
// return txn.Delete(itemKey)
// })
// return item, err
// }