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)
| 803 | // This is a maintenance option if there is a larger buildup of delete markers. |
| 804 | // See DeleteMarkersOlderThan() option for more information. |
| 805 | func (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 |
nothing calls this directly
no test coverage detected