1
0
Fork 0

Merge pull request #1194 from rqlite/even-more-gpt-4

Even more GPT 4 improvements
master
Philip O'Toole 2 years ago committed by GitHub
commit 70bc34eb43
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23

@ -15,6 +15,9 @@
# sudo apt-get -y install gcc make gcc-arm-linux-gnueabi binutils-arm-linux-gnueabi # sudo apt-get -y install gcc make gcc-arm-linux-gnueabi binutils-arm-linux-gnueabi
# sudo apt-get -y install gcc make gcc-aarch64-linux-gnu binutils-aarch64-linux-gnu # sudo apt-get -y install gcc make gcc-aarch64-linux-gnu binutils-aarch64-linux-gnu
set -e
set -u
REPO_URL="https://github.com/rqlite/rqlite" REPO_URL="https://github.com/rqlite/rqlite"
# copy_binaries <dst_path> <src_dir> # copy_binaries <dst_path> <src_dir>

@ -1,6 +1,7 @@
package queue package queue
import ( import (
"errors"
"expvar" "expvar"
"sync" "sync"
"time" "time"
@ -58,16 +59,16 @@ type queuedStatements struct {
func mergeQueued(qs []*queuedStatements) *Request { func mergeQueued(qs []*queuedStatements) *Request {
var o *Request var o *Request
if len(qs) > 0 {
o = &Request{
SequenceNumber: qs[0].SequenceNumber,
flushChans: make([]FlushChannel, 0),
}
}
for i := range qs { for i := range qs {
if o == nil { if o.SequenceNumber < qs[i].SequenceNumber {
o = &Request{ o.SequenceNumber = qs[i].SequenceNumber
SequenceNumber: qs[i].SequenceNumber,
flushChans: make([]FlushChannel, 0),
}
} else {
if o.SequenceNumber < qs[i].SequenceNumber {
o.SequenceNumber = qs[i].SequenceNumber
}
} }
o.Statements = append(o.Statements, qs[i].Statements...) o.Statements = append(o.Statements, qs[i].Statements...)
if qs[i].flushChan != nil { if qs[i].flushChan != nil {
@ -126,6 +127,12 @@ func New(maxSize, batchSize int, t time.Duration) *Queue {
// c is an optional channel. If non-nil, it will be closed when the Request // c is an optional channel. If non-nil, it will be closed when the Request
// containing these statements is closed. // containing these statements is closed.
func (q *Queue) Write(stmts []*command.Statement, c FlushChannel) (int64, error) { func (q *Queue) Write(stmts []*command.Statement, c FlushChannel) (int64, error) {
select {
case <-q.done:
return 0, errors.New("queue is closed")
default:
}
q.seqMu.Lock() q.seqMu.Lock()
defer q.seqMu.Unlock() defer q.seqMu.Unlock()
q.seqNum++ q.seqNum++

@ -120,6 +120,17 @@ func Test_NewQueue(t *testing.T) {
defer q.Close() defer q.Close()
} }
func Test_NewQueueClosedWrite(t *testing.T) {
q := New(1, 1, 100*time.Millisecond)
if q == nil {
t.Fatalf("failed to create new Queue")
}
q.Close()
if _, err := q.Write(testStmtsFoo, nil); err == nil {
t.Fatalf("failed to detect closed queue")
}
}
func Test_NewQueueWriteNil(t *testing.T) { func Test_NewQueueWriteNil(t *testing.T) {
q := New(1, 1, 60*time.Second) q := New(1, 1, 60*time.Second)
defer q.Close() defer q.Close()

Loading…
Cancel
Save