From 0675ae6934015288bcd5a5d3bfecf2f821c84dc3 Mon Sep 17 00:00:00 2001 From: "Richard T. Carback III" <rick.carback@gmail.com> Date: Fri, 22 Jul 2022 22:49:37 +0000 Subject: [PATCH] Rework sentRequest to call an upgrade function and wrap any errors returned by it --- auth/store/sentRequest.go | 38 ++++++++++++++++++++++++++++++-------- 1 file changed, 30 insertions(+), 8 deletions(-) diff --git a/auth/store/sentRequest.go b/auth/store/sentRequest.go index 3794502bf..5f5b8a69e 100644 --- a/auth/store/sentRequest.go +++ b/auth/store/sentRequest.go @@ -78,14 +78,11 @@ func loadSentRequest(kv *versioned.KV, partner *id.ID, grp *cyclic.Group) (*Sent // V0 Upgrade Path if !ekv.Exists(err) { - obj2, err2 := kv.Get(makeOldSentRequestKey(partner), 0) - if err2 != nil { - jww.DEBUG.Printf("v0 loadSentRequest: %+v", err) - } else { - obj = obj2 - err = nil + upgradeErr := upgradeSentRequestKeyV0(kv, partner) + if upgradeErr != nil { + return nil, errors.Wrapf(err, "%+v", upgradeErr) } - // Note: uses same encoding, just different keys + obj, err = kv.Get(srKey, currentSentRequestVersion) } if err != nil { @@ -272,12 +269,37 @@ func (sr *SentRequest) getType() RequestType { return Sent } +// makeSentRequestKey makes the key string for accessing the +// partners sent request object from the key value store. func makeSentRequestKey(partner *id.ID) string { return "sentRequest:" + partner.String() } // V0 Utility Functions -func makeOldSentRequestKey(partner *id.ID) string { +// makeSentRequestKeyV0 The old key used the string pattern +// "Partner:PartnerID" instead of "sentRequest:PartnerID". +func makeSentRequestKeyV0(partner *id.ID) string { return fmt.Sprintf("Partner:%v", partner.String()) } + +// upgradeSentRequestKeyV0 upgrads the srKey from version 0 to 1 by +// changing the version number. +func upgradeSentRequestKeyV0(kv *versioned.KV, partner *id.ID) error { + oldKey := makeSentRequestKeyV0(partner) + obj, err := kv.Get(oldKey, 0) + if err != nil { + return err + } + + jww.INFO.Printf("Upgrading legacy srKey for %s", partner) + + // Note: uses same encoding, just different keys + obj.Version = 1 + err = kv.Set(makeSentRequestKey(partner), 1, obj) + if err != nil { + return err + } + + return kv.Delete(oldKey, 0) +} -- GitLab