forked from cerc-io/plugeth
49 lines
1.3 KiB
Go
49 lines
1.3 KiB
Go
|
package models
|
||
|
|
||
|
import (
|
||
|
"errors"
|
||
|
"strings"
|
||
|
)
|
||
|
|
||
|
// ConsistencyLevel represent a required replication criteria before a write can
|
||
|
// be returned as successful.
|
||
|
//
|
||
|
// The consistency level is handled in open-source InfluxDB but only applicable to clusters.
|
||
|
type ConsistencyLevel int
|
||
|
|
||
|
const (
|
||
|
// ConsistencyLevelAny allows for hinted handoff, potentially no write happened yet.
|
||
|
ConsistencyLevelAny ConsistencyLevel = iota
|
||
|
|
||
|
// ConsistencyLevelOne requires at least one data node acknowledged a write.
|
||
|
ConsistencyLevelOne
|
||
|
|
||
|
// ConsistencyLevelQuorum requires a quorum of data nodes to acknowledge a write.
|
||
|
ConsistencyLevelQuorum
|
||
|
|
||
|
// ConsistencyLevelAll requires all data nodes to acknowledge a write.
|
||
|
ConsistencyLevelAll
|
||
|
)
|
||
|
|
||
|
var (
|
||
|
// ErrInvalidConsistencyLevel is returned when parsing the string version
|
||
|
// of a consistency level.
|
||
|
ErrInvalidConsistencyLevel = errors.New("invalid consistency level")
|
||
|
)
|
||
|
|
||
|
// ParseConsistencyLevel converts a consistency level string to the corresponding ConsistencyLevel const.
|
||
|
func ParseConsistencyLevel(level string) (ConsistencyLevel, error) {
|
||
|
switch strings.ToLower(level) {
|
||
|
case "any":
|
||
|
return ConsistencyLevelAny, nil
|
||
|
case "one":
|
||
|
return ConsistencyLevelOne, nil
|
||
|
case "quorum":
|
||
|
return ConsistencyLevelQuorum, nil
|
||
|
case "all":
|
||
|
return ConsistencyLevelAll, nil
|
||
|
default:
|
||
|
return 0, ErrInvalidConsistencyLevel
|
||
|
}
|
||
|
}
|