@@ -604,12 +604,12 @@ List<string> GetErrors(IReadOnlyCollection<ImportResource> dups, IReadOnlyCollec
604604 List < ImportResource > RemoveVersionOutOfSyncWithLastUpdatedConflicts ( IEnumerable < ImportResource > inputs )
605605 {
606606 // Remove conflicts where versions and last updated are out of order
607- var prevResourceId = string . Empty ;
607+ ResourceKey prevResourceKey = null ;
608608 var prevVersion = int . MaxValue ;
609609 var inputsWithVersion = new List < ImportResource > ( ) ;
610- foreach ( var input in inputs . OrderBy ( _ => _ . ResourceWrapper . ResourceId ) . ThenByDescending ( _ => _ . ResourceWrapper . LastModified ) )
610+ foreach ( var input in inputs . OrderBy ( _ => _ . ResourceWrapper . ToResourceKey ( true ) ) . ThenByDescending ( _ => _ . ResourceWrapper . LastModified ) )
611611 {
612- if ( prevResourceId != input . ResourceWrapper . ResourceId )
612+ if ( prevResourceKey != input . ResourceWrapper . ToResourceKey ( true ) )
613613 {
614614 prevVersion = int . MaxValue ;
615615 }
@@ -638,7 +638,7 @@ List<ImportResource> RemoveVersionOutOfSyncWithLastUpdatedConflicts(IEnumerable<
638638 inputsWithVersion . Add ( input ) ;
639639 }
640640
641- prevResourceId = input . ResourceWrapper . ResourceId ;
641+ prevResourceKey = input . ResourceWrapper . ToResourceKey ( true ) ;
642642 prevVersion = inputVersion ;
643643 }
644644
@@ -714,10 +714,10 @@ async Task MergeUnversioned(List<ImportResource> inputs, bool keepLastUpdated, b
714714 // Ensure that the imported resources can "fit" in the db. We want to keep versionId alinged to lastUpdated and sequential if possible.
715715 // Note: surrogate id is populated from last updated by ToResourceDateKey(), therefore we can trust this value as part of dictionary key.
716716 var versionSlots = ( await StoreClient . GetResourceVersionsAsync ( inputsNoVersionForCheck . Select ( _ => _ . ResourceWrapper . ToResourceDateKey ( _model . GetResourceTypeId , true ) ) . ToList ( ) , _compressedRawResourceConverter . ReadCompressedRawResource , cancellationToken ) ) . ToDictionary ( _ => new ResourceDateKey ( _ . Key . ResourceTypeId , _ . Key . Id , _ . Key . ResourceSurrogateId , null ) , _ => _ ) ;
717- foreach ( var input in inputsNoVersionForCheck . OrderBy ( _ => _ . ResourceWrapper . ResourceId ) . ThenByDescending ( _ => _ . ResourceWrapper . LastModified ) )
717+ foreach ( var input in inputsNoVersionForCheck . OrderBy ( _ => _ . ResourceWrapper . ToResourceKey ( true ) ) . ThenByDescending ( _ => _ . ResourceWrapper . LastModified ) )
718718 {
719- var resourceKey = input . ResourceWrapper . ToResourceDateKey ( _model . GetResourceTypeId , true ) ;
720- versionSlots . TryGetValue ( resourceKey , out var existing ) ;
719+ var resourceDateKey = input . ResourceWrapper . ToResourceDateKey ( _model . GetResourceTypeId , true ) ;
720+ versionSlots . TryGetValue ( resourceDateKey , out var existing ) ;
721721 input . KeepVersion = true ;
722722 var versionIdInt = int . Parse ( existing . Key . VersionId ) ;
723723 if ( versionIdInt == 0 ) // though this check was done above, racing conditions can stil lead to extra matches
@@ -751,38 +751,30 @@ async Task MergeUnversioned(List<ImportResource> inputs, bool keepLastUpdated, b
751751 var inputNoConflict = inputs . Except ( conflicts ) . Except ( loaded ) ;
752752
753753 // Make sure that version is incremented taking into account current state in the database.
754- var prevResourceId = string . Empty ;
754+ ResourceKey prevResourceKey = null ;
755755 var version = 0 ;
756- foreach ( var input in inputNoConflict . Where ( _ => _ . KeepLastUpdated && ! _ . KeepVersion ) . OrderBy ( _ => _ . ResourceWrapper . ResourceId ) . ThenBy ( _ => _ . ResourceWrapper . LastModified ) )
756+ foreach ( var input in inputNoConflict . Where ( _ => _ . KeepLastUpdated && ! _ . KeepVersion ) . OrderBy ( _ => _ . ResourceWrapper . ToResourceKey ( true ) ) . ThenBy ( _ => _ . ResourceWrapper . LastModified ) )
757757 {
758- if ( prevResourceId != input . ResourceWrapper . ResourceId )
758+ if ( prevResourceKey != input . ResourceWrapper . ToResourceKey ( true ) )
759759 {
760760 version = currentInDb . TryGetValue ( input . ResourceWrapper . ToResourceKey ( true ) , out var current ) ? int . Parse ( current . Version ) : 0 ;
761761 }
762762
763763 input . ResourceWrapper . Version = ( ++ version ) . ToString ( ) ;
764764 input . KeepVersion = true ;
765- prevResourceId = input . ResourceWrapper . ResourceId ;
765+ prevResourceKey = input . ResourceWrapper . ToResourceKey ( true ) ;
766766 }
767767
768768 // Finally merge the resources to the db.
769- await Merge ( inputNoConflict . OrderBy ( _ => _ . ResourceWrapper . ResourceId ) . ThenByDescending ( _ => int . Parse ( _ . ResourceWrapper . Version ) ) , keepLastUpdated , useReplicasForReads ) ;
769+ await Merge ( inputNoConflict . OrderBy ( _ => _ . ResourceWrapper . ToResourceKey ( true ) ) . ThenByDescending ( _ => int . Parse ( _ . ResourceWrapper . Version ) ) , keepLastUpdated , useReplicasForReads ) ;
770770 loaded . AddRange ( inputNoConflict ) ;
771771 }
772772 }
773773
774774 async Task Merge ( IEnumerable < ImportResource > resources , bool keepLastUpdated , bool useReplicasForReads )
775775 {
776- var input = resources . Select ( _ => new ResourceWrapperOperation ( _ . ResourceWrapper , true , true , null , requireETagOnUpdate : false , keepVersion : _ . KeepVersion , bundleResourceContext : null ) ) . ToList ( ) ;
777- await MergeInternalAsync (
778- resources : input ,
779- keepLastUpdated ,
780- keepAllDeleted : true ,
781- enlistInTransaction : false ,
782- useReplicasForReads ,
783- eventualConsistency ,
784- ensureAtomicOperations : false ,
785- cancellationToken ) ;
776+ var input = resources . Select ( _ => new ResourceWrapperOperation ( _ . ResourceWrapper , true , true , null , false , _ . KeepVersion , null ) ) . ToList ( ) ;
777+ await MergeInternalAsync ( input , keepLastUpdated , true , false , useReplicasForReads , eventualConsistency , false , cancellationToken ) ;
786778 }
787779 }
788780
0 commit comments