In Jackson 2.18.x, EXISTING_PROPERTY type info combined with the no-arg
@JsonIgnoreProperties causes the triggerType discriminator field to be
silently excluded from the serialized JSON. When the server then tries to
deserialize the POST body for /api/notification/rule, Jackson cannot find
triggerType and throws "missing type id property 'triggerType'", resulting
in a 500 for NotificationEdgeTest.testNotificationRule.
Fix by:
1. Adding @JsonProperty("triggerType") to force the field into normal bean
serialization, overriding any suppression by the type info machinery.
2. Replacing the no-arg @JsonIgnoreProperties with @JsonIgnoreProperties(
ignoreUnknown = true) so unknown properties are ignored rather than
causing errors (e.g. for forward compatibility).
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
Introduces a per-day quota derived from the monthly limit using a
configurable peak-days multiplier (default 3):
dailyThreshold = monthlyThreshold * peakDays * DAY_MS / monthDurationMs
A tenant with a 10M/month transport quota is allowed up to ~1M messages
per day (3× daily fair-share). Exceeding the daily limit disables the
feature for that day; it auto-recovers at the next day boundary without
affecting the monthly cumulative counter.
Changes:
- SchedulerUtils: add getStartOfCurrentDay()
- DefaultTenantProfileConfiguration: add dailyPeakDays field (default 3)
- BaseApiUsageState: add currentDayValues map, currentDayTs tracking,
setDay() reset, setDaily/getDaily accessors, daily fields in
StatsCalculationResult
- TenantApiUsageState: add getDailyThreshold / getDailyWarnThreshold,
enforce both monthly and daily thresholds in checkStateUpdatedDueToThreshold
- DefaultTbApiUsageStateService: detect day rollover, write Daily timeseries
entries, restore daily values from timeseries on startup
- TenantApiUsageStateDailyTest: 6 unit tests covering threshold formula,
unlimited passthrough, warn fraction, and peakDays configurability
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
Introduce TbCallback-based finish notification for submitted jobs,
allowing callers to be notified when a job reaches a terminal state
(COMPLETED, FAILED, CANCELLED) via cluster-wide ComponentLifecycleMsg
broadcast.
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>