(idx int, raft string)
| 278 | } |
| 279 | |
| 280 | func getAlpha(idx int, raft string) service { |
| 281 | basename := "alpha" |
| 282 | // internalPort is used for Raft communication between nodes. |
| 283 | internalPort := alphaBasePort + opts.PortOffset + getOffset(idx) |
| 284 | // grpcPort is the public-facing port for clients. It is offset from the internal port. |
| 285 | grpcPort := internalPort + 1000 |
| 286 | svc := initService(basename, idx, grpcPort) |
| 287 | |
| 288 | if opts.TmpFS { |
| 289 | svc.TmpFS = append(svc.TmpFS, fmt.Sprintf("/data/%s/w", svc.name)) |
| 290 | } |
| 291 | |
| 292 | isMultiZeros := true |
| 293 | var isInvalidVersion, err = semverCompare("< 1.2.3 || 20.03.0", opts.Tag) |
| 294 | if err != nil || isInvalidVersion { |
| 295 | if opts.Tag != "latest" { |
| 296 | isMultiZeros = false |
| 297 | } |
| 298 | } |
| 299 | |
| 300 | maxZeros := 1 |
| 301 | if isMultiZeros { |
| 302 | maxZeros = opts.NumZeros |
| 303 | } |
| 304 | |
| 305 | zeroHostAddr := fmt.Sprintf("zero%d:%d", 1, zeroBasePort+opts.PortOffset) |
| 306 | zeros := []string{zeroHostAddr} |
| 307 | for i := 2; i <= maxZeros; i++ { |
| 308 | zeroHostAddr = fmt.Sprintf("zero%d:%d", i, zeroBasePort+opts.PortOffset+getOffset(i)) |
| 309 | zeros = append(zeros, zeroHostAddr) |
| 310 | } |
| 311 | |
| 312 | zerosOpt := strings.Join(zeros, ",") |
| 313 | |
| 314 | offset := getOffset(idx) |
| 315 | if (opts.PortOffset + offset) != 0 { |
| 316 | svc.Command += fmt.Sprintf(" -o %d", opts.PortOffset+offset) |
| 317 | } |
| 318 | svc.Command += fmt.Sprintf(" --my=%s:%d", svc.name, internalPort) |
| 319 | svc.Command += fmt.Sprintf(" --zero=%s", zerosOpt) |
| 320 | svc.Command += fmt.Sprintf(" --logtostderr -v=%d", opts.Verbosity) |
| 321 | |
| 322 | if opts.SnapshotAfter != "" { |
| 323 | raft = fmt.Sprintf("%s; %s", raft, opts.SnapshotAfter) |
| 324 | } |
| 325 | svc.Command += fmt.Sprintf(` --raft "%s"`, raft) |
| 326 | |
| 327 | // Don't assign idx, let it auto-assign. |
| 328 | // svc.Command += fmt.Sprintf(" --raft='idx=%d'", idx) |
| 329 | if opts.Vmodule != "" { |
| 330 | svc.Command += fmt.Sprintf(" --vmodule=%s", opts.Vmodule) |
| 331 | } |
| 332 | if opts.WhiteList { |
| 333 | svc.Command += ` --security "whitelist=0.0.0.0/0;"` |
| 334 | } |
| 335 | if opts.Acl { |
| 336 | svc.Command += ` --acl "secret-file=/secret/hmac;"` |
| 337 | svc.Volumes = append(svc.Volumes, volume{ |
no test coverage detected
searching dependent graphs…