goimports cleanup
This commit is contained in:
		| @@ -3,10 +3,11 @@ package fstore | ||||
| import ( | ||||
| 	"embed" | ||||
| 	"io" | ||||
| 	"git.crumpington.com/public/jldb/fstore/pages" | ||||
| 	"net/http" | ||||
| 	"os" | ||||
| 	"path/filepath" | ||||
|  | ||||
| 	"git.crumpington.com/public/jldb/fstore/pages" | ||||
| ) | ||||
|  | ||||
| //go:embed static/* | ||||
|   | ||||
| @@ -4,6 +4,7 @@ import ( | ||||
| 	"bytes" | ||||
| 	"encoding/binary" | ||||
| 	"io" | ||||
|  | ||||
| 	"git.crumpington.com/public/jldb/lib/errs" | ||||
| ) | ||||
|  | ||||
|   | ||||
| @@ -1,9 +1,10 @@ | ||||
| package fstore | ||||
|  | ||||
| import ( | ||||
| 	"git.crumpington.com/public/jldb/lib/errs" | ||||
| 	"path/filepath" | ||||
| 	"strconv" | ||||
|  | ||||
| 	"git.crumpington.com/public/jldb/lib/errs" | ||||
| ) | ||||
|  | ||||
| func filesRootPath(rootDir string) string { | ||||
|   | ||||
| @@ -1,11 +1,12 @@ | ||||
| package fstore | ||||
|  | ||||
| import ( | ||||
| 	"git.crumpington.com/public/jldb/lib/errs" | ||||
| 	"git.crumpington.com/public/jldb/lib/idgen" | ||||
| 	"log" | ||||
| 	"os" | ||||
| 	"path/filepath" | ||||
|  | ||||
| 	"git.crumpington.com/public/jldb/lib/errs" | ||||
| 	"git.crumpington.com/public/jldb/lib/idgen" | ||||
| ) | ||||
|  | ||||
| func (s *Store) applyStoreFromReader(cmd command) error { | ||||
|   | ||||
| @@ -5,12 +5,13 @@ import ( | ||||
| 	"errors" | ||||
| 	"io" | ||||
| 	"io/fs" | ||||
| 	"git.crumpington.com/public/jldb/lib/errs" | ||||
| 	"git.crumpington.com/public/jldb/lib/wal" | ||||
| 	"net" | ||||
| 	"os" | ||||
| 	"path/filepath" | ||||
| 	"time" | ||||
|  | ||||
| 	"git.crumpington.com/public/jldb/lib/errs" | ||||
| 	"git.crumpington.com/public/jldb/lib/wal" | ||||
| ) | ||||
|  | ||||
| func (s *Store) repSendState(conn net.Conn) error { | ||||
|   | ||||
| @@ -3,15 +3,16 @@ package fstore | ||||
| import ( | ||||
| 	"bytes" | ||||
| 	"io" | ||||
| 	"git.crumpington.com/public/jldb/lib/errs" | ||||
| 	"git.crumpington.com/public/jldb/lib/idgen" | ||||
| 	"git.crumpington.com/public/jldb/lib/rep" | ||||
| 	"net/http" | ||||
| 	"os" | ||||
| 	"path/filepath" | ||||
| 	"strconv" | ||||
| 	"sync" | ||||
| 	"time" | ||||
|  | ||||
| 	"git.crumpington.com/public/jldb/lib/errs" | ||||
| 	"git.crumpington.com/public/jldb/lib/idgen" | ||||
| 	"git.crumpington.com/public/jldb/lib/rep" | ||||
| ) | ||||
|  | ||||
| type Config struct { | ||||
|   | ||||
| @@ -3,9 +3,10 @@ package atomicheader | ||||
| import ( | ||||
| 	"encoding/binary" | ||||
| 	"hash/crc32" | ||||
| 	"git.crumpington.com/public/jldb/lib/errs" | ||||
| 	"os" | ||||
| 	"sync" | ||||
|  | ||||
| 	"git.crumpington.com/public/jldb/lib/errs" | ||||
| ) | ||||
|  | ||||
| const ( | ||||
|   | ||||
| @@ -6,11 +6,12 @@ import ( | ||||
| 	"crypto/tls" | ||||
| 	"errors" | ||||
| 	"io" | ||||
| 	"git.crumpington.com/public/jldb/lib/errs" | ||||
| 	"net" | ||||
| 	"net/http" | ||||
| 	"net/url" | ||||
| 	"time" | ||||
|  | ||||
| 	"git.crumpington.com/public/jldb/lib/errs" | ||||
| ) | ||||
|  | ||||
| var ErrInvalidStatus = errors.New("invalid status") | ||||
|   | ||||
| @@ -3,10 +3,11 @@ package rep | ||||
| import ( | ||||
| 	"encoding/binary" | ||||
| 	"encoding/json" | ||||
| 	"git.crumpington.com/public/jldb/lib/errs" | ||||
| 	"net" | ||||
| 	"path/filepath" | ||||
| 	"time" | ||||
|  | ||||
| 	"git.crumpington.com/public/jldb/lib/errs" | ||||
| ) | ||||
|  | ||||
| // ---------------------------------------------------------------------------- | ||||
|   | ||||
| @@ -4,12 +4,13 @@ import ( | ||||
| 	"encoding/binary" | ||||
| 	"encoding/json" | ||||
| 	"io" | ||||
| 	"git.crumpington.com/public/jldb/lib/errs" | ||||
| 	"git.crumpington.com/public/jldb/lib/httpconn" | ||||
| 	"git.crumpington.com/public/jldb/lib/wal" | ||||
| 	"net" | ||||
| 	"sync" | ||||
| 	"time" | ||||
|  | ||||
| 	"git.crumpington.com/public/jldb/lib/errs" | ||||
| 	"git.crumpington.com/public/jldb/lib/httpconn" | ||||
| 	"git.crumpington.com/public/jldb/lib/wal" | ||||
| ) | ||||
|  | ||||
| type client struct { | ||||
|   | ||||
| @@ -2,10 +2,11 @@ package rep | ||||
|  | ||||
| import ( | ||||
| 	"crypto/subtle" | ||||
| 	"git.crumpington.com/public/jldb/lib/httpconn" | ||||
| 	"log" | ||||
| 	"net/http" | ||||
| 	"time" | ||||
|  | ||||
| 	"git.crumpington.com/public/jldb/lib/httpconn" | ||||
| ) | ||||
|  | ||||
| const ( | ||||
| @@ -54,6 +55,7 @@ func (rep *Replicator) Handle(w http.ResponseWriter, r *http.Request) { | ||||
| 		switch cmd[0] { | ||||
|  | ||||
| 		case cmdGetInfo: | ||||
|  | ||||
| 			if err := sendJSON(rep.Info(), conn, rep.conf.NetTimeout); err != nil { | ||||
| 				logf("Failed to send info: %s", err) | ||||
| 				return | ||||
| @@ -69,6 +71,7 @@ func (rep *Replicator) Handle(w http.ResponseWriter, r *http.Request) { | ||||
| 			} | ||||
|  | ||||
| 		case cmdStreamWAL: | ||||
|  | ||||
| 			err := rep.wal.Send(conn, rep.conf.NetTimeout) | ||||
| 			if !rep.stopped() { | ||||
| 				logf("Failed when sending WAL: %s", err) | ||||
|   | ||||
| @@ -2,9 +2,10 @@ package rep | ||||
|  | ||||
| import ( | ||||
| 	"io" | ||||
| 	"git.crumpington.com/public/jldb/lib/errs" | ||||
| 	"net" | ||||
| 	"time" | ||||
|  | ||||
| 	"git.crumpington.com/public/jldb/lib/errs" | ||||
| ) | ||||
|  | ||||
| func (rep *Replicator) sendState(conn net.Conn) error { | ||||
|   | ||||
| @@ -1,12 +1,13 @@ | ||||
| package rep | ||||
|  | ||||
| import ( | ||||
| 	"os" | ||||
| 	"time" | ||||
|  | ||||
| 	"git.crumpington.com/public/jldb/lib/atomicheader" | ||||
| 	"git.crumpington.com/public/jldb/lib/errs" | ||||
| 	"git.crumpington.com/public/jldb/lib/flock" | ||||
| 	"git.crumpington.com/public/jldb/lib/wal" | ||||
| 	"os" | ||||
| 	"time" | ||||
| ) | ||||
|  | ||||
| func (rep *Replicator) loadConfigDefaults() { | ||||
|   | ||||
| @@ -2,14 +2,15 @@ package rep | ||||
|  | ||||
| import ( | ||||
| 	"io" | ||||
| 	"git.crumpington.com/public/jldb/lib/atomicheader" | ||||
| 	"git.crumpington.com/public/jldb/lib/errs" | ||||
| 	"git.crumpington.com/public/jldb/lib/wal" | ||||
| 	"net" | ||||
| 	"os" | ||||
| 	"sync" | ||||
| 	"sync/atomic" | ||||
| 	"time" | ||||
|  | ||||
| 	"git.crumpington.com/public/jldb/lib/atomicheader" | ||||
| 	"git.crumpington.com/public/jldb/lib/errs" | ||||
| 	"git.crumpington.com/public/jldb/lib/wal" | ||||
| ) | ||||
|  | ||||
| type Config struct { | ||||
| @@ -161,10 +162,6 @@ func (rep *Replicator) Primary() bool { | ||||
| 	return rep.conf.Primary | ||||
| } | ||||
|  | ||||
| // TODO: Probably remove this. | ||||
| // The caller may call Ack after Apply to acknowledge that the change has also | ||||
| // been applied to the caller's application. Alternatively, the caller may use | ||||
| // follow to apply changes to their application state. | ||||
| func (rep *Replicator) ack(seqNum, timestampMS int64) error { | ||||
| 	state := rep.getState() | ||||
| 	state.SeqNum = seqNum | ||||
|   | ||||
| @@ -5,12 +5,13 @@ import ( | ||||
| 	"encoding/binary" | ||||
| 	"encoding/json" | ||||
| 	"io" | ||||
| 	"git.crumpington.com/public/jldb/lib/wal" | ||||
| 	"math/rand" | ||||
| 	"net" | ||||
| 	"sync" | ||||
| 	"testing" | ||||
| 	"time" | ||||
|  | ||||
| 	"git.crumpington.com/public/jldb/lib/wal" | ||||
| ) | ||||
|  | ||||
| // ---------------------------------------------------------------------------- | ||||
|   | ||||
| @@ -2,8 +2,9 @@ package wal | ||||
|  | ||||
| import ( | ||||
| 	"io" | ||||
| 	"git.crumpington.com/public/jldb/lib/errs" | ||||
| 	"testing" | ||||
|  | ||||
| 	"git.crumpington.com/public/jldb/lib/errs" | ||||
| ) | ||||
|  | ||||
| func TestCorruptWAL(t *testing.T) { | ||||
|   | ||||
| @@ -5,13 +5,14 @@ import ( | ||||
| 	"encoding/binary" | ||||
| 	"errors" | ||||
| 	"io" | ||||
| 	"git.crumpington.com/public/jldb/lib/errs" | ||||
| 	"math/rand" | ||||
| 	"path/filepath" | ||||
| 	"reflect" | ||||
| 	"strings" | ||||
| 	"testing" | ||||
| 	"time" | ||||
|  | ||||
| 	"git.crumpington.com/public/jldb/lib/errs" | ||||
| ) | ||||
|  | ||||
| type waLog interface { | ||||
|   | ||||
| @@ -5,6 +5,7 @@ import ( | ||||
| 	"errors" | ||||
| 	"hash/crc32" | ||||
| 	"io" | ||||
|  | ||||
| 	"git.crumpington.com/public/jldb/lib/errs" | ||||
| ) | ||||
|  | ||||
|   | ||||
| @@ -4,6 +4,7 @@ import ( | ||||
| 	"encoding/binary" | ||||
| 	"hash/crc32" | ||||
| 	"io" | ||||
|  | ||||
| 	"git.crumpington.com/public/jldb/lib/errs" | ||||
| ) | ||||
|  | ||||
|   | ||||
| @@ -3,10 +3,11 @@ package wal | ||||
| import ( | ||||
| 	"bytes" | ||||
| 	"io" | ||||
| 	"git.crumpington.com/public/jldb/lib/errs" | ||||
| 	"git.crumpington.com/public/jldb/lib/testutil" | ||||
| 	"math/rand" | ||||
| 	"testing" | ||||
|  | ||||
| 	"git.crumpington.com/public/jldb/lib/errs" | ||||
| 	"git.crumpington.com/public/jldb/lib/testutil" | ||||
| ) | ||||
|  | ||||
| func NewRecordForTesting() Record { | ||||
|   | ||||
| @@ -1,10 +1,11 @@ | ||||
| package wal | ||||
|  | ||||
| import ( | ||||
| 	"git.crumpington.com/public/jldb/lib/atomicheader" | ||||
| 	"git.crumpington.com/public/jldb/lib/errs" | ||||
| 	"os" | ||||
| 	"time" | ||||
|  | ||||
| 	"git.crumpington.com/public/jldb/lib/atomicheader" | ||||
| 	"git.crumpington.com/public/jldb/lib/errs" | ||||
| ) | ||||
|  | ||||
| type segmentIterator struct { | ||||
|   | ||||
| @@ -3,11 +3,12 @@ package wal | ||||
| import ( | ||||
| 	"bufio" | ||||
| 	"io" | ||||
| 	"git.crumpington.com/public/jldb/lib/atomicheader" | ||||
| 	"git.crumpington.com/public/jldb/lib/errs" | ||||
| 	"os" | ||||
| 	"sync" | ||||
| 	"time" | ||||
|  | ||||
| 	"git.crumpington.com/public/jldb/lib/atomicheader" | ||||
| 	"git.crumpington.com/public/jldb/lib/errs" | ||||
| ) | ||||
|  | ||||
| type segment struct { | ||||
|   | ||||
| @@ -4,11 +4,12 @@ import ( | ||||
| 	"bytes" | ||||
| 	crand "crypto/rand" | ||||
| 	"io" | ||||
| 	"git.crumpington.com/public/jldb/lib/atomicheader" | ||||
| 	"git.crumpington.com/public/jldb/lib/errs" | ||||
| 	"path/filepath" | ||||
| 	"testing" | ||||
| 	"time" | ||||
|  | ||||
| 	"git.crumpington.com/public/jldb/lib/atomicheader" | ||||
| 	"git.crumpington.com/public/jldb/lib/errs" | ||||
| ) | ||||
|  | ||||
| func newSegmentForTesting(t *testing.T) *segment { | ||||
|   | ||||
| @@ -1,8 +1,9 @@ | ||||
| package wal | ||||
|  | ||||
| import ( | ||||
| 	"git.crumpington.com/public/jldb/lib/errs" | ||||
| 	"time" | ||||
|  | ||||
| 	"git.crumpington.com/public/jldb/lib/errs" | ||||
| ) | ||||
|  | ||||
| type walIterator struct { | ||||
|   | ||||
| @@ -3,9 +3,10 @@ package wal | ||||
| import ( | ||||
| 	"encoding/binary" | ||||
| 	"io" | ||||
| 	"git.crumpington.com/public/jldb/lib/errs" | ||||
| 	"net" | ||||
| 	"time" | ||||
|  | ||||
| 	"git.crumpington.com/public/jldb/lib/errs" | ||||
| ) | ||||
|  | ||||
| func (wal *WAL) Recv(conn net.Conn, timeout time.Duration) error { | ||||
|   | ||||
| @@ -2,9 +2,10 @@ package wal | ||||
|  | ||||
| import ( | ||||
| 	"encoding/binary" | ||||
| 	"git.crumpington.com/public/jldb/lib/errs" | ||||
| 	"net" | ||||
| 	"time" | ||||
|  | ||||
| 	"git.crumpington.com/public/jldb/lib/errs" | ||||
| ) | ||||
|  | ||||
| const ( | ||||
|   | ||||
| @@ -1,8 +1,6 @@ | ||||
| package wal | ||||
|  | ||||
| import ( | ||||
| 	"git.crumpington.com/public/jldb/lib/errs" | ||||
| 	"git.crumpington.com/public/jldb/lib/testutil" | ||||
| 	"log" | ||||
| 	"math/rand" | ||||
| 	"reflect" | ||||
| @@ -11,6 +9,9 @@ import ( | ||||
| 	"sync/atomic" | ||||
| 	"testing" | ||||
| 	"time" | ||||
|  | ||||
| 	"git.crumpington.com/public/jldb/lib/errs" | ||||
| 	"git.crumpington.com/public/jldb/lib/testutil" | ||||
| ) | ||||
|  | ||||
| func TestSendRecvHarness(t *testing.T) { | ||||
|   | ||||
| @@ -2,13 +2,14 @@ package wal | ||||
|  | ||||
| import ( | ||||
| 	"io" | ||||
| 	"git.crumpington.com/public/jldb/lib/atomicheader" | ||||
| 	"git.crumpington.com/public/jldb/lib/errs" | ||||
| 	"os" | ||||
| 	"path/filepath" | ||||
| 	"strconv" | ||||
| 	"sync" | ||||
| 	"time" | ||||
|  | ||||
| 	"git.crumpington.com/public/jldb/lib/atomicheader" | ||||
| 	"git.crumpington.com/public/jldb/lib/errs" | ||||
| ) | ||||
|  | ||||
| type Config struct { | ||||
|   | ||||
| @@ -3,6 +3,7 @@ package change | ||||
| import ( | ||||
| 	"encoding/binary" | ||||
| 	"io" | ||||
|  | ||||
| 	"git.crumpington.com/public/jldb/lib/errs" | ||||
| ) | ||||
|  | ||||
|   | ||||
| @@ -2,6 +2,7 @@ package change | ||||
|  | ||||
| import ( | ||||
| 	"io" | ||||
|  | ||||
| 	"git.crumpington.com/public/jldb/lib/errs" | ||||
| ) | ||||
|  | ||||
|   | ||||
| @@ -5,9 +5,10 @@ import ( | ||||
| 	"encoding/json" | ||||
| 	"errors" | ||||
| 	"hash/crc64" | ||||
| 	"git.crumpington.com/public/jldb/lib/errs" | ||||
| 	"unsafe" | ||||
|  | ||||
| 	"git.crumpington.com/public/jldb/lib/errs" | ||||
|  | ||||
| 	"github.com/google/btree" | ||||
| ) | ||||
|  | ||||
| @@ -189,7 +190,7 @@ func (c Collection[T]) Insert(tx *Snapshot, userItem *T) error { | ||||
|  | ||||
| 	for i := range c.uniqueIndices { | ||||
| 		if c.uniqueIndices[i].insertConflict(tx, item) { | ||||
| 			return ErrDuplicate.WithCollection(c.name).WithIndex(c.uniqueIndices[i].name) | ||||
| 			return errs.Duplicate.WithCollection(c.name).WithIndex(c.uniqueIndices[i].name) | ||||
| 		} | ||||
| 	} | ||||
|  | ||||
| @@ -216,12 +217,12 @@ func (c Collection[T]) Update(tx *Snapshot, userItem *T) error { | ||||
|  | ||||
| 	old, ok := c.ByID.get(tx, item) | ||||
| 	if !ok { | ||||
| 		return ErrNotFound | ||||
| 		return errs.NotFound | ||||
| 	} | ||||
|  | ||||
| 	for i := range c.uniqueIndices { | ||||
| 		if c.uniqueIndices[i].updateConflict(tx, item) { | ||||
| 			return ErrDuplicate.WithCollection(c.name).WithIndex(c.uniqueIndices[i].name) | ||||
| 			return errs.Duplicate.WithCollection(c.name).WithIndex(c.uniqueIndices[i].name) | ||||
| 		} | ||||
| 	} | ||||
|  | ||||
| @@ -239,7 +240,7 @@ func (c Collection[T]) Upsert(tx *Snapshot, item *T) error { | ||||
| 	if err == nil { | ||||
| 		return nil | ||||
| 	} | ||||
| 	if errors.Is(err, ErrDuplicate) { | ||||
| 	if errors.Is(err, errs.Duplicate) { | ||||
| 		return c.Update(tx, item) | ||||
| 	} | ||||
| 	return err | ||||
| @@ -261,7 +262,7 @@ func (c Collection[T]) getByID(tx *Snapshot, itemID uint64) (*T, bool) { | ||||
|  | ||||
| func (c Collection[T]) ensureMutable(tx *Snapshot) error { | ||||
| 	if !tx.writable() { | ||||
| 		return ErrReadOnly | ||||
| 		return errs.ReadOnly | ||||
| 	} | ||||
|  | ||||
| 	state := c.getState(tx) | ||||
| @@ -282,7 +283,7 @@ func (c Collection[T]) insertItem(tx *Snapshot, itemID uint64, data []byte) erro | ||||
| 	// Check for insert conflict. | ||||
| 	for _, index := range c.uniqueIndices { | ||||
| 		if index.insertConflict(tx, item) { | ||||
| 			return ErrDuplicate | ||||
| 			return errs.Duplicate | ||||
| 		} | ||||
| 	} | ||||
|  | ||||
| @@ -297,7 +298,7 @@ func (c Collection[T]) insertItem(tx *Snapshot, itemID uint64, data []byte) erro | ||||
| func (c Collection[T]) deleteItem(tx *Snapshot, itemID uint64) error { | ||||
| 	item, ok := c.getByID(tx, itemID) | ||||
| 	if !ok { | ||||
| 		return ErrNotFound | ||||
| 		return errs.NotFound | ||||
| 	} | ||||
|  | ||||
| 	tx.delete(c.collectionID, itemID) | ||||
|   | ||||
| @@ -1,12 +1,13 @@ | ||||
| package mdb | ||||
|  | ||||
| import ( | ||||
| 	"git.crumpington.com/public/jldb/lib/errs" | ||||
| 	"log" | ||||
| 	"os" | ||||
| 	"os/exec" | ||||
| 	"testing" | ||||
| 	"time" | ||||
|  | ||||
| 	"git.crumpington.com/public/jldb/lib/errs" | ||||
| ) | ||||
|  | ||||
| func TestCrashConsistency(t *testing.T) { | ||||
|   | ||||
| @@ -1,13 +1,14 @@ | ||||
| package mdb | ||||
|  | ||||
| import ( | ||||
| 	"log" | ||||
| 	"net" | ||||
| 	"os" | ||||
|  | ||||
| 	"git.crumpington.com/public/jldb/lib/errs" | ||||
| 	"git.crumpington.com/public/jldb/lib/wal" | ||||
| 	"git.crumpington.com/public/jldb/mdb/change" | ||||
| 	"git.crumpington.com/public/jldb/mdb/pfile" | ||||
| 	"log" | ||||
| 	"net" | ||||
| 	"os" | ||||
| ) | ||||
|  | ||||
| func (db *Database) repSendState(conn net.Conn) error { | ||||
|   | ||||
| @@ -6,6 +6,8 @@ import ( | ||||
| 	"reflect" | ||||
| 	"strings" | ||||
| 	"testing" | ||||
|  | ||||
| 	"git.crumpington.com/public/jldb/lib/errs" | ||||
| ) | ||||
|  | ||||
| type DBTestCase struct { | ||||
| @@ -54,7 +56,7 @@ var testDBTestCases = []DBTestCase{{ | ||||
| 		Update: func(t *testing.T, db TestDB, tx *Snapshot) error { | ||||
| 			user, ok := db.Users.ByID.Get(tx, &User{ID: 1}) | ||||
| 			if !ok { | ||||
| 				return ErrNotFound | ||||
| 				return errs.NotFound | ||||
| 			} | ||||
| 			user.Name = "Bob" | ||||
| 			user.Email = "b@c.com" | ||||
| @@ -111,7 +113,7 @@ var testDBTestCases = []DBTestCase{{ | ||||
| 			return db.Users.Insert(tx, user2) | ||||
| 		}, | ||||
|  | ||||
| 		ExpectedUpdateError: ErrDuplicate, | ||||
| 		ExpectedUpdateError: errs.Duplicate, | ||||
|  | ||||
| 		State: DBState{}, | ||||
| 	}}, | ||||
| @@ -131,7 +133,7 @@ var testDBTestCases = []DBTestCase{{ | ||||
| 			return db.Users.Insert(tx, user2) | ||||
| 		}, | ||||
|  | ||||
| 		ExpectedUpdateError: ErrDuplicate, | ||||
| 		ExpectedUpdateError: errs.Duplicate, | ||||
|  | ||||
| 		State: DBState{}, | ||||
| 	}}, | ||||
| @@ -162,7 +164,7 @@ var testDBTestCases = []DBTestCase{{ | ||||
| 			return db.Users.Insert(tx, user) | ||||
| 		}, | ||||
|  | ||||
| 		ExpectedUpdateError: ErrDuplicate, | ||||
| 		ExpectedUpdateError: errs.Duplicate, | ||||
|  | ||||
| 		State: DBState{ | ||||
| 			UsersByID:    []User{{ID: 1, Name: "Alice", Email: "a@b.com"}}, | ||||
| @@ -197,7 +199,7 @@ var testDBTestCases = []DBTestCase{{ | ||||
| 			return db.Users.Insert(tx, user) | ||||
| 		}, | ||||
|  | ||||
| 		ExpectedUpdateError: ErrDuplicate, | ||||
| 		ExpectedUpdateError: errs.Duplicate, | ||||
|  | ||||
| 		State: DBState{ | ||||
| 			UsersByID:    []User{{ID: 1, Name: "Alice", Email: "a@b.com"}}, | ||||
| @@ -218,7 +220,7 @@ var testDBTestCases = []DBTestCase{{ | ||||
| 			return db.Users.Insert(db.Snapshot(), user) | ||||
| 		}, | ||||
|  | ||||
| 		ExpectedUpdateError: ErrReadOnly, | ||||
| 		ExpectedUpdateError: errs.ReadOnly, | ||||
| 	}}, | ||||
| }, { | ||||
|  | ||||
| @@ -290,7 +292,7 @@ var testDBTestCases = []DBTestCase{{ | ||||
| 			return db.Users.Update(tx, user) | ||||
| 		}, | ||||
|  | ||||
| 		ExpectedUpdateError: ErrNotFound, | ||||
| 		ExpectedUpdateError: errs.NotFound, | ||||
|  | ||||
| 		State: DBState{ | ||||
| 			UsersByID:    []User{{ID: 5, Name: "Alice", Email: "a@b.com"}}, | ||||
| @@ -323,14 +325,14 @@ var testDBTestCases = []DBTestCase{{ | ||||
| 		Update: func(t *testing.T, db TestDB, tx *Snapshot) error { | ||||
| 			user, ok := db.Users.ByID.Get(tx, &User{ID: 1}) | ||||
| 			if !ok { | ||||
| 				return ErrNotFound | ||||
| 				return errs.NotFound | ||||
| 			} | ||||
| 			user.Name = "Bob" | ||||
| 			user.Email = "b@c.com" | ||||
| 			return db.Users.Update(db.Snapshot(), user) | ||||
| 		}, | ||||
|  | ||||
| 		ExpectedUpdateError: ErrReadOnly, | ||||
| 		ExpectedUpdateError: errs.ReadOnly, | ||||
|  | ||||
| 		State: DBState{ | ||||
| 			UsersByID:    []User{{ID: 1, Name: "Alice", Email: "a@b.com"}}, | ||||
| @@ -451,7 +453,7 @@ var testDBTestCases = []DBTestCase{{ | ||||
| 			return db.Users.Update(tx, user2) | ||||
| 		}, | ||||
|  | ||||
| 		ExpectedUpdateError: ErrDuplicate, | ||||
| 		ExpectedUpdateError: errs.Duplicate, | ||||
|  | ||||
| 		State: DBState{}, | ||||
| 	}}, | ||||
| @@ -493,14 +495,14 @@ var testDBTestCases = []DBTestCase{{ | ||||
| 		Update: func(t *testing.T, db TestDB, tx *Snapshot) error { | ||||
| 			u, ok := db.Users.ByID.Get(tx, &User{ID: 2}) | ||||
| 			if !ok { | ||||
| 				return ErrNotFound | ||||
| 				return errs.NotFound | ||||
| 			} | ||||
|  | ||||
| 			u.Email = "a@b.com" | ||||
| 			return db.Users.Update(tx, u) | ||||
| 		}, | ||||
|  | ||||
| 		ExpectedUpdateError: ErrDuplicate, | ||||
| 		ExpectedUpdateError: errs.Duplicate, | ||||
|  | ||||
| 		State: DBState{ | ||||
| 			UsersByID: []User{ | ||||
| @@ -542,7 +544,7 @@ var testDBTestCases = []DBTestCase{{ | ||||
| 			return db.Users.Delete(db.Snapshot(), 1) | ||||
| 		}, | ||||
|  | ||||
| 		ExpectedUpdateError: ErrReadOnly, | ||||
| 		ExpectedUpdateError: errs.ReadOnly, | ||||
|  | ||||
| 		State: DBState{ | ||||
| 			UsersByID:    []User{{ID: 1, Name: "Alice", Email: "a@b.com"}}, | ||||
| @@ -575,7 +577,7 @@ var testDBTestCases = []DBTestCase{{ | ||||
| 			return db.Users.Delete(tx, 2) | ||||
| 		}, | ||||
|  | ||||
| 		ExpectedUpdateError: ErrNotFound, | ||||
| 		ExpectedUpdateError: errs.NotFound, | ||||
|  | ||||
| 		State: DBState{ | ||||
| 			UsersByID:    []User{{ID: 1, Name: "Alice", Email: "a@b.com"}}, | ||||
| @@ -609,7 +611,7 @@ var testDBTestCases = []DBTestCase{{ | ||||
|  | ||||
| 			u, ok := db.Users.ByID.Get(tx, &User{ID: 1}) | ||||
| 			if !ok { | ||||
| 				return ErrNotFound | ||||
| 				return errs.NotFound | ||||
| 			} | ||||
| 			if !reflect.DeepEqual(u, expected) { | ||||
| 				return errors.New("Not equal (id)") | ||||
| @@ -617,7 +619,7 @@ var testDBTestCases = []DBTestCase{{ | ||||
|  | ||||
| 			u, ok = db.Users.ByEmail.Get(tx, &User{Email: "a@b.com"}) | ||||
| 			if !ok { | ||||
| 				return ErrNotFound | ||||
| 				return errs.NotFound | ||||
| 			} | ||||
| 			if !reflect.DeepEqual(u, expected) { | ||||
| 				return errors.New("Not equal (email)") | ||||
|   | ||||
| @@ -2,6 +2,7 @@ package mdb | ||||
|  | ||||
| import ( | ||||
| 	"bytes" | ||||
|  | ||||
| 	"git.crumpington.com/public/jldb/mdb/change" | ||||
| ) | ||||
|  | ||||
|   | ||||
| @@ -2,15 +2,16 @@ package mdb | ||||
|  | ||||
| import ( | ||||
| 	"fmt" | ||||
| 	"git.crumpington.com/public/jldb/lib/errs" | ||||
| 	"git.crumpington.com/public/jldb/lib/rep" | ||||
| 	"git.crumpington.com/public/jldb/mdb/change" | ||||
| 	"git.crumpington.com/public/jldb/mdb/pfile" | ||||
| 	"net/http" | ||||
| 	"os" | ||||
| 	"sync" | ||||
| 	"sync/atomic" | ||||
| 	"time" | ||||
|  | ||||
| 	"git.crumpington.com/public/jldb/lib/errs" | ||||
| 	"git.crumpington.com/public/jldb/lib/rep" | ||||
| 	"git.crumpington.com/public/jldb/mdb/change" | ||||
| 	"git.crumpington.com/public/jldb/mdb/pfile" | ||||
| ) | ||||
|  | ||||
| type Config struct { | ||||
|   | ||||
| @@ -1,11 +0,0 @@ | ||||
| package mdb | ||||
|  | ||||
| import ( | ||||
| 	"git.crumpington.com/public/jldb/lib/errs" | ||||
| ) | ||||
|  | ||||
| var ( | ||||
| 	ErrNotFound  = errs.NotFound | ||||
| 	ErrReadOnly  = errs.ReadOnly | ||||
| 	ErrDuplicate = errs.Duplicate | ||||
| ) | ||||
| @@ -2,8 +2,9 @@ package pfile | ||||
|  | ||||
| import ( | ||||
| 	crand "crypto/rand" | ||||
| 	"git.crumpington.com/public/jldb/mdb/change" | ||||
| 	"math/rand" | ||||
|  | ||||
| 	"git.crumpington.com/public/jldb/mdb/change" | ||||
| ) | ||||
|  | ||||
| func randomChangeList() (changes []change.Change) { | ||||
|   | ||||
| @@ -3,10 +3,11 @@ package pfile | ||||
| import ( | ||||
| 	"bytes" | ||||
| 	crand "crypto/rand" | ||||
| 	"git.crumpington.com/public/jldb/lib/wal" | ||||
| 	"git.crumpington.com/public/jldb/mdb/change" | ||||
| 	"path/filepath" | ||||
| 	"testing" | ||||
|  | ||||
| 	"git.crumpington.com/public/jldb/lib/wal" | ||||
| 	"git.crumpington.com/public/jldb/mdb/change" | ||||
| ) | ||||
|  | ||||
| func newForTesting(t *testing.T) (*File, *Index) { | ||||
|   | ||||
| @@ -2,8 +2,9 @@ package pfile | ||||
|  | ||||
| import ( | ||||
| 	"hash/crc32" | ||||
| 	"git.crumpington.com/public/jldb/lib/errs" | ||||
| 	"unsafe" | ||||
|  | ||||
| 	"git.crumpington.com/public/jldb/lib/errs" | ||||
| ) | ||||
|  | ||||
| // ---------------------------------------------------------------------------- | ||||
| @@ -30,7 +31,7 @@ var emptyPage = func() dataPage { | ||||
| type pageHeader struct { | ||||
| 	CRC          uint32 // IEEE CRC-32 checksum. | ||||
| 	PageType     uint32 // One of the PageType* constants. | ||||
| 	CollectionID uint64  // | ||||
| 	CollectionID uint64 // | ||||
| 	ItemID       uint64 | ||||
| 	DataSize     uint64 | ||||
| 	NextPage     uint64 | ||||
|   | ||||
| @@ -3,9 +3,10 @@ package pfile | ||||
| import ( | ||||
| 	"bytes" | ||||
| 	crand "crypto/rand" | ||||
| 	"git.crumpington.com/public/jldb/lib/errs" | ||||
| 	"math/rand" | ||||
| 	"testing" | ||||
|  | ||||
| 	"git.crumpington.com/public/jldb/lib/errs" | ||||
| ) | ||||
|  | ||||
| func randomPage(t *testing.T) dataPage { | ||||
|   | ||||
| @@ -6,12 +6,13 @@ import ( | ||||
| 	"compress/gzip" | ||||
| 	"encoding/binary" | ||||
| 	"io" | ||||
| 	"git.crumpington.com/public/jldb/lib/errs" | ||||
| 	"git.crumpington.com/public/jldb/mdb/change" | ||||
| 	"net" | ||||
| 	"os" | ||||
| 	"sync" | ||||
| 	"time" | ||||
|  | ||||
| 	"git.crumpington.com/public/jldb/lib/errs" | ||||
| 	"git.crumpington.com/public/jldb/mdb/change" | ||||
| ) | ||||
|  | ||||
| type File struct { | ||||
|   | ||||
| @@ -2,6 +2,7 @@ package pfile | ||||
|  | ||||
| import ( | ||||
| 	"bytes" | ||||
|  | ||||
| 	"git.crumpington.com/public/jldb/lib/wal" | ||||
| 	"git.crumpington.com/public/jldb/mdb/change" | ||||
| ) | ||||
|   | ||||
| @@ -3,8 +3,9 @@ package mdb | ||||
| import ( | ||||
| 	"bytes" | ||||
| 	"encoding/json" | ||||
| 	"git.crumpington.com/public/jldb/mdb/change" | ||||
| 	"sync/atomic" | ||||
|  | ||||
| 	"git.crumpington.com/public/jldb/mdb/change" | ||||
| ) | ||||
|  | ||||
| type Snapshot struct { | ||||
|   | ||||
| @@ -4,7 +4,6 @@ import ( | ||||
| 	"crypto/rand" | ||||
| 	"errors" | ||||
| 	"hash/crc32" | ||||
| 	"git.crumpington.com/public/jldb/mdb" | ||||
| 	"log" | ||||
| 	mrand "math/rand" | ||||
| 	"os" | ||||
| @@ -13,6 +12,8 @@ import ( | ||||
| 	"sync" | ||||
| 	"sync/atomic" | ||||
| 	"time" | ||||
|  | ||||
| 	"git.crumpington.com/public/jldb/mdb" | ||||
| ) | ||||
|  | ||||
| type DataItem struct { | ||||
|   | ||||
		Reference in New Issue
	
	Block a user