SQL: Now it is possible to sort over binary metadata, node reference and micronode non-list fields natively.
Core: Now it is possible to sort over binary metadata, node reference and micronode non-list fields.
Documentation: A missing query parameters documentation for the /search
and /{{project}}/search
has been added.
Cache: Image cache has been refactored, utilizing now simpler structure with less folder depth.
Core: A potential data loss on an edge case of node migration over several schema versions, including field name/type change, has been fixed.
GraphQL: The behaviour of native filtering was different from the java filtering with regards to null values: native filtering would never return elements with null values, even when using "not" or "notEquals". The behaviour of native filtering has been modified to consider null values as not being equal to non-null values.
Image Manipulation: The validation of resize width and height have been fixed to also properly handle values set to "auto" in the request.
GraphQL: The library for handling GraphQL Filters in Java has been updated to fix inconsistent behaviour when filtering nodes with fields of type "date" or "number", which had the field set to null. Before the fix, such nodes were never returned regardless of the used filter. Now the behaviour is identical to filters on fields of other types (such as "string" or "boolean") so that null values will not natch when compared to non-null values, but the negation with "not" will match.
Core: A crash, caused by duplicated nodes in a GraphQL resulting set, has been fixed (SQL DAO version).
Core: A crash, caused by duplicated nodes in a GraphQL resulting set, has been fixed.
Core: The Vert.x Handlebars engine dependency has been patched, to replace the vulnerable Apache commons-text
dependency, targeting CVE-2022-42889
.
Documentation: The check/repair API calls are better documented in regards of an async processing. The logging documentation is extended with format examples.
Core: A crash has been fixed on an attempt of (micro)node migration over non-adjacent (micro)schema versions.
Docker: Mesh image startup has been fixed.
Core: A crash in referencing contents lookup has been fixed.
Elasticsearch: An Elasticsearch Java Client has been updated to the version 1.1.2, containing the corrections to the connection failure processing mechanism. The Elasticsearch activity idle checking has been improved to be more proof of the unstable connections.
Core: A repair mechanism for Content reference consistency check
has been improved to use off-transactional mechanism, to improve Mesh and database resource consumption.
GraphQL: A combination of similar queries with different names and filter parameters, running over native filtering, that produces incorrect results, has been fixed.
A possible NullPointerException when handling binary data has been fixed.
The library used to process webp images has been changed due to JVM errors when running in an alpine based image.
Core: Usage of application level protocol negotiation (aka ALPN) can be now configured via Mesh Options.
Java Rest client: REST client can now choose the HTTP protocol version to use for the Mesh connection. Possible values: DEFAULT (current default support of the carrier HTTP client library, default value), HTTP_1_1, HTTP_2.
Plugins: An option for connection over HTTP/2 for the Mesh plugins have been added.
Image manipulation: Adds support for WebP images.
The endpoint GET /auth/login
now also supports login via the Authentication Bearer request header (using an API token).
Core: The on-demand image manipulation feature has been refactored for DDoS protection. The new image manipulator option, mode
, has been added with the following values:
ON_DEMAND
keeps already existing behaviour with creating/reusing the image variant automatically on each request,
MANUAL
requires an extra step of calling the image variant creation REST API prior to the variant serve, OFF
disables the feature completely. A set of REST API calls has been added for the image variants manipulation.
The GraphQL nodes
call has been extended to filter/serve over the image variants of a selected binary field, if applicable.
Search: Several enhancements have been applied to the content, sent to the search engine for the indexing. Each (micro)schema is presented a noIndex
flag, marking the content of the (micro)schema as excluded from the indexing. Each (micro)schema field is presented a similar noIndex
flag.
By default no flag is set, meaning the content to be indexable. This feature serves security purposes, preventing the sensible information from leaking through the search engine.
REST: A new HttpServer option, minifyJson
, has been added to control over the REST API payloads being pretty printed for readability, or minified for resource save. An analogous setting has been added to the Java MeshRestClient
.
Default value is true
, so the payload minification is turned on, which is a @breaking@S change, if one expects the pretty-formatted output.
Now it’s possible to use generated Mesh API key for the login request, with apikey
string body parameter.
REST: A new 'languages' endpoint has been added, providing the list of the installed languages, as well as the lookup over UUID or 2-character language tag.
Mesh SQL has been updated to Java 17 (LTS version).
Some dependencies have been updated: * VertX: 4.5.7 * GraphQL: 21.5 * GraphQL Dataloader: 3.2.2 * PF4j: 3.11.0 * Hazelcast: 3.12.13 * Jackson: 2.17.0 * SnakeYAML: 2.2 * Log4j: 2.23.1 * SLF4j: 2.0.13 * Logback: 1.5.5 * Commons IO: 2.16.1 * RAML Parser: 0.8.40 * JSON Path: 2.9.0 * JSoup: 1.17.2 * Jettison: 1.5.4 * Netty: 4.1.108.Final * Image IO: 3.10.1
A repair mechanism for Node field container versions
inconsistencies has been implemented.
GraphQL: A native filter UUID list parameter hits an exception, when a database expects it containing DB-specific UUID types, and not strings, as provided by GraphQL API. This has been fixed.
GraphQL: A regression of missing common and
, or
, not
top level filters has been fixed.
Core: Getting lists of nodes over the REST API has been improved to use less queries for improved performance.
REST client: The configuration now allows adding default parameter provider for query parameters, that should be added to every request (unless overwritten).
Tests: The tests API has been extended to allow tests which do not reset the database between test cases.
Core: Due to incorrect mutation of cached permission entries, sometimes permissions were temporarily incorrectly granted on nodes.
GraphQL: In cases of long running GraphQL requests, some other GraphQL requests were queued and executed after the long running request, even if enough workers were still available. The behaviour has been changed, so that GraphQL requests will only be queued, if all workers are currently busy.
Cache: The permission cache has been fixed to always return copies of the actually cached entries.
Core: The root-based data (e.g. tags, branches) was ignoring its root, when being requested in native filtering or sorting. This has been fixed.
REST: When requesting sorted data, the permission limitations are violated. This has been fixed.
Core: The process of updating from Mesh SQL < 2.x with a database containing many records in table mesh_nodefieldcontainer has been optimized to run much faster and to not consume a large amount of Java heap space.
Core: Calculation of the memory consumption of cached Strings has been improved to better reflect the real memory consumption. Before this fix, the calculated memory consumption could be too small resulting in the cache using much more memory than the configured maximum size.
Core: Creating a translation for the root node of a project always failed with a "Bad Request" error, which has been fixed.
Elasticsearch: A full access to the data backed by ES has been given to the admin users.
Because of a flawed cache invalidation strategy, the project stayed on an old 'latest' branch, even if a new one has been assigned, until the caches are invalidated, or a restart is triggered. This has been fixed.
Cache: A mechanism of reattaching the cached entity to the persistence context has been introduced, allowing implementations of smarter cache policies.
Cache: Because of a flawed cache invalidation strategy, the project stayed on an old 'latest' branch, even if a new one has been assigned, until the caches are invalidated, or a restart is triggered. This has been fixed.
A regression regarding OAuth user filtering has been fixed.
Minor improvements in authentication-related utilities Java API, allowing more control over authentication URL management.
REST: The endpoints for invoking a consistency check/repair now have a new query parameter async
which allows to perform the action as a background job instead of synchronously.
Core: Updating and publishing a node in a single request has been optimized to only create a single new version of the content.
Core: More consistency checks have been added for asynchronous execution.
Auth: Synchronization of users, groups and roles from AuthServicePlugin implementations (like the keycloak plugin) has been improved for performance and stability.
REST client: Improves error handling for WebSocket errors.
REST: The endpoints for invoking a consistency check/repair now have a new query parameter async
which allows to perform the action as a background job instead of synchronously.
Core: Updating and publishing a node in a single request has been optimized to only create a single new version of the content.
Auth: Synchronization of users, groups and roles from AuthServicePlugin implementations (like the keycloak plugin) has been improved for performance and stability.
Elasticsearch: A possibility of DDoSing the ES with a bulk request of too many items has been eliminated.
GraphQL: When an inexisting language has been requested for a node, the schema info was not loaded as well. This has been fixed.
GraphQL/Core: The performance of getting nodes with micronode fields or micronode list fields has been improved.
GraphQL: Fetching of micronode fields has been improved to allow batch loading.
SQL: In cases of temporary unavailability of the database, it could happen that some (stale) transactions were left over, which could cause subsequent java.lang.IllegalStateException: Session/EntityManager is closed
errors.
The handling of database unavailability has been improved to properly dispose of such transactions and a periodic background check for stale transactions has been added.
Core: The process of deleting nodes recursively has been refactored to avoid possible deadlocks in the database (when running in parallel requests).
REST: The documentation of the generic parameter fields
has been fixed. Now fields
works over the Language entities as well, the values are uuid
,name
,languageTag
,nativeName
.
GraphQL. Some of (micro)schema fields related queries rely on the target (micro)schema having at least one field, crashing in HTTP 500 otherwise. This has now been fixed.
GraphQL: Sorting nodes by schema.name failed with an error and has been fixed.
Core: Configuring fieldContainerCacheSize
with a memory size or percentage could cause a NullPointerException when handling nodes containing micronodes. This has been fixed.
Core: Unnecessary uniqueness checks for segment fields will now be avoided, when updating nodes.
GraphQL: More test cases for sorting have been added.
Core: Unnecessary uniqueness checks for segment fields will now be avoided, when updating nodes.
GraphQL: The overall performance of GraphQL requests has been improved by caching the GraphQL schemas.
Core: Now it is not allowed to set a new password to an empty or invalid (e.g. spaces) string.
Auth: The unnecessary logging of outdated/mismatched auth token has been removed.
Core: More performant batch creation of the list fieds.
Core: A regression of creation of the named entities has been fixed.
Core: Improve the internal Java API of the list field creation, targeting better batch performance.
Core: Setting role permissions on node creation/update has been made more efficient.
SQL: An edge case for Too many SQL parameters
occurrences has been fixed.
Core: Improve the internal Java API for granting and revoking permissions.
SQL: Batch loading of node reference fields has been introduced, to speed up the dedicated GraphQL requests.
Cache: Improvements related to the NULL value caching support.
GraphQL: The performance of getting all nodes of a project via GraphQL has been improved.
Core: The content/list cache has been refactored to improve the control over the memory consumption. Now both fieldContainerCacheSize
and listFieldCacheSize
values accept the numeric values, meaning the number of cache entries, size in format XXX{B|K|M|G|T}
, or a percent of total available memory. For instance, the value 50000
means 50000 entries, 5G
means absolute 5 Gigabytes of RAM, 50%
means half of the RAM available to Mesh..
Monitoring: New files, contentCache.json
and listableFieldCache.json
, have been added to the debug info response, containing the content cache resources information.
SQL: An error in indexing of the named entities disclosed the ability to create several entity instances with the same name. Affected entities are: project, schema, microschema, tag, tag family, branch, group, user, role, language. This has been fixed.
The already existing duplicated entities are fixed on first boot by renaming according to the pattern dedup_<old_name>_<uuid>
.
GraphQL: referencedBy
field fetcher has been refactored for more optimal batch loading.
Tests: Added set of tests of uniqueness of the named entities on a database level.
Core: The cache internal Java API has been presented a new constructor, allowing using the weight instead of entity number for the cache size calculations, as well as some new statistics getters.
Core: Now caches treat NULL as a valid value, instead of a constant miss.
SQL: Due to incorrect SQL statements, deleting of nodes could be very slow. The SQL statements have been fixed.
SQL: Some more possible Too many SQL parameters
occurrences have been fixed.
GraphQL: Some more multithreading issues with initialization of GraphQL have been fixed.
Core: Requests to branches failed with an internal error, if monitoring was disabled. This has been fixed.
Core: The new configuration option vertxOptions.orderedBlockingHandlers
allows to change the behaviour of concurrent handling of "long running" requests
(requests that modify data or GraphQL requests). If the option is set to true
(default value) such requests will be run in order (per http verticle) and never concurrently.
As a consequence, it may happen that e.g. GraphQL requests are queued for some time if some other requests are currently handled.
If the option is set to false
, blocking requests will only be queued, if all threads of the worker pool are currently busy.
GraphQL: Performance optimizations of the Elasticsearch-based requests.
GraphQL: Performance optimizations of the Elasticsearch-based requests.
Search: The indexed node fetcher has been completely rewritten, targeting the performance and stability.
Core: Mesh SQL incorrectly showed the version number of Mesh Core instead of its own. This has been fixed, Mesh SQL will now show its own version number.
SQL: An index has been added to the Branch/SchemaVersion edge, for the schema version fetch performance.
GraphQL: When the very first GraphQL Queries (after starting the Mesh instance) were executed in parallel, it could happen that GraphQL execution failed with some internal errors. This has been fixed.
GraphQL: Parent loading has been speeded up by using a batch data loading.
Search: Minor logging changes in the search engine, making it less annoying.
Core: An edge case of Too many SQL parameters
occurrence has been fixed.
Core: A crash of an attempt to publish the node field, referencing to the deleted node, during the massive publish process, has been fixed.
GraphQL: An edge case of losing node data in the massive GraphQL response has been fixed.
Core: More NPE occurrences during the massive concurrent publishing process have been fixes.
Core: More NPE occurrences during the massive concurrent publishing process have been fixes.
Core: When running in the massive concurrent publishing process, it is possible to run into a race condition when some field containers are already processed while being referenced by the edge, throwing an NPE. This has now been fixed.
Core: Getting sorted entities over the REST API caused an Internal Server Error, which has been fixed.
Mesh Rest Client: An error has been fixed, which prevented sorting parameters from being passed to the endpoint.
Clustering: Calling cluster specific REST Endpoints on non-clustered instances could cause internal server errors. The behaviour has been changed so that a "Bad Request" error is returned containing a proper error message.
Java Rest Client: After logging in with the login()
method, the login token was never refreshed, which caused it to expire after the configured token expiration time (per default 1 hour),
even if the client was used to do requests. This has been changed now, so that the login token in the client will be refreshed on every request to mesh.
GraphQL: Link resolving in graphql queries ignored the language tags in the links. This has been fixed.
GraphQL: The result set of the retrieval of the complex nodes + children structure has been improved to contain all the items.
SQL: Deleting nodes in parallel requests could cause deadlocks in the database. This has been resolved by changing the delete requests and adding some indices.
GraphQL: The metadata request does not crash anymore on the empty (micro)schemas. The new related filter, isEmpty
, has been added as well.
Core: The performance of node deletion has been improved.
SQL: The pagination usage for Native Filtering has been fixed for MS SQL databases.
Java filter for Node reference content field has been fixed. Native filtering pagination has been improved. Some other minor stability fixed applied.
SQL: All named entities have been indexed over name field for performance.
SQL: More occurrences of ignoring the storageOptions.sqlParametersLimit
, leading to the limit violation error, have been fixed.
Plugins: Logging fixed upon false triggering of a warning of inexisting role/group connection.
Core: All named instances have been presented an own cache.
Core: The performance of schema migrations has been improved by efficiently loading binary fields and list field values.
GraphQL: The performance of graphql queries returning list fields has been improved by efficiently loading those list field values.
Core: A cache for list field values has been added. The size of this cache can be configured with cache.listFieldCacheSize
(defaults to 50000).
Core: Uniqueness checks for webroot url field values will now only be done, if those values actually change. This will improve performance of e.g. schema migrations, where the webroot url field values are likely to not change.
Core: An internal API for efficient loading of list field values has been added.
Clustering: Due to an incorrect check, it was possible that migration jobs could complete without actually migrating anything, when run in a clustered environment with disabled coordination mode.
Core: Under race conditions the publishing process might crash on multiple simultaneous node field processing. This has been fixed.
Core: The application of storageOptions.sqlParametersLimit
has been improved, targeting some content fetch edge cases.
Core: Some indices have been added to node parent edge entity to speed up fetching of node children.
Core: A consistency check with repair option has been added for branches, that do not contain the project root node.
Clustering: The caching implementation for clustered instances has been changed from distributed caches to local caches (with distributed invalidation) for performance reasons. This also fixes possible locks when uploading binary data.
Adds asynchronous checks for uploaded binaries. When the new property binaryCheckUrl
is set for a binary field in a schema, a request for checking the binary will be sent to that URL. The service is expected to send a request to the callback endpoint for that binary to set the check status to either ACCEPTED or DENIED (status for binaries with pending checks is POSTPONED). Requests for binaries with a check status other than ACCEPTED will result in a 404 response.
Database: Support for DB SQL filtering/sorting is added for all the supported databases.
GraphQL: A support of database level filtering/sorting has been added. New sort
parameter in added for structured sorting, forcing the usage of DB filtering. New GraphQL parameter nativeFilter
is added to the selected entity lookup methods, with options NEVER
(old filtering is forced), ALWAYS
(DB filtering is forced), IF_POSSIBLE
(if the requested filter is supported by a DB, DB filtering is used, otherwise filtering is fallen back to the old filter mechanism).
Please note that not all the currently existing filters are supported by the DB.
Core: Support of database level filtering/sorting has been added to the low level Java API.
GraphQL: Support of database level filtering/sorting has been added. New sort
parameter in added for structured sorting, forcing the usage of DB filtering. New GraphQL parameter nativeFilter
is added to the selected entity lookup methods, with options NEVER
(old filtering is forced), ALWAYS
(DB filtering is forced), IF_POSSIBLE
(if the requested filter is supported by a DB, DB filtering is used, otherwise filtering is fallen back to the old filter mechanism).
Please note that not all the currently existing filters are supported by the DB.
GraphQL: A simplified, native filtering friendly version of regex
string operation, like
, has been added, accepting wildcards %
as a zeroable set of characters, e.g. like: "hello%world"
requests filtering in the strings, that start with hello
, end with world
and have zero-to-unlimited number of any characters in between.
GraphQL: Added new filters for field types: list, micronode, (s3)binary. Added a new experimental filter for referencedBy nodes.
Cache: Image cache has been refactored, utilizing now simpler structure with less folder depth.
Core: A potential data loss on an edge case of node migration over several schema versions, including field name/type change, has been fixed.
Documentation: A missing query parameters documentation for the /search
and /{{project}}/search
has been added.
Core: A crash, caused by duplicated nodes in a GraphQL resulting set, has been fixed (SQL DAO version).
Core: The Vert.x Handlebars engine dependency has been patched, to replace the vulnerable Apache commons-text
dependency, targeting CVE-2022-42889
.
Core: A crash has been fixed on an attempt of (micro)node migration over non-adjacent (micro)schema versions.
Core: A crash in referencing contents lookup has been fixed.
Elasticsearch: The Elasticsearch Java Client has been updated to the version 1.1.2, containing the corrections to the connection failure processing mechanism. The Elasticsearch activity idle checking has been improved to be more proof of the unstable connections.
Core: A repair mechanism for Content reference consistency check
has been improved to use off-transactional mechanism, to improve Mesh and database resource consumption.
Core: Improvement of an error message of the webroot field URL conflict, now containing correct UUID, language and webroot URLS of a conflicting content.
Core: A repair mechanism for Node field container versions
inconsistencies has been implemented.
Core: Getting lists of nodes over the REST API has been improved to use less queries for improved performance.
Core: Due to incorrect mutation of cached permission entries, sometimes permissions were temporarily incorrectly granted on nodes.
Core: Calculation of the memory consumption of cached Strings has been improved to better reflect the real memory consumption. Before this fix, the calculated memory consumption could be too small resulting in the cache using much more memory than the configured maximum size.
Auth: Synchronization of users, groups and roles from AuthServicePlugin implementations (like the keycloak plugin) has been improved for performance and stability.
REST: The endpoints for invoking a consistency check/repair now have a new query parameter async
which allows to perform the action as a background job instead of synchronously.
Core: Updating and publishing a node in a single request has been optimized to only create a single new version of the content.
Core: More consistency checks have been added for asynchronous execution.
GraphQL/Core: The performance of getting nodes with micronode fields or micronode list fields has been improved.
SQL: In cases of temporary unavailability of the database, it could happen that some (stale) transactions were left over, which could cause subsequent java.lang.IllegalStateException: Session/EntityManager is closed
errors.
The handling of database unavailability has been improved to properly dispose of such transactions and a periodic background check for stale transactions has been added.
Core: The process of deleting nodes recursively has been refactored to avoid possible deadlocks in the database (when running in parallel requests).
Core: Unnecessary uniqueness checks for segment fields will now be avoided, when updating nodes.
Core: Configuring fieldContainerCacheSize
with a memory size or percentage could cause a NullPointerException when handling nodes containing micronodes. This has been fixed.
Core: Setting role permissions on node creation/update has been made more efficient.
SQL: An edge case for Too many SQL parameters
occurrences has been fixed.
Core: A regression of creation of the named entities at MSSQL has been fixed.
Core: More performant batch creation of the list fieds.
Core: The content/list cache has been refactored to improve the control over the memory consumption. Now both fieldContainerCacheSize
and listFieldCacheSize
values accept the numeric values, meaning the number of cache entries, size in format XXX{B|K|M|G|T}
, or a percent of total available memory. For instance, the value 50000
means 50000 entries, 5G
means absolute 5 Gigabytes of RAM, 50%
means half of the RAM available to Mesh..
Monitoring: New files, contentCache.json
and listableFieldCache.json
, have been added to the debug info response, containing the content cache resources information.
SQL: An error in indexing of the named entities disclosed the ability to create several entity instances with the same name. Affected entities are: project, schema, microschema, tag, tag family, branch, group, user, role, language. This has been fixed.
The already existing duplicated entities are fixed on first boot by renaming according to the pattern dedup_<old_name>_<uuid>
.
SQL: Batch loading of node reference fields has been introduced, to speed up the dedicated GraphQL requests.
Cache: Improvements related to the NULL value caching support.
GraphQL: The performance of getting all nodes of a project via GraphQL has been improved.
GraphQL: Performance optimizations of the Elasticsearch-based requests.
Core: Performance optimizations regarding batch loading of entities over a set of UUIDs.
SQL: Due to incorrect SQL statements, deleting of nodes could be very slow. The SQL statements have been fixed.
SQL: Some more possible Too many SQL parameters
occurrences have been fixed.
Core: Requests to branches failed with an internal error, if monitoring was disabled. This has been fixed.
Core: The new configuration option vertxOptions.orderedBlockingHandlers
allows to change the behaviour of concurrent handling of "long running" requests
(requests that modify data or GraphQL requests). If the option is set to true
(default value) such requests will be run in order (per http verticle) and never concurrently.
As a consequence, it may happen that e.g. GraphQL requests are queued for some time if some other requests are currently handled.
If the option is set to false
, blocking requests will only be queued, if all threads of the worker pool are currently busy.
Search: The indexed node fetcher has been completely rewritten, targeting the performance and stability.
SQL: An index has been added to the Branch/SchemaVersion edge, for the schema version fetch performance.
Core: Mesh SQL incorrectly showed the version number of Mesh Core instead of its own. This has been fixed, Mesh SQL will now show its own version number.
GraphQL: Parent loading has been speeded up by using a batch data loading.
Search: Minor logging changes in the search engine, making it less annoying.
Core: More NPE occurrences during the massive concurrent publishing process have been fixes.
GraphQL: An edge case of losing node data in the massive GraphQL response has been fixed.
Core: A crash of an attempt to publish the node field, referencing to the deleted node, during the massive publish process, has been fixed.
Core: An edge case of Too many SQL parameters
occurrence has been fixed.
Core: When running in the massive concurrent publishing process, it is possible to run into a race condition when some field containers are already processed while being referenced by the edge, throwing an NPE. This has now been fixed.
SQL: Deleting nodes in parallel requests could cause deadlocks in the database. This has been resolved by changing the delete requests and adding some indices.
GraphQL: The result set of the retrieval of the complex nodes + children structure has been improved to contain all the items.
Clustering: Calling cluster specific REST Endpoints on non-clustered instances could cause internal server errors. The behaviour has been changed so that a "Bad Request" error is returned containing a proper error message.
Java Rest Client: After logging in with the login()
method, the login token was never refreshed, which caused it to expire after the configured token expiration time (per default 1 hour),
even if the client was used to do requests. This has been changed now, so that the login token in the client will be refreshed on every request to mesh.
GraphQL: The metadata request does not crash anymore on the empty (micro)schemas. The new related filter, isEmpty
, has been added as well.
GraphQL: Link resolving in graphql queries ignored the language tags in the links. This has been fixed.
Core: The performance of node deletion has been improved.
Core: All named instances have been presented an own cache.
SQL: All named entities have been indexed over name field for performance.
SQL: More occurrences of ignoring the storageOptions.sqlParametersLimit
, leading to the limit violation error, have been fixed.
icon check[] Plugins: Logging fixed upon false triggering of a warning of inexisting role/group connection.
Core: Uniqueness checks for webroot url field values will now only be done, if those values actually change. This will improve performance of e.g. schema migrations, where the webroot url field values are likely to not change.
Core: An internal API for efficient loading of list field values has been added.
Core: The performance of schema migrations has been improved by efficiently loading binary fields and list field values.
GraphQL: The performance of graphql queries returning list fields has been improved by efficiently loading those list field values.
Core: A cache for list field values has been added. The size of this cache can be configured with cache.listFieldCacheSize
(defaults to 50000).
Clustering: The caching implementation for clustered instances has been changed from distributed caches to local caches (with distributed invalidation) for performance reasons. This also fixes possible locks when uploading binary data.
Clustering: Due to an incorrect check, it was possible that migration jobs could complete without actually migrating anything, when run in a clustered environment with disabled coordination mode.
Core: A consistency check with repair option has been added for branches, that do not contain the project root node.
Core: The indices have been added to node parent edge entity to speed up the node children fetch.
Core: The application of storageOptions.sqlParametersLimit
has been improved, targeting some content fetch edge cases.
Core: Under race conditions the publishing process might crash on multiple simultaneous node field processing. This has been fixed.
Core: The internal check for uniqueness of values in webroot fields has been improved.
SQL: Some indices have been added.
MSSQL: When using MSSQL, the datatypes of several columns have been changed from VARCHAR to NVARCHAR.
Core: Occurrences of ignoring the storageOptions.sqlParametersLimit
, leading to the limit violation error, have been fixed.
Core: On a complex constellation of permissions over several roles/groups false permission decisions have been made over the user that shares the roles. This has been fixed.
Core: The requests to create, update or upsert a node have been extended to allow immediate publishing of the modified/created node and to set role permissions on the node.
Core: The request to upload binary data into a binary field has been extended to allow immediate publishing of the modified/created node.
SQL: A more sophisticated control over SQL parameter limit has been introduced, including the new options parameter storageOptions.sqlParametersLimit
, to improve stability of demanding content queries.
Core: Fixes the hibernate implementation for BinaryDao.findFields()
where the typed query returned an instance of the wrong class.
GraphQL: Performance of queries that return large amounts of nodes with link resolving in fields or getting node fields has been improved.
SQL: Indices introduced for linked content entries: lists, (micro)node references. This improves performance on content fetch.
Core: The name of a Mesh user is now forced to be unique on a database level, to prevent creating users with an already existing username. The duplicated username detection mechanism has also been improved.
Duplicate usernames must be removed before the update, otherwise Mesh will fail to start! |
Monitoring: Failing calls to any /health/…
endpoints will no longer log the whole stacktrace, since this does not contain useful information.
Core: Migration jobs have been made more robust: Migration jobs will now be aborted, in cases were the storage is no longer ready to be written to
(e.g. write quorum is not reached, or the storage is read-only due to insufficient disk space available). A periodic check (interval can be configured via setting migrationTriggerInterval
)
will continue processing of aborted jobs.
Docker: Additional command line tools have been added to the Mesh SQL Docker image: rsync
, curl
, iputils
, busybox-extras
, tar
, nano
.
Search: The search endpoints (like e.g. /api/v1/search/nodes
) were incorrectly treated as not "read-only", which caused them to fail during a cluster topology change,
if the setting cluster.topologyChangeReadOnly
was set to true
. This has been changed now, the real search endpoints are read-only now. It is important to note, that this does still
not apply to the index maintenance endpoints /api/v1/search/sync
, /api/v1/search/clear
and /api/v1/search/status
.
Rest: The new endpoints /api/v2/…/rolePermissions
allow getting, granting and revoking permissions on entities for multiple roles in a single request.
Core: The core Vert.x library was updated to version 4.3.2
.
GraphQL: In rare cases, GraphQL statements could "hang" forever, which caused the corresponding worker thread to be blocked forever. This has been fixed now by introducing a configurable timeout.
GraphQL: The graphql library has been updated to version 20.0.
Core: The node migration process has been improved to reduce resources footprint on large workloads, by chunking the data. An additional configuration item content.batchSize
has been added.
Core: Corner case of updating the webroot info might throw a false conflict exception, when the segment field value is reset for a schema. This has been fixed.
SQL: A more sophisticated control over SQL parameter limit has been introduced, including the new options parameter storageOptions.sqlParametersLimit
, to improve stability of demanding content queries.
Core: Fixes the hibernate implementation for BinaryDao.findFields()
where the typed query returned an instance of the wrong class.
GraphQL: Performance of queries that return large amounts of nodes with link resolving in fields or getting node fields has been improved.
SQL: Indices introduced for linked content entries: lists, (micro)node references. This improves performance on content fetch.
Core: The name of a Mesh user is now forced to be unique on a database level, to prevent creating users with an already existing username. The duplicated username detection mechanism has also been improved.
Duplicate usernames must be removed before the update, otherwise Mesh will fail to start! |
Monitoring: Failing calls to any /health/…
endpoints will no longer log the whole stacktrace, since this does not contain useful information.
Core: Migration jobs have been made more robust: Migration jobs will now be aborted, in cases were the storage is no longer ready to be written to
(e.g. write quorum is not reached, or the storage is read-only due to insufficient disk space available). A periodic check (interval can be configured via setting migrationTriggerInterval
)
will continue processing of aborted jobs.
Docker: Additional command line tools have been added to the Mesh SQL Docker image: rsync
, curl
, iputils
, busybox-extras
, tar
, nano
.
Search: The search endpoints (like e.g. /api/v1/search/nodes
) were incorrectly treated as not "read-only", which caused them to fail during a cluster topology change,
if the setting cluster.topologyChangeReadOnly
was set to true
. This has been changed now, the real search endpoints are read-only now. It is important to note, that this does still
not apply to the index maintenance endpoints /api/v1/search/sync
, /api/v1/search/clear
and /api/v1/search/status
.
GraphQL: In rare cases, GraphQL statements could "hang" forever, which caused the corresponding worker thread to be blocked forever. This has been fixed now by introducing a configurable timeout.
GraphQL: The graphql library has been updated to version 20.0.
Core: The node migration process has been improved to reduce resources footprint on large workloads, by chunking the data. An additional configuration item content.batchSize
has been added.
Core: Corner case of updating the webroot info might throw a false conflict exception, when the segment field value is reset for a schema. This has been fixed.
Clustering: Liveness check now marks an instance as dead, if the event bus did not get its own cluster instance ping within the timeout period, even if the non-cluster ping comes in time.
Search: When using language specific index settings, nodes were incorrectly indexed in the language unspecific index when they were moved or tagged causing the node to be present in both the language specific and language unspecific index. This has been fixed.
Core: Having a binary non-segment field update might break the uniqueness of the segment field value, allowing creation of multiple nodes with the same segment/webroot value. This has now been fixed.
Logging: Remove superfluous error messages for HTTP status 4xx errors. These are logged by the logger handler as warnings.
Docker-Image: The base images have been updated to a newer JDK minor version (11.0.16
).
The Gentics Mesh dependency was updated to 1.9.6
.
The Gentics Mesh dependency was updated to 1.9.5
.
Core: When updating permissions of a role for a given object, only the update permissions for the role were checked. A new check has been added to verify that the user requesting the permissions change has read permission on the object.
Core: The value of the jdbc connection password won’t be logged at startup anymore.
The Gentics Mesh dependency was updated to 1.9.4
.
Added healthcheck to the docker image.
The Gentics Mesh dependency was updated to 1.9.3
.
When parsing of metadata was activated, uploading of binaries failed, if they contained entries in the metadata with names that were only different in case. This has been fixed.
Creation of content tables failed for Oracle due to an incorrect data type, which has been fixed.
Recursively deleting nodes is now more performant.
The Gentics Mesh dependency was updated to 1.9.2
.
The Gentics Mesh dependency was updated to 1.9.1
.
This version is based on Gentics Mesh 1.9.0
.
It is now possible to use an external SQL database for data storage as alternative to the embedded OrientDB by using the commercially available Gentics Mesh SQL
.