mirror of
				https://codeberg.org/forgejo/forgejo.git
				synced 2025-10-31 14:31:02 +00:00 
			
		
		
		
	upgrade levelqueue to 0.1.0 (#9192)
This commit is contained in:
		
					parent
					
						
							
								ef9a0370ca
							
						
					
				
			
			
				commit
				
					
						3bdce82ce9
					
				
			
		
					 14 changed files with 142 additions and 40 deletions
				
			
		
							
								
								
									
										23
									
								
								vendor/gitea.com/lunny/levelqueue/.drone.yml
									
										
									
										generated
									
									
										vendored
									
									
										Normal file
									
								
							
							
						
						
									
										23
									
								
								vendor/gitea.com/lunny/levelqueue/.drone.yml
									
										
									
										generated
									
									
										vendored
									
									
										Normal file
									
								
							|  | @ -0,0 +1,23 @@ | |||
| --- | ||||
| kind: pipeline | ||||
| name: test | ||||
| 
 | ||||
| workspace: | ||||
|   base: /go | ||||
|   path: src/gitea.com/lunny/levelqueue | ||||
| 
 | ||||
| steps: | ||||
| - name: test | ||||
|   pull: default | ||||
|   image: golang:1.13 | ||||
|   commands: | ||||
|   - go get -t -d -v ./... | ||||
|   - go build -v | ||||
|   - go test -v -race -coverprofile=coverage.txt -covermode=atomic | ||||
|   environment: | ||||
|     GO111MODULE: "on" | ||||
|     GOPROXY: https://goproxy.cn | ||||
|   when: | ||||
|     event: | ||||
|     - push | ||||
|     - pull_request | ||||
							
								
								
									
										3
									
								
								vendor/gitea.com/lunny/levelqueue/.gitignore
									
										
									
										generated
									
									
										vendored
									
									
										Normal file
									
								
							
							
						
						
									
										3
									
								
								vendor/gitea.com/lunny/levelqueue/.gitignore
									
										
									
										generated
									
									
										vendored
									
									
										Normal file
									
								
							|  | @ -0,0 +1,3 @@ | |||
| queue/ | ||||
| queue_pop/ | ||||
| queue_push/ | ||||
							
								
								
									
										19
									
								
								vendor/gitea.com/lunny/levelqueue/LICENSE
									
										
									
										generated
									
									
										vendored
									
									
										Normal file
									
								
							
							
						
						
									
										19
									
								
								vendor/gitea.com/lunny/levelqueue/LICENSE
									
										
									
										generated
									
									
										vendored
									
									
										Normal file
									
								
							|  | @ -0,0 +1,19 @@ | |||
| Copyright (c) 2019 Lunny Xiao | ||||
| 
 | ||||
| Permission is hereby granted, free of charge, to any person obtaining a copy | ||||
| of this software and associated documentation files (the "Software"), to deal | ||||
| in the Software without restriction, including without limitation the rights | ||||
| to use, copy, modify, merge, publish, distribute, sublicense, and/or sell | ||||
| copies of the Software, and to permit persons to whom the Software is | ||||
| furnished to do so, subject to the following conditions: | ||||
| 
 | ||||
| The above copyright notice and this permission notice shall be included in | ||||
| all copies or substantial portions of the Software. | ||||
| 
 | ||||
| THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR | ||||
| IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, | ||||
| FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE | ||||
| AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER | ||||
| LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, | ||||
| OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN | ||||
| THE SOFTWARE. | ||||
							
								
								
									
										28
									
								
								vendor/gitea.com/lunny/levelqueue/README.md
									
										
									
										generated
									
									
										vendored
									
									
										Normal file
									
								
							
							
						
						
									
										28
									
								
								vendor/gitea.com/lunny/levelqueue/README.md
									
										
									
										generated
									
									
										vendored
									
									
										Normal file
									
								
							|  | @ -0,0 +1,28 @@ | |||
| # levelqueue | ||||
| 
 | ||||
| Level queue is a simple queue golang library base on go-leveldb. | ||||
| 
 | ||||
| [](https://drone.gitea.com/lunny/levelqueue)  [](http://gocover.io/gitea.com/lunny/levelqueue) | ||||
| [](https://goreportcard.com/report/gitea.com/lunny/levelqueue) | ||||
| 
 | ||||
| ## Installation | ||||
| 
 | ||||
| ``` | ||||
| go get gitea.com/lunny/levelqueue | ||||
| ``` | ||||
| 
 | ||||
| ## Usage | ||||
| 
 | ||||
| ```Go | ||||
| 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 | ||||
| }) | ||||
| ``` | ||||
							
								
								
									
										12
									
								
								vendor/gitea.com/lunny/levelqueue/error.go
									
										
									
										generated
									
									
										vendored
									
									
										Normal file
									
								
							
							
						
						
									
										12
									
								
								vendor/gitea.com/lunny/levelqueue/error.go
									
										
									
										generated
									
									
										vendored
									
									
										Normal file
									
								
							|  | @ -0,0 +1,12 @@ | |||
| // Copyright 2019 Lunny Xiao. All rights reserved. | ||||
| // Use of this source code is governed by a MIT-style | ||||
| // license that can be found in the LICENSE file. | ||||
| 
 | ||||
| package levelqueue | ||||
| 
 | ||||
| import "errors" | ||||
| 
 | ||||
| var ( | ||||
| 	// ErrNotFound means no element in queue | ||||
| 	ErrNotFound = errors.New("no key found") | ||||
| ) | ||||
							
								
								
									
										8
									
								
								vendor/gitea.com/lunny/levelqueue/go.mod
									
										
									
										generated
									
									
										vendored
									
									
										Normal file
									
								
							
							
						
						
									
										8
									
								
								vendor/gitea.com/lunny/levelqueue/go.mod
									
										
									
										generated
									
									
										vendored
									
									
										Normal file
									
								
							|  | @ -0,0 +1,8 @@ | |||
| module gitea.com/lunny/levelqueue | ||||
| 
 | ||||
| require ( | ||||
| 	github.com/stretchr/testify v1.3.0 | ||||
| 	github.com/syndtr/goleveldb v0.0.0-20190203031304-2f17a3356c66 | ||||
| ) | ||||
| 
 | ||||
| go 1.13 | ||||
							
								
								
									
										38
									
								
								vendor/gitea.com/lunny/levelqueue/go.sum
									
										
									
										generated
									
									
										vendored
									
									
										Normal file
									
								
							
							
						
						
									
										38
									
								
								vendor/gitea.com/lunny/levelqueue/go.sum
									
										
									
										generated
									
									
										vendored
									
									
										Normal file
									
								
							|  | @ -0,0 +1,38 @@ | |||
| github.com/davecgh/go-spew v1.1.0 h1:ZDRjVQ15GmhC3fiQ8ni8+OwkZQO4DARzQgrnXU1Liz8= | ||||
| github.com/davecgh/go-spew v1.1.0/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38= | ||||
| github.com/fsnotify/fsnotify v1.4.7 h1:IXs+QLmnXW2CcXuY+8Mzv/fWEsPGWxqefPtCP5CnV9I= | ||||
| github.com/fsnotify/fsnotify v1.4.7/go.mod h1:jwhsz4b93w/PPRr/qN1Yymfu8t87LnFCMoQvtojpjFo= | ||||
| github.com/golang/protobuf v1.2.0 h1:P3YflyNX/ehuJFLhxviNdFxQPkGK5cDcApsge1SqnvM= | ||||
| github.com/golang/protobuf v1.2.0/go.mod h1:6lQm79b+lXiMfvg/cZm0SGofjICqVBUtrP5yJMmIC1U= | ||||
| github.com/golang/snappy v0.0.0-20180518054509-2e65f85255db h1:woRePGFeVFfLKN/pOkfl+p/TAqKOfFu+7KPlMVpok/w= | ||||
| github.com/golang/snappy v0.0.0-20180518054509-2e65f85255db/go.mod h1:/XxbfmMg8lxefKM7IXC3fBNl/7bRcc72aCRzEWrmP2Q= | ||||
| github.com/hpcloud/tail v1.0.0 h1:nfCOvKYfkgYP8hkirhJocXT2+zOD8yUNjXaWfTlyFKI= | ||||
| github.com/hpcloud/tail v1.0.0/go.mod h1:ab1qPbhIpdTxEkNHXyeSf5vhxWSCs/tWer42PpOxQnU= | ||||
| github.com/onsi/ginkgo v1.6.0/go.mod h1:lLunBs/Ym6LB5Z9jYTR76FiuTmxDTDusOGeTQH+WWjE= | ||||
| github.com/onsi/ginkgo v1.7.0 h1:WSHQ+IS43OoUrWtD1/bbclrwK8TTH5hzp+umCiuxHgs= | ||||
| github.com/onsi/ginkgo v1.7.0/go.mod h1:lLunBs/Ym6LB5Z9jYTR76FiuTmxDTDusOGeTQH+WWjE= | ||||
| github.com/onsi/gomega v1.4.3 h1:RE1xgDvH7imwFD45h+u2SgIfERHlS2yNG4DObb5BSKU= | ||||
| github.com/onsi/gomega v1.4.3/go.mod h1:ex+gbHU/CVuBBDIJjb2X0qEXbFg53c61hWP/1CpauHY= | ||||
| github.com/pmezard/go-difflib v1.0.0 h1:4DBwDE0NGyQoBHbLQYPwSUPoCMWR5BEzIk/f1lZbAQM= | ||||
| github.com/pmezard/go-difflib v1.0.0/go.mod h1:iKH77koFhYxTK1pcRnkKkqfTogsbg7gZNVY4sRDYZ/4= | ||||
| github.com/stretchr/objx v0.1.0/go.mod h1:HFkY916IF+rwdDfMAkV7OtwuqBVzrE8GR6GFx+wExME= | ||||
| github.com/stretchr/testify v1.3.0 h1:TivCn/peBQ7UY8ooIcPgZFpTNSz0Q2U6UrFlUfqbe0Q= | ||||
| github.com/stretchr/testify v1.3.0/go.mod h1:M5WIy9Dh21IEIfnGCwXGc5bZfKNJtfHm1UVUgZn+9EI= | ||||
| github.com/syndtr/goleveldb v0.0.0-20190203031304-2f17a3356c66 h1:AwmkkZT+TucFotNCL+aNJ/0KCMsRtlXN9fs8uoOMSRk= | ||||
| github.com/syndtr/goleveldb v0.0.0-20190203031304-2f17a3356c66/go.mod h1:ZVVdQEZoIme9iO1Ch2Jdy24qqXrMMOU6lpPAyBWyWuQ= | ||||
| golang.org/x/net v0.0.0-20180906233101-161cd47e91fd h1:nTDtHvHSdCn1m6ITfMRqtOd/9+7a3s8RBNOZ3eYZzJA= | ||||
| golang.org/x/net v0.0.0-20180906233101-161cd47e91fd/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4= | ||||
| golang.org/x/sync v0.0.0-20180314180146-1d60e4601c6f h1:wMNYb4v58l5UBM7MYRLPG6ZhfOqbKu7X5eyFl8ZhKvA= | ||||
| golang.org/x/sync v0.0.0-20180314180146-1d60e4601c6f/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= | ||||
| golang.org/x/sys v0.0.0-20180909124046-d0be0721c37e h1:o3PsSEY8E4eXWkXrIP9YJALUkVZqzHJT5DOasTyn8Vs= | ||||
| golang.org/x/sys v0.0.0-20180909124046-d0be0721c37e/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY= | ||||
| golang.org/x/text v0.3.0 h1:g61tztE5qeGQ89tm6NTjjM9VPIm088od1l6aSorWRWg= | ||||
| golang.org/x/text v0.3.0/go.mod h1:NqM8EUOU14njkJ3fqMW+pc6Ldnwhi/IjpwHt7yyuwOQ= | ||||
| gopkg.in/check.v1 v0.0.0-20161208181325-20d25e280405 h1:yhCVgyC4o1eVCa2tZl7eS0r+SDo693bJlVdllGtEeKM= | ||||
| gopkg.in/check.v1 v0.0.0-20161208181325-20d25e280405/go.mod h1:Co6ibVJAznAaIkqp8huTwlJQCZ016jof/cbN4VW5Yz0= | ||||
| gopkg.in/fsnotify.v1 v1.4.7 h1:xOHLXZwVvI9hhs+cLKq5+I5onOuwQLhQwiu63xxlHs4= | ||||
| gopkg.in/fsnotify.v1 v1.4.7/go.mod h1:Tz8NjZHkW78fSQdbUxIjBTcgA1z1m8ZHf0WmKUhAMys= | ||||
| gopkg.in/tomb.v1 v1.0.0-20141024135613-dd632973f1e7 h1:uRGJdciOHaEIrze2W8Q3AKkepLTh2hOroT7a+7czfdQ= | ||||
| gopkg.in/tomb.v1 v1.0.0-20141024135613-dd632973f1e7/go.mod h1:dt/ZhP58zS4L8KSrWDmTeBkI65Dw0HsyUHuEVlX15mw= | ||||
| gopkg.in/yaml.v2 v2.2.1 h1:mUhvW9EsL+naU5Q3cakzfE91YhliOondGd6ZrsDBHQE= | ||||
| gopkg.in/yaml.v2 v2.2.1/go.mod h1:hI93XBmqTisBFMUTm0b8Fm+jr3Dg1NNxqwp+5A1VGuI= | ||||
							
								
								
									
										263
									
								
								vendor/gitea.com/lunny/levelqueue/queue.go
									
										
									
										generated
									
									
										vendored
									
									
										Normal file
									
								
							
							
						
						
									
										263
									
								
								vendor/gitea.com/lunny/levelqueue/queue.go
									
										
									
										generated
									
									
										vendored
									
									
										Normal file
									
								
							|  | @ -0,0 +1,263 @@ | |||
| // Copyright 2019 Lunny Xiao. All rights reserved. | ||||
| // Use of this source code is governed by a MIT-style | ||||
| // license that can be found in the LICENSE file. | ||||
| 
 | ||||
| package levelqueue | ||||
| 
 | ||||
| import ( | ||||
| 	"bytes" | ||||
| 	"encoding/binary" | ||||
| 	"sync" | ||||
| 
 | ||||
| 	"github.com/syndtr/goleveldb/leveldb" | ||||
| ) | ||||
| 
 | ||||
| // Queue defines a queue struct | ||||
| type Queue struct { | ||||
| 	db       *leveldb.DB | ||||
| 	highLock sync.Mutex | ||||
| 	lowLock  sync.Mutex | ||||
| 	low      int64 | ||||
| 	high     int64 | ||||
| } | ||||
| 
 | ||||
| // Open opens a queue object or create it if not exist | ||||
| func Open(dataDir string) (*Queue, error) { | ||||
| 	db, err := leveldb.OpenFile(dataDir, nil) | ||||
| 	if err != nil { | ||||
| 		return nil, err | ||||
| 	} | ||||
| 
 | ||||
| 	var queue = &Queue{ | ||||
| 		db: db, | ||||
| 	} | ||||
| 	queue.low, err = queue.readID(lowKey) | ||||
| 	if err == leveldb.ErrNotFound { | ||||
| 		queue.low = 1 | ||||
| 		err = db.Put(lowKey, id2bytes(1), nil) | ||||
| 	} | ||||
| 	if err != nil { | ||||
| 		return nil, err | ||||
| 	} | ||||
| 
 | ||||
| 	queue.high, err = queue.readID(highKey) | ||||
| 	if err == leveldb.ErrNotFound { | ||||
| 		err = db.Put(highKey, id2bytes(0), nil) | ||||
| 	} | ||||
| 	if err != nil { | ||||
| 		return nil, err | ||||
| 	} | ||||
| 
 | ||||
| 	return queue, nil | ||||
| } | ||||
| 
 | ||||
| func (queue *Queue) readID(key []byte) (int64, error) { | ||||
| 	bs, err := queue.db.Get(key, nil) | ||||
| 	if err != nil { | ||||
| 		return 0, err | ||||
| 	} | ||||
| 	return bytes2id(bs) | ||||
| } | ||||
| 
 | ||||
| var ( | ||||
| 	lowKey  = []byte("low") | ||||
| 	highKey = []byte("high") | ||||
| ) | ||||
| 
 | ||||
| func (queue *Queue) highincrement() (int64, error) { | ||||
| 	id := queue.high + 1 | ||||
| 	queue.high = id | ||||
| 	err := queue.db.Put(highKey, id2bytes(queue.high), nil) | ||||
| 	if err != nil { | ||||
| 		queue.high = queue.high - 1 | ||||
| 		return 0, err | ||||
| 	} | ||||
| 	return id, nil | ||||
| } | ||||
| 
 | ||||
| func (queue *Queue) highdecrement() (int64, error) { | ||||
| 	queue.high = queue.high - 1 | ||||
| 	err := queue.db.Put(highKey, id2bytes(queue.high), nil) | ||||
| 	if err != nil { | ||||
| 		queue.high = queue.high + 1 | ||||
| 		return 0, err | ||||
| 	} | ||||
| 	return queue.high, nil | ||||
| } | ||||
| 
 | ||||
| func (queue *Queue) lowincrement() (int64, error) { | ||||
| 	queue.low = queue.low + 1 | ||||
| 	err := queue.db.Put(lowKey, id2bytes(queue.low), nil) | ||||
| 	if err != nil { | ||||
| 		queue.low = queue.low - 1 | ||||
| 		return 0, err | ||||
| 	} | ||||
| 	return queue.low, nil | ||||
| } | ||||
| 
 | ||||
| func (queue *Queue) lowdecrement() (int64, error) { | ||||
| 	queue.low = queue.low - 1 | ||||
| 	err := queue.db.Put(lowKey, id2bytes(queue.low), nil) | ||||
| 	if err != nil { | ||||
| 		queue.low = queue.low + 1 | ||||
| 		return 0, err | ||||
| 	} | ||||
| 	return queue.low, nil | ||||
| } | ||||
| 
 | ||||
| // Len returns the length of the queue | ||||
| func (queue *Queue) Len() int64 { | ||||
| 	queue.lowLock.Lock() | ||||
| 	queue.highLock.Lock() | ||||
| 	l := queue.high - queue.low + 1 | ||||
| 	queue.highLock.Unlock() | ||||
| 	queue.lowLock.Unlock() | ||||
| 	return l | ||||
| } | ||||
| 
 | ||||
| func id2bytes(id int64) []byte { | ||||
| 	var buf = make([]byte, 8) | ||||
| 	binary.PutVarint(buf, id) | ||||
| 	return buf | ||||
| } | ||||
| 
 | ||||
| func bytes2id(b []byte) (int64, error) { | ||||
| 	return binary.ReadVarint(bytes.NewReader(b)) | ||||
| } | ||||
| 
 | ||||
| // RPush pushes a data from right of queue | ||||
| func (queue *Queue) RPush(data []byte) error { | ||||
| 	queue.highLock.Lock() | ||||
| 	id, err := queue.highincrement() | ||||
| 	if err != nil { | ||||
| 		queue.highLock.Unlock() | ||||
| 		return err | ||||
| 	} | ||||
| 	err = queue.db.Put(id2bytes(id), data, nil) | ||||
| 	queue.highLock.Unlock() | ||||
| 	return err | ||||
| } | ||||
| 
 | ||||
| // LPush pushes a data from left of queue | ||||
| func (queue *Queue) LPush(data []byte) error { | ||||
| 	queue.lowLock.Lock() | ||||
| 	id, err := queue.lowdecrement() | ||||
| 	if err != nil { | ||||
| 		queue.lowLock.Unlock() | ||||
| 		return err | ||||
| 	} | ||||
| 	err = queue.db.Put(id2bytes(id), data, nil) | ||||
| 	queue.lowLock.Unlock() | ||||
| 	return err | ||||
| } | ||||
| 
 | ||||
| // RPop pop a data from right of queue | ||||
| func (queue *Queue) RPop() ([]byte, error) { | ||||
| 	queue.highLock.Lock() | ||||
| 	defer queue.highLock.Unlock() | ||||
| 	currentID := queue.high | ||||
| 
 | ||||
| 	res, err := queue.db.Get(id2bytes(currentID), nil) | ||||
| 	if err != nil { | ||||
| 		if err == leveldb.ErrNotFound { | ||||
| 			return nil, ErrNotFound | ||||
| 		} | ||||
| 		return nil, err | ||||
| 	} | ||||
| 
 | ||||
| 	_, err = queue.highdecrement() | ||||
| 	if err != nil { | ||||
| 		return nil, err | ||||
| 	} | ||||
| 
 | ||||
| 	err = queue.db.Delete(id2bytes(currentID), nil) | ||||
| 	if err != nil { | ||||
| 		return nil, err | ||||
| 	} | ||||
| 	return res, nil | ||||
| } | ||||
| 
 | ||||
| // RHandle receives a user callback function to handle the right element of the queue, if function return nil, then delete the element, otherwise keep the element. | ||||
| func (queue *Queue) RHandle(h func([]byte) error) error { | ||||
| 	queue.highLock.Lock() | ||||
| 	defer queue.highLock.Unlock() | ||||
| 	currentID := queue.high | ||||
| 
 | ||||
| 	res, err := queue.db.Get(id2bytes(currentID), nil) | ||||
| 	if err != nil { | ||||
| 		if err == leveldb.ErrNotFound { | ||||
| 			return ErrNotFound | ||||
| 		} | ||||
| 		return err | ||||
| 	} | ||||
| 
 | ||||
| 	if err = h(res); err != nil { | ||||
| 		return err | ||||
| 	} | ||||
| 
 | ||||
| 	_, err = queue.highdecrement() | ||||
| 	if err != nil { | ||||
| 		return err | ||||
| 	} | ||||
| 
 | ||||
| 	return queue.db.Delete(id2bytes(currentID), nil) | ||||
| } | ||||
| 
 | ||||
| // LPop pop a data from left of queue | ||||
| func (queue *Queue) LPop() ([]byte, error) { | ||||
| 	queue.lowLock.Lock() | ||||
| 	defer queue.lowLock.Unlock() | ||||
| 	currentID := queue.low | ||||
| 
 | ||||
| 	res, err := queue.db.Get(id2bytes(currentID), nil) | ||||
| 	if err != nil { | ||||
| 		if err == leveldb.ErrNotFound { | ||||
| 			return nil, ErrNotFound | ||||
| 		} | ||||
| 		return nil, err | ||||
| 	} | ||||
| 
 | ||||
| 	_, err = queue.lowincrement() | ||||
| 	if err != nil { | ||||
| 		return nil, err | ||||
| 	} | ||||
| 
 | ||||
| 	err = queue.db.Delete(id2bytes(currentID), nil) | ||||
| 	if err != nil { | ||||
| 		return nil, err | ||||
| 	} | ||||
| 	return res, nil | ||||
| } | ||||
| 
 | ||||
| // LHandle receives a user callback function to handle the left element of the queue, if function return nil, then delete the element, otherwise keep the element. | ||||
| func (queue *Queue) LHandle(h func([]byte) error) error { | ||||
| 	queue.lowLock.Lock() | ||||
| 	defer queue.lowLock.Unlock() | ||||
| 	currentID := queue.low | ||||
| 
 | ||||
| 	res, err := queue.db.Get(id2bytes(currentID), nil) | ||||
| 	if err != nil { | ||||
| 		if err == leveldb.ErrNotFound { | ||||
| 			return ErrNotFound | ||||
| 		} | ||||
| 		return err | ||||
| 	} | ||||
| 
 | ||||
| 	if err = h(res); err != nil { | ||||
| 		return err | ||||
| 	} | ||||
| 
 | ||||
| 	_, err = queue.lowincrement() | ||||
| 	if err != nil { | ||||
| 		return err | ||||
| 	} | ||||
| 
 | ||||
| 	return queue.db.Delete(id2bytes(currentID), nil) | ||||
| } | ||||
| 
 | ||||
| // Close closes the queue | ||||
| func (queue *Queue) Close() error { | ||||
| 	err := queue.db.Close() | ||||
| 	queue.db = nil | ||||
| 	return err | ||||
| } | ||||
		Loading…
	
	Add table
		Add a link
		
	
		Reference in a new issue