diff --git a/CHANGELOG-6.md b/CHANGELOG-6.md index c43c5afd91..6d979e291a 100644 --- a/CHANGELOG-6.md +++ b/CHANGELOG-6.md @@ -6,6 +6,77 @@ and this project adheres to [Semantic Versioning](http://semver.org/spec/v2.0.0.html). ## [Unreleased] +## Unreleased + +### Changed +- Check subdues are now evaluated on a half open interval such that there +should be no unintended gaps between overlapping subdues. + +## [6.8.0] - 2022-08-24 + +### Changed +- Eventd now prioritizes keepalive events over other events in order to +mitigate the potential of keepalive event creation storms and mass agent +disconnects. + +### Added +- GlobalResource interface in core/v3 allows core/v3 resources to +be marked as global resources. +- Added `--api-serve-wait-time` backend flag to delay serving API requests +for a period of time after startup. +- Added `/ready` endpoint to the sensu-go API. Returns 200 when the API is ready +to serve traffic. +- Added `--agent-serve-wait-time` backend flag to delay accepting agent +connections for a period of time after startup. +- Added `/ready` endpoint to the agent listener. Returns 200 when the listener +is ready to accept agent connections. + +### Fixed +- Fixed a bug where sensu-backend could crash if the BackendIDGetter +encounters etcd client unavailability. + +## [6.7.5] - 2022-08-10 + +### Security +- Updated the package graphql-go/graphql to address [CVE-2022-37315](https://nvd.nist.gov/vuln/detail/CVE-2022-37315) + +## [6.7.4] - 2022-07-12 + +### Changed +- Upgraded CI Go version to 1.17.12 + +## [6.7.3] - 2022-07-07 + +### Changed +- Agents will no longer execute check requests with equal or older issued +timestamps than the issued timestamp for the last executed check request with +the same check name. + +## [6.7.2] - 2022-05-12 + +### Added +- Added the `etcd-unsafe-no-fsync` backend configuration option, +making it possible to run a sensu-backend with an embedded etcd node +for testing and development without placing lots of load on the file +system. + +### Fixed +- Print the correct round robin scheduler source (etcd or postgres). + +### Changed +- Upgraded etcd version from 3.5.2 to 3.5.4. + +## [6.7.1] - 2022-04-28 + +### Changed +- Cron scheduler now logs that it is stopping before it begins the process of +stopping. + +### Fixed +- Fixed several data races in schedulerd. +- Mitigate a data race in agentd sessions. + +## [6.7.0] - 2022-04-21 ### Added - Automatically create system namespace and backend entities. diff --git a/api/core/v2/time_window.go b/api/core/v2/time_window.go index 5d82e81460..2e6280af4d 100644 --- a/api/core/v2/time_window.go +++ b/api/core/v2/time_window.go @@ -257,8 +257,9 @@ func (t *TimeWindowRepeated) inAbsoluteTimeRange(actualTime time.Time) bool { if err != nil { return false } + endTime = endTime.Add(time.Second) - return actualTime.After(beginTime) && actualTime.Before(endTime) + return !actualTime.Before(beginTime) && actualTime.Before(endTime) } func (t *TimeWindowRepeated) inDayTimeRange(actualTime time.Time, weekday time.Weekday) bool { @@ -284,9 +285,10 @@ func (t *TimeWindowRepeated) inDayTimeRange(actualTime time.Time, weekday time.W thisWeekBegin = thisWeekBegin.AddDate(0, 0, dayOffset) thisWeekEnd := thisWeekBegin.Add(duration) + thisWeekEnd = thisWeekEnd.Add(time.Second) thisWeekEnd.In(beginTime.Location()) - return actualTime.After(thisWeekBegin) && actualTime.Before(thisWeekEnd) + return !actualTime.Before(thisWeekBegin) && actualTime.Before(thisWeekEnd) } func (t *TimeWindowRepeated) inTimeRange(actualTime time.Time) bool { @@ -310,8 +312,9 @@ func (t *TimeWindowRepeated) inTimeRange(actualTime time.Time) bool { todayBegin := time.Date(actualTime.Year(), actualTime.Month(), actualTime.Day(), beginHour, beginMin, beginSec, 0, beginTime.Location()) todayEnd := todayBegin.Add(duration) todayEnd = todayEnd.In(beginTime.Location()) + todayEnd = todayEnd.Add(time.Second) - return actualTime.After(todayBegin) && actualTime.Before(todayEnd) + return !actualTime.Before(todayBegin) && actualTime.Before(todayEnd) } func (t *TimeWindowRepeated) inWeekdayTimeRange(actualTime time.Time) bool { diff --git a/api/core/v2/time_window_test.go b/api/core/v2/time_window_test.go index b4465b2b92..df691d9f9b 100644 --- a/api/core/v2/time_window_test.go +++ b/api/core/v2/time_window_test.go @@ -275,12 +275,21 @@ func TestTimeWindowRepeated_InWindows(t *testing.T) { assert.NotNil(t, location) } +func parseTime(t *testing.T, s string) time.Time { + ts, err := time.Parse(time.RFC3339, s) + if err != nil { + t.Fatal(err) + } + return ts +} + func TestTimeWindowRepeated_InDayTimeRange(t *testing.T) { + tests := []struct { name string beginTime string endTime string - actualTime string + actualTime time.Time weekday time.Weekday expectedResult bool }{ @@ -288,107 +297,121 @@ func TestTimeWindowRepeated_InDayTimeRange(t *testing.T) { "simple positive", "2022-03-22T09:00:00+00:00", // tuesday "2022-03-22T11:00:00+00:00", - "2022-03-22T10:00:00+00:00", + parseTime(t, "2022-03-22T10:00:00+00:00"), time.Tuesday, true, }, { "simple negative lower hour", "2022-03-22T09:00:00+00:00", "2022-03-22T11:00:00+00:00", - "2022-03-22T08:00:00+00:00", + parseTime(t, "2022-03-22T08:00:00+00:00"), time.Tuesday, false, }, { "simple negative higher hour", "2022-03-22T09:00:00+00:00", "2022-03-22T11:00:00+00:00", - "2022-03-22T13:00:00+00:00", + parseTime(t, "2022-03-22T13:00:00+00:00"), time.Tuesday, false, }, { "simple negative lower minutes", "2022-03-22T09:00:00+00:00", "2022-03-22T11:00:00+00:00", - "2022-03-22T08:59:00+00:00", + parseTime(t, "2022-03-22T08:59:00+00:00"), time.Tuesday, false, }, { "simple negative higher minutes", "2022-03-22T09:00:00+00:00", "2022-03-22T11:00:00+00:00", - "2022-03-22T11:01:00+00:00", + parseTime(t, "2022-03-22T11:01:00+00:00"), time.Tuesday, false, }, { "simple negative lower seconds", "2022-03-22T09:00:00+00:00", "2022-03-22T11:00:00+00:00", - "2022-03-22T08:59:59+00:00", + parseTime(t, "2022-03-22T08:59:59+00:00"), time.Tuesday, false, }, { "simple negative higher seconds", "2022-03-22T09:00:00+00:00", "2022-03-22T11:00:00+00:00", - "2022-03-22T11:00:01+00:00", + parseTime(t, "2022-03-22T11:00:01+00:00"), time.Tuesday, false, }, { "simple negative different day before", "2022-03-22T09:00:00+00:00", "2022-03-22T11:00:00+00:00", - "2022-03-21T10:00:00+00:00", // monday + parseTime(t, "2022-03-21T10:00:00+00:00"), // monday time.Tuesday, false, }, { "simple negative different day after", "2022-03-22T09:00:00+00:00", "2022-03-22T11:00:00+00:00", - "2022-03-23T10:00:00+00:00", // wednesday + parseTime(t, "2022-03-23T10:00:00+00:00"), // wednesday time.Tuesday, false, }, { "positive next week", "2022-03-22T09:00:00-07:00", "2022-03-22T11:00:00-07:00", - "2022-03-29T10:00:00-07:00", // wednesday + parseTime(t, "2022-03-29T10:00:00-07:00"), // wednesday time.Tuesday, true, }, { "negative next week before", "2022-03-22T09:00:00-07:00", "2022-03-22T11:00:00-07:00", - "2022-03-27T10:00:00-07:00", // wednesday + parseTime(t, "2022-03-27T10:00:00-07:00"), // wednesday time.Tuesday, false, }, { "negative next week after", "2022-03-22T09:00:00-07:00", "2022-03-22T11:00:00-07:00", - "2022-03-30T10:00:00-07:00", // wednesday + parseTime(t, "2022-03-30T10:00:00-07:00"), // wednesday time.Tuesday, false, }, { "positive next week different time offset", "2022-03-22T09:00:00+00:00", "2022-03-22T11:00:00+00:00", - "2022-03-29T06:00:00-04:00", // wednesday + parseTime(t, "2022-03-29T06:00:00-04:00"), // wednesday time.Tuesday, true, }, { "positive multi days", "2022-03-22T09:00:00+00:00", "2022-03-24T11:00:00+00:00", - "2022-03-30T06:00:00-04:00", // wednesday + parseTime(t, "2022-03-30T06:00:00-04:00"), // wednesday time.Tuesday, true, }, { "negative previous week", "2022-03-22T09:00:00-04:00", "2022-03-22T11:00:00-04:00", - "2022-03-15T10:00:00-04:00", // tuesday + parseTime(t, "2022-03-15T10:00:00-04:00"), // tuesday time.Tuesday, false, + }, { + "GH-4847 lower bound day time range", + "2022-03-22T09:00:00+00:00", + "2022-03-22T11:00:00+00:00", + parseTime(t, "2022-03-22T09:00:00+00:00"), + time.Tuesday, + true, + }, { + "GH-4847 upper bound day time range", + "2022-03-22T09:00:00+00:00", + "2022-03-22T11:00:00+00:00", + parseTime(t, "2022-03-22T11:00:01+00:00").Add(-1 * time.Nanosecond), + time.Tuesday, + true, }, } @@ -399,10 +422,7 @@ func TestTimeWindowRepeated_InDayTimeRange(t *testing.T) { End: test.endTime, } - actualTime, err := time.Parse(time.RFC3339, test.actualTime) - require.NoError(t, err) - - assert.Equal(t, test.expectedResult, window.inDayTimeRange(actualTime, test.weekday)) + assert.Equal(t, test.expectedResult, window.inDayTimeRange(test.actualTime, test.weekday)) }) } } @@ -412,51 +432,63 @@ func TestTimeWindowRepeated_InTimeRange(t *testing.T) { name string beginTime string endTime string - actualTime string + actualTime time.Time expectedResult bool }{ { "simple positive", "2022-03-22T09:00:00+00:00", // tuesday "2022-03-22T11:00:00+00:00", - "2022-03-22T10:00:00+00:00", + parseTime(t, "2022-03-22T10:00:00+00:00"), true, }, { "negative before valid times", "2022-03-22T09:00:00-07:00", // tuesday "2022-03-22T11:00:00-07:00", - "2022-01-12T10:00:00-07:00", + parseTime(t, "2022-01-12T10:00:00-07:00"), false, }, { "simple negative before", "2022-03-22T09:00:00+00:00", // tuesday "2022-03-22T11:00:00+00:00", - "2022-03-22T08:00:00+00:00", + parseTime(t, "2022-03-22T08:00:00+00:00"), false, }, { "simple negative after", "2022-03-22T09:00:00+00:00", // tuesday "2022-03-22T11:00:00+00:00", - "2022-03-22T11:05:00+00:00", + parseTime(t, "2022-03-22T11:05:00+00:00"), false, }, { "positive after different day", "2022-03-22T09:00:00-07:00", // tuesday "2022-03-22T11:00:00-07:00", - "2023-01-12T10:00:00-07:00", + parseTime(t, "2023-01-12T10:00:00-07:00"), true, }, { "negative before different day", "2022-03-22T09:00:00-07:00", // tuesday "2022-03-22T11:00:00-07:00", - "2021-01-12T12:00:00-07:00", + parseTime(t, "2021-01-12T12:00:00-07:00"), false, }, { "negative after different day", "2022-03-22T09:00:00-07:00", // tuesday "2022-03-22T11:00:00-07:00", - "2023-01-12T08:59:59-07:00", + parseTime(t, "2023-01-12T08:59:59-07:00"), false, + }, { + "GH-4847 lower bound time range", + "2022-03-22T09:00:00+00:00", // tuesday + "2022-03-22T11:00:00+00:00", + parseTime(t, "2022-03-22T09:00:00+00:00"), + true, + }, { + "GH-4847 upper bound time range", + "2022-03-22T09:00:00+00:00", // tuesday + "2022-03-22T11:00:00+00:00", + parseTime(t, "2022-03-22T11:00:01+00:00").Add(-1 * time.Nanosecond), + true, }, } @@ -467,10 +499,7 @@ func TestTimeWindowRepeated_InTimeRange(t *testing.T) { End: test.endTime, } - actualTime, err := time.ParseInLocation(time.RFC3339, test.actualTime, time.UTC) - require.NoError(t, err) - - assert.Equal(t, test.expectedResult, window.inTimeRange(actualTime)) + assert.Equal(t, test.expectedResult, window.inTimeRange(test.actualTime)) }) } }