AwsCryptographicMaterialProviders/runtimes/net/Extern/StormTrackingCMC.cs (91 lines of code) (raw):

// Copyright Amazon.com Inc. or its affiliates. All Rights Reserved. // SPDX-License-Identifier: Apache-2.0 using software.amazon.cryptography.primitives.internaldafny.types; namespace software.amazon.cryptography.internaldafny.StormTrackingCMC { public partial class StormTrackingCMC : software.amazon.cryptography.materialproviders.internaldafny.types.ICryptographicMaterialsCache { public StormTracker_Compile.StormTracker wrapped; public StormTrackingCMC(StormTracker_Compile.StormTracker cmc) { this.wrapped = cmc; } [System.Runtime.CompilerServices.MethodImpl(System.Runtime.CompilerServices.MethodImplOptions.Synchronized)] public Wrappers_Compile._IResult<_System._ITuple0, software.amazon.cryptography.materialproviders.internaldafny.types._IError> PutCacheEntry(software.amazon.cryptography.materialproviders.internaldafny.types._IPutCacheEntryInput input) { return PutCacheEntry_k(input); } [System.Runtime.CompilerServices.MethodImpl(System.Runtime.CompilerServices.MethodImplOptions.Synchronized)] public Wrappers_Compile._IResult<_System._ITuple0, software.amazon.cryptography.materialproviders.internaldafny.types._IError> UpdateUsageMetadata(software.amazon.cryptography.materialproviders.internaldafny.types._IUpdateUsageMetadataInput input) { return UpdateUsageMetadata_k(input); } // NOT synchronized, as some sleeping might be involved public Wrappers_Compile._IResult<software.amazon.cryptography.materialproviders.internaldafny.types._IGetCacheEntryOutput, software.amazon.cryptography.materialproviders.internaldafny.types._IError> GetCacheEntry(software.amazon.cryptography.materialproviders.internaldafny.types._IGetCacheEntryInput input) { return GetCacheEntry_k(input); } [System.Runtime.CompilerServices.MethodImpl(System.Runtime.CompilerServices.MethodImplOptions.Synchronized)] public Wrappers_Compile._IResult<_System._ITuple0, software.amazon.cryptography.materialproviders.internaldafny.types._IError> DeleteCacheEntry(software.amazon.cryptography.materialproviders.internaldafny.types._IDeleteCacheEntryInput input) { return DeleteCacheEntry_k(input); } // This is the synchronization for GetCacheEntry and GetCacheEntry_k [System.Runtime.CompilerServices.MethodImpl(System.Runtime.CompilerServices.MethodImplOptions.Synchronized)] public Wrappers_Compile._IResult<StormTracker_Compile._ICacheState, software.amazon.cryptography.materialproviders.internaldafny.types._IError> GetFromCacheInner(software.amazon.cryptography.materialproviders.internaldafny.types._IGetCacheEntryInput input) { return wrapped.GetFromCache(input); } // NOT synchronized, as some sleeping might be involved public Wrappers_Compile._IResult<software.amazon.cryptography.materialproviders.internaldafny.types._IGetCacheEntryOutput, software.amazon.cryptography.materialproviders.internaldafny.types._IError> GetCacheEntry_k(software.amazon.cryptography.materialproviders.internaldafny.types._IGetCacheEntryInput input) { long max_in_flight = (long)(DateTime.Now - DateTime.MinValue).TotalMilliseconds + wrapped.inFlightTTL; int sleep_time = (int)wrapped.sleepMilli; while (true) { Wrappers_Compile._IResult<StormTracker_Compile._ICacheState, software.amazon.cryptography.materialproviders.internaldafny.types._IError> result = GetFromCacheInner(input); if (result.is_Failure) { return Wrappers_Compile.Result<software.amazon.cryptography.materialproviders.internaldafny.types._IGetCacheEntryOutput, software.amazon.cryptography.materialproviders.internaldafny.types._IError> .create_Failure((result).dtor_error); } else if (result.dtor_value.is_Full) { return Wrappers_Compile.Result<software.amazon.cryptography.materialproviders.internaldafny.types._IGetCacheEntryOutput, software.amazon.cryptography.materialproviders.internaldafny.types._IError> .create_Success(result.dtor_value.dtor_data); } else if (result.dtor_value.is_EmptyFetch) { return Wrappers_Compile.Result<software.amazon.cryptography.materialproviders.internaldafny.types._IGetCacheEntryOutput, software.amazon.cryptography.materialproviders.internaldafny.types._IError> .create_Failure(software.amazon.cryptography.materialproviders.internaldafny.types.Error .create_EntryDoesNotExist(Dafny.Sequence<char>.FromString("Entry does not exist"))); } else { if ((long)(DateTime.Now - DateTime.MinValue).TotalMilliseconds <= max_in_flight) { Thread.Sleep(sleep_time); } else { return Wrappers_Compile.Result<software.amazon.cryptography.materialproviders.internaldafny.types._IGetCacheEntryOutput, software.amazon.cryptography.materialproviders.internaldafny.types._IError> .create_Failure(software.amazon.cryptography.materialproviders.internaldafny.types.Error .create_InFlightTTLExceeded(Dafny.Sequence<char>.FromString("Storm cache inFlightTTL exceeded"))); } } } } [System.Runtime.CompilerServices.MethodImpl(System.Runtime.CompilerServices.MethodImplOptions.Synchronized)] public Wrappers_Compile._IResult<_System._ITuple0, software.amazon.cryptography.materialproviders.internaldafny.types._IError> PutCacheEntry_k(software.amazon.cryptography.materialproviders.internaldafny.types._IPutCacheEntryInput input) { return this.wrapped.PutCacheEntry(input); } [System.Runtime.CompilerServices.MethodImpl(System.Runtime.CompilerServices.MethodImplOptions.Synchronized)] public Wrappers_Compile._IResult<_System._ITuple0, software.amazon.cryptography.materialproviders.internaldafny.types._IError> DeleteCacheEntry_k(software.amazon.cryptography.materialproviders.internaldafny.types._IDeleteCacheEntryInput input) { return this.wrapped.DeleteCacheEntry(input); } [System.Runtime.CompilerServices.MethodImpl(System.Runtime.CompilerServices.MethodImplOptions.Synchronized)] public Wrappers_Compile._IResult<_System._ITuple0, software.amazon.cryptography.materialproviders.internaldafny.types._IError> UpdateUsageMetadata_k(software.amazon.cryptography.materialproviders.internaldafny.types._IUpdateUsageMetadataInput input) { return this.wrapped.UpdateUsageMetadata(input); } } }