2023-04-10 15:36:59 +00:00
|
|
|
# Copyright (c) HashiCorp, Inc.
|
|
|
|
# SPDX-License-Identifier: MPL-2.0
|
|
|
|
|
2022-07-12 22:44:24 +00:00
|
|
|
rules:
|
|
|
|
- id: "no-time-in-fsm"
|
|
|
|
patterns:
|
|
|
|
- pattern: time.Now()
|
|
|
|
|
|
|
|
# Metric state is local to the server and therefore must use time.
|
|
|
|
- pattern-not-inside: |
|
|
|
|
defer metrics.MeasureSince(...)
|
|
|
|
|
2022-10-06 14:59:53 +00:00
|
|
|
# Metric state is local to the server and therefore must use time.
|
|
|
|
- pattern-not-inside: |
|
|
|
|
defer metrics.MeasureSinceWithLabels(...)
|
|
|
|
|
2022-07-12 22:44:24 +00:00
|
|
|
# The timetable's whole point is to roughly track timestamps for Raft log
|
|
|
|
# indexes, so it must use time.
|
|
|
|
- pattern-not-inside: |
|
|
|
|
$N.timetable.Witness(...)
|
|
|
|
message: |
|
|
|
|
time.Now() should not be called from within the Server's FSM. Apply Raft
|
|
|
|
log messages to the State Store must be deterministic so that each server
|
|
|
|
contains exactly the same state. Since time drifts between nodes, it must
|
|
|
|
be set before the Raft log message is applied so that all Raft members
|
|
|
|
see the same timestamp.
|
|
|
|
languages:
|
|
|
|
- "go"
|
|
|
|
severity: "WARNING"
|
|
|
|
paths:
|
|
|
|
include:
|
|
|
|
- "nomad/fsm.*"
|
|
|
|
- "nomad/state/state_store.*"
|