Skip to content
Snippets Groups Projects
Commit 8119e512 authored by Richard T. Carback III's avatar Richard T. Carback III
Browse files

Clean up previous negotiations

parent 0675ae69
No related branches found
No related tags found
2 merge requests!510Release,!282Auth Store Fixes
...@@ -12,6 +12,7 @@ import ( ...@@ -12,6 +12,7 @@ import (
"encoding/binary" "encoding/binary"
"encoding/json" "encoding/json"
"github.com/pkg/errors"
jww "github.com/spf13/jwalterweatherman" jww "github.com/spf13/jwalterweatherman"
"gitlab.com/elixxir/client/storage/versioned" "gitlab.com/elixxir/client/storage/versioned"
"gitlab.com/elixxir/crypto/e2e/auth" "gitlab.com/elixxir/crypto/e2e/auth"
...@@ -119,42 +120,22 @@ func (s *Store) savePreviousNegotiations() error { ...@@ -119,42 +120,22 @@ func (s *Store) savePreviousNegotiations() error {
func (s *Store) newOrLoadPreviousNegotiations() (map[id.ID]bool, error) { func (s *Store) newOrLoadPreviousNegotiations() (map[id.ID]bool, error) {
obj, err := s.kv.Get(negotiationPartnersKey, negotiationPartnersVersion) obj, err := s.kv.Get(negotiationPartnersKey, negotiationPartnersVersion)
if err != nil {
// Version 0 Upgrade Path // V0 Upgrade Path
obj, err2 := s.kv.Get(negotiationPartnersKey, 0)
if err2 == nil && obj.Version == 0 {
old := unmarshalPreviousNegotiationsV0(obj.Data)
newPrevNegotiations := make(map[id.ID]bool)
for id := range old {
newPrevNegotiations[id] = true
}
obj = &versioned.Object{
Version: negotiationPartnersVersion,
Timestamp: netTime.Now(),
Data: marshalPreviousNegotiations(
newPrevNegotiations),
}
err = s.kv.Set(negotiationPartnersKey,
negotiationPartnersVersion, obj)
if err != nil {
return nil, err
}
}
if !ekv.Exists(err) { if !ekv.Exists(err) {
newPreviousNegotiations := make(map[id.ID]bool) upgradeErr := upgradePreviousNegotiationsV0(s.kv)
obj := &versioned.Object{ if upgradeErr != nil {
Version: negotiationPartnersVersion, return nil, errors.Wrapf(err, "%+v", upgradeErr)
Timestamp: netTime.Now(),
Data: marshalPreviousNegotiations(
newPreviousNegotiations),
} }
err = s.kv.Set(negotiationPartnersKey, obj, err = s.kv.Get(negotiationPartnersKey,
negotiationPartnersVersion, obj) negotiationPartnersVersion)
if err != nil {
return nil, err
} }
// Note: if it still doesn't exist, return an empty one.
if err != nil && !ekv.Exists(err) {
newPreviousNegotiations := make(map[id.ID]bool)
return newPreviousNegotiations, nil return newPreviousNegotiations, nil
} } else if err != nil {
return nil, err return nil, err
} }
...@@ -286,3 +267,25 @@ func unmarshalPreviousNegotiationsV0(buf []byte) map[id.ID]struct{} { ...@@ -286,3 +267,25 @@ func unmarshalPreviousNegotiationsV0(buf []byte) map[id.ID]struct{} {
return partners return partners
} }
// upgradePreviousNegotiationsV0 upgrades the negotiations Partners key from V0
// to V1
func upgradePreviousNegotiationsV0(kv *versioned.KV) error {
obj, err := kv.Get(negotiationPartnersKey, 0)
if !ekv.Exists(err) {
return nil
}
old := unmarshalPreviousNegotiationsV0(obj.Data)
newPrevNegotiations := make(map[id.ID]bool)
for id := range old {
newPrevNegotiations[id] = true
}
obj = &versioned.Object{
Version: negotiationPartnersVersion,
Timestamp: netTime.Now(),
Data: marshalPreviousNegotiations(
newPrevNegotiations),
}
return kv.Set(negotiationPartnersKey, negotiationPartnersVersion, obj)
}
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Please register or to comment