database: Remove RWMutex protecting ticket bucket.
The mutex was added to the ticket bucket as a pre-emptive safety measure, but the bbolt project documentation seems to indicate that it isn't necessary. https://github.com/etcd-io/bbolt/blob/v1.3.7/README.md#transactions
This commit is contained in:
parent
57864ae58f
commit
e263da08bd
@ -25,8 +25,6 @@ type VspDatabase struct {
|
|||||||
db *bolt.DB
|
db *bolt.DB
|
||||||
maxVoteChangeRecords int
|
maxVoteChangeRecords int
|
||||||
log slog.Logger
|
log slog.Logger
|
||||||
|
|
||||||
ticketsMtx sync.RWMutex
|
|
||||||
}
|
}
|
||||||
|
|
||||||
// The keys used in the database.
|
// The keys used in the database.
|
||||||
|
|||||||
@ -124,9 +124,6 @@ func (t *Ticket) FeeExpired() bool {
|
|||||||
// InsertNewTicket will insert the provided ticket into the database. Returns an
|
// InsertNewTicket will insert the provided ticket into the database. Returns an
|
||||||
// error if either the ticket hash or fee address already exist.
|
// error if either the ticket hash or fee address already exist.
|
||||||
func (vdb *VspDatabase) InsertNewTicket(ticket Ticket) error {
|
func (vdb *VspDatabase) InsertNewTicket(ticket Ticket) error {
|
||||||
vdb.ticketsMtx.Lock()
|
|
||||||
defer vdb.ticketsMtx.Unlock()
|
|
||||||
|
|
||||||
return vdb.db.Update(func(tx *bolt.Tx) error {
|
return vdb.db.Update(func(tx *bolt.Tx) error {
|
||||||
ticketBkt := tx.Bucket(vspBktK).Bucket(ticketBktK)
|
ticketBkt := tx.Bucket(vspBktK).Bucket(ticketBktK)
|
||||||
|
|
||||||
@ -238,9 +235,6 @@ func getTicketFromBkt(bkt *bolt.Bucket) (Ticket, error) {
|
|||||||
}
|
}
|
||||||
|
|
||||||
func (vdb *VspDatabase) DeleteTicket(ticket Ticket) error {
|
func (vdb *VspDatabase) DeleteTicket(ticket Ticket) error {
|
||||||
vdb.ticketsMtx.Lock()
|
|
||||||
defer vdb.ticketsMtx.Unlock()
|
|
||||||
|
|
||||||
return vdb.db.Update(func(tx *bolt.Tx) error {
|
return vdb.db.Update(func(tx *bolt.Tx) error {
|
||||||
ticketBkt := tx.Bucket(vspBktK).Bucket(ticketBktK)
|
ticketBkt := tx.Bucket(vspBktK).Bucket(ticketBktK)
|
||||||
|
|
||||||
@ -254,9 +248,6 @@ func (vdb *VspDatabase) DeleteTicket(ticket Ticket) error {
|
|||||||
}
|
}
|
||||||
|
|
||||||
func (vdb *VspDatabase) UpdateTicket(ticket Ticket) error {
|
func (vdb *VspDatabase) UpdateTicket(ticket Ticket) error {
|
||||||
vdb.ticketsMtx.Lock()
|
|
||||||
defer vdb.ticketsMtx.Unlock()
|
|
||||||
|
|
||||||
return vdb.db.Update(func(tx *bolt.Tx) error {
|
return vdb.db.Update(func(tx *bolt.Tx) error {
|
||||||
ticketBkt := tx.Bucket(vspBktK).Bucket(ticketBktK)
|
ticketBkt := tx.Bucket(vspBktK).Bucket(ticketBktK)
|
||||||
|
|
||||||
@ -271,9 +262,6 @@ func (vdb *VspDatabase) UpdateTicket(ticket Ticket) error {
|
|||||||
}
|
}
|
||||||
|
|
||||||
func (vdb *VspDatabase) GetTicketByHash(ticketHash string) (Ticket, bool, error) {
|
func (vdb *VspDatabase) GetTicketByHash(ticketHash string) (Ticket, bool, error) {
|
||||||
vdb.ticketsMtx.RLock()
|
|
||||||
defer vdb.ticketsMtx.RUnlock()
|
|
||||||
|
|
||||||
var ticket Ticket
|
var ticket Ticket
|
||||||
var found bool
|
var found bool
|
||||||
err := vdb.db.View(func(tx *bolt.Tx) error {
|
err := vdb.db.View(func(tx *bolt.Tx) error {
|
||||||
@ -312,9 +300,6 @@ func (vdb *VspDatabase) Size() (uint64, error) {
|
|||||||
// currently voting tickets. This func iterates over every ticket so should be
|
// currently voting tickets. This func iterates over every ticket so should be
|
||||||
// used sparingly.
|
// used sparingly.
|
||||||
func (vdb *VspDatabase) CountTickets() (int64, int64, int64, int64, error) {
|
func (vdb *VspDatabase) CountTickets() (int64, int64, int64, int64, error) {
|
||||||
vdb.ticketsMtx.RLock()
|
|
||||||
defer vdb.ticketsMtx.RUnlock()
|
|
||||||
|
|
||||||
var voting, voted, expired, missed int64
|
var voting, voted, expired, missed int64
|
||||||
err := vdb.db.View(func(tx *bolt.Tx) error {
|
err := vdb.db.View(func(tx *bolt.Tx) error {
|
||||||
ticketBkt := tx.Bucket(vspBktK).Bucket(ticketBktK)
|
ticketBkt := tx.Bucket(vspBktK).Bucket(ticketBktK)
|
||||||
@ -349,9 +334,6 @@ func (vdb *VspDatabase) CountTickets() (int64, int64, int64, int64, error) {
|
|||||||
|
|
||||||
// GetUnconfirmedTickets returns tickets which are not yet confirmed.
|
// GetUnconfirmedTickets returns tickets which are not yet confirmed.
|
||||||
func (vdb *VspDatabase) GetUnconfirmedTickets() (TicketList, error) {
|
func (vdb *VspDatabase) GetUnconfirmedTickets() (TicketList, error) {
|
||||||
vdb.ticketsMtx.RLock()
|
|
||||||
defer vdb.ticketsMtx.RUnlock()
|
|
||||||
|
|
||||||
return vdb.filterTickets(func(t *bolt.Bucket) bool {
|
return vdb.filterTickets(func(t *bolt.Bucket) bool {
|
||||||
return !bytesToBool(t.Get(confirmedK))
|
return !bytesToBool(t.Get(confirmedK))
|
||||||
})
|
})
|
||||||
@ -360,9 +342,6 @@ func (vdb *VspDatabase) GetUnconfirmedTickets() (TicketList, error) {
|
|||||||
// GetPendingFees returns tickets which are confirmed and have a fee tx which is
|
// GetPendingFees returns tickets which are confirmed and have a fee tx which is
|
||||||
// not yet broadcast.
|
// not yet broadcast.
|
||||||
func (vdb *VspDatabase) GetPendingFees() (TicketList, error) {
|
func (vdb *VspDatabase) GetPendingFees() (TicketList, error) {
|
||||||
vdb.ticketsMtx.RLock()
|
|
||||||
defer vdb.ticketsMtx.RUnlock()
|
|
||||||
|
|
||||||
return vdb.filterTickets(func(t *bolt.Bucket) bool {
|
return vdb.filterTickets(func(t *bolt.Bucket) bool {
|
||||||
return bytesToBool(t.Get(confirmedK)) && FeeStatus(t.Get(feeTxStatusK)) == FeeReceieved
|
return bytesToBool(t.Get(confirmedK)) && FeeStatus(t.Get(feeTxStatusK)) == FeeReceieved
|
||||||
})
|
})
|
||||||
@ -371,9 +350,6 @@ func (vdb *VspDatabase) GetPendingFees() (TicketList, error) {
|
|||||||
// GetUnconfirmedFees returns tickets with a fee tx that is broadcast but not
|
// GetUnconfirmedFees returns tickets with a fee tx that is broadcast but not
|
||||||
// confirmed yet.
|
// confirmed yet.
|
||||||
func (vdb *VspDatabase) GetUnconfirmedFees() (TicketList, error) {
|
func (vdb *VspDatabase) GetUnconfirmedFees() (TicketList, error) {
|
||||||
vdb.ticketsMtx.RLock()
|
|
||||||
defer vdb.ticketsMtx.RUnlock()
|
|
||||||
|
|
||||||
return vdb.filterTickets(func(t *bolt.Bucket) bool {
|
return vdb.filterTickets(func(t *bolt.Bucket) bool {
|
||||||
return FeeStatus(t.Get(feeTxStatusK)) == FeeBroadcast
|
return FeeStatus(t.Get(feeTxStatusK)) == FeeBroadcast
|
||||||
})
|
})
|
||||||
@ -411,8 +387,6 @@ func (vdb *VspDatabase) GetMissingPurchaseHeight() (TicketList, error) {
|
|||||||
|
|
||||||
// filterTickets accepts a filter function and returns all tickets from the
|
// filterTickets accepts a filter function and returns all tickets from the
|
||||||
// database which match the filter.
|
// database which match the filter.
|
||||||
//
|
|
||||||
// This function must be called with the lock held.
|
|
||||||
func (vdb *VspDatabase) filterTickets(filter func(*bolt.Bucket) bool) (TicketList, error) {
|
func (vdb *VspDatabase) filterTickets(filter func(*bolt.Bucket) bool) (TicketList, error) {
|
||||||
var tickets TicketList
|
var tickets TicketList
|
||||||
err := vdb.db.View(func(tx *bolt.Tx) error {
|
err := vdb.db.View(func(tx *bolt.Tx) error {
|
||||||
|
|||||||
Loading…
x
Reference in New Issue
Block a user