Releases: FIWARE/context.Orion-LD
Orion-LD v1.6.0
Fixed Issues:
- #1535: Ignore Subscription::q when matching subscriptions for deletion of an entity
- #1542: Array Reduction (arrays of one single element are "flattened" to that very element)
- #1551: format=simplified for distribute GET /entities gave Normalized for entities from other brokers
- #1557: Cannot count entities if geo query with $near - mongodb doesn't allow it
- #1573: pagination not working when entities have the exact same creation date (sort also by entity id)
- #1583: If a 'q' contains an ampersand, that ampersand needs to be forwarded as a semicolon
- #1593: Modify the type of an entity in a Replace operation (only working in legacy mode)
- #1612: Support for ISO8601 timezones expressed in +/- HH:mm in 'q' for entity query
- #1615: Crash in HTTPS notifications with a notification endpoint with empty URL PATH
- SOF: https://stackoverflow.com/questions/77911109/fiware-to-payload-too-large
- Fixed a possible crash for TRoE and attributes of type Vocab/Json/Language
- Forbidden to DELETE the Core Context !!! (it can be reloaded)
- Bug fix: JSON NULL literal is no longer forwarded!
- Improved treatment of malfunctioning notification receivers, on timeout (for clients that don't respond to notifications)
- Core context added to response if @context in payload body (Accept: application/ld+json)
New Features:
- Support for attributes of type VocabularyProperty
- Support for attributes of type JsonProperty
- Support for the new URL parameter "format" for output formats (normalized, concise, simplified)
- New service: DELETE /ngsi-ld/v1/entities (support for URL param 'type' only - the rest of the options are still missing)
- First draft of Distributed Subscriptions
Notes
- TRoE is still not prepared for attributes of type Vocab/Json/Language, so, attributes of those types are not stored in the historical database
- Improved the @context hosting feature to be according to API spec
Orion-LD version 1.5.1
Orion-LD version 1.5.0
Distributed GET /entities
The main new feature of v1.5.0 is "Distributed GET /entities", using the new concept of "Entity Maps", which is a part of the additions in the 1.8.1 version of the NGSI-LD spec about to be published (some time in January 2024).
It is still a work in progress but mostly working, though it is not 100% spec compliant.
To try it out, start Orion-LD with the CLI option -wip entityMaps
(and -distributed
to turn on distributed operations).
Bug fixes since v1.4.0:
- #1419 - Fixed a bug in the cleanup of the "URL being downloaded list" - not being cleaned up in case of an error
- #1427 - Disabling the keep-alive as it seems to be missing in libpaho
- #1456 - Entity id+type duplicated in forwarded request of "Create Entity"
- #1458 - Supporting system timestamps (createdAt/modifiedAt) in q
- #1451 - Bug fix - removed a trailing ampersand from the URI for the connection to mongodb
- #1418 - Performance - Faster startup when there are GeoProperties in the database
- #1478 - Fixed an issue about PATCH on non-existent entity in federation giving a 204 instead of a 404
- #1479 - Fixed problem with "operations" in registrations
- #1496 - Fixed a crash - a double free()
Other additions from the backlog:
- Added extensive logging for downloading of contexts
- Better 501 handling of temporal operations
- Changed all error codes from InvalidRequest to BadRequestData, except for JSON Parse Error that is still an InvalidRequest
- Fixed a bug in error detection of downloading errors in arrays of contexts, at lower nesting levels
- Fixed a crash in the subscription cache for subscriptions with empty URL paths in the notification::endpoint::uri field
- Fixed two erroneous type values in the response payload body (EntityTypeInformation => EntityTypeInfo and EntityAttributeList => AttributeList)
- Giving errors for expiresAt in the past (for registrations and subscriptions)
- Highly experimental feature for subscriptions: allowing a wildcard as value for entity type, to not filter on entity type
- Support for 'Periodic Notifications' (subscriptions with a 'timeInterval')
- New CLI (hidden) for extra field in notifications (trigger: "VERB URL PATH"): -triggerOperation
- Using Via header for loop detection (includes a new field 'hostAlias' in the registrations)
Use the new CLI parameter-brokerId
to set the identifier of the Orion-LD instance (same value as "hostAlias" in registrations for it to work) - Fixed a bug in the lookup of pernot subscriptions
Orion-LD version 1.4.0
Main additions/fixes since v1.3.0:
- Protection for POST /temporal/entities against usage when troe is not enabled.
- Support for different core contexts via CLI parameter
-coreContext <v1.0|v1.3|v1.4|v1.5|v1.6|v1.7>
(v1.6 is default). - Re-implemented the propagation of subscriptions between brokers in HA (sub-cache synchronization).
- Fixed a stupid bug in the size of the postgres connection pool (a hardcoded size of 10 connections, instead of using the variable tied to the CLI option
-troePoolSize
, meant for this!!!). - Issue #1412: Health check for Postgres connections (external contribution by cfreyth, thank you very much!).
Orion-LD version 1.3.0
The release 1.3.0 of Orion-LD introduces the following major improvements:
- New CLI param to modify the maximum size of incoming payloads (-inReqPayloadMaxSize)
- The Core Context now part of the broker - meant for airgapped setups
- System Attributes in Notifications
- Fixed a bug in the Host header of new notifications
Orion-LD v1.2.1
Bug fixes for v1.2.0
#1368 - Fixed a bug in subscription patch regarding modification of cached fields 'description', 'q', and 'entities'
#1374 - similar to #1368
#280 - error handling in registration creation - making sure exclusive registrations specify mandatory fields entity-id and attributes
#280 - error handling in registration updates - making sure exclusive registrations specify mandatory fields entity-id and attributes
Orion-LD v1.2.0
The release 1.2.0 of Orion-LD introduces the following major improvements:
- Full support for the new MongoDB driver (currently using mongoc v1.22.0)
- Decent amount of API endpoints supporting distributed operations (as of v1.6.1 of the NGSI-LD API, released in August 2022)
- Notifications for deletion of entities
- Implemented PUT /entities/{entityId}/attrs/{attrName}
- Better trace levels
This is the complete list of features/fixes (quite a few come from issue #280, which means it came from the backlog, not from a user request):
New mongo driver (you still need to start the broker with -experimental
for this):
- Issue #280 Reimplementation of BATCH Upsert, using the new mongo driver (mongoc) - if -experimental is set
- Issue #280 Reimplementation of BATCH Update, using the new mongo driver (mongoc) - if -experimental is set
- Issue #280 Reimplementation of BATCH Create, using the new mongo driver (mongoc) - if -experimental is set
- Issue #280 Reimplementation of BATCH Delete, using the new mongo driver (mongoc) - if -experimental is set
- Issue #280 Reimplementation of BATCH Query, using the new mongo driver (mongoc) - if -experimental is set
- Issue #280 Reimplementation of POST /entities/attrs, using the new mongo driver (mongoc) - if -experimental is set
- Issue #280 Reimplementation of DELETE /entities/attrs/{attrName}, using the new mongo driver (mongoc) - if -experimental is set
- Issue #280 Reimplementation of PATCH /entities/attrs, using the new mongo driver (mongoc) - if -experimental is set
- Issue #280 Reimplementation of GET /types, using the new mongo driver (mongoc) - if -experimental is set
- Issue #280 Reimplementation of GET /types/{typeName}, using the new mongo driver (mongoc) - if -experimental is set
- Issue #280 Reimplementation of GET /attributes, using the new mongo driver (mongoc) - if -experimental is set
- Issue #280 Reimplementation of GET /attributes/{attrName}, using the new mongo driver (mongoc) - if -experimental is set
- Issue #280 Reimplementation of PATCH /entities/attrs/{attrName}, using the new mongo driver (mongoc) - if -experimental is set
- Issue #280 Reimplementation of GET /csourceRegistrations/{regId} using mongoc AND the Registration cache
- Issue #280 Reimplementation of POST /csourceRegistrations using mongoc AND the Registration cache
- Issue #280 Reimplementation of DELETE /csourceRegistrations/{registrationId} using mongoc AND the Registration cache
- Issue #280 Reimplementation of PATCH /csourceRegistrations/{registrationId} using mongoc AND the Registration cache
- Issue #280 Reimplementation of GET /csourceRegistrations using the Registration cache
- Issue #1338 Removed a mongoc-only check, as all operations now support mongoc
New Distributed Operations:
- Issue #280 Implemented the new forwarding for POST /entities
- Issue #280 Implemented the new forwarding for GET /entities/{entityId}
- Issue #280 Implemented the new forwarding for entity deletion, for DELETE /entities/{entityId}
- Issue #280 Implemented the new forwarding for Batch entity deletion, for POST /entityOperations/delete
- Issue #280 Implemented the new forwarding for PATCH /entities/{entityId}
- Issue #280 Implemented the new forwarding for PATCH /entities/{entityId}/attrs
- Issue #280 Implemented the new forwarding for PATCH /entities/{entityId}/attrs/{attrName}
- Issue #280 Implemented the new forwarding for DELETE /entities/{entityId}/attrs/{attrName}
- Issue #280 Implemented the new forwarding for POST /entities/{entityId}/attrs
Other Features and fixes:
- Issue #280 Implemented support for HTTPS notifications for the new implementation (experimental)
- Issue #280 Persisting counters and timestamps of subscriptions from the subscription cache in the database
- Issue #280 New CLI option: -cSubCounters - number of subscription counter updates before flushing to DB (0: never, 1: always)
- Issue #280 Bug fix: getting lastNotification, lastSuccess, lastFailure from DB in when refreshing the subscription cache
- Issue #280 TRoE for PUT /entities/{entityId}
- Issue #280 Better health check - before accepting, a connection to the mongo server is done (and postgres if troe is enabled)
- Issue #1229 Fixed a CRASH on erroneous q, when creating subscriptions
- Issue #1258 Fixed a bug in Q-Parser: negative floating point values were not handled
- Issue #1260 Invalid long-name of an attribute in error responses (eq-sign instead of dot)
- Issue #1261 'lang' URI param support for PATCH /entities/{entityId}
- Issue #1262 keyValues/simplified input format for PATCH /entities/{entityId}
- Issue #1269 Fixed a bug in BATCH Upsert
- Issue #1287 Fixed a bug in GET /entities/{entityId}?attrs=xxx, that always included 'location' in the response
- Issue #1297 Fixed a typo in a string (modifiededAt => modifiedAt)
- Issue #1307 Added the feature of "urn:ngsi-ld:request" to notifications (forwarding a header with its value from the initial request)
- Issue #1307 Implemented notifications for entity deletion, for DELETE /entities/{entityId}
- Issue #1312 Better error handling for a specific use case about RHS being 'null'
- Issue #1315 Ditto
- Issue #1316 Fixed a bug in sub-cache population for non-default tenant (issue #1315 is about the same)
- Issue #1317 Removed an unfortunate error message about "not a valid timestamp"
- Issue #1322 Default port for HTTPS is 443, for HTTP: 80
- Issue #1322 Fixed an error in subscription stats (for -experimental)
- Issue #1322 Implemented better notification response reception and much better log messages
- Issue #1340 Fixed a dangling pointer bug
- Issue #1343 Added the HTTP header (well, for mqtt notfications also) 'Host' for notifications
- Issue #1344 Accepting hyphen as a valid character for a tenant
- Issue #1348 Unsupported value added to mongodb url (hyphen)
- Issue #1353 properties/relationships in regs is now propertyNames/relationshipNames in all responses for GET Regs
- Issue #1353 properties/relationships in regs now also supported as propertyNames/relationshipNames in requests for non experimental
- Issue #1356 Made Orion-LD accept a configurable max size for incoming/outgoing payload bodies
Orion-LD v1.1.2
Fixed a crash in PATCH /entities/{entityId}
when updating a property "value" from an array to another array, if any of the two arrays are empty.
Orion-LD v1.1.1
Minor bug fix: Issue #1227 - case insensitive matching for HTTP request headers
Orion-LD v1.1.0
Fixed Issues:
- Issue #954 Broker crashes with too big attribute values (Orion-LD's limit for the size of an attribute value is 64k right now)
- Issue #986 Username and Password for the mongo C driver connection to the MongoDB server
- Issue #990 mongo::Timestamp support
- Issue #989 Deprecated bson_append_symbol still in use - change for bson_append_utf8
- Issue #992 Better implementation of existence check of entities (mongoEntityExists)
- Issue #1010 Fixed bug related to parsing ISO8601 DateTime strings
- Issue #1016 Fixed bug related to wrong context in response when input context is an array with a single URL
- Issue #1015 Implemented 'Concise Input Format' support for all entity/attribute create/update endpoints
- Issue #1030 Implemented 'Concise Output Format' support for GET /entities/{entityId} and GET /entities
- Issue #1015 Implemented 'Concise Output Format' support for Notifications
- Issue #1033 Fixed a bug about Concise GeoJSON returning an Invalid Geometry
- Issue #1034 Fixed a bug about Array Reduction and Concise Attribute Format
- Issue #1045 Fixed bug related to TRoE and creation of entity without attributes
- Issue #1064 Can't forbid '#' in attribute names as it often expands with a hash and we support already expanded attribute names in the payload body
- Issue #903 SSL connection, etc for mongoc - NOTE: not for legacy driver - only the new, experimental API endpoints (needs testing)
- Issue #1151 GET /entities?id=X is NO LONGER translated to GET /entities/X - that was a BAD IDEA
- Issue #280 POST Query was broken - fixed it, including correct treatment of language properties
- Issue #280 Timestamp support in RANGE in 'q' for subscriptions
- Issue #280 Support for NOT EQ for range in 'q' for subscriptions
- Issue #280 New URI param "?local=true", to GET only local entities in GET /entities
- Issue #280 Support for Prometheus metrics (4 counters for now)
- Issue #280 Adding tenant to response wherever Location is present
- Issue #1178 MQTT notifications also when "-notificationMode != threadpool"
New Features:
- Concise input/output format - more compact but still lossless - see NGSI-LD API spec v1.6.1 for details
- URI parameter options=simplified as an alias to options=keyValues
- Support for the OPTIONS method for all NGSI-LD API endpoints
- 'notifierInfo' and 'receiverInfo' for subscriptions
Replacing the deprecated MongoDB C++ Legacy driver with the newest MongoDB driver (mongoc v1.22.0):
- Common functions for Getting and Listing tenants now use the new mongo driver
- Common functions for Geo indices now use the new mongo driver
- Common function for creation of the _id.id entities index now uses the new mongo driver
- Using the tenant list when populating the subscription cache instead of querying the database (less Mongo C++ Legacy driver usage)
- GET /subscriptions/{subId} now uses the subscription cache and no database access is done (less Mongo C++ Legacy driver usage)
- GET /subscriptions now uses the subscription cache and no database access is done (less Mongo C++ Legacy driver usage)
- Subscription Cache now uses mongoc and not the old legacy driver
- Subscription Cache Counters are now updated using mongoc and not with the old legacy driver
- PATCH subscriptions/{subId} now uses the new mongoc driver
Experimental Features
- to turn on - start the broker with
-experimental
.
Note that this is experimental implementations, not yet thoroughly tested.
They all pass the basic functional tests, and seem to work just find, but, no promises made.
- Fresh implementations of services using 'mongoc' (the new MongoDB driver) instead of mongoBackend+Legacy driver:
- PUT /entities/{entityId} (not supported if -experimental is not used)
- PATCH /entities/{entityId} (not supported if -experimental is not used)
- POST /entities (two versions: legacy and mongoc - mongoc version if -experimental is used)
- GET /entities (two versions: legacy and mongoc - mongoc version if -experimental is used)
- GET /entities/{entityId} (two versions: legacy and mongoc - mongoc version if -experimental is used)
- POST /subscriptions (two versions: legacy and mongoc - mongoc version if -experimental is used)
- DELETE /subscriptions/{subId} (two versions: legacy and mongoc - mongoc version if -experimental is used)
- Support for LanguageProperty attributes
- Support for URI parameter 'observedAt' for PATCH /entities/{entityId} in combination with options=keyValues - update existing observedAt sub-attributes