github.com/aws/aws-cryptographic-material-providers-library/releases/go/mpl@v0.2.0/StormTrackingCMC/externs.go (about) 1 package StormTrackingCMC 2 3 import ( 4 "sync" 5 "time" 6 7 "github.com/aws/aws-cryptographic-material-providers-library/releases/go/mpl/AwsCryptographyMaterialProvidersTypes" 8 "github.com/aws/aws-cryptographic-material-providers-library/releases/go/mpl/StormTracker" 9 DafnyTime "github.com/aws/aws-cryptographic-material-providers-library/releases/go/smithy-dafny-standard-library/Time_" 10 "github.com/aws/aws-cryptographic-material-providers-library/releases/go/smithy-dafny-standard-library/Wrappers" 11 _dafny "github.com/dafny-lang/DafnyRuntimeGo/v4/dafny" 12 ) 13 14 type StormTrackingCMC struct { 15 stormTracker *StormTracker.StormTracker 16 //The Lock contention is not tested. 17 sync.Mutex 18 } 19 20 func New_StormTrackingCMC_(stormTracker *StormTracker.StormTracker) *StormTrackingCMC { 21 return &StormTrackingCMC{stormTracker: stormTracker} 22 } 23 24 func (cmc *StormTrackingCMC) PutCacheEntry(input AwsCryptographyMaterialProvidersTypes.PutCacheEntryInput) Wrappers.Result { 25 cmc.Lock() 26 defer cmc.Unlock() 27 return cmc.stormTracker.PutCacheEntry(input) 28 } 29 func (cmc *StormTrackingCMC) PutCacheEntry_k(input AwsCryptographyMaterialProvidersTypes.PutCacheEntryInput) Wrappers.Result { 30 cmc.Lock() 31 defer cmc.Unlock() 32 return cmc.stormTracker.PutCacheEntry(input) 33 } 34 func (cmc *StormTrackingCMC) UpdateUsageMetadata(input AwsCryptographyMaterialProvidersTypes.UpdateUsageMetadataInput) Wrappers.Result { 35 cmc.Lock() 36 defer cmc.Unlock() 37 return cmc.stormTracker.UpdateUsageMetadata(input) 38 } 39 func (cmc *StormTrackingCMC) UpdateUsageMetadata_k(input AwsCryptographyMaterialProvidersTypes.UpdateUsageMetadataInput) Wrappers.Result { 40 cmc.Lock() 41 defer cmc.Unlock() 42 return cmc.stormTracker.UpdateUsageMetadata(input) 43 } 44 func (cmc *StormTrackingCMC) GetCacheEntry(input AwsCryptographyMaterialProvidersTypes.GetCacheEntryInput) Wrappers.Result { 45 return cmc.GetCacheEntry_k(input) 46 } 47 func (cmc *StormTrackingCMC) GetCacheEntry_k(input AwsCryptographyMaterialProvidersTypes.GetCacheEntryInput) Wrappers.Result { 48 maxInFlight := DafnyTime.CurrentRelativeTimeMilli() + cmc.stormTracker.InFlightTTL 49 for { 50 res := cmc.GetFromInner(input) 51 if res.IsFailure() { 52 return Companion_Default___.CreateGetCacheEntryFailure(res.Dtor_error().(AwsCryptographyMaterialProvidersTypes.Error)) 53 } else if res.Dtor_value().(StormTracker.CacheState).Is_Full() { 54 return Companion_Default___.CreateGetCacheEntrySuccess(res.Dtor_value().(StormTracker.CacheState).Dtor_data()) 55 } else if res.Dtor_value().(StormTracker.CacheState).Is_EmptyFetch() { 56 return Companion_Default___.CreateGetCacheEntryFailure(AwsCryptographyMaterialProvidersTypes.Companion_Error_.Create_EntryDoesNotExist_(_dafny.SeqOfChars([]_dafny.Char("Entry doesn't exists")...))) 57 } else { 58 if DafnyTime.CurrentRelativeTimeMilli() <= maxInFlight { 59 time.Sleep(time.Duration(cmc.stormTracker.SleepMilli)) 60 } else { 61 return Companion_Default___.CreateGetCacheEntryFailure(AwsCryptographyMaterialProvidersTypes.Companion_Error_.Create_InFlightTTLExceeded_(_dafny.SeqOfChars([]_dafny.Char("Storm cache inFlightTTL exceeded.")...))) 62 } 63 } 64 } 65 } 66 func (cmc *StormTrackingCMC) DeleteCacheEntry(input AwsCryptographyMaterialProvidersTypes.DeleteCacheEntryInput) Wrappers.Result { 67 cmc.Lock() 68 defer cmc.Unlock() 69 return cmc.stormTracker.DeleteCacheEntry(input) 70 71 } 72 func (cmc *StormTrackingCMC) DeleteCacheEntry_k(input AwsCryptographyMaterialProvidersTypes.DeleteCacheEntryInput) Wrappers.Result { 73 cmc.Lock() 74 defer cmc.Unlock() 75 return cmc.stormTracker.DeleteCacheEntry(input) 76 } 77 78 func (cmc *StormTrackingCMC) String() string { 79 return "StormTrackerCMC" 80 } 81 82 func (cmc *StormTrackingCMC) GetFromInner(input AwsCryptographyMaterialProvidersTypes.GetCacheEntryInput) Wrappers.Result { 83 cmc.Lock() 84 defer cmc.Unlock() 85 return cmc.stormTracker.GetFromCache(input) 86 }