@@ -491,6 +491,7 @@ func (s *Store) GetPvtDataByBlockNum(blockNum uint64, filter ledger.PvtNsCollFil
491491 var currentTxNum uint64
492492 var currentTxWsetAssember * txPvtdataAssembler
493493 firstItr := true
494+ purgeMarkerCache := make (map [string ]* version.Height )
494495
495496 for itr .Next () {
496497 dataKeyBytes := itr .Key ()
@@ -524,7 +525,21 @@ func (s *Store) GetPvtDataByBlockNum(blockNum uint64, filter ledger.PvtNsCollFil
524525 return nil , err
525526 }
526527
527- if err := s .removePurgedDataFromCollPvtRWset (dataKey , dataValue ); err != nil {
528+
529+ // Check the cache for purge marker height
530+ cacheKey := dataKey .ns + "~" + dataKey .coll
531+ var purgeMarkerHt * version.Height
532+ var exists bool
533+ if purgeMarkerHt , exists = purgeMarkerCache [cacheKey ]; ! exists {
534+ var err error
535+ purgeMarkerHt , err = s .retrieveLatestPurgeKeyCollMarkerHt (dataKey .ns , dataKey .coll )
536+ if err != nil {
537+ return nil , err
538+ }
539+ purgeMarkerCache [cacheKey ] = purgeMarkerHt
540+ }
541+
542+ if err := s .removePurgedDataFromCollPvtRWset (dataKey , dataValue , purgeMarkerHt ); err != nil {
528543 return nil , err
529544 }
530545
@@ -611,10 +626,18 @@ func (s *Store) RemoveAppInitiatedPurgesUsingReconMarker(
611626 return trimmedKVHashes , nil
612627}
613628
614- func (s * Store ) removePurgedDataFromCollPvtRWset (k * dataKey , v * rwset.CollectionPvtReadWriteSet ) error {
615- purgePossible , err := s .keyPotentiallyPurged (k )
616- if ! purgePossible || err != nil {
617- return err
629+ func (s * Store ) removePurgedDataFromCollPvtRWset (k * dataKey , v * rwset.CollectionPvtReadWriteSet , purgeMarkerHt * version.Height ) error {
630+ var purgePossible bool
631+ if purgeMarkerHt != nil {
632+ keyHt := & version.Height {
633+ BlockNum : k .blkNum ,
634+ TxNum : k .txNum ,
635+ }
636+ purgePossible = keyHt .Compare (purgeMarkerHt ) <= 0
637+ }
638+
639+ if ! purgePossible {
640+ return nil
618641 }
619642
620643 collRWSet , err := rwsetutil .CollPvtRwSetFromProtoMsg (v )
0 commit comments