MCPcopy
hub / github.com/nats-io/nats.go / PurgeDeletes

Method PurgeDeletes

kv.go:805–872  ·  view source on GitHub ↗

PurgeDeletes will remove all current delete markers. This is a maintenance option if there is a larger buildup of delete markers. See DeleteMarkersOlderThan() option for more information.

(opts ...PurgeOpt)

Source from the content-addressed store, hash-verified

803// This is a maintenance option if there is a larger buildup of delete markers.
804// See DeleteMarkersOlderThan() option for more information.
805func (kv *kvs) PurgeDeletes(opts ...PurgeOpt) error {
806 var o purgeOpts
807 for _, opt := range opts {
808 if opt != nil {
809 if err := opt.configurePurge(&o); err != nil {
810 return err
811 }
812 }
813 }
814 // Transfer possible context purge option to the watcher. This is the
815 // only option that matters for the PurgeDeletes() feature.
816 var wopts []WatchOpt
817 if o.ctx != nil {
818 wopts = append(wopts, Context(o.ctx))
819 }
820 watcher, err := kv.WatchAll(wopts...)
821 if err != nil {
822 return err
823 }
824 defer watcher.Stop()
825
826 var limit time.Time
827 olderThan := o.dmthr
828 // Negative value is used to instruct to always remove markers, regardless
829 // of age. If set to 0 (or not set), use our default value.
830 if olderThan == 0 {
831 olderThan = kvDefaultPurgeDeletesMarkerThreshold
832 }
833 if olderThan > 0 {
834 limit = time.Now().Add(-olderThan)
835 }
836
837 var deleteMarkers []KeyValueEntry
838 for entry := range watcher.Updates() {
839 if entry == nil {
840 break
841 }
842 if op := entry.Operation(); op == KeyValueDelete || op == KeyValuePurge {
843 deleteMarkers = append(deleteMarkers, entry)
844 }
845 }
846 // Stop watcher here so as we purge we do not have the system continually updating numPending.
847 watcher.Stop()
848
849 var (
850 pr StreamPurgeRequest
851 b strings.Builder
852 )
853 // Do actual purges here.
854 purgeOpts := []JSOpt{}
855 if o.ctx != nil {
856 purgeOpts = append(purgeOpts, Context(o.ctx))
857 }
858 for _, entry := range deleteMarkers {
859 b.WriteString(kv.pre)
860 b.WriteString(entry.Key())
861 pr.Subject = b.String()
862 pr.Keep = 0

Callers

nothing calls this directly

Calls 12

WatchAllMethod · 0.95
ContextFunction · 0.85
purgeStreamMethod · 0.80
configurePurgeMethod · 0.65
StopMethod · 0.65
AddMethod · 0.65
UpdatesMethod · 0.65
OperationMethod · 0.65
KeyMethod · 0.65
CreatedMethod · 0.65
ResetMethod · 0.65
StringMethod · 0.45

Tested by

no test coverage detected