1
0
Fork 0
mirror of https://codeberg.org/forgejo/forgejo.git synced 2024-11-23 08:47:42 -05:00
forgejo/vendor/gitea.com/lunny/levelqueue
zeripath 2c903383b5
Add Unique Queue infrastructure and move TestPullRequests to this (#9856)
* Upgrade levelqueue to version 0.2.0

This adds functionality for Unique Queues

* Add UniqueQueue interface and functions to create them

* Add UniqueQueue implementations

* Move TestPullRequests over to use UniqueQueue

* Reduce code duplication

* Add bytefifos

* Ensure invalid types are logged

* Fix close race in PersistableChannelQueue Shutdown
2020-02-02 23:19:58 +00:00
..
.drone.yml upgrade levelqueue to 0.1.0 (#9192) 2019-11-28 23:37:33 +08:00
.gitignore Add Unique Queue infrastructure and move TestPullRequests to this (#9856) 2020-02-02 23:19:58 +00:00
error.go Add Unique Queue infrastructure and move TestPullRequests to this (#9856) 2020-02-02 23:19:58 +00:00
go.mod upgrade levelqueue to 0.1.0 (#9192) 2019-11-28 23:37:33 +08:00
go.sum upgrade levelqueue to 0.1.0 (#9192) 2019-11-28 23:37:33 +08:00
LICENSE upgrade levelqueue to 0.1.0 (#9192) 2019-11-28 23:37:33 +08:00
queue.go Add Unique Queue infrastructure and move TestPullRequests to this (#9856) 2020-02-02 23:19:58 +00:00
README.md Add Unique Queue infrastructure and move TestPullRequests to this (#9856) 2020-02-02 23:19:58 +00:00
set.go Add Unique Queue infrastructure and move TestPullRequests to this (#9856) 2020-02-02 23:19:58 +00:00
uniquequeue.go Add Unique Queue infrastructure and move TestPullRequests to this (#9856) 2020-02-02 23:19:58 +00:00

levelqueue

Level queue is a simple queue golang library base on go-leveldb.

Build Status

Installation

go get gitea.com/lunny/levelqueue

Usage

queue, err := levelqueue.Open("./queue")

err = queue.RPush([]byte("test"))

// pop an element from left of the queue
data, err = queue.LPop()

// if handle success, element will be pop, otherwise it will be keep
queue.LHandle(func(dt []byte) error{
    return nil
})

You can now create a Set from a leveldb:

set, err := levelqueue.OpenSet("./set")

added, err:= set.Add([]byte("member1"))

has, err := set.Has([]byte("member1"))

members, err := set.Members()

removed, err := set.Remove([]byte("member1"))

And you can create a UniqueQueue from a leveldb:

queue, err := levelqueue.OpenUnique("./queue")

err := queue.RPush([]byte("member1"))

err = queue.LPush([]byte("member1"))
// Will return ErrAlreadyInQueue

// and so on.

Creating Queues, UniqueQueues and Sets from already open DB

If you have an already open DB you can create these from this using the NewQueue, NewUniqueQueue and NewSet functions.