github.com/yankunsam/loki/v2@v2.6.3-0.20220817130409-389df5235c27/pkg/storage/stores/indexshipper/compactor/deletionmode/mode.go (about)

     1  package deletionmode
     2  
     3  import (
     4  	"errors"
     5  	"fmt"
     6  	"strings"
     7  )
     8  
     9  type Mode int16
    10  
    11  var (
    12  	ErrUnknownMode = errors.New("unknown deletion mode")
    13  )
    14  
    15  const (
    16  	disabled        = "disabled"
    17  	filterOnly      = "filter-only"
    18  	filterAndDelete = "filter-and-delete"
    19  	unknown         = "unknown"
    20  
    21  	Disabled Mode = iota
    22  	FilterOnly
    23  	FilterAndDelete
    24  )
    25  
    26  func (m Mode) String() string {
    27  	switch m {
    28  	case Disabled:
    29  		return disabled
    30  	case FilterOnly:
    31  		return filterOnly
    32  	case FilterAndDelete:
    33  		return filterAndDelete
    34  	}
    35  	return unknown
    36  }
    37  
    38  func (m Mode) DeleteEnabled() bool {
    39  	return m == FilterOnly || m == FilterAndDelete
    40  }
    41  
    42  func AllModes() []string {
    43  	return []string{Disabled.String(), FilterOnly.String(), FilterAndDelete.String()}
    44  }
    45  
    46  func ParseMode(in string) (Mode, error) {
    47  	switch in {
    48  	case disabled:
    49  		return Disabled, nil
    50  	case filterOnly:
    51  		return FilterOnly, nil
    52  	case filterAndDelete:
    53  		return FilterAndDelete, nil
    54  	}
    55  	return 0, fmt.Errorf("%w: must be one of %s", ErrUnknownMode, strings.Join(AllModes(), "|"))
    56  }
    57  
    58  func Enabled(in string) (bool, error) {
    59  	deleteMode, err := ParseMode(in)
    60  	if err != nil {
    61  		return false, err
    62  	}
    63  
    64  	return deleteMode.DeleteEnabled(), nil
    65  }