[OpenNMS/opennms] 9b7432: NMS-20283: Count notifications, not deliveries, in...

OpenNMS Machine User via opennms-cvs <[email protected]>
Newsgroups gmane.network.opennms.cvs
Message-ID <OpenNMS/opennms/push/refs/heads/merge-foundation/foundation-2025-to-foundation-2026/[email protected]>
  Branch: refs/heads/merge-foundation/foundation-2025-to-foundation-2026
  Home:   https://github.com/OpenNMS/opennms
  Commit: 9b7432c5311f09a7af0de97f5ddb6e0d8c7f397e
      https://github.com/OpenNMS/opennms/commit/9b7432c5311f09a7af0de97f5ddb6e0d8c7f397e
  Author: Marshall Massengill <[email protected]>
  Date:   2026-09-02 (Wed, 02 Sep 2026)

  Changed paths:
    M opennms-webapp-rest/src/main/java/org/opennms/web/rest/v1/NotificationRestService.java
    M opennms-webapp-rest/src/test/java/org/opennms/web/rest/v1/NotificationRestServiceIT.java

  Log Message:
  -----------
  NMS-20283: Count notifications, not deliveries, in the notification summary (#8834)

/notifications/summary derived userUnacknowledgedCount, teamUnacknowledgedCount
and the newest-notifications list from a criteria join to usersNotified, and
countMatching counts join rows. A notification carries one usersNotified row per
notification method, so a user notified by both email and pager was counted
twice and appeared twice in the list. On a real install the personal count came
back larger than the total unacknowledged count, and the header badge disagreed
with the notification list it links to.

Marking the three criteria distinct() moves the join into a subquery on the
notification id, so both the counts and the list are per notification.

This changes a published REST field: installs whose users have several
notification methods configured will see these counts drop to the real number
of notifications.


  Commit: 3e9db71ca787c270055291642bfc623499fb22d2
      https://github.com/OpenNMS/opennms/commit/3e9db71ca787c270055291642bfc623499fb22d2
  Author: Scott Theleman <[email protected]>
  Date:   2026-09-02 (Wed, 02 Sep 2026)

  Changed paths:
    M ui/packages/onms-ui/README.md
    M ui/packages/onms-ui/src/components/OnmsDatePicker.vue
    M ui/packages/onms-ui/src/index.ts
    M ui/packages/onms-ui/src/types.ts
    M ui/src/components/AdhocGraphs/AdhocChartToolbar.vue
    M ui/src/components/AdhocGraphs/AdhocGraphBuilder.vue
    M ui/src/components/AdhocGraphs/utils/adhocUrlState.ts
    A ui/src/components/Common/TimeControls.vue
    A ui/src/components/Common/utils/timeRangeOptions.ts
    M ui/src/components/Resources/Graphs.vue
    R ui/src/components/Resources/TimeControls.vue
    R ui/src/components/Resources/utils/timeRangeOptions.ts
    A ui/tests/components/Common/TimeControls.test.ts
    A ui/tests/components/Common/timeRangeOptions.test.ts
    R ui/tests/components/Resources/timeRangeOptions.test.ts
    M ui/tests/onms-ui/OnmsDatePicker.test.ts

  Log Message:
  -----------
  NMS-20280: Time support for OnmsDatePicker, and TimeControls fixes (#8835)

* NMS-20280: Time support for OnmsDatePicker, and TimeControls fixes


  Commit: 1bef94ff6e387dcf999ea308b68a80909bb1e351
      https://github.com/OpenNMS/opennms/commit/1bef94ff6e387dcf999ea308b68a80909bb1e351
  Author: CI/CD System <[email protected]>
  Date:   2026-09-02 (Wed, 02 Sep 2026)

  Changed paths:
    M opennms-webapp-rest/src/main/java/org/opennms/web/rest/v1/NotificationRestService.java
    M opennms-webapp-rest/src/test/java/org/opennms/web/rest/v1/NotificationRestServiceIT.java

  Log Message:
  -----------
  Merge remote-tracking branch 'origin/foundation-2024' into foundation-2025


  Commit: 9c3303b08fce9589726ece58a317b5065ee1c0aa
      https://github.com/OpenNMS/opennms/commit/9c3303b08fce9589726ece58a317b5065ee1c0aa
  Author: Marshall Massengill <[email protected]>
  Date:   2026-09-02 (Wed, 02 Sep 2026)

  Changed paths:
    M features/bsm/rest/api/pom.xml
    M features/bsm/rest/api/src/main/java/org/opennms/web/rest/v2/bsm/model/BusinessServiceListDTO.java
    M features/bsm/rest/api/src/main/java/org/opennms/web/rest/v2/bsm/model/BusinessServiceRequestDTO.java
    M features/bsm/rest/api/src/main/java/org/opennms/web/rest/v2/bsm/model/BusinessServiceResponseDTO.java
    M features/bsm/rest/api/src/main/java/org/opennms/web/rest/v2/bsm/model/MapFunctionDTO.java
    M features/bsm/rest/api/src/main/java/org/opennms/web/rest/v2/bsm/model/ReduceFunctionDTO.java
    M features/bsm/rest/api/src/main/java/org/opennms/web/rest/v2/bsm/model/edge/AbstractEdgeRequestDTO.java
    M features/bsm/rest/api/src/main/java/org/opennms/web/rest/v2/bsm/model/edge/AbstractEdgeResponseDTO.java
    M features/bsm/rest/api/src/main/java/org/opennms/web/rest/v2/bsm/model/edge/ApplicationEdgeRequestDTO.java
    M features/bsm/rest/api/src/main/java/org/opennms/web/rest/v2/bsm/model/edge/ApplicationEdgeResponseDTO.java
    M features/bsm/rest/api/src/main/java/org/opennms/web/rest/v2/bsm/model/edge/ApplicationResponseDTO.java
    M features/bsm/rest/api/src/main/java/org/opennms/web/rest/v2/bsm/model/edge/ChildEdgeRequestDTO.java
    M features/bsm/rest/api/src/main/java/org/opennms/web/rest/v2/bsm/model/edge/ChildEdgeResponseDTO.java
    M features/bsm/rest/api/src/main/java/org/opennms/web/rest/v2/bsm/model/edge/IpServiceEdgeRequestDTO.java
    M features/bsm/rest/api/src/main/java/org/opennms/web/rest/v2/bsm/model/edge/IpServiceEdgeResponseDTO.java
    M features/bsm/rest/api/src/main/java/org/opennms/web/rest/v2/bsm/model/edge/IpServiceResponseDTO.java
    M features/bsm/rest/api/src/main/java/org/opennms/web/rest/v2/bsm/model/edge/ReductionKeyEdgeRequestDTO.java
    M features/bsm/rest/api/src/main/java/org/opennms/web/rest/v2/bsm/model/edge/ReductionKeyEdgeResponseDTO.java
    M features/bsm/rest/api/src/main/java/org/opennms/web/rest/v2/bsm/model/meta/FunctionMetaDTO.java
    M features/bsm/rest/api/src/main/java/org/opennms/web/rest/v2/bsm/model/meta/FunctionMetaListDTO.java
    M features/bsm/rest/api/src/main/java/org/opennms/web/rest/v2/bsm/model/meta/ParameterMetaDTO.java
    M features/bsm/rest/impl/pom.xml
    M features/bsm/rest/impl/src/main/java/org/opennms/web/rest/v2/bsm/BusinessServiceRestService.java
    M features/geolocation/rest/pom.xml
    M features/geolocation/rest/src/main/java/org/opennms/web/rest/v2/GeolocationQueryDTO.java
    M features/geolocation/rest/src/main/java/org/opennms/web/rest/v2/GeolocationRestService.java
    M features/measurements/api/pom.xml
    M features/measurements/api/src/main/java/org/opennms/netmgt/measurements/model/Expression.java
    M features/measurements/api/src/main/java/org/opennms/netmgt/measurements/model/FilterDef.java
    M features/measurements/api/src/main/java/org/opennms/netmgt/measurements/model/FilterMetaData.java
    M features/measurements/api/src/main/java/org/opennms/netmgt/measurements/model/FilterParamDef.java
    M features/measurements/api/src/main/java/org/opennms/netmgt/measurements/model/FilterParamMetaData.java
    M features/measurements/api/src/main/java/org/opennms/netmgt/measurements/model/QueryMetadata.java
    M features/measurements/api/src/main/java/org/opennms/netmgt/measurements/model/QueryNode.java
    M features/measurements/api/src/main/java/org/opennms/netmgt/measurements/model/QueryRequest.java
    M features/measurements/api/src/main/java/org/opennms/netmgt/measurements/model/QueryResource.java
    M features/measurements/api/src/main/java/org/opennms/netmgt/measurements/model/QueryResponse.java
    M features/measurements/api/src/main/java/org/opennms/netmgt/measurements/model/Source.java
    M features/measurements/rest/pom.xml
    M features/measurements/rest/src/main/java/org/opennms/web/rest/v1/MeasurementsRestService.java
    M features/rest/model/pom.xml
    M features/rest/model/src/main/java/org/opennms/web/rest/model/v2/BridgeElementNodeDTO.java
    M features/rest/model/src/main/java/org/opennms/web/rest/model/v2/BridgeLinkNodeDTO.java
    M features/rest/model/src/main/java/org/opennms/web/rest/model/v2/BridgeLinkRemoteNodeDTO.java
    M features/rest/model/src/main/java/org/opennms/web/rest/model/v2/CdpElementNodeDTO.java
    M features/rest/model/src/main/java/org/opennms/web/rest/model/v2/CdpLinkNodeDTO.java
    M features/rest/model/src/main/java/org/opennms/web/rest/model/v2/EnlinkdDTO.java
    M features/rest/model/src/main/java/org/opennms/web/rest/model/v2/IsisElementNodeDTO.java
    M features/rest/model/src/main/java/org/opennms/web/rest/model/v2/IsisLinkNodeDTO.java
    M features/rest/model/src/main/java/org/opennms/web/rest/model/v2/LldpElementNodeDTO.java
    M features/rest/model/src/main/java/org/opennms/web/rest/model/v2/LldpLinkNodeDTO.java
    M features/rest/model/src/main/java/org/opennms/web/rest/model/v2/OspfElementNodeDTO.java
    M features/rest/model/src/main/java/org/opennms/web/rest/model/v2/OspfLinkNodeDTO.java
    M features/status/rest/pom.xml
    M features/status/rest/src/main/java/org/opennms/web/rest/v2/status/StatusRestService.java
    M features/status/rest/src/main/java/org/opennms/web/rest/v2/status/model/ApplicationDTOList.java
    M features/status/rest/src/main/java/org/opennms/web/rest/v2/status/model/BusinessServiceDTOList.java
    M features/status/rest/src/main/java/org/opennms/web/rest/v2/status/model/NodeDTOList.java
    M features/status/rest/src/main/java/org/opennms/web/rest/v2/status/model/StatusDTO.java
    M opennms-webapp-rest/src/main/java/org/opennms/web/rest/v1/AcknowledgmentRestService.java
    M opennms-webapp-rest/src/main/java/org/opennms/web/rest/v1/AlarmRestService.java
    M opennms-webapp-rest/src/main/java/org/opennms/web/rest/v1/AlarmStatsRestService.java
    M opennms-webapp-rest/src/main/java/org/opennms/web/rest/v1/AssetRecordResource.java
    M opennms-webapp-rest/src/main/java/org/opennms/web/rest/v1/AssetSuggestionsRestService.java
    M opennms-webapp-rest/src/main/java/org/opennms/web/rest/v1/AvailabilityRestService.java
    M opennms-webapp-rest/src/main/java/org/opennms/web/rest/v1/CategoryRestService.java
    M opennms-webapp-rest/src/main/java/org/opennms/web/rest/v1/ConfigRestService.java
    M opennms-webapp-rest/src/main/java/org/opennms/web/rest/v1/EventRestService.java
    M opennms-webapp-rest/src/main/java/org/opennms/web/rest/v1/FilesystemRestService.java
    M opennms-webapp-rest/src/main/java/org/opennms/web/rest/v1/ForeignSourceConfigRestService.java
    M opennms-webapp-rest/src/main/java/org/opennms/web/rest/v1/ForeignSourceRestService.java
    M opennms-webapp-rest/src/main/java/org/opennms/web/rest/v1/GraphRestService.java
    M opennms-webapp-rest/src/main/java/org/opennms/web/rest/v1/GroupRestService.java
    M opennms-webapp-rest/src/main/java/org/opennms/web/rest/v1/HardwareInventoryResource.java
    M opennms-webapp-rest/src/main/java/org/opennms/web/rest/v1/HeatMapRestService.java
    M opennms-webapp-rest/src/main/java/org/opennms/web/rest/v1/IfServicesRestService.java
    M opennms-webapp-rest/src/main/java/org/opennms/web/rest/v1/InfoRestService.java
    M opennms-webapp-rest/src/main/java/org/opennms/web/rest/v1/KscRestService.java
    M opennms-webapp-rest/src/main/java/org/opennms/web/rest/v1/LogRestService.java
    M opennms-webapp-rest/src/main/java/org/opennms/web/rest/v1/MinionRestService.java
    M opennms-webapp-rest/src/main/java/org/opennms/web/rest/v1/MonitoringLocationsRestService.java
    M opennms-webapp-rest/src/main/java/org/opennms/web/rest/v1/NodeRestService.java
    M opennms-webapp-rest/src/main/java/org/opennms/web/rest/v1/NotificationRestService.java
    M opennms-webapp-rest/src/main/java/org/opennms/web/rest/v1/OnmsIpInterfaceResource.java
    M opennms-webapp-rest/src/main/java/org/opennms/web/rest/v1/OnmsMonitoredServiceResource.java
    M opennms-webapp-rest/src/main/java/org/opennms/web/rest/v1/OnmsSnmpInterfaceResource.java
    M opennms-webapp-rest/src/main/java/org/opennms/web/rest/v1/OutageRestService.java
    M opennms-webapp-rest/src/main/java/org/opennms/web/rest/v1/RequisitionNamesRestService.java
    M opennms-webapp-rest/src/main/java/org/opennms/web/rest/v1/RequisitionRestService.java
    M opennms-webapp-rest/src/main/java/org/opennms/web/rest/v1/ResourceRestService.java
    M opennms-webapp-rest/src/main/java/org/opennms/web/rest/v1/ScheduledOutagesRestService.java
    M opennms-webapp-rest/src/main/java/org/opennms/web/rest/v1/SnmpConfigRestService.java
    M opennms-webapp-rest/src/main/java/org/opennms/web/rest/v1/TimelineRestService.java
    M opennms-webapp-rest/src/main/java/org/opennms/web/rest/v1/UserRestService.java
    M opennms-webapp-rest/src/main/java/org/opennms/web/rest/v1/WebAssetsRestService.java
    M opennms-webapp-rest/src/main/java/org/opennms/web/rest/v1/WhoamiRestService.java
    M opennms-webapp-rest/src/main/java/org/opennms/web/rest/v1/config/AgentConfigurationResource.java
    M opennms-webapp-rest/src/main/java/org/opennms/web/rest/v1/config/DataCollectionConfigResource.java
    A opennms-webapp-rest/src/main/java/org/opennms/web/rest/v1/config/DataCollectionLookupResponse.java
    A opennms-webapp-rest/src/main/java/org/opennms/web/rest/v1/config/DataCollectionStatusResponse.java
    M opennms-webapp-rest/src/main/java/org/opennms/web/rest/v1/config/DatetimeformatConfig.java
    M opennms-webapp-rest/src/main/java/org/opennms/web/rest/v1/config/EmailNorthbounderConfigurationResource.java
    M opennms-webapp-rest/src/main/java/org/opennms/web/rest/v1/config/JavamailConfigurationResource.java
    M opennms-webapp-rest/src/main/java/org/opennms/web/rest/v1/config/JmxDataCollectionConfigResource.java
    M opennms-webapp-rest/src/main/java/org/opennms/web/rest/v1/config/SnmpConfigurationResource.java
    M opennms-webapp-rest/src/main/java/org/opennms/web/rest/v1/config/SnmpTrapNorthbounderConfigurationResource.java
    M opennms-webapp-rest/src/main/java/org/opennms/web/rest/v1/config/SyslogNorthbounderConfigurationResource.java
    M opennms-webapp-rest/src/main/java/org/opennms/web/rest/v1/config/TicketerConfig.java
    M opennms-webapp-rest/src/main/java/org/opennms/web/rest/v1/config/TrapdConfigurationResource.java
    A opennms-webapp-rest/src/main/java/org/opennms/web/rest/v1/model/AckOnlyForm.java
    A opennms-webapp-rest/src/main/java/org/opennms/web/rest/v1/model/AcknowledgmentForm.java
    A opennms-webapp-rest/src/main/java/org/opennms/web/rest/v1/model/AlarmAckForm.java
    A opennms-webapp-rest/src/main/java/org/opennms/web/rest/v1/model/AvailabilityDataResponse.java
    A opennms-webapp-rest/src/main/java/org/opennms/web/rest/v1/model/GroupUpdateForm.java
    A opennms-webapp-rest/src/main/java/org/opennms/web/rest/v1/model/UserUpdateForm.java
    A opennms-webapp-rest/src/main/java/org/opennms/web/rest/v1/model/WhoamiResponse.java
    M opennms-webapp-rest/src/main/java/org/opennms/web/rest/v2/AbstractDaoRestServiceWithDTO.java
    M opennms-webapp-rest/src/main/java/org/opennms/web/rest/v2/AlarmRestService.java
    M opennms-webapp-rest/src/main/java/org/opennms/web/rest/v2/ApplicationRestService.java
    M opennms-webapp-rest/src/main/java/org/opennms/web/rest/v2/ApplicationStatusRestService.java
    M opennms-webapp-rest/src/main/java/org/opennms/web/rest/v2/DiscoveryRestService.java
    M opennms-webapp-rest/src/main/java/org/opennms/web/rest/v2/EventRestService.java
    M opennms-webapp-rest/src/main/java/org/opennms/web/rest/v2/IfServiceRestService.java
    M opennms-webapp-rest/src/main/java/org/opennms/web/rest/v2/IpInterfaceRestService.java
    M opennms-webapp-rest/src/main/java/org/opennms/web/rest/v2/MenuRestService.java
    M opennms-webapp-rest/src/main/java/org/opennms/web/rest/v2/MinionRestService.java
    M opennms-webapp-rest/src/main/java/org/opennms/web/rest/v2/MonitoringLocationRestService.java
    M opennms-webapp-rest/src/main/java/org/opennms/web/rest/v2/MonitoringSystemsRestService.java
    M opennms-webapp-rest/src/main/java/org/opennms/web/rest/v2/NewsFeedRestService.java
    M opennms-webapp-rest/src/main/java/org/opennms/web/rest/v2/NodeCategoriesRestService.java
    M opennms-webapp-rest/src/main/java/org/opennms/web/rest/v2/NodeIpInterfacesRestService.java
    M opennms-webapp-rest/src/main/java/org/opennms/web/rest/v2/NodeMonitoredServiceRestService.java
    M opennms-webapp-rest/src/main/java/org/opennms/web/rest/v2/NodeRestService.java
    M opennms-webapp-rest/src/main/java/org/opennms/web/rest/v2/NodeSnmpInterfacesRestService.java
    M opennms-webapp-rest/src/main/java/org/opennms/web/rest/v2/NotificationRestService.java
    M opennms-webapp-rest/src/main/java/org/opennms/web/rest/v2/OutageRestService.java
    M opennms-webapp-rest/src/main/java/org/opennms/web/rest/v2/ProvisiondStatusRestService.java
    M opennms-webapp-rest/src/main/java/org/opennms/web/rest/v2/SituationsRestService.java
    M opennms-webapp-rest/src/main/java/org/opennms/web/rest/v2/SnmpInterfaceRestService.java
    M opennms-webapp-rest/src/main/java/org/opennms/web/rest/v2/SnmpMetadataRestService.java
    M opennms-webapp-rest/src/main/java/org/opennms/web/rest/v2/TopologyAssetDTO.java
    M opennms-webapp-rest/src/main/java/org/opennms/web/rest/v2/TopologyAssetRestService.java
    M opennms-webapp-rest/src/main/java/org/opennms/web/rest/v2/TopologyViewDTO.java
    M opennms-webapp-rest/src/main/java/org/opennms/web/rest/v2/TopologyViewRestService.java
    M opennms-webapp-rest/src/main/java/org/opennms/web/rest/v2/UserDefinedLinkRestService.java
    M opennms-webapp-rest/src/main/java/org/opennms/web/rest/v2/api/DataCollectionConfRestApi.java
    M opennms-webapp-rest/src/main/java/org/opennms/web/rest/v2/api/EventConfRestApi.java
    M opennms-webapp-rest/src/main/java/org/opennms/web/rest/v2/api/EventRestApi.java
    M opennms-webapp-rest/src/main/java/org/opennms/web/rest/v2/api/NodeLinkRestApi.java
    M opennms-webapp-rest/src/main/java/org/opennms/web/rest/v2/api/SnmpConfigRestApi.java
    M opennms-webapp-rest/src/main/java/org/opennms/web/rest/v2/api/TrapdRestApi.java
    M opennms-webapp-rest/src/main/java/org/opennms/web/rest/v2/infopanel/InfoPanelItem.java
    M opennms-webapp-rest/src/main/java/org/opennms/web/rest/v2/infopanel/TopologyInfopanelRestService.java
    M opennms-webapp-rest/src/main/java/org/opennms/web/rest/v2/model/AddEventConfSourceRequest.java
    A opennms-webapp-rest/src/main/java/org/opennms/web/rest/v2/model/AlarmMemoRequest.java
    A opennms-webapp-rest/src/main/java/org/opennms/web/rest/v2/model/AlarmPropertyUpdateRequest.java
    A opennms-webapp-rest/src/main/java/org/opennms/web/rest/v2/model/DataCollectionConfErrorResponse.java
    A opennms-webapp-rest/src/main/java/org/opennms/web/rest/v2/model/DataCollectionConfUploadResponse.java
    A opennms-webapp-rest/src/main/java/org/opennms/web/rest/v2/model/DataCollectionMibGroupPageResponse.java
    A opennms-webapp-rest/src/main/java/org/opennms/web/rest/v2/model/DataCollectionResourceTypePageResponse.java
    A opennms-webapp-rest/src/main/java/org/opennms/web/rest/v2/model/DataCollectionSystemDefPageResponse.java
    A opennms-webapp-rest/src/main/java/org/opennms/web/rest/v2/model/EventConfErrorResponse.java
    M opennms-webapp-rest/src/main/java/org/opennms/web/rest/v2/model/EventConfEventDeletePayload.java
    M opennms-webapp-rest/src/main/java/org/opennms/web/rest/v2/model/EventConfEventEditRequest.java
    A opennms-webapp-rest/src/main/java/org/opennms/web/rest/v2/model/EventConfEventPageResponse.java
    A opennms-webapp-rest/src/main/java/org/opennms/web/rest/v2/model/EventConfSourceCreatedResponse.java
    M opennms-webapp-rest/src/main/java/org/opennms/web/rest/v2/model/EventConfSourceDto.java
    A opennms-webapp-rest/src/main/java/org/opennms/web/rest/v2/model/EventConfSourcePageResponse.java
    A opennms-webapp-rest/src/main/java/org/opennms/web/rest/v2/model/EventConfUploadResponse.java
    A opennms-webapp-rest/src/main/java/org/opennms/web/rest/v2/model/NodeServiceTypeDto.java
    M opennms-webapp-rest/src/main/java/org/opennms/web/rest/v2/model/SnmpCollectionCreateSourceDto.java
    M opennms-webapp-rest/src/main/java/org/opennms/web/rest/v2/model/SnmpCollectionSourceNamesAndIdsResponse.java
    A opennms-webapp-rest/src/main/java/org/opennms/web/rest/v2/model/SnmpCollectionSourcePageResponse.java
    M opennms-webapp-rest/src/main/java/org/opennms/web/rest/v2/model/SnmpConfigProfileDto.java
    M opennms-webapp-rest/src/main/java/org/opennms/web/rest/v2/model/Snmpv3UserDto.java
    M opennms-webapp-rest/src/main/java/org/opennms/web/rest/v2/model/SourceNameDto.java
    M opennms-webapp-rest/src/main/java/org/opennms/web/rest/v2/model/TrapdConfigDto.java

  Log Message:
  -----------
  NMS-20263: Improve shipped OpenAPI/Swagger Docs (#8817)

* NMS-20263: Add swagger-annotations to the ReST modules that lacked it

Seven modules carry JAX-RS resources or their DTOs but had no
swagger-annotations dependency, so their operations could not be annotated
at all. Scope is provided: the jar already ships in the webapp's WEB-INF/lib.

* NMS-20263: Document the v2 ReST API with request and response schemas and examples

Every one of the 356 v2 operations now carries a summary, a unique
operationId, a request schema and example where it reads a body, and a
schema and example per reachable status code. Each was exercised against a
running instance and the annotations describe what it did, including where
that differs from what the code appears to intend.

Operations with a summary go from 93 to 355, response contents with a schema
from 65 of 610 to 682 of 693, and response examples from none to 653.
Generator-assigned operationIds such as createSpecific_14 drop from 213 to 5.
Sixty-seven operations carried duplicate parameter declarations, which is
invalid OpenAPI; none do now.

The generic collection operations come from AbstractDaoRestServiceWithDTO,
which is generic, so a single annotation there would give every DAO-backed
resource the same operationId and no per-family entity schema. Each concrete
resource instead declares delegating overrides that call super and carry only
swagger annotations. No runtime logic changes.

Handlers that assemble an ad-hoc Map have no type to reference, so this adds
documentation-only classes describing those shapes. The bsm response DTOs
that carry a custom @JsonSerialize are documented by example alone: swagger-core
2.1.12 introspects such serializers through a Jackson method removed after
2.12, which aborts document generation.

* NMS-20263: Document the v1 ReST API with request and response schemas and examples

All 310 v1 operations now carry a summary, a unique operationId, and a schema
and example per reachable status code, each verified against a running
instance. Operations with a summary go from 32 to 310, response contents with
a schema from 273 of 494 to 606 of 606, and response examples from none to 516.

Where behaviour and intent disagree, the annotations record the behaviour: v1
error bodies are text/plain even under a JSON @Produces, form-encoded keys are
bean property names rather than the hyphenated names the read endpoints emit,
several fields are XML attributes and are dropped if sent as elements, dates
are epoch milliseconds in JSON and ISO-8601 in XML from the same field, and a
node may be addressed either by database id or by foreignSource:foreignId.

The /config family is documented for the first time; several of its resources
carried no annotations at all. Its writes re-marshal the whole target file,
which is noted on the tag because it discards comments in the shipped etc XML.

The /measurements component schemas named properties the API rejects: those
model classes carry Jackson 1 annotations and JAXB names that the generator
cannot see, and three @XmlValue properties were missing from the schema
entirely, leaving no way to express an expression or a filter parameter value.
A request assembled purely from the corrected schema now succeeds.

* NMS-20263: Tighten the ReST API documentation and reconcile it with observed behaviour

Reviewer feedback was that the wording was too much and should state only what
is true. Every description now holds facts a reader can check against a running
instance. Advice, unmeasured performance claims, guesses at intent, appeals to
the reader and disclaimer-style negatives are gone, and the long tag overviews
are shorter. URL trees, parameter lists and enumerated values are untouched.

Rendered prose drops from 128969 to 118763 characters in v2 and from 156608 to
142234 in v1, roughly 24600 characters. Operation count, operationIds,
summaries, request and response schemas and every example are unchanged.

Four descriptions were wrong rather than merely wordy. All nine enlinkd DTO
pairs described both the create and the last-poll timestamp as a poll
timestamp. EventConfEventEditRequest said both members were optional while its
operation documents a 500 for a body carrying only `enabled`. The v1 event
publish description treated `uei` as required, contradicting the documented
empty-body 202. Nineteen literal newline escapes inside text blocks in the
heatmap descriptions rendered as a line break mid-sentence.

Seven places where a description and its response set disagreed are reconciled
against the instance rather than by deleting the prose. `GET /nodes/service-types`
answers 500 for an XML Accept, `PUT` and `DELETE /ipinterfaces/{id}` answer 400
for an ambiguous address, `POST /ksc` answers 415, `POST /events` does consume
`application/atom+xml`, and the three `/acks` reads answer 403 for a caller
holding none of the roles the filter chain requires, as the alarm reads already
documented. The status business-service list serializes as `businessservices`,
so the example that showed `business-services` was corrected; the sibling
`/business-services` list does emit the hyphenated key. Bridge elements are one
per discovered VLAN, with a single null-vlan entry when the device has no VLAN
table, not one per bridge base address.

* NMS-20263: Make the swagger annotation imports optional in the OSGi bundles

The swagger annotations have runtime retention, so adding them to classes
in bundle-packaged modules made bnd emit a mandatory Import-Package for
io.swagger.v3.oas.annotations and its subpackages. Sentinel does not ship
that bundle, so its feature resolution failed on
org.opennms.features.measurements.api and every sentinel smoke test timed
out waiting for a health check.

The annotations are only read at build time by opennms-openapi-docs, which
works off the compile classpath, so an optional import is enough. This
matches what opennms-config-model and features/events/api already do.

* NMS-20263: Correct inaccurate annotations found in an adversarial review

Every operation's documented status codes, error bodies and examples were
re-verified against the handlers, the shared helpers and the DAOs, with
read-only live probes where the code path was ambiguous. Fixes the claims
that did not survive:

- v1 error bodies: ~75 4xx/5xx responses across seven services declared
  application/json where OnmsRestService's helpers emit text/plain
- v2 Minion and MonitoringLocation JSON/XML PUT: an unknown id is not a
  404, saveOrUpdate inserts a new row and answers 204
- unknown query parameters in v1 node/interface/ifservices resources fail
  with 500 'Unknown entity: null' rather than being ignored; the v1
  minions filter 400 is likewise really a 500
- situations: unknown alarm ids fail with 500 rather than being dropped,
  the _s behaviour claim was wrong in both directions, the 403 examples
  now quote SecurityHelper's real messages, and the update/memo/journal/
  ticket operations document their reachable 403
- unreachable responses corrected: v1 whoami 204 (really 404), category
  availability 404 (rewrapped as 500), eventconf delete 400 (mapped to
  500), web-assets fallback 404 (broken list mutation, 500)
- wrong facts: KSC timespan list missing twelve valid values, the three
  datacollection child filters fall back to sorting by name rather than
  createdTime, wrong schema classes on the v1 trapd and datacollection
  config resources, kebab-case JSON keys on the snmp config resource,
  a malformed JSON example in GraphRestService, totalCount:null examples
  contradicted by JaxbListWrapper's count fallback, and ten
  datacollection operations missing their real 500 response
- the v1 trapd operationId no longer collides with the v2 one

The Jackson 2 @JsonProperty annotations added to the measurements model
for the OpenAPI generator are now named explicitly so a Jackson 2
consumer would serialize the real wire name 'value', and the new
com.fasterxml.jackson.annotation import on that bundle is optional, in
line with the swagger imports. Also drops two unused imports and an
unrelated license-header reflow.

* NMS-20263: Do not reference the trapd JAXB class as a response schema

Pointing the v1 trapd response at org.opennms.netmgt.config.trapd.TrapdConfiguration
broke document generation: swagger-core introspects the class with Jackson, which
rejects its conflicting array and List setters for snmpv3User. Document the
operation by example only, as the BSM responses with custom serializers already
are. The v2 TrapdConfigDto is not a substitute here because the v1 response
carries the XSD attribute names.

---------

Co-authored-by: Marshall Massengill <[email protected]>


  Commit: 1796bfe4d9e7c4660c675218f1497fa9c070c30a
      https://github.com/OpenNMS/opennms/commit/1796bfe4d9e7c4660c675218f1497fa9c070c30a
  Author: mershad-manesh <[email protected]>
  Date:   2026-09-02 (Wed, 02 Sep 2026)

  Changed paths:
    M core/ipc/sink/off-heap/src/main/java/org/opennms/core/ipc/sink/offheap/DataBlocksOffHeapQueue.java
    M core/ipc/sink/off-heap/src/main/java/org/opennms/core/ipc/sink/offheap/MemoryDataBlock.java
    M core/ipc/sink/off-heap/src/main/java/org/opennms/core/ipc/sink/offheap/OffHeapDataBlock.java
    A core/ipc/sink/off-heap/src/test/java/org/opennms/core/ipc/sink/offheap/DataBlocksOffHeapQueueBackpressureDeadlockTest.java
    A core/ipc/sink/off-heap/src/test/java/org/opennms/core/ipc/sink/offheap/DataBlocksOffHeapQueueDeadlockTest.java
    A core/ipc/sink/off-heap/src/test/java/org/opennms/core/ipc/sink/offheap/DataBlocksOffHeapQueueHeadEvictionRaceTest.java
    A core/ipc/sink/off-heap/src/test/java/org/opennms/core/ipc/sink/offheap/OffHeapDataBlockPrefetchPoolTest.java

  Log Message:
  -----------
  NMS-20271: Intermittent deadlock in DataBlocksOffHeapQueue during memory to off-heap transition (#8826)

* use a shared lock for backpressure

* NMS-20271: Fix the two stalls in the off-heap dispatch queue

A consumer crossing the memory to off-heap transition wedges the whole
queue, and switching the DataBlock dequeues to poll() does not reach it.

enableQueue() acquired diskLock and then waited on the flush future,
while the flush task acquires that same diskLock, so neither side could
proceed. The consumer sat in Object.wait holding diskLock, the block
monitor, headLock and tailLock, which left every producer parked on
tailLock. ThreadMXBean reports no deadlock because one side of the cycle
is a timed wait rather than a lock. Waiting on the future before taking
diskLock breaks it, and the caller-side lock handshake in flushToDisk()
is no longer needed. The restructured method also stops unlocking
diskLock it never acquired when the wait is interrupted.

readData() only evicted an empty head after a successful dequeue, so a
block drained while it was still the tail stayed head once producers
appended behind it. Consumers then spun RUNNABLE on it holding headLock.
Evicting on every non-tail pass clears it.

Measured over 20 runs of 8 producers and 8 consumers at 16k messages:
the queue stalls 16/20 before this change and 19/20 with poll() alone,
0/20 with both fixes. Each fix alone leaves the other mode: the lock
ordering fix alone stalls 2/20 on the spin, the eviction fix alone
stalls 13/20 on the deadlock.

Both stalls are silent, so the new test asserts on forward progress
rather than completion. It catches the unfixed code 6/10 and passes
40/40 against the fix in under a second.

* add regression test for the shared backpressure lock fix

* Addressing PR comments and adding two tests

---------

Co-authored-by: Marshall Massengill <[email protected]>


  Commit: dc2464fb104fa1a7f958d16c677a33aca5e7d993
      https://github.com/OpenNMS/opennms/commit/dc2464fb104fa1a7f958d16c677a33aca5e7d993
  Author: CI/CD System <[email protected]>
  Date:   2026-09-02 (Wed, 02 Sep 2026)

  Changed paths:
    M opennms-webapp-rest/src/main/java/org/opennms/web/rest/v1/NotificationRestService.java
    M opennms-webapp-rest/src/test/java/org/opennms/web/rest/v1/NotificationRestServiceIT.java

  Log Message:
  -----------
  Merge remote-tracking branch 'origin/foundation-2025' into foundation-2026


Compare: https://github.com/OpenNMS/opennms/compare/aa38e2ef8824...dc2464fb104f

To unsubscribe from these emails, change your notification settings at https://github.com/OpenNMS/opennms/settings/notifications


_______________________________________________
Please read the OpenNMS Mailing List FAQ:
http://www.opennms.org/wiki/index.php?page=MailingListFaq
opennms-cvs mailing list

To *unsubscribe* or change your subscription options, see the bottom of this page:
https://lists.sourceforge.net/lists/listinfo/opennms-cvs
lmpx.com only provides a reader for public news (NNTP) servers. It is not affiliated with the servers or forums shown here and is not responsible for the content of articles, which is written by their respective authors.