diff --git a/Changelog.md b/Changelog.md index 852a7275..658f923a 100644 --- a/Changelog.md +++ b/Changelog.md @@ -8,6 +8,7 @@ Changelog [format](http://keepachangelog.com/en/1.0.0/) ### Changed * GODT-761 Use label.Path instead of Name to partially support subfolders for webapp beta release. +* GODT-765 Improve speed of checking whether message is deleted. ## [IE 1.1.1] Danube (beta 2020-09-xx) [Bridge 1.4.1] Forth (beta 2020-09-xx) diff --git a/internal/store/mailbox.go b/internal/store/mailbox.go index e711093c..89857af3 100644 --- a/internal/store/mailbox.go +++ b/internal/store/mailbox.go @@ -142,6 +142,9 @@ func initMailboxBucket(tx *bolt.Tx, bucketName []byte) error { if _, err := bucket.CreateBucketIfNotExists(apiIDsBucket); err != nil { return err } + if _, err := bucket.CreateBucketIfNotExists(deletedIDsBucket); err != nil { + return err + } return nil } @@ -240,13 +243,7 @@ func (storeMailbox *Mailbox) txGetAPIIDsBucket(tx *bolt.Tx) *bolt.Bucket { // txGetDeletedIDsBucket returns the bucket with messagesID marked as deleted func (storeMailbox *Mailbox) txGetDeletedIDsBucket(tx *bolt.Tx) *bolt.Bucket { - // There should be no error since it _...returns an error if the bucket - // name is blank, or if the bucket name is too long._ - bucket, err := storeMailbox.txGetBucket(tx).CreateBucketIfNotExists(deletedIDsBucket) - if err != nil || bucket == nil { - storeMailbox.log.WithError(err).Error("Cannot create or get bucket with deleted IDs.") - } - return bucket + return storeMailbox.txGetBucket(tx).Bucket(deletedIDsBucket) } // txGetBucket returns the bucket of mailbox containing mapping buckets. diff --git a/internal/store/message.go b/internal/store/message.go index b88698c1..38b230a6 100644 --- a/internal/store/message.go +++ b/internal/store/message.go @@ -66,7 +66,7 @@ func (message *Message) Message() *pmapi.Message { // mailbox func (message *Message) IsMarkedDeleted() bool { isMarkedAsDeleted := false - err := message.storeMailbox.db().Update(func(tx *bolt.Tx) error { + err := message.storeMailbox.db().View(func(tx *bolt.Tx) error { isMarkedAsDeleted = message.storeMailbox.txGetDeletedIDsBucket(tx).Get([]byte(message.msg.ID)) != nil return nil })