Gitiles

gerrit.opencord.org / voltha-openolt-adapter / 4dea6310cc4d3030dc2a1350ad83b3ae6d83854c / . / vendor / github.com / hashicorp / serf / coordinate / config.go

package coordinate | |

// Config is used to set the parameters of the Vivaldi-based coordinate mapping | |

// algorithm. | |

// | |

// The following references are called out at various points in the documentation | |

// here: | |

// | |

// [1] Dabek, Frank, et al. "Vivaldi: A decentralized network coordinate system." | |

// ACM SIGCOMM Computer Communication Review. Vol. 34. No. 4. ACM, 2004. | |

// [2] Ledlie, Jonathan, Paul Gardner, and Margo I. Seltzer. "Network Coordinates | |

// in the Wild." NSDI. Vol. 7. 2007. | |

// [3] Lee, Sanghwan, et al. "On suitability of Euclidean embedding for | |

// host-based network coordinate systems." Networking, IEEE/ACM Transactions | |

// on 18.1 (2010): 27-40. | |

type Config struct { | |

// The dimensionality of the coordinate system. As discussed in [2], more | |

// dimensions improves the accuracy of the estimates up to a point. Per [2] | |

// we chose 8 dimensions plus a non-Euclidean height. | |

Dimensionality uint | |

// VivaldiErrorMax is the default error value when a node hasn't yet made | |

// any observations. It also serves as an upper limit on the error value in | |

// case observations cause the error value to increase without bound. | |

VivaldiErrorMax float64 | |

// VivaldiCE is a tuning factor that controls the maximum impact an | |

// observation can have on a node's confidence. See [1] for more details. | |

VivaldiCE float64 | |

// VivaldiCC is a tuning factor that controls the maximum impact an | |

// observation can have on a node's coordinate. See [1] for more details. | |

VivaldiCC float64 | |

// AdjustmentWindowSize is a tuning factor that determines how many samples | |

// we retain to calculate the adjustment factor as discussed in [3]. Setting | |

// this to zero disables this feature. | |

AdjustmentWindowSize uint | |

// HeightMin is the minimum value of the height parameter. Since this | |

// always must be positive, it will introduce a small amount error, so | |

// the chosen value should be relatively small compared to "normal" | |

// coordinates. | |

HeightMin float64 | |

// LatencyFilterSamples is the maximum number of samples that are retained | |

// per node, in order to compute a median. The intent is to ride out blips | |

// but still keep the delay low, since our time to probe any given node is | |

// pretty infrequent. See [2] for more details. | |

LatencyFilterSize uint | |

// GravityRho is a tuning factor that sets how much gravity has an effect | |

// to try to re-center coordinates. See [2] for more details. | |

GravityRho float64 | |

} | |

// DefaultConfig returns a Config that has some default values suitable for | |

// basic testing of the algorithm, but not tuned to any particular type of cluster. | |

func DefaultConfig() *Config { | |

return &Config{ | |

Dimensionality: 8, | |

VivaldiErrorMax: 1.5, | |

VivaldiCE: 0.25, | |

VivaldiCC: 0.25, | |

AdjustmentWindowSize: 20, | |

HeightMin: 10.0e-6, | |

LatencyFilterSize: 3, | |

GravityRho: 150.0, | |

} | |

} |