Changelog

Table of Contents

Clustering Support for OrientDB

Starting with version 2.0.0 clustering with OrientDB is no longer part of the professional support by Gentics. For high availability setups, it is recommended to use Gentics Mesh SQL.

2.0.18 (20.03.2024)

GraphQL: A regression of missing common and, or, not top level filters has been fixed.

2.0.17 (06.03.2024)

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.

2.0.16 (28.02.2024)

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.

2.0.15 (21.02.2024)

REST: When requesting sorted data, the permission limitations are violated. This has been fixed.

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.

2.0.14 (07.02.2024)

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.

2.0.13 (24.01.2024)

GraphQL: Fetching of micronode fields has been improved to allow batch loading.

2.0.12 (10.01.2024)

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.

2.0.11 (20.12.2023)

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.

2.0.10 (06.12.2023)

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: Improve the internal Java API for granting and revoking permissions.

2.0.9 (18.11.2023)

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.

2.0.8 (02.11.2023)

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.

2.0.7 (18.10.2023)

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.

2.0.6 (04.10.2023)

Core: More NPE occurrences during the massive concurrent publishing process have been fixes.

2.0.5 (20.09.2023)

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.

2.0.4 (05.09.2023)

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 metadata request does not crash anymore on the empty (micro)schemas. The new related filter, isEmpty, has been added as well.

2.0.3 (10.08.2023)

Java filter for Node reference content field has been fixed. Native filtering pagination has been improved. Some other minor stability fixed applied.

Plugins: Logging fixed upon false triggering of a warning of inexisting role/group connection.

Core: All named instances have been presented an own cache.

2.0.2 (26.07.2023)

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.

2.0.1 (13.07.2023)

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.

2.0.0 (29.06.2023)

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.

OrientDB: Basic experimental support for OrientDB native filtering/sorting is added. The GraphQL Mesh options has a new preference nativeQueryFiltering with options: NEVER (old filtering, default value), ALWAYS (DB filtering is forced), ON_DEMAND (GraphQL parameter nativeFilter is considered).

1.10.10 (28.06.2023)

Core: The internal check for uniqueness of values in webroot fields has been improved.

1.10.9 (12.06.2023)

Core: An API for permission cache fine tuning (distinct items management) has been added.

1.10.8 (30.05.2023)

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.

1.10.7 (22.05.2023)

GraphQL: Link resolving in graphql queries could cause an internal error (due to a DuplicateKeyException), which has been fixed now.

1.10.6 (10.05.2023)

GraphQL: Performance of queries that return large amounts of nodes with link resolving in fields or getting node fields has been improved.

1.10.5 (19.04.2023)

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: Calling the /health/ready endpoint while restoring an OrientDB backup would block the request. If too many requests were blocked in this way, Mesh would be considered not live any more. This has been fixed now, during a restore, the endpoint /health/ready will now fail immediately while the liveness status will be maintained.

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.

Clustering: when running in CUD coordination mode, the requests to trigger job migration were not delegated to the current master. This has been fixed now.

1.10.4 (23.03.2023)

Core: If a node has more that one INITIAL content for a language in a branch, this can now be repaired with the consistency repair tool.

1.10.3 (08.03.2023)

Docker: Additional command line tools have been added to the Mesh Docker image: rsync, curl, iputils, busybox-extras, tar, nano.

1.10.2 (22.02.2023)

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.

1.10.1 (26.01.2023)

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.

1.10.0 (11.01.2023)

Core: The OrientDB database as been updated to version 3.2.10.

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.

1.9.9 (15.12.2022)

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.

1.9.8 (01.12.2022)

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.

1.9.7 (22.11.2022)

Logging: Remove superfluous error messages for HTTP status 4xx errors. These are logged by the logger handler as warnings.

1.9.6 (17.11.2022)

Docker-Image: The base images have been updated to a newer JDK minor version (11.0.16).

Core: On Elasticsearch index resync the indices for additional languages were deleted, ignoring the actual ES language schema setup. This has been fixed.

Core: The included Mesh UI has been updated to version 1.3.6.

1.9.5 (24.10.2022)

Core: The included Mesh UI has been updated to version 1.3.5.

Clustering: when running in CUD coordination mode, post requests of plugins endpoint were redirected to the master instance. This redirection has been removed since plugins can only modify the graphdb using the mesh rest api.

1.9.4 (06.10.2022)

Core: when an initial admin password is provided with an environment variable, its value won’t be logged anymore.

Core: when a binary file was manually deleted from the file system and the same file was uploaded again through the rest api, the binary upload endpoint was returning a success response even though the binary wasn’t actually uploaded. The file will now be uploaded correctly.

Core: when starting a cluster with the initCluster flag, caches were incorrectly initialized. This could lead to data consistency errors and various validations errors and has been fixed now.

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.

1.9.3 (22.09.2022)

Java Rest Client: The classes MeshWebrootResponse and MeshWebrootFieldResponse now extend Closeable and calling close() on implementations will close the underlying response. See Gentics Mesh Java Client for examples of how to properly close the responses.

1.9.2 (07.09.2022)

Core: The included Mesh UI has been updated to version 1.3.4.

GraphQL: all requests to graphql v2 were failing if one of the schemas included an s3 binary field. This has been fixed.

Dependencies: The 'spring-security', 'gson', 'zip4j' libraries have been updated.

S3: A support of S3 fields has been added to the indexing engine.

1.9.1 (19.08.2022)

GraphQL: When a node with the root webpath was retrieved in a specific branch, a permission error was returned, even if user had permission for it. This has been fixed.

GraphQL: The behaviour for getting a single node with version=draft using GraphQL has been changed. Before, if a user had only read published permissions and was requesting a draft node, the node content was returned in case the draft version matched the published version. Now a permission error will be returned without the actual content of the node.

1.9.0 (22.07.2022)

This version contains OrientDB version 3.1.18.

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.

Core: Possible errors during node migrations in branches have been fixed.

Java Rest Client: The new options maxRetries and retryDelayMs can be used to configure automatic retries for requests to Mesh which failed due to a network error. By default retries are disabled. A value of -1 for retryDelayMs will automatically calculate a delay such that all tries are performed in the timespan of the call timeout configured for the Ok HTTP client.

Plugins: Fixes plugin initialization such that plugins that failed to load will cause the liveness probe to return an unhealthy status.

Cluster: The plugin initialization now waits not only for the write quorum being reached, but for the node availability as well, during the startup.

Core: Schema field names are now checked for uniqueness regardless of case sensitivity. This behavior was already enforced in the UI, and is now enforced in the REST API. The check is not performed for existing schemas.

Core: When a project was deleted, its associated version purge jobs were not. This has been fixed.

1.8.6 (06.07.2022)

GraphQL: The behaviour for getting lists of nodes with version=draft using the REST API or GraphQL was inconsistent for nodes, for which the requesting user only had the read published permission. When using the REST API, those nodes were never returned, using GraphQL, those nodes were returned, if they were published and the draft version happened to be identical to the published version. The behaviour when using GraphQL has been changed to be identical to the REST API now.

Rest: The endpoint GET /api/v2/{project}/tagFamilies/{tagFamilyUuid}/tags/{tagUuid}/nodes did not correctly check for the read when called with version=draft, but returned all tagged nodes with read published permission. This has been fixed.

Rest: The endpoint GET /api/v2/{project}/navroot/{path} failed with a 404 error if called with version=published and at least one of the nodes in the node structure was not published. This has been fixed.

Documentation: The misleading image mentions in the Micronode documentation have been removed.

Jobs: Previously jobs were running in a single transaction. This has been changed to use multiple transactions during the migration.

Jobs: Schema, Microschema and Branch jobs are now migrating entites in batches, instead of one at a time. The number of elements in the batch can be configured in the MeshOptions.

Core: Caffeine caching library has been updated to version 2.8.0.

Core: Graphql-java library has been updated to version 12.0.

Core: If a link to a node was rendered from a url field, the path prefix of the used branch was ignored. This has been changed now, so that links to nodes will always contain the path prefix, regardless of whether the link is rendered from a url field or from segment fields.

Core: When the pathPrefix of a branch was changed, node could possibly still be access using the old pathPrefix due to an internal cache, which was not invalidated. The cache will now be cleared when a branch is modified.

GraphQL: The fields hostname, ssl and pathPrefix have been added to the type branch.

1.8.5 (31.05.2022)

Core: The internal cache for user permissions has been optimized.

OrientDB: The included OrientDB version has been updated to version 3.1.18.

Search: When a schema contained a field of type "micronode" or "list" of "micronode" and no "allow", generating the microschema version hash as part of the search index name failed with a NullPointerException. This has been fixed, so that the microschema version hash will now be null in such cases (like if "allow" was set to an empty array).

Core: The default values for the periodic disk quota check have been changed to absolute values: the default for storage.diskQuota.warnThreshold is now 3G and the default for storage.diskQuota.readOnlyThreshold is 1G.

Server: Fixed defined Health-Check in docker container and added a startup-grace period of 60s.

1.8.4 (10.05.2022)

Rest: Many reading request were implemented in a way that they would never be executed concurrently with other reading requests. So would e.g. a long running graphql request cause webroot requests executed at the same time to be queued until the graphql request was done. The behaviour has been changed, so that reading requests will only be queued, if the worker pool has been exhausted.

Core: A periodic check for the EventBus has been added, which can be configured via the configuration settings vertxOptions.eventBus.checkInterval, vertxOptions.eventBus.warnThreshold and vertxOptions.eventBus.errorThreshold. If enabled (which is the default), and the periodically sent ping event is not received within the given error threshold, the Mesh instance which be considered unhealthy (liveness check will fail).

1.8.3 (08.04.2022)

Core: The included Mesh UI has been updated to version 1.3.3.

Plugins: Creating a static handler for files in the plugin’s classpath using the new method RestPlugin::addStaticHandlerFromClasspath did not work, if the plugin directory was configured with an absolute path. Plugin initialization would fail, because the static handler could not be created. This has been fixed by allowing root filesystem access to the static handler, if the plugin directory is configured with an absolute path.

Clustering: When starting an instance of Gentics Mesh with the command line parameter -resetAdminPassword to reset the password of the admin user, starting would fail if the write quorum of OrientDB was not reached. The startup behaviour has been changed now, so that resetting the password is delayed until the write quorum is reached.

Rest: When creating a new user and setting the admin flag to false, this failed if the request user did not have the admin flag set to true. The permission check has been fixed now, so that the admin flag is only required for the requesting user, if the new user should also have the admin flag set to true.

Core: When a project was renamed, deleted and then recreated with the same name, an internal cache was not cleared and caused subsequent errors in calls to the project, until the Mesh instance was restarted. This has been fixed now. The internal caches will be properly cleared.

Rest: The new endpoint DELETE /api/v1/admin/cache will clear all internal caches (cluster wide).

1.8.2 (29.03.2022)

Core: The max form attribute size can now be configured and is set to unlimited by default. This limit became relevant for multipart requests after the update to Vert.x 3.9.12.

1.8.1 (24.03.2022)

Core: The included Mesh UI has been updated to version 1.3.2.

1.8.0 (21.03.2022)

Architecture overhaul

The internal architecture has been changed, in order to make a clean separation between the business logic and the persistence layer.

The business logic is now completely independent from our current persistency layer (OrientDB), but uses an (internal) persistence API instead. Persistence with OrientDB is the current implementation of the persistence API.

The support for the embedded version of Elasticsearch has been dropped. It is necessary now to setup Elasticsearch as a dedicated service.

Core: The core Vert.x library was updated to version 3.9.12.

With the update to Vert.x 3.9.12, creating a StaticHandler in a plugin to serve static files from the plugin’s classpath does not work any more. Instead of creating an instance of the StaticHandler, the new method RestPlugin::addStaticHandlerFromClasspath should be used instead.

Rest: The endpoint /api/v1/admin/jobs now supports query parameters for filtering (status, type, branchName, branchUuid, schemaName, schemaUuid, microschemaName, microschemaUuid, fromVersion, toVersion).

Search: The periodic check for correctness of the indices in Elasticsearch created temporary indices, which did not start with the installation prefix, and thus were sometimes not cleaned up. The naming of those temporary indices has now been changed to also start with the installation prefix.

Core: The 'commons-codec' libary has been updated. This fixes possible internal errors when parsing uploaded files using tika.

Core: The Jackson libraries have been updated to version 2.13.2.

Core: The Netty libraries have been updated to version 4.1.72.Final.

Security: The 'spring-security', 'jsoup', 'commons-io', 'guava', 'jackson-databind' libraries have been updated.

Cluster: When starting a node with a new version of Gentics Mesh in a cluster, application of the changelog and setting the new Mesh version and database revision was delayed until the write quorum is reached, but not until the cluster topology lock was raised, which could cause a blocked transaction. This has been fixed.

1.7.22 (1.12.2021)

OrientDB: The included OrientDB version has been downgraded to version 3.1.11.

OrientDB version 3.1.15, which was included in Mesh 1.7.21 has some serious bugs, therefore, Mesh 1.7.21 has been unreleased and the OrientDB Version has been changed back to 3.1.11.

Search: When the ElasticSearch instance is not available, getting version information from the endpoint /api/v1 failed with an internal server error. This has been fixed, calling the endpoint /api/v1 will not fail anymore, but will not contain the ElasticSearch version.

Rest: When a project with name "project" was deleted, calls to the endpoint /projects would cause 404 errors, until the Mesh instance was restarted. This has been fixed now.

Java Rest Client: If requests to mesh fail with I/O errors (including timeouts), the thrown exception will now also contain the request method and URL.

Server: Liveness-Check script live.sh will now fail if the mesh.live file has not been changed since 20s (previously 60s)

Docker-Image: The base image has been changed from JRE to JDK to include more tools for analyzing (e.g. creating heap-dumps). The base image has been updated to a newer JDK minor version (11.0.12)

1.7.21 (11.11.2021 - Unreleased)

OrientDB: The included OrientDB version has been updated to version 3.1.15.

Cluster: When doing a rolling update in a cluster, a OConcurrentModificationException could occur during the startup, which could cause subsequent errors. This has been fixed.

Core: A periodic check for available disk space has been added. If not enough disk space is available, Gentics Mesh will be set to read-only to avoid corruption of the storage due to a full disk. Additionally, the metrics mesh_storage_disk_total and mesh_storage_disk_usable have been added to monitoring.

Search: The indices for nodes of a schema, which contains fields of type "micronode" have a mapping for the fields in the allowed microschemas, but were not changed, if the microschemas were changed. This caused subsequent errors while indexing or searching. The naming of such indices have been changed to contain a hash over all allowed microschema versions and when a microschema is changed, a new index will be created now. This update will automatically drop and recreate all existing indices for schemas containing fields of type "micronode".

AWS S3: Now the Cross-Origin Request Settings parameters of a S3 connection can be configured. By default the allowed headers/origins are set to *, the allowed methods are set to "GET", "PUT", "POST", "DELETE". Setting any of the CORS configuration to null prevents is to override the server’s default configuration. Setting all the CORS configuration to null or empty value prevents the CORS config to be changed at all.

1.7.20 (19.10.2021)

Server: added a health/writable monitoring and REST endpoint to check whether mesh is in a writable state (e.g. the topology lock is not hold).

Server: when a schema was updated with a new field with elastic search properties, these were ignored. This has been fixed now.

Search: If ElasticSearch indices, which were originally created by Mesh were dropped, they would probably be re-created with the default mapping when Mesh stored a document in the index. This could cause the index to be not completely filled and also the mapping to be incorrect, so that search queries would fail to find documents. In order to detect and repair such situations, a periodic check has been added to Mesh, which will check existence and correctness of all required ElasticSearch indices. Missing indices will be created and incorrect indices will be dropped and re-created. Afterwards a full sync for the affected indices will be triggered. The check period can be configured with the new configuration setting search.indexCheckInterval, which defaults to 60_000 milliseconds. Setting the interval to 0 will disable the periodic check (not recommended).

Search: The index maintenance endpoints /api/v1/search/sync and /api/v1/search/clear have been extended with the query parameter index, which can be used to restrict the synchronized/cleared indices by a regular expression.

Search: The index maintenance actions triggered via /api/v1/search/sync and /api/v1/search/clear will now be redirected to the current master instance, if the cluster coordinator is used.

Core: The included Mesh UI has been updated to version 1.3.1, containing the language-related improvements and minor bugfixes.

1.7.19 (12.10.2021)

Search: When a full synchronization of the search indices was triggered, language specific indices were unnecessarily removed first. This has been changed, language specific indices will now be treated like all other indices during a full synchronization.

Core: When performing an update for role permissions, an event was published even if the update actually did not change anything. A check has been added to only publish the event if permissions are actually changed.

Core: When eventbus messages where published during execution of a job (e.g. a node migration), the events were not published and handled immediately, but were queued in memory and eventually published after the job execution. This caused high memory consumption during a node migration and also the elasticsearch indexing of migrated nodes to be delayed until after all nodes had been migrated. Execution of the jobs has been changed now, so that events will be published immediately to fix those issues.

Core: The overall memory consumption during a migration job has been reduced.

Clustering: Due to a bug in the vert.x eventbus system, elasticsearch sync operations were not only performed in the Mesh instance, were the causing data change actually happened, but on all Mesh instances, which caused unnecessary high load on the elasticsearch. This has been fixed with a workaround.

Core: When deleting old versions of nodes, the related binaries were not deleted from the disk. This has been fixed now. Credits to https://github.com/kdima001.

Core: When an OrientDB transaction repeatedly fails and runs into the retry limit, the original cause will now also be logged.

Server: When an OutOfMemory was caught or one of the plugins (permanently) failed to initialize, mesh was still considered to be live. This has been fixed now.

Clustering: When doing an offline update of Mesh in a cluster, the first instance of the cluster could not be started with the new Mesh version, because the new version should be written into OrientDB, which failed due to write quorum not reached. The initialization procedure has been changed now, so that executing the changelog and storing the Mesh version and DB revision will now only be started after the write quorum has been reached.

1.7.18 (23.09.2021)

Server: Mesh will now create a file mesh.live and touch it every 10 seconds as long as the instance is considered live. If an OutOfMemory is caught or one of the plugins (permanently) fails to initialize, mesh is considered no longer live and the file will not be touched any more.

Server: The readiness probe will now also check the status of the local OrientDB storage. A mesh instance will only be considered "ready" if the local OrientDB storage is "ONLINE".

GraphQL: The wait parameter will now only wait for elasticsearch to be ready when a query option in nodes is actively used. Previously it would wait for elasticsearch even if it wasn’t needed.

1.7.17 (22.09.2021)

Clustering: When recovering from a split-brain situation, the topology lock (which was raised, because nodes rejoined the cluster) was not always removed. This has been fixed, and some info log about the reason for the topology lock has been added.

1.7.16 (26.08.2021)

Core: The included Mesh UI has been updated to version 1.3.0, containing the stability improvements, as well as the new feature of the node status (draft/updated/published/archived etc) filtering.

1.7.15 (19.08.2021)

Clustering: The high level changelog system has been extended to allow for specific changes to be executed in cluster mode.

1.7.14 (10.08.2021)

Core: A bug preventing the string schema field restrictions from being cleared, has been fixed.

1.7.13 (21.06.2021)

Core: The included Hazelcast-Kubernetes library has been updated to version 1.5.6, containing a DNS resolving fix.

1.7.12 (17.06.2021)

AWS S3: A bug preventing the new image data from being stored into an existing s3binary container, has been fixed. AWS S3: An inability of changing permissions for the schema with an S3 field has been fixed.

1.7.11 (03.06.2021)

Core: Added support for storing/referencing the binary data at Amazon Web Services S3 container.

1.7.10 (02.06.2021)

Clustering: The cluster.topologyChangeReadOnly setting and MESH_CLUSTER_TOPOLOGY_CHANGE_READONLY environment setting have been added. By enabling this flag, Mesh will be automatically set in readOnly mode, when the cluster topology changes, which will let reading requests pass and writing requests fail (immediately), instead of blocking all requests, which happens when the cluster.topologyLockTimeout is set to a positive value.

Plugins: If plugin initialization fails due to topology changes (e.g. the OrientDB needs to be synchronized from another node), the plugin will be set to status FAILED_RETRY and initialization will be retried as soon as OrientDB becomes available again.

Clustering: The timeout for waiting to join the cluster (which includes the time for synchronizing the graphdb storage), which was hardcoded to 500_000 milliseconds, can now be configured with the setting storage.clusterJoinTimeout or the environment variable MESH_GRAPH_CLUSTER_JOIN_TIMEOUT.

1.7.9 (12.05.2021)

OrientDB: The included OrientDB version has been updated to version 3.1.11.

1.7.8 (27.04.2021)

Upload: More user-friendly message + HTTP 400 error on an attempt to upload an empty file.

OrientDB: The included OrientDB version has been updated to version 3.1.10.

Plugins: An issue in the plugin environment has been fixed which prevents plugin REST handler starting over 0.0.0.0 host IP address, when the OS disallows it.

Upload: The document processing library tika has been updated to version 1.26 to fix the PDF parser failing on files with some Adobe fonts.

1.7.7 (10.03.2021)

Core: Added support for looking up the node field content by the webroot path and a field name.

Rest: Added new endpoint for the webroot path field lookup.

1.7.6 (22.12.2020)

Changelog: Fix the failing on-the-fly migration introduced in 1.7.5. The migration was producing ClassCastExceptions.

Jobs: A race condition within the job processing mechanism has been fixed. In some cases newly created jobs would not be automatically invoked. This has been fixed now.

Jobs: New jobs will now set the correct start date and time.

OrientDB: The included OrientDB version has been updated to version 3.1.6.

OrientDB: A bug in the startup order has been fixed which prevented opening of databases via OrientDB Studio.

Core: Binary upload processing failed for binaries with brackets in the metadata key. This has been fixed now.

GraphQL: Queries, that take longer than the configured threshold will be logged now. See GraphQL Slow Query Log for details.

1.7.5 (09.11.2020)

Changelog: The changelog entry that introduces bucket ids which are needed for the differential sync mechanism has been removed. New Ids will now be generated on-the-fly. #1152

1.7.4 (22.10.2020)

OrientDB: The included OrientDB version has been updated to version 3.1.4.

Clustering: The coordination feature will now be automatically disabled whenever clustering is disabled.

Clustering: Internal caches will now be cleared when cluster topology changes occur.

Backup: The ?consistencyCheck query parameter was added to the /api/v2/admin/backup endpoint. When set to true it will run the consistency check before invoking the backup. The call will fail when inconsistencies were detected.

Clustering: An additional check has been added which will prevent nodes from joining a cluster which contains an outdated database. The -initCluster flag needs to be used for a single instance to migrate the cluster. This is done to prevent concurrency issues during changelog execution and cluster formation.

Tests: The path handling for the MeshContainer test container class has been updated. Container data will now be placed in the target/mesh-containers folder.

1.7.3 (06.10.2020)

Additional log output and checks have been added to the auth plugin mapping code. This fix also addresses the Null keys are not supported error which was thrown when handling mappings which provide no group and role names. #1138

OrientDB: The included OrientDB version has been updated to version 3.0.34.

Rest: The webroot cache error handling has been improved.

Clustering: A check for invalid cluster options has been added. The networkHost value can’t be set to 0.0.0.0 since this IP can’t be used for announcing nodes in a cluster.

1.7.2 (25.09.2020)

Core: The link renderer now tries to use url fields to render the link if it cannot be constructed using segment fields.

Search: The memory footprint of the differential sync mechanism has been reduced. The sync operations will now be split into buckets. The size of the buckets can be influenced via the search.syncBatchSize setting.

The new sync mechanism requires a reindex of all documents. The Elasticsearch indices will be automatically cleared and re-synced during the first startup of this version.

Core: Fixed a bug that which prevented to update a node reference of a user if the user already had one set. #1114

Core: It is now possible to disable extracting of metadata or content from binaries on a per-field basis. See schema field types documentation for more information.

Plugins: The default plugin timeout has been increased from 15 seconds to two minutes.

Monitoring: The readiness probe will now also check for plugin status. Failed plugin deployments will let the readiness probe fail.

Monitoring: The readiness probe will now no longer fail when a plugin is not registered. Instead it will only fail when a plugin deployment has failed.

Monitoring: The liveness probe will now check for plugin status. Failed plugin deployments will let the liveness probe fail.

Clustering: The webroot handler no longer uses the cluster-wide write lock.

Logging: Failing readiness checks are now logged using the WARN level.

1.7.1 (05.09.2020)

Internal: The internal code has been refactored and cleaned up.

Plugins: The default plugin timeout has been increased from 15 seconds to two minutes.

Core: Fixed a bug that which prevented to update a node reference of a user if the user already had one set. #1114

Core: Fixed a bug which caused a NullPointerException when loading the content for which the last editor has been deleted. #1117

1.7.0 (07.08.2020)

Java 10: This version of Gentics Mesh will only be executable using Java 10 or newer JVM versions. The Java APIs for mesh-api, mesh-rest-model, mesh-rest-client and mesh-test-common are still be usable with Java 8. Plugins need to be upgraded to Java 10 in order to be compatible with this version.

Internal: The maven package structure for internal code has been changed.

Internal: The internal code has been cleaned up.

1.6.0 (05.08.2020)

GraphQL: Various issues with the permission handling in GraphQL have been addressed. Please note that this change may affect your GraphQL query results. It is thus advised to check whether your query returns the data you need with the current set of active permissions. Details on the behaviour of the permission system can be found in the graphql documentation.

GraphQL: Permission errors will now also contain information about the location of the error within the query.

GraphQL: The version argument has been added to all locations where it is possible to load nodes. This argument can be used to select whether draft or published nodes should be returned. See graphql documentation for details.

Monitoring: The readiness probe will now also check for plugin status. Failed plugin deployments will let the readiness probe fail.

1.5.3 (16.07.2020)

Permissions: Various flaws in the admin permission handling have been fixed.

  • The resetAdminPassword command line operation will now also re-create the admin user if it can’t be found.

  • The admin permission is no longer bound to the admin role. Instead a dedicated admin flag can be set for users in order to grant admin privileges on a per-user basis. Mesh will automatically set the user admin flag for all users which have access to the role with the name admin. The permissions of the admin role will not be changed. It is advised to remove the admin group and admin role since those are no longer needed to cover admin privileges.

  • The admin user flag is also part of the user principal and can be used by plugins to check for admin privileges.

  • Admin endpoints will now check for the admin user flag and disregard any role that has been assigned to the user.

Elasticsearch: The branchUuid property was added to documents in the search index.

Security: A minor security issue has been fixed.

UI: The Gentics Mesh UI has been updated to version 1.1.2

1.5.2 (22.06.2020)

Config: It is now possible to configure the image cache directory path using the MESH_IMAGE_CACHE_DIRECTORY environment variable. Fixes #1067

Consistency Checks: An empty binary will no longer be considered inconsistent.

REST: Allow field during node field update is now validated strictly in the API. Fixes #975

Core: Resolving node links to nodes in the same project and branch will now yield relative URLs, as documented.

1.5.1 (11.05.2020)

Java Rest Client: MeshRequest#toCompletable() now throws an exception again when receiving an error from the server.

1.5.0 (08.05.2020)

Test: An enhanced test container class has been added. The MeshContainer class replaces the MeshDockerServer which was deprecated.

Elasticsearch: It is now possible to define Elasticsearch settings / mappings per language. This helps using language specific stemmers or stop word lists. Please refer to the documentation for more information.

Core: Fixed a bug that caused an internal server error if a project was attempted to be created after any role with permissions to create projects was deleted.

Java Rest Client: The response body is now properly closed when calling blockingAwait() on a request.

GraphQL: Errors during GraphQL queries are now correctly propagated to the client.

Plugins: The plugin registration process was changed. Plugins will now no longer be directly registered when deployed. Instead the plugins will remain in a pre-registration status until Gentics Mesh is able to deploy them. This is especially useful when running plugins in clustered mode. Plugins will only be registered when the write quorum has been reached. Additionally the plugin deployment process will now utilize a lock in clustered mode to prevent concurrent deployments of plugins. The plugin status was added to the plugin endpoint response.

Clustering: The write lock was removed from the DELETE /api/v2/admin/plugins/:id and POST /api/v2/admin/plugins endpoints to prevent potential deadlocks.

1.4.8 (21.04.2020)

Clustering: The coordinator layer feature will now exclude redirection for requests to the /api/v2/health/live and /api/v2/health/ready endpoints.

OAuth2: The write lock will now also be utilized when mapping JWTs.

1.4.7 (21.04.2020)

Server: The /api/v2/raml endpoint can now only be accessed by admin users.

Server: Admin users can now always see the serverTokens regardless of the serverTokens setting.

Elasticsearch: Fixed a bug that prevented Elasticsearch synchronization of projects after deleting a role. #1041

1.4.6 (20.04.2020)

Clustering/Graph: The already existing synchronizeWrites feature has been extended. A cluster-wide write lock will now be used when running in clustered mode. This drastically reduces contention. The lock will also be used when new instances join the cluster to prevent synchronization issues with distributed transactions.

Graph: The internal transaction handling has been refactored and unified to better accommodate the new global write lock mechanism.

Clustering: The cluster startup and shutdown processes have been modified to be less error prone. Hazelcast will now be started before OrientDB. Cluster instances now join the cluster sequentially instead of in parallel. This results in a slower but more stable cluster startup process. The shutdown process is now hardened against situations where already dispatched distributed transactions could potentially be lost.

1.4.5 (17.04.2020)

Server: The serverTokens flag and MESH_HTTP_SERVER_TOKENS env has been added to the server config. The flag controls whether server version information is exposed via REST (/api/v1, /api/v2), GraphQL or HTTP headers. By default server tokens are enabled.

Changelog: The automated recovery introduced in v1.4.4 now renames duplicate versions instead of deleting them.

Image Manipulation: Gentics Mesh now supports the auto parameter when manipulating images. For more info check the Image Manipulation documentation.

Core: Migrating remaining nodes via the /{project}/branches/{branchUuid}/migrateSchemas and /{project}/branches/{branchUuid}/migrateMicroschemas now includes all previous schema versions instead of only active schema versions.

1.4.4 (14.04.2020)

Microschema migrations since version 1.2.0 are very likely to cause a loss of data in nodes that contain micronodes of the migrated schema. This bug has been fixed in this version. At the first start with this version or higher, Gentics Mesh will try to restore affected nodes in projects with a single branch. However, because some data cannot be restored, we advise to restore a backup of a moment before the microschemaModel migration, if possible. We apologize for the inconvenience.

Monitoring: Metrics have been added for the synchronized write lock, the topology lock, commit times and interrupts. Take a look at our documentation for more information.

1.4.3 (17.03.2020)

Graph: It is now possible to configure a transaction commit timeout. The storage.txCommitTimeout or MESH_GRAPH_TX_COMMIT_TIMEOUT environment setting can be used to configure the timeout in milliseconds. By default no timeout will be applied.

Graph: The storage.synchronizeWritesTimeout setting and MESH_GRAPH_SYNC_WRITES_TIMEOUT environment setting have been added. It is now possible to configure the write lock timeout using these settings.

Graph: It is now possible to configure a transaction commit timeout. The storage.txCommitTimeout or MESH_GRAPH_TX_COMMIT_TIMEOUT environment setting can be used to configure the timeout in milliseconds. By default no timeout will be applied.

GraphQL: It is now possible to use paging arguments when loading nodes via the NodeContent#referencedBy field.

Clustering: The cluster.topologyLockTimeout setting has been added. When set to a value greater than 0 a write lock will be applied to prevent write requests during cluster topology changes.

Clustering: The coordinator layer feature has been added. The layer can be enabled to efficiently process REST requests in a multi-master and master-replica cluster setup.

More information can be found in the Cluster coordination section.

REST: The /admin/shutdown endpoint has been added. This allows users with admin privileges to shutdown the mesh process.

REST: It is now possible to read and update the cluster configuration in runtime via the /api/v2/admin/cluster/config endpoint.

Clustering: The default value for the vertxPort setting has been changed to 4848.

Docker: An issue with the docker building process has been fixed which caused an unnecessary layer to be added to the docker image.

1.4.2 (24.02.2020)

UI: The Gentics Mesh UI has been updated to version 1.1.1

Core: The storage filesystem compatibility check has been made more reliable.

Core: Fixed a bug that caused errors during microschemaModel migrations in certain situations.

1.4.1 (19.01.2020)

Core: The core Vert.x library was updated to version 3.8.5.

OrientDB: The included OrientDB version has been updated to version 3.0.28

Core: The handler for webroot updates is now running in a worker thread. This will prevent "Thread blocked" messages in the log.

Core: The debuginfo endpoint now correctly includes the default-distributed-db-config.json file.

1.4.0 (24.01.2020)

Security: User client certificate handling has been added to the Mesh Server.

The following settings have been added:

  • server.sslPort (Env: MESH_HTTPS_PORT) - SSL Port (Default: 8443)

  • server.http (Env: MESH_HTTP_ENABLE) - Flag to enable http server (Default: true)

  • server.clientAuthMode (Env: MESH_HTTP_SSL_CLIENT_AUTH_MODE) - Authentication mode to control how client certificates should be handled. (Default: none)

  • server.trustedCertPaths (Env: MESH_HTTP_SSL_TRUSTED_CERTS) - List of certificates which will be trusted by the server.

The Gentics Mesh HTTPs server supports three client authentication modes:

  • none - Reject client certificates during SSL handshake (default)

  • request - Request client certificate. A client certificate will be used when provided. The request will also work when omitting the client cert.

  • require - Requiring a client certificate. The ssl handshake will fail when no client certificate was provided.

More information can be found in the HTTPs server section.

Java Rest Client: The client configuration has been enhanced. It is now possible to specify a client certificate and key to be used by the REST client.

The following methods have been added to the config builder for MeshRestClientConfig:

Methods to set the client key which will be used during SSL handshake:

  • MeshRestClientConfig.Builder#setClientKey(String path)

  • MeshRestClientConfig.Builder#setClientKey(InputStream ins)

  • MeshRestClientConfig.Builder#setClientKey(byte[] data)

Methods to set the client certificate which will be used during SSL handshake:

  • MeshRestClientConfig.Builder#setClientCert(String path)

  • MeshRestClientConfig.Builder#setClientCert(InputStream ins)

  • MeshRestClientConfig.Builder#setClientCert(byte[] data)

Methods to add one or more trusted CAs for the client:

  • MeshRestClientConfig.Builder#addTrustedCA(String path)

  • MeshRestClientConfig.Builder#addTrustedCA(InputStream ins)

  • MeshRestClientConfig.Builder#addTrustedCA(byte[] data)

Method to set the hostname verification checks:

  • MeshRestClientConfig.Builder#setHostnameVerification(boolean flag)

Storage: Gentics Mesh will now automatically detect storage filesystem capabilities and enable or disable DirectIO features accordingly.

Core: Improved REST API startup performance. Fixes #996

Docker: The Gentics Mesh demo docker container has been updated:

  • Additional group permissions will be set to the application folders to allow root group to access and write into those.

  • The pre-extracted embedded Elasticsearch folder has been removed from the server image to reduce the docker image size. The embedded ES will automatically be extracted to the /mesh/elasticsearch folder when embedded mode is enabled.

  • The JRE version in the docker image has been updated from version 11.0.3_7 to 11.0.5_10.

1.3.3 (17.01.2020)

Core: Fixed a bug in the link renderer that caused the language parameter to be ignored if the branch parameter was passed.

Core: The maximum transaction batch size when purging versions is now configurable. Lowering the value from its default (10) will cause the version purge to take more time, but use less memory.

Docker: The Gentics Mesh server docker container has been updated:

  • Additional group permissions will be set to the application folders to allow root group to access and write into those.

  • It is now possible to run the container with any uid. The user for the specified UID will automatically be created. This change enhances OpenShift support for the docker containers.

  • The pre-extracted embedded Elasticsearch folder has been removed from the server image to reduce the docker image size. The embedded ES will automatically be extracted to the /mesh/elasticsearch folder when embedded mode is enabled.

  • The JRE version in the docker image has been updated from version 11.0.3_7 to 11.0.5_10.

1.3.2 (12.12.2019)

Fixed a bug in the {project}/nodes/{node} endpoint that allowed nodes to be found even if the requested node is not part of the project.

Fixed a bug that caused errors if an entity was requested by UUID and that UUID was from an entity of another type.

Security: A dedicated logger for security related actions has been added. This logger always adds the IP address and username of the client. You can configure the logger in the logback.xml using the name SecurityLogger.

1.3.1 (09.12.2019)

Tests: The MeshDockerServer and MeshLocalServer testcontainer classes will now set the initial admin password and not use a random generated password.

Java Rest Client: The client will now set the default max requests per host limit to 64 instead of 5 to improve concurrent request handling.

1.3.0 (05.12.2019)

Core: The amount of the deployed REST API verticles can now be configured and its default has been changed from 5 to 2 * CPU Cores.

Core: It is now possible to use Gentics Mesh in read only mode. Take a look at the documentation for more information.

REST: The /health/live and /health/ready endpoints have been added to the REST API. These endpoints are also available on the monitoring server, but adding them to the REST server makes it possible for load balancers to monitor the server on the same port that used to proxy the requests.

REST: The /user/:uuid/token endpoint now has the Cache-Control header set to private.

Java Rest Client: Fixed a bug that caused MeshOkHttpRequestImpl#getResponse to always return null.

Core: The core Vert.x library was updated to version 3.8.4.

Core: The core plugin framework library was updated to version 2.1.0.

OrientDB: The included OrientDB version has been updated to version 3.0.25

Security: Build artifacts for Gentics Mesh will now be cryptographically signed using GPG.

Core: Some no longer needed dependencies were removed.

Security: The initial admin password that is created during setup will now be randomized and it is required to enter a new password on the first login. The MESH_INITIAL_ADMIN_PASSWORD environment variable can be used to set a custom initial password. The password reset rule can be disabled via the MESH_INITIAL_ADMIN_PASSWORD_FORCE_RESET environment variable.

1.2.1 (22.11.2019)

Core: Mesh now uses a different parser for processing .docx and .pptx files. Parsing these files will now require far less memory.

GraphQL: Fixed fetching node references from users. #393 #934

Java Rest Client: Fixed a bug that some generic methods would not allow response objects of any class.

1.2.0 (20.11.2019)

The internal database structure has changed significantly to avoid vertices with many edges. This will result in a higher write performance on bigger systems. For this change, the API of Gentics Mesh did not change at all. When starting with this version on an existing database, the structure changes will be applied automatically, which will take some time to complete.
If you are running Gentics Mesh in cluster mode, you need to initialize the cluster again. You must use the -initCluster command line argument or set the MESH_CLUSTER_INIT to true on one of the master instances of the cluster.

Java Rest Client: Generic methods (get, post, put, delete) now allow response objects of any class.

UI: The UI has been updated to version 1.1.0.

1.1.1 (11.11.2019)

GraphQL: The GraphQL Endpoint now supports the wait query-parameter like the Search Endpoint does. #805

Clustering: The role of an instance has been added to the cluster status response.

Plugins: It is now possible to specify the API Version that should be used when creating a new admin client. #216

Core: Some optimizations to uploading binaries have been made.

Core: Fixed an issues that sometimes caused errors when performing write requests during a schema migration.

UI: The UI has been updated to version 1.0.2.

1.1.0 (29.10.2019)

The internal monitoring library has been changed from dropwizard to micrometer. This allows better labeling of various metrics for Prometheus. With this change, some metrics names from Vert.x have been changed. See here for the new list of Vert.x metrics. By default, JVM metrics are also recorded. This can be configured in the monitoring options. Also, the response structure in the /search/status endpoint has changed. Take a look at the API docs for a new example.

Search: A new setting has been added which can be used to enable Elasticsearch 7 support. The search.complianceMode setting in the mesh.yml file can be used to control the compliance mode for Elasticsearch support. The setting can also be controlled via the MESH_ELASTICSEARCH_COMPLIANCE_MODE environment variable. Currently there are two modes: ES_7 for Elasticsearch 7.x and ES_6 for Elasticsearch 6.x. By default ES_6 will be used thus no changes are required for existing installations.

Core: A new endpoint for administration has been added. The /admin/debuginfo endpoint lets you gain various informations about the system. Take a look at the administration guide for details.

Monitoring: New metrics for caching statistics have been added. Take a look at the documentation for the new metrics.

OrientDB: The included OrientDB version has been updated to version 3.0.24

Core: Some extensive logging messages will now only be logged on a finer log level. These include error messages for GraphQL queries, on closed client connections and requests sent to Elasticsearch.

1.0.2 (11.10.2019)

Core: The internal memory usage has been reduced.

1.0.1 (08.10.2019)

UI: The UI has been updated to version 1.0.1

Core: Link resolving now supports branches. Take a look at the documentation for more information. #38

1.0.0 (03.10.2019)

New UI

This version of Gentics Mesh contains the a new UI which is accessible via /mesh-ui. The old UI is still part of this release and can be accessed via /mesh-ui-v1.

The following noteworthy aspects of the UI have been updated / altered:

  • The permission management has been reworked

  • The new schema editor which features autocompletion

  • The usability of the edit view has been enhanced

  • The editor for HTML fields has been replaced

  • A new image editor has been added which now supports focal point handling

  • Language handling has been improved

  • The UI no longer depends on Elasticsearch

New defaults

For new server installations (mesh-server) the Elasticsearch embedded server will no longer be enabled by default. The demo server (mesh-demo) will still start the embedded Elasticsearch server for ease of use. It is still possible to enable the embedded server via the search.startEmbedded: true and search.url: http://localhost:9200 settings in the mesh.yml file.

Search: Synchronizing the search index when starting after Gentics Mesh has not been stopped properly will not block the startup routine anymore. #862

Core: Path resolving performance has been increased.

0.41.0 (01.10.2019)

REST: The ETag generation was reworked. This means that previously generated ETags are no longer valid.

REST: Fixed ETag generation when fields or rolePerms was used. Previously these parameters did not affect the ETag. #881

Reworked OAuth2 / OIDC support

The security.oauth2 configuration section was removed. Instead the security.publicKeysPath property was added.

In order to provide support for more authentication providers it is now possible to specify the path to a file which contains the public keys in the configuration. These keys will be used to validate the access tokens.

You can read more about how to setup OAuth2 / OIDC in the OAuth2 / OIDC guide.

It is now also possible for Authentication Service Plugins to provide Json Web Keys (JWK) to Gentics Mesh. Plugins can load the accepted JWK’s from the authentication provider server and return it to Gentics Mesh. A plugin has to implement the getPublicKeys() method to support this.

Plugins can now implement the extractUsername() method to return the username that should be used to handle mappings between Mesh and JWT.

Please note that installations which already use an authentication plugin can either update the plugin and provide the public keys or manually add the public key to the public-keys.json configuration file.

0.40.3 (13.09.2019)

Java Rest Client: Various new methods have been added to handle endpoint agnostic requests (get(), post(), delete(), put()). These methods can be used to handle plugin requests.

Migration: It is now possible to apply schema / microschemaModel changes that include the name property via the changes endpoint. Previously the name property was not utilized.

0.40.2 (09.09.2019)

Core: It is now possible to configure the transaction retry limit using the MESH_GRAPH_TX_RETRY_LIMIT environment variable or the storage.txRetryLimit parameter.

Core: The default value for storage.synchronizeWrites has been changed to true.

Core: The default value for the OrientDB parameter tx.retry.delay has been increased to 10ms, and the constant delay will be used instead of growing linearly. It is now possible to configure the delay via the MESH_GRAPH_TX_RETRY_DELAY environment variable.

Config: It is now possible to override the mapping mode with the MESH_ELASTICSEARCH_MAPPING_MODE environment variable. #878

0.40.1 (06.09.2019)

REST: When updating permissions to an element, unset permissions in the request will not change these permissions anymore. Previously, unset permission were set to false.

Core: Various handlers were blocking the event loop when run. This has been fixed now.

Core: Fixed delayed initialization of VersionPurgeJobImpl vertices. Previously the type was not setup during start up and this resulted in a warning when the type was first used.

Java Rest Client: The createSchema() methods now accept a ParameterProvider vararg parameter.

Core: Schema validation will no longer fail by default, when Elasticsearch is not available. The previous behavior can be enforced by adding ?strictValidation=true.

GraphQL: Fixed a bug that prevented loading of permissions of an element.

GraphQL: Added the rolePerms field to mesh elements. This allows you to load permissions of a role, similar to the ?role query parameter in REST.

0.40.0 (27.08.2019)

Image Manipulation: The new resizing options smart, prop and force have been added.

force

The ?resize=force mode will resize the image to the specified dimensions. This can lead to a distorted image when the aspect ratio of the source image does not match the destination aspect ratio.

smart

When using ?resize=smart the resizer will automatically crop the image to the desired dimensions instead of distorting it when providing width and height parameters which would result in an aspect ratio that is different from the original images aspect ratio.

The new default image resize mode is smart which potentially crops an image when requested aspect ratio that diverge from the source images aspectratio. The old behaviour can now be achieved by using the ?resize=force parameter.

prop

The ?resize=prop mode will resize the image proportionally so that the resulting destination format fits inside the provided dimensions (width, height). No distortion of the image will occur.

For details on image manipulation and resizing opions read the Image Manipulation documentation.

This change might not automatically apply when an image is already in the cache. To make sure that the changes take effect, the cache in data/binaryImageCache/ must be manually cleared.

Search: A new search option search.mappingMode has been added. The mapping mode setting influences how mappings for fields will be generated. By default the mode DYNAMIC is used. In this mode mappings are generated as before. When using the mode STRICT only mappings for fields which have a custom mapping via the elasticsearch schema parameter will be created. This is useful if you want to have finer control of what contents should be added to Elasticsearch.

Graph: The default value for tx.retry.delay has been set to 0. The tx delay will thus be disabled by default.

Clustering: The storage.synchronizeWrites option will be enabled by default when clustering is active.

OrientDB: The included OrientDB version has been updated to version 3.0.23

0.39.2 (20.08.2019)

A regression in v0.38.0 caused migration errors for nodes which contained not yet populated fields. This issue has now been fixed. Failed migrations can be re-run by deleting the failed job via DELETE /api/v2/admin/jobs/{jobUuid} and triggering POST /api/v2/{project}/branches/{branchUuid}/migrateSchemas to create a new migration job. #847

Graph: It is now possible to configure the OrientDB transaction delay by adding the tx.retry.delay parameter to the the storage.parameters field.

0.39.1 (14.08.2019)

A regression in v0.39.0 broke the /demo endpoint. This has been fixed now and the demo application is accessible again.

0.39.0 (13.08.2019)

Core: The core has been reworked to add future support for multitenancy in Gentics Mesh.

0.38.1 (12.08.2019)

Plugins: A bug in the plugin startup process has been fixed. Previously plugins were not initialized prior to registration.

GraphQL: The pluginApi field will no longer be added to the schema if no GraphQL plugins have been deployed to avoid schema validation errors. #842

Changelog: The ReleaseBranchRenameChange entry has been updated to reduce required memory and increase execution performance on large databases (2m+ nodes).

REST: A X-Powered-By header was added to all http responses.

0.38.0 (09.08.2019)

Removal of mapper script support

The mapper script support has been dropped due to the deprecation of the Nashorn JavaScript engine. The functionality of mapper scripts can be replaced by usage of the new Authentication Service Plugin API.

The auth.mapperScriptDevMode and auth.mapperScriptPath configuration options are no longer needed and have been removed.

: Plugins: The query type of plugins will now automatically be prefixed with the plugin apiName to ensure that no type conflicts can occur.

0.37.1 (06.08.2019)

Core: The core Dagger library was updated from version 2.11 to 2.24.

Logging: Additional activity information will be logged when the logger for class io.vertx.core.eventbus.EventBus is set to level DEBUG.

0.37.0 (05.08.2019)

New Plugin System

The Plugin System has been overhauled.

REST API changes

Previously plugins were assigned a UUID and could thus be managed using this uuid:

  • DELETE /admin/plugins/{uuid}

The new plugin system will now utilize the plugin id for these REST and GraphQL API instead. The pluginId is unique to each plugin and a better and easier to grasp identifier for a plugin.

New Java API / Structure

The plugin API and structure has been overhauled and existing plugins need to be migrated (Migration Guide) to the new API in order to be deployable.

GraphQL Plugin support

It is now possible to create plugins which extend the GraphQL API. Plugins which provide GraphQL extensions will be made accessible under the pluginApi GraphQL field.

Dropped maven repository support

It is no longer possible to load plugins directly via Maven Coordinates. The REST API will only accept a filesystem paths to plugins.

Classloader fix

The classloader mechanism has been altered. Plugins can now provide their own library versions. Previously a class which was also present in Gentics Mesh Server was loaded from the server class loader instead of the plugin. This has been fixed now.

Examples / Guide

The plugin development process documentation has been enhanced.

Core: Fixed a bug that caused an error when changing a field in a schema to a binary field.

REST: A core library for JSON support (jackson) has been updated.

Core: The core Vert.x library was updated to version 3.8.0.

0.36.8 (02.08.2019)

Core: Fixed a bug that caused node contents to not be found when migrating from an old version of Gentics Mesh (0.22.x) to the current version.

0.36.7 (23.07.2019)

Backup: Fixed a bug in the backup handler which prevented the backup process to switch back to the correct status after a backup failed due to filesystem errors.

Java Rest Client: Added #equals and #hashCode implementations to REST models.

Graph: It is now possible to configure the OrientDB RID_BAG_EMBEDDED_TO_SBTREEBONSAI_THRESHOLD setting by adding the ridBag.embeddedToSbtreeBonsaiThreshold parameter to the the storage.parameters field.

REST: An error will now be returned when sending the newPassword field in the login request when the forcedPasswordChange flag has not been set.

REST: The webroot responses will now contain the header Webroot-Node-Uuid which identifies the node of the loaded content.

REST: The authentication and element loading performance has been greatly increased.

0.36.6 (16.07.2019)

REST: The performance of path resolving has been improved.

Core: A new configuration section has been added. The cache options in the mesh.yml can now be used to control cache settings. The cache.pathCacheSize config setting and MESH_CACHE_PATH_SIZE environment variable can be used to control the path cache which will improve webroot and GraphQL path resolving performance.

REST: The webroot endpoint will now set the Cache-Control header to public if the requested node can be read using the anonymous role. Otherwise the header will be set to private. This information is useful if you want to use a Caching Proxy in-between Gentics Mesh and your front-end application.

Core: Performance of loading nodes has been improved.

Core: Request logging now uses the short format, which also shows how much time the the response took to complete.

Core: Improved performance when loading images with image manipulation.

0.36.5 (10.07.2019)

Upload: The upload.parser config setting and MESH_BINARY_DOCUMENT_PARSER environment variable can be used to control whether uploads should be parsed to extract metadata and contents. Uploads will be parsed by default.

Search: The search.includeBinaryFields config setting and MESH_ELASTICSEARCH_INCLUDE_BINARY_FIELDS environment variable can be used to control whether binary field metadata and plain text content should be added to the search index. By default metadata and content will be added to the search index.

REST: A core library for JSON support (jackson) has been updated.

GraphQL: The performance when loading nodes via the schema field has been improved.

Core: Various internal calls have been improved to increase read performance.

Search: Fixed root cause of unnecessary full sync which could occur during schema migrations.

0.36.4 (05.07.2019)

GraphQL: Fixed a bug that caused an error when filtering a node from a schema context that has no content in the default language.

Graph: The storage.synchronizeWrites config setting and MESH_GRAPH_SYNC_WRITES environment variable can be used to control whether write operations should be executed synchronously. By default write operations are handled asynchronously.

Core: Performance of schema migration has been improved.

0.36.3 (04.07.2019)

Search: Two new options have been added to the mesh search configuration. When the encoded request length exceeds the new bulkLengthLimit, no new documents will be added to the bulk and the bulk will be sent to Elasticsearch. The new retryLimit causes Gentics Mesh to drop a request to Elasticsearch after the configured limit has been reached. #784

Search: Backpressure for handling index requests has been improved. This reduces memory usage when indexing large amounts of data in a short period of time. #785

Search: Some default configuration values have been changed. timeout: 800060000, bulkLimit: 2000100. These changes will not be applied to existing configurations.

REST: Various branch specific internal checks have been updated to fix potential error cases. #787

Logging: The default logging configuration now includes the Java class for each log message.

0.36.2 (02.07.2019)

Search: Encoding issues which happen on systems which were not using UTF-8 as default locale have been fixed by updating the underlying Elasticsearch client. 498

Search: It is now possible to use encrypted and authenticated connections between Gentics Mesh and Elasticsearch. New settings and environment variables have been added. Details can be found in the Elasticsearch documentation #759

Security: The 'spring-security' library has been updated.

OrientDB: The included OrientDB version has been updated to version 3.0.21

GraphQL: You can now track incoming node references. See the example in the documentation.

Search: Fixed a bug that caused configured timeouts to not be applied correctly.

0.36.1 (18.06.2019)

Core: Support for Java 11 runtime has been added.

Docker: The base image of the gentics/mesh and gentics/mesh-demo images have been updated to use the adoptopenjdk/openjdk11:x86_64-alpine-jre-11.0.3_7 image.

Docker: The included Elasticsearch version has been updated to version 6.8.0. Please note that support for embedded Elasticsearch will be dropped in the future.

REST: The deletion of microschemas which contain changes has been fixed. Previously a NotImplementedException was thrown for microschemas which contained changes. #589

REST: Error messages should now always be wrapped in JSON. Previously, internal server errors were returned as plain text.

GraphQL: Fixed a bug that caused the default language of a node to be fetched when loading a node list of a micronode.

Core: Various internal structures and dependencies were re-organized and refactored.

UI: The default set of enabled languages within the mesh-ui-config.js file has been updated to include more languages.

0.36.0 (12.06.2019)

Java Rest Client

The default field values for NodeResponse and AbstractGenericRestResponse has been updated.

The following values have been changed:

  • AbstractGenericRestResponse#permissions

  • NodeResponse#tags

  • NodeResponse#childrenInfo

  • NodeResponse#container

  • NodeResponse#fields

  • NodeResponse#breadcrumb

The NodeResponse#isContainer method has been deprecated and was replaced by NodeResponse#getContainer

Applications which use affected models will most likely not need to updated since the returned response will always set the affected fields.

REST: The ?fields query parameter which can be used to filter response properties will now work more granularly on node responses.

Custom node migration scripts have been removed.

The script system was a source of possible errors and performance problems. Also, the nashorn javascript engine has been deprecated with the release of Java 11. If you need to change data for a migration, use the REST Api instead.

REST: Fixed a bug that sometimes caused a wrong image to be sent to the client when using image manipulation. #669

REST: Error messages now contain the property i18nKey. This allows for easy identification of different errors.

0.35.0 (06.06.2019)

Rest Model: The BranchResponse#isMigrated method has been changed to BranchResponse#getMigrated.
Fetching fields of a node/micronode in GraphQL requires a different query in /api/v2. Please refer to the #428 and #317 for details.

Backup: Fixed NullPointerException which occurred when the backup directory was missing and the backup endpoint was invoked. #463

Core: The core Vert.x library was updated to version 3.7.1.

Focal point: It is now possible to use the /api/v2/:projectName/nodes/:uuid/binaryTransform/:fieldName to resize and image and set the focal point in one operation.

The Content-Disposition header will now contain the UTF-8 and ISO-8859-1 encoded filename. #702

REST: It is now possible to set a flag that forces a user to change their password on the next login. Take a look at the documentation for more information.

REST: Fixed a bug that sometimes caused a wrong image to be responded when using image manipulation. #669

0.34.0 (28.05.2019)

Versioning Enhancements

The versioning system has received various enhancements.

The auto purge feature will now automatically purge the previously no longer needed version of a content. You can control this behaviour using the autoPurge flag in the mesh.yml file.

Additionally schema’s may now contain a autoPurge flag to override the setting on a per schema basis.

The documentation contains detailed information about how versioning can be controlled.

Versions of a node can now be listed via REST and GraphQL.

Versions can now be purged across projects to reduce disk storage usage.

Java Rest Client: Fixed a bug that prevented automatic reconnection to the eventbus when it did not succeed immediately.

Upload: The document processing library tika has been updated to version 1.21 to fix potential out of memory issues during upload document processing.

Branch Migration: A bug in the branch migration process has been fixed. Previously the wrong version of the content was used as branch root version. The process will now utilize the published version if one exists and otherwise use the draft version. This fix only affected internal data handling.

0.33.1 (23.05.2019)

Core: The dependency hazelcast-kubernetes has set to version 1.2.2 to fix a compatibility issue with the used hazelcast version.

0.33.0 (20.05.2019)

Elasticsearch document handling

The support for the Elasticsearch ingest plugin has been removed. The same functionality has been replaced with a much more efficient implementation which extracts the plain text of a document during upload processing. The structure of the generated search index has not changed and thus no modifications on existing search queries is required.

The plain text will now also be included in the REST and GraphQL response of binary fields.

An automatic changelog entry has been added which will parse all uploaded documents and extract the plain text. The duration of the execution of this task depends on the amount of documents that need to be parsed.

The new mesh.yml setting upload.parserLimit can be used to control the document parser. See Text extraction documentation for more information.

Search: The embedded elastichead interface has been removed. It is recommended to use browser extentions like ElasticSearch Head for Chrome instead.

Core: Various internal libraries have been updated (logback, hazelcast-kubernetes, tika)

OrientDB: The included OrientDB version has been updated to version 3.0.19

0.32.0 (08.05.2019)

Event Handling

The event handling mechanism has been completely overhauled.

Changes

  • Additional events have been added

  • Event payload includes more information

  • Java Models for events have been added

API

The API class com.gentics.mesh.MeshEvent was replaced by com.gentics.mesh.core.rest.MeshEvent.

A detailed description of this feature can be found in our Event Documentation.

Elasticsearch Handling

The Elasticsearch integration has been overhauled.

Integration

Elasticsearch synchronization operations have been decoupled from regular write operations.

This has two main effects. First, regular write operations (e.g. Node Update, Node Create) will not block until the changed data has been synchronized with elasticsearch. This will result in higher overall write performance. Secondly, changes will not be directly visible in Elasticsearch since write operations in Elasticsearch have been decoupled and will be executed asynchronously after a element in Gentics Mesh has been modified. Implementations which highly rely on Gentics Mesh being in sync with ES for each operation may need to be adapted. When using the /search or /rawSearch endpoints in mesh, you can now provide the ?wait=true query parameter. See details here

Fixes

Various issues with the previous Elasticsearch synchronization mechanism have been addressed.

  • Deletion of nodes will now also update documents in the index which reference the deleted node

  • Tag and Tag Family deletion will now correctly update referenced tags, tag families and nodes

Startup

Gentics Mesh will no longer wait for Elasticsearch during start-up.

Resilience

The resilience for Elasticsearch server issues has been improved. Failed requests will automatically be retried. If too many issues occur Gentics Mesh will automatically invoke an index sync in order to recover from the issue. This sync will be retried until Elasticsearch becomes responsive again.

Syncing

The clear and sync mechanism has been streamlined in order to benefit from other changes like resilience.

It is not required to reindex documents since the index names and structure has not been changed.

File Handling: The file upload mechanism has been overhauled to address issues with blocked uploads which could occur when uploading multiple files in-parallel.

File Handling: Failed Uploads will now remove temporary files from disk. Previously in some error situations the temporary upload have not been removed.

Permissions: Applying permissions recursively on projects did not affect branches. This has been fixed.

Permissions: Setting permissions recursively is now done more efficiently.

Thread Usage: The overall request handling has been refactored to reduce situations in which the event-loop threads could be blocked. The request handling code has been unified.

Core: The core Vert.x library was updated to version 3.7.0

Performance: The overall read performance has been improved. The memory usage has been reduced.

0.31.6 (27.05.2018)

Java Rest Client: Fixed a bug that prevented automatic reconnection to the eventbus when it did not succeed immediately.

0.31.5 (07.05.2019)

REST: The publish and readPublished permissions are now only shown for nodes.

Core: Creation of schemas with the same name of an existing microschemaModel or vice versa is not allowed anymore. Doing so caused conflicts in GraphQL. #597

Core: A bug in the image transform endpoint has been fixed. Previously nodes which were updated using that endpoint could not be found via webroot anymore. #599

Job: The endpoint POST /api/v2/admin/jobs/:jobUuid/process has been added. It can be used to trigger job processing. The endpoint will also automatically reset a failed job to be queued again. The endpoints DELETE /api/v2/admin/jobs/:jobUuid/error and POST /api/v2/admin/processJobs will be removed in a future release. #171

Plugins: A NullPointerException has been fixed which has happened when accessing rc.user().principal() within a plugin. #516

REST: Creating a schema with a micronode field and the allow option set to [] will now allow micronodes of all microschemas. #431

Core: Fixed a bug that caused an internal server error when applying changes to a microschemaModel. #591

UI: Fixed validation issues in microschemaModel lists when updating nodes. Previously validation issues would not be detected by the UI and the node update would fail. #202

0.31.4 (11.04.2019)

Schema: The container flag in the schema update request is now optional. Omitting the value will no longer cause Gentics Mesh to use the default value false. Subsequently the java request model was altered. The Schema#isContainer method was replaced with Schema#getContainer. Older REST client versions which by default always specified the container flag are still compatible with this change. #165

GraphQL: The permission check for the nodes field of the type Tag has been fixed. Previously loading tagged nodes for a tag did not return the expected result. The published permission for published nodes was not checked correctly. This has been fixed now.

Logging: The default logback.xml file has been updated to include automatic scan of the logging configuration. This change will not be applied to existing configurations.

Schema: It is now possible to reset the allow property of string fields. Setting the allow to empty array will now no longer restrict the values. Instead it will revert back to the original behaviour and allow all values.

UI: Fixed a bug that caused the node list to jump to the first page on various actions. #195

0.31.3 (28.03.2019)

Logging: The conflict error logging has been improved. Conflict error information in the log will now be more detailed and also include the conflicting field key and versions.

Permissions: A bug in the GraphQL nodes field was fixed. Previously branches were not correctly handled and too many nodes would be returned. Additionally the field would not correctly handle the read published permission and also return draft nodes to which no read permission was granted.

0.31.2.1 (23.08.2019)

Logging: Additional activity information will be logged when the logger for class io.vertx.core.eventbus.EventBus is set to level DEBUG.

REST: Fixed a bug which prevented the DELETE /api/v1/admin/jobs/:jobUuid/error from resetting the job.

0.31.2 (22.03.2019)

Docker: Default memory settings for the server and demo docker images were updated. The -Dstorage.diskCache.bufferSize=256 setting has been added for the server image. The setting can be changed using the JAVA_TOOL_OPTIONS environment variable. See Memory documentation for more information and recommendations.

OrientDB: The included OrientDB version has been updated to version 3.0.18.

REST: The GET /api/v2/:projectName/nodes/:nodeUuid/binary/:fieldName endpoint will now always include the accept-ranges: bytes header to indicate to the client that it supports range requests. #643

Configuration: The elasticsearch bulk limit can now be configured using the MESH_ELASTICSEARCH_BULK_LIMIT environment variable.

Permissions: A bug in the GraphQL permission handling has been fixed. Previously nodes which had only read published permission assigned to them were not returned using the nodes field.

Permissions: A bug in the permission handling of the nav root endpoint has been fixed. Previously nodes which had only read published permission assigned to them were not included in the navigation response.

0.31.1 (18.03.2019)

GraphDB Import/Export: The endpoints POST /api/v2/admin/graphdb/export and POST /api/v2/admin/graphdb/import have been added.

0.31.0 (13.03.2019)

Monitoring

This version of Gentics Mesh introduces the Monitoring feature.

The Gentics Mesh server will now additionally to port 8080 also bind to port 8081 in order to provide the new monitoring API. New configuration settings have been added to allow configuration of this server.

The monitoring API should not be exposed publicly and will by default only bind to localhost.

A detailed description of this feature can be found in our Monitoring Documentation.

In a future release the following endpoints will be removed from the regular API (Port 8080) since they were moved to the new monitoring server API (Port 8081).
  • GET /api/v2/admin/status (Server Status)

  • GET /api/v2/admin/cluster/status (Cluster Status)

Because of a change in the image resizer, the change below might not apply when an image is already in the cache. To make sure that the changes take effect, the cache in data/binaryImageCache/ must be cleared.

Image: Quality of manipulated JPEG images can now be configured. The default value has been changed from 0.7 to 0.95.

Image: The filter for resizing images can now be configured. The default filter is Lanczos.

OrientDB: The included OrientDB version has been updated to version 3.0.17.

REST: The /users endpoint response will now contain a hash of a users roles.

GraphQL: The roles field is now available for user fields, and contains all roles of the respective user.

GraphQL: The rolesHash field is now available for user fields, and contains a hash of all the roles of the respective user. This field does not need any special permissions.

Fixed a bug in the consistency checks which claimed missing user role shortcuts.

Schema: A bug was fixed which prevented the update of the schema field elasticsearch property to value null.

Docker: Default memory settings for the server and demo docker images were added. Default for server is set to -Xms512m -Xmx512m -XX:MaxDirectMemorySize=256m. The setting can be changed using the JAVA_TOOL_OPTIONS environment variable. See Memory documentation for more information.

The .vertx cache folder was moved to the configurable data/tmp folder.

0.30.2 (28.02.2019)

OrientDB: The included OrientDB version has been updated to version 3.0.16 - This update addresses various locking and synchronization issues when clustering was enabled.

Restore: The restore process has been reworked to avoid issues with graph database indices. Additional error handling has been added.

Backup: Backup support for clustered mode has been added. The backup endpoint previously did not work as expected in clustered mode.

0.30.1 (15.02.2019)

GraphQL: nodes can now be loaded via a list of UUIDs.

Java Rest Client: Fixed a bug that occurred when calling getResponse() with getBody() on a binary response.

Java Rest Client: Fixed a bug in the MeshRestClient#isOneOf helper function.

0.30.0 (12.02.2019)

Java Rest Client: The Gentics Mesh Java REST client which was based on Vert.x was replaced with a OkHttpClient implementation. Some changes to the client interface were necessary to make the client independent of Vert.x. See this example and the Javadoc for more information.

Clustering: The mesh version will no longer be appended to the node name used for OrientDB clustering. It is recommended to sanitize the data/graphdb/storage/distributed-db-config.json file and remove/rename entries which reference older mesh nodes. Only the active nodes should be listed in the file.

Core: Fixed a bug that caused too long responses on binary range requests.

GraphQL: Fixed a bug when loading a node via path. When the node itself did not exist, the query would return its parent node.

0.29.10 (08.02.2019)

Clustering: Cluster stability has been increased by reducing concurrent transaction locks during delete requests.

0.29.9 (07.02.2019)

Clustering: Cluster stability has been increased by reducing concurrent transaction locks during create/update requests.

0.29.8 (05.02.2019)

Clustering: The mesh version will no longer be appended to the node name used for OrientDB clustering. It is recommended to sanitize the data/graphdb/storage/distributed-db-config.json file and remove/rename entries which reference older mesh nodes. Only the active nodes should be listed in the file.

0.29.7 (05.02.2019)

Clustering: The default write writeQuorum has been set to majority to increase cluster stability. A writeQuorum of 1 can cause synchronization issues.

Elasticsearch: The Elasticsearch synchronization verticle will no longer be deployed when no Elasticsearch has been configured.

0.29.6 (01.02.2019)

Core: The way editor references are stored has been refactored to increase performance and reduce contention during database operations. A changelog entry will be invoked which migrates the data.

0.29.5 (31.01.2019)

Clustering: Creation of edges which lead to higher contention in the graph have been removed from job’s. Job’s will currently no longer reference the creator.

Search: An error which was thrown by outdated branch schema assignments has been suppressed. A warning will be logged instead.

0.29.4 (28.01.2019)

Restore: A check has been added which will disable the restore operation while running in clustered mode.

Demo: The demo has been fixed. Previously some of the demo files we were missing.

0.29.3 (25.01.2019)

OrientDB: The included OrientDB version has been updated to version 3.0.14

Core: The job processing will no longer be invoked in an interval in order to reduce cluster operation contention. Instead the /api/v2/admin/processJobs endpoint can be used to manually trigger job processing.

Core: Fixed a bug that caused nodes with a slash in their segment field to not be found via webroot.

Restore: A ClassCastException has been fixed which could be observed directly after a backup restore operation.

Changelog: The automatic backup of OrientDB configurations which was executed during the 0.29.0 update has been removed.

0.29.2 (18.01.2019)

Changelog: The changelog execution performance has been increased.

Consistency Checks: Additional consistency checks and repair actions have been added.

Restore: An error will be returned when /api/v2/admin/graphdb/restore is being invoked in clustered mode. Restoring the database is not possible in this mode.

Elasticsearch: Fixed a bug that caused a schema migration to never be finished. This affected nodes with binaries that are readable by the Elasticsearch Ingest Attachment Processor Plugin.

Image: Resizing images will now use the balanced quality setting. This helps with images that suffered from visible aliasing. To make sure that the changes take effect, the cache in data/binaryImageCache/ must be cleared.

0.29.1 (16.01.2019)

Because of a change in the image cache, the change below might not apply when an image is already in the cache. To make sure that the changes take effect, the cache in data/binaryImageCache/ must be cleared.

Core: Performance of the deletion process has been increased.

Consistency Checks: Additional consistency checks and repair actions have been added.

Consistency Checks: The consistency endpoint response will now also list a repairCount property which lists the count of repair operations. The response will now only contain the first 200 results. The outputTruncated property indicates whether the result has been truncated.

Image: Resizing and cropping will no longer transform the image to JPG format but return an image in the original format. When no image writing plugin for this format is available the fallback is PNG.

Core: Node deletion will now also remove connected lists and micronodes. Previously these elements were not properly removed. On large systems this could lead to increased disk usage.

0.29.0 (14.01.2019)

The embedded Graph Database was updated from version 2.2.37 to 3.0.13. See required changes below.

OrientDB 3.0.x: Existing orientdb-server-config.xml, hazelcast.xml, default-distributed-db-config.json configuration files will automatically be moved away and the new configuration files will be created instead.

OrientDB 3.0.x: A reindex of all vertices and edges will be triggered during the first start-up. This can take some time depending on the database size.

Memory: The internal overall memory usage has been optimized.

Core: The way language references are stored has been refactored to increase performance and reduce contention during database operations. A changelog entry will be invoked which migrates the data.

Clustering: The OrientDB 3.0.13 update addresses various issues which were related to clustering.

Migrations: The schema migration code has been optimized for speed and memory usage.

Migrations: Schema migrations will now always be executed on the cluster node which also handled the REST request. Previously the migration was executed on a random node in the cluster.

Core: The internal transaction retry max count has been reduced from 100 to 10 iterations.

Core: The internal transaction handling has been optimized.

Security: A minor security issue has been fixed.

0.28.3 (09.01.2019)

GraphQL: Resolved links will now contain the hostname of the target branch, not the latest branch.

Elasticsearch: Search indices are now created sequentially. Parallel creation of indices caused problems when many indices would have to be created.

Core: When resolving links with type FULL, and the chosen branch is not the latest branch, the query parameter for the branch will be added to the rendered link.

Java Rest Client: Added new REST client implementation. The MeshRestOkHttpClientImpl implementation will replace the current Java client in a future release. It is advised to switch to the new implementation which is based on the OkHttp library instead of Vert.x.

0.28.2 (26.11.2018)

Changelog: Enhanced changelog entry fix from release 0.28.1 to fix additional issues.

0.28.1 (26.11.2018)

Java Rest Client: The version property of the NodeUpdateRequest is now by default set to draft. Setting the value to draft will override the conflict detection handling and always compare the posted data with the latest draft version.

Java Rest Client: The upsertNode method has been added to the REST client which can be used to create or update a node.

Demo: The example uuids and dates in the /api/v2/raml response and the documentation are now static and will no longer change between releases. #477

Core: Deletion of micronode and list field data has been implemented in the core. Previously these elements were not removed from the graph. #192

Changelog: Fixed a bug in the webroot index database migration entry which caused a ORecordDuplicatedException changelog error and prevented update and startup of older databases. #554, #546

Core: Fixed a bug that caused /migrateSchemas to fail when a newer schema version was not assigned to the branch. #532

Core: Nodes are now migrated to the newest schema version when a new branch is created. #521

Core: Fixed a bug that prevented moving a published node in one language to a published container of another language.

0.28.0 (20.11.2018)

The property meshNodeId of the /api/v2/ response was renamed to meshNodeName to be more consistent.

REST: It is now possible to set existing or new tags during node creation and node update. Tags that are listed in both of those requests will be created if not found and assigned to the updated or created node.

Eventbus: It is now possible to register custom eventbus addresses.

REST: Download of binaries will now support byte range requests. Web media players require this feature in order to support seeking in video streams.

API: Make OAuth2 Server options overrideable via environment variables.

Permissions: A bug in the permission handling has been fixed. Previously the read permission was also granted when create was granted to elements. #562

Branches: Resolved links will now contain the hostname of the target branch, not the latest branch.

Elasticsearch: The check for the ingest-attachment plugin was fixed for installations which were using the AWS Elasticsearch service.

REST: A concurrency issue has been fixed which could lead to problems when creating multiple schemas in-parallel.

REST: Fix error message when no node for a content can be found. #364

0.27.2 (07.11.2018)

REST: The CPU utilization for download requests has been reduced. #530

Core: The Gentics Mesh server will now use native bindings to increase HTTP performance on Linux x86_64 platforms.

REST: Branch create requests will now correctly set the path prefix property. The value of the property was previously not used.

REST: Added more detailed error information when accessing a resource without permission. #314

0.27.1 (31.10.2018)

REST: It is now possible to specify a path prefix for branches. When specified, all resolved paths will include the prefix. The webroot endpoint will also utilize the prefix to resolve nodes. The prefix can be set for new projects or for update requests on existing branches.

Java REST Client: Fixed wrong log output information.

REST: Fixed error while fetching jobs for deleted projects.

Elasticsearch: The index sync will now automatically remove no longer used indices.

REST: Fixed an error that can happen when creating new nodes which contain binary fields that reference a not yet stored binary sha512sum. #524

0.27.0 (19.10.2018)

The volumes inside the docker images gentics/mesh and gentics/mesh-demo have been refactored. By default the volumes /graphdb, /uploads, /backups, /plugins, /keystore and /config will be used for the corresponding data. The /data volume and location was removed. Details can be found in the documentation.

Configuration: It is now possible to configure the upload limit using the MESH_BINARY_UPLOAD_LIMIT environment variable.

Java REST Client: It is now possible to set the base path of the API via MeshRestClient#setBaseUri(String uri).

Security: A minor security issue has been fixed.

REST: An issue with the ETag generation of user responses has been fixed. #489

0.26.0 (15.10.2018)

Branches: It is now possible to set the "latest" branch of a project.

Branches: It is now possible to create branches based on specific other branches.

Branches: Branches can now be tagged just like nodes.

Clustering: The Hazelcast kubernetes autodiscovery plugin was added to Gentics Mesh. It is now possible to use this plugin to discover nodes in an k8s environment. Take a look at our documentation for more details.

Java REST Client: Add more detailed error information to MeshRestClientMessageException class.

0.25.0 (08.10.2018)

Plugins: It is now possible to override plugin config in a config.local.yml file

Core: The core Vert.x library was updated to version 3.5.4

OrientDB: The included OrientDB version has been updated to version 2.2.37

GraphQL: Added filters for users, groups and roles.

GraphQL: GraphQL Java has been updated to version 10.0

Core: Loading of older jobs could cause an error. The causes of those errors have been fixed.

Migration: Fix migration regression which was introduced with 0.24.1

Demo: Fix demo webroot path handling. This fix only affects new demo setups.

0.24.1 (02.10.2018)

Config: It is now possible to configure the path to the mesh lock file using the MESH_LOCK_PATH environment variable. #506

It is now possible to add custom languages by configuration.

UI: Added a scrollbar to the schema dropdown menu. #163

Core: A inconsistency within the webroot path handling has been fixed. Previously the webroot path uniqueness checks would not work correctly once another branch has been added.

REST: The response error code handling for uploads has been updated. Previously no error 413 was returned when the upload limit was reached.

Elasticsearch: The initial sync check will be omitted if no elasticsearch has been configured.

Java REST Client: fixed a bug that could lead to duplicate request headers.

0.24.0 (25.07.2018)

The default value of 25 for the perPage parameter has been removed. By default all elements will be returned and no paging will be applied.

Core: A regression within the webroot performance enhancement fix of 0.23.0 has been fixed.

0.23.0 (24.07.2018)

The breadcrumb of the REST node response and the breadcrumb of the node type in GraphQL has changed. The first element is now the root node of the project followed by its descendants including the currently queried node. Previously the order was reversed. Additionally the root node and the current were missing. #398
The concept of releases has been renamed into branches. The database structure will automatically be updated.
  • The following query parameters have been changed: releasebranch, updateAssignedReleasesupdateAssignedBranches, updateReleaseNamesupdateBranchNames

  • The releases endpoint was renamed to branches.

  • The mesh.release.created, mesh.release.updated, mesh.release.deleted events have been changed to mesh.branch.created, mesh.branch.updated, mesh.branch.deleted.

  • The Java REST Models have been renamed. (e.g.: ReleaseCreateRequest → BranchCreateRequest)

  • I18n messages have been changed accordingly.

  • The GraphQL field release has been renamed to branch. The type name was also updated.

Elasticsearch: The base64 encoded binary document data will no longer be stored in the search index.

Elasticsearch: The /search/status endpoint now has a new field available, which shows if Elasticsearch is currently ready to process search queries.

Elasticsearch: An error was fixed which was thrown when Elasticsearch was disabled and a re-sync was scheduled.

REST: Added ?etag=false query parameter which can be used to omit the etag value generation in order to increase performance when etags are not needed.

REST: Added ?fields=uuid,username query parameter which can be used to filter the response to only include the listed fields within a response. The filters work for most responses and can be used to increase write performance for REST.

GraphQL: It is now possible to filter schemas by their container flag.

GraphQL: Fixed a bug that caused an error when multiple queries where executed concurrently.

Core: Increased performance for webroot endpoint.

REST: Re-enabled SSL options. It is now possible to configure SSL via MESH_HTTP_SSL_KEY_PATH, MESH_HTTP_SSL_CERT_PATH, MESH_HTTP_SSL_ENABLE environment options.

0.22.11 (05.03.2019)

GraphQL: The underlying graphql-java library was updated to version 10.0.

GraphQL: nodes can now be loaded via a list of UUIDs.

0.22.10 (18.01.2019)

Elasticsearch: Fixed a bug that caused a schema migration to never be finished. This affected nodes with binaries that are readable by the Elasticsearch Ingest Attachment Processor Plugin.

Image: Resizing images will now use the balanced quality setting. This helps with images that suffered from visible aliasing.

0.22.9 (15.01.2019)

Consistency Checks: Additional consistency checks and repair actions have been added.

Memory: The memory footprint of various operations has been reduced.

Consistency Checks: The consistency endpoint response will now also list a repairCount property which lists the count of repair operations. The response will now only contain the first 200 results. The outputTruncated property indicates whether the result has been truncated.

Core: Node deletion will now also remove connected lists and micronodes. Previously these elements were not properly removed. On large systems this could lead to increased disk usage.

0.22.8 (30.11.2018)

OrientDB: The included OrientDB version has been updated to version 2.2.37

0.22.7 (12.11.2018)

Elasticsearch: The check for the ingest-attachment plugin was fixed for installations which were using the AWS Elasticsearch service.

API: Make OAuth2 Server options overrideable via environment variables.

0.22.6 (30.10.2018)

Java REST Client: Fixed wrong log output information.

REST: Fixed error while fetching jobs for deleted projects.

Elasticsearch: The index sync will now automatically remove no longer used indices.

0.22.5 (12.10.2018)

A default paging value can now be configured via the defaultPageSize field in the mesh.yml file, or the MESH_DEFAULT_PAGE_SIZE environment variable.

Java REST Client: Add more detailed error information to MeshRestClientMessageException class.

0.22.4 (08.10.2018)

REST: The response error code handling for uploads has been updated. Previously no error 413 was returned when the upload limit was reached.

Elasticsearch: The initial sync check will be omitted if no elasticsearch has been configured.

Plugins: It is now possible to override plugin config in a config.local.yml file.

0.22.3 (20.09.2018)

It is now possible to add custom languages by configuration.

0.22.2 (13.09.2018)

Java REST Client: fixed a bug that could lead to duplicate request headers

0.22.1 (14.08.2018)

Migration: The micronode and release migration performance has been greatly enhanced.

0.22.0 (19.07.2018)

Metadata extraction

This version of Gentics Mesh introduces the Metadata extraction of file uploads (PDF, Images). GPS information of images will now be added to the search index. That information can be used to run geo search queries. A detailed description of this feature can be found in our File Uploads Documentation.

Existing binary fields will not be automatically be processed to provide the metadata. You need to manually re-upload the data in order to generate the metadata properties.

Image: Focal point information within binary fields will now be utilized when invoking a download request which contains ?crop=fp&height=200&width=100. Previously the stored information was not used and no focal point cropping was executed. #417

Schema: A minor issue within the schema diff mechanism has been fixed. Previously the elasticsearch property was not correctly handled if an empty object has been provided during an update.

0.21.5 (14.07.2018)

REST: The order of elements within a micronode list field will now be correctly preserved. Previously the order would change once the list reached a size of about 20 elements. #469

Memory: The memory footprint for deletion, publish and unpublish operations has been greatly reduced.

Config: Fixed handling of MESH_VERTX_WORKER_POOL_SIZE and MESH_VERTX_EVENT_POOL_SIZE environment variables. These variables were previously ignored.

REST: The node update response will now contain the updated node in the correct language. Any provided language parameter will be ignored.

REST: The amount of fields which will be returned can now be tuned using the ?fields query parameter. The parameter can be used to improve the write performance by only including the uuid parameter in the response.

Core: The core Vert.x library was updated to version 3.5.3

0.21.4 (09.07.2018)

Migration: Segment path conflicts will now automatically be resolved during the node migration. Information about actions taken can be found within the response of the job migration.

Migration: The node migration performance has been greatly enhanced. #453

Elasticsearch: Start up of Gentics Mesh will now fail early if the embedded Elasticsearch server can’t be started. #445

Elasticsearch: The error logging has been enhanced. More detailed information will be logged if an index can’t be created.

UI: Fixed potential encoding issues in the UI on systems which are not using the UTF-8 default character set.

Core: Fixed a bug that caused an unwanted schema migration when a schema update without any changes was invoked. This was the case with the elasticsearch properties.

0.21.3 (19.06.2018)

GraphQL: Fixed a bug that caused an error when multiple queries where executed concurrently.

GraphQL: The language fallback handling for node reference fields has been enhanced. The language of the node will now be utilized when no language fallback has been specified.

GraphQL: The language fallback handling has been enhanced. The language fallback will now automatically be passed along to load nested fields.

GraphQL: The link resolving of html and string fields has been updated. Previously the language of the node which contained the field was not taken into account while resolving mesh links in these fields.

0.21.2 (13.06.2018)

Elasticsearch: A compatibility issue with Elasticsearch instances which were hosted on Amazon AWS has been fixed. Previously the check for installed ES plugins failed.

0.21.1 (28.05.2018)

Elasticsearch: It is now possible to configure custom mappings for binary fields. Currently only the mimeType and file.content fields can be mapped. An example for this mapping can be found in the Gentics Mesh search documentation.

0.21.0 (27.05.2018)

Binary Search

This version of Gentics Mesh introduces the Binary Search support.

The Elasticsearch Ingest Attachment Plugin will be utilized if possible to process text file uploads (PDF, DOC, DOCX). A detailed description of this feature can be found in our Elasticsearch Documentation.

Elasticsearch: It is now possible to configure a prefix string within the search options. Multiple Gentics Mesh installations with different prefixes can now utilize the same Elasticsearch server. Created indices and pipelines will automatically be prefixed. Other elements which do not start with the prefix will be ignored.

0.20.0 (25.05.2018)

OAuth2 Support

This version of Gentics Mesh introduces the OAuth2 authentication support. A detailed description of this feature can be found in our Authentication Documentation.

Plugins: All plugin endpoints will now automatically be secured via the configured authentication mechanism.

Plugins: The admin client token will no longer expire. The token was previously only valid for one hour.

Plugins: When deployment of a plugin fails during plugin initialization, the plugin can now be redeployed without restarting Gentics Mesh.

Plugins: Fixed a bug which prevented the user client from using the correct token was fixed. The user client will now utilize the correct user token.

0.19.2 (02.05.2018)

Docker: The base image of the Gentics Mesh docker container has been reverted back to java:openjdk-8-jre-alpine. We will switch to Java 10 with the upcoming OrientDB 3.0.0 update.

UI: In some cases the UI did not load fast. We updated the caching mechanism to quickly load the UI after a new Gentics Mesh version has been deployed.

0.19.1 (30.04.2018)

REST: The /api/v2/admin/consistency/repair endpoint has been added. The endpoint can be used to verify and directly repair found inconsistencies. The /api/v2/admin/consistency/check endpoint response has been updated to also include information about the action which will be performed by /repair in order to repair the inconsistency. You can read more about these endpoints in the database consistency section in our administration documentation.

0.19.0 (28.04.2018)

Plugin System

This version of Gentics Mesh introduces the Plugin System. A detailed description of this feature can be found in our Plugin System Documentation.

The base image of the Gentics Mesh docker container has been changed to openjdk:10-slim.

Logging: The logging verbosity has been further decreased.

0.18.3 (25.04.2018)

REST: Add error response when updating a user node reference without specifying the project name.

REST: Fixed the root cause of an inconsistency which caused the deletion of referenced nodes when deleting a node.

0.18.2 (23.04.2018)

Database revision was updated due to OrientDB update. Thus only an offline upgrade can be performed when using clustered mode.
The generation of the search index document version has been reworked in order to increase index sync performance. A triggered index sync will thus re-sync all documents. Triggering the sync action is not required and can be executed at any time.

Backup/Restore: It is now no longer required to restart the server after a backup has been restored via the /api/v2/admin/graphdb/restore endpoint. #387

OrientDB: The included OrientDB version has been updated to version 2.2.34

Consistency: Additional consistency checks have been added.

Consistency: Various consistency issues have been fixed.

REST: Fixed various security related issues.

Core: Image data in binary fields will now only be processed/transformed if the binary is in a readable file format. The readable image file formats are png, jpg, bmp and gif.

Core: Added consistency checks for node versions.

Core: Deleting language versions of nodes will no longer create inconsistencies.

Core: Projects containing multiple releases can now be deleted without any error.

0.18.1 (13.04.2018)

Core: Added consistency check for node containers.

GraphQL: Using filtering with nodes without content does not throw an error anymore.

REST: Added missing hostname and ssl property handling for release creation requests.

REST: Creating a release with fixed UUID will now invoke the node migration.

Java REST Client: The eventbus() method now correctly sends authorization headers.

Java Rest Client: Missing methods to start schema/microschemaModel migrations for a release have been added.

0.18.0 (06.04.2018)

GraphQL filtering

This version of Gentics Mesh introduces GraphQL filtering. A detailed description of this feature can be found in our Documentation.


Search: The /api/v2/search/reindex endpoint was replaced by /api/v2/search/sync.

Docs: The Contribution Guide has been added.

The /api/v2/search/sync endpoint can now be used to trigger the differential synchronization of search indices. The indices will no longer be dropped and re-populated. Instead only needed actions will be executed to sync the index with the Gentics Mesh data.

The /api/v2/search/clear endpoint has been added. It can be used to re-create all Elasticsearch indices which are managed by Gentics Mesh. Note that this operation does not invoke the index sync.

Docker: A new volume location for the data directory of the embedded elasticsearch has been added. You can now use the /elasticsearch/data folder to mount your elasticsearch data files. #348

REST: The /api/v2/search/status endpoint has been enhanced. The endpoint will now also return the current elasticsearch sync progress.

Logging: The logging verbosity has been further decreased.

REST: Fix ETag generation for nodes. Previously taking a node offline did not alter the ETag and this also lead to inconsistent status information being displayed in the Mesh UI #345

Java Rest Client: Fix webroot requests never returns when containing whitespaces.

GraphQL: Fixed language parameter in nodes query method was ignored in some cases. #365

REST: The /api/v2/microschemas endpoint will now correctly detect name conflicts during microschemaModel creation.

0.17.3 (15.03.2018)

UI: Restrict nodes to certain schema if allow is set in node list fields.

0.17.2 (13.03.2018)

Docker: A new volume location for the config directory has been added. You can now use the /config folder to mount your configuration files.

Core: The Vert.x library has been downgraded to 3.5.0 due to a regression which could cause requests to not be handled by the HTTP Server.

0.17.1 (08.03.2018)

OrientDB: The included OrientDB version has been updated to version 2.2.33

Core: The core Vert.x library was updated to version 3.5.1

Config: It is now possible to configure the elasticsearch start-up timeout via the search.startupTimeout field in the mesh.yml or via the MESH_ELASTICSEARCH_STARTUP_TIMEOUT environment variable.

Search: The reindex endpoint will now execute the reindex operation asynchronously.

Search: Two new reindex specific events have been added: mesh.search.reindex.failed, mesh.search.reindex.completed.

REST: The GET /api/v2/search/status endpoint response has been updated. The reindexRunning flag has been added.

Config: Fixed a bug which prevented optional boolean environment variables (e.g. MESH_HTTP_CORS_ENABLE_ENV) from being handled correctly.

Core: It is now possible to change the listType of a list field in a schema via the Rest-API.

Core: The server will now shutdown if an error has been detected during start-up.

REST: Fixed an error which led to inconsistent properties being shown in the job endpoint response.

Search: When calling reindex via the POST /api/v2/search/reindex endpoint the reindexing stopped after a certain amount of time because of a timeout in the database transaction. This has been fixed now.

REST: In some cases parallel file uploads of multiple images could cause the upload process to never finish. This has been fixed now.

0.17.0 (22.02.2018)

Search: The raw search endpoints now wraps a multisearch request. The endpoint response will now include the elasticsearch responses array. The query stays the same.

Demo: The demo application was updated to use Angular 5.

Core: Gentics Mesh can now be downgraded if the database revision matches the needed revision of Gentics Mesh.

Clustering: Gentics Mesh is now able to form cluster between different server versions. A database revision hash will now be used to determine which versions of Gentics Mesh can form a cluster. Only instances with the same database revision hash are allowed to form a cluster. The current revision hash info is included in the /api/v2 endpoint response.

Various settings can now be overridden via environment variables. This is useful when dealing with docker based deployments.

Elasticsearch: Search requests failed on systems with many schemas. #303

Elasticsearch: Fixed handling of search.url settings which contained a https URL.

Image: The image resizer returned the original image if no fpx,fpy were present for a focal point image resize request. #272

Image: The focal point resize returned a slightly skewed image when using the fpz zoom factor. #272

Events: The mesh.node.deleted event was not handled correctly. This has been fixed now.

Core: It was possible to upload binaries with empty filenames. This has been fixed now: it is enforced that a binary upload has a filename and content type which are not empty. #299

Core: If the keystore path was only a file name without a directory a NPE was thrown on start-up. This has been fixed now.

Core: After resetting a job via rest (admin/jobs/::uuid::/error) the job was not processed again. This has been fixed now. #295

Core: When the migration for multiple nodes failed during a schema migration the error details could become very long. This has been fixed now. Error details in the job list will be truncated after a certain amount of characters.

Core: Image transformation calls previously did not copy the image properties of the binary field. Instead the filename and other properties were not copied to the new binary image field. This has been fixed now.

REST: It is now possible use custom HttpClientOptions upon instantiation of a MeshRestHttpClient.

REST: The node response ETag now incorporates the uuids of all node references.

REST: The /api/v2/auth/logout endpoint will now correctly delete the mesh.token cookie. #282

0.16.0 (07.02.2018)

Search: The contents of HTML and HTML list fields will now automatically be stripped of markup prior of indexing.
The mesh.yml search section has been updated. The search.url property replaces the search.hosts property.
search:
  url: "http://localhost:9200"
  timeout: 8000
  startEmbedded: false

GraphQL: The underlying graphql-java library was updated to version 7.0.

REST: An error which prevented the /api/v2 info endpoint from returning version information has been fixed.

OrientDB: The included OrientDB Studio has been updated to version 2.2.32.

Config: It is now possible to configure the JVM arguments of the embedded Elasticsearch server via the search.embeddedArguments property in the mesh.yml file.

GraphQL: Schema fields can now be queried. Currently supported are name, label, required and type.

0.15.0 (31.01.2018)

The embedded Elasticsearch was removed and replaced by a connector to a dedicated Elasticsearch server. It is highly recommended to verify existing queries due to breaking changes between Elasticsearch version 2.4 and 6.1. Please also check the Elasticsearch changelog: Elasticsearch Changelog
Configuration: The mesh.yml format has been updated. Please remove the search section or replace it with the following settings.
search:
  hosts:
  - hostname: "localhost"
    port: 9200
    protocol: "http"
  startEmbeddedES: true
The Elasticsearch update may affect custom mappings within your schemas. You may need to manually update your schemas.

Elasticsearch 6.1 compliant example for the commonly used raw field:

{
    "fields": {
        "raw": {
            "type": "keyword",
            "index": true
        }
    }
}
The unfilteredCount GraphQL paging property has been removed. You can now use the totalCount property instead.
Gentics Mesh will automatically extract and start an embedded Elasticsearch server into the elasticsearch folder. The old search index (e.g: data/searchIndex) can be removed.
The user which is used to run the process within the docker image has been changed. You may need to update your data volume ownership to uid/gid 1000.

REST: The UUID of the referenced binary data will now also be listed for binary fields. Fields which share the same binary data will also share the same binary UUID.

GraphQL: It is now possible to read the focal point information and binary uuid of binary fields.

Docs: The Elasticsearch integration documentation has been enhanced.

Search: The overall search performance has been increased.

Logging: The logging verbosity has been further decreased.

0.14.2 (30.01.2018)

Elasticsearch: Fixed a bug which caused an internal error when granting multiple permissions to the same element at the same time.

GraphQL: The linkType parameter for string and html fields now causes the the link to be rendered in the language of the queried node if no language information is given.

0.14.1 (19.01.2018)

Core: Fixed a deadlock situation which could occur when handling more than 20 image resize requests in parallel. Image resize operations will now utilize a dedicated thread pool.

Core: Fixed a bug which caused permission inconsistencies when deleting a group from the system.

REST: Added support to automatically handle the Expect: 100-Continue header. We however recommend to only use this header for upload requests. Using this header will otherwise reduce the response times of your requests. Note that PHP curl will add this header by default. You can read more about the header here.

0.14.0 (16.01.2018)

The image manipulation query parameters cropx, cropy, croph and cropw have been replaced by the rect parameter. The rect parameter contains the needed values rect=x,y,w,h.
The image manipulation query parameter width was renamed to w. The parameter height was renamed to h.
The binary transformation request request was updated. The crop parameters are now nested within the cropRect object.
It is now required to specify the crop mode when cropping an image. Possible crop modes are rect which will utilize the specified crop area or fp which will utilize the focal point information in order to crop the image.

Image: It is now possible to specify a focal point within the binary field of an image. This focal point can be used to automatically crop the image in a way so that the focused area is kept in the image. The focal point can also be manually specified when requesting an image. This will overrule any previously stored focal point information within the binary field.

UI: The admin UI has been updated to use the renamed image parameters.

0.13.3 (12.01.2018)

Core: Optimized concurrency when handling binary data streams (e.g: downloading, image resizing)

Core: Fixed some bugs which left file handles open and thus clogged the system. This could lead a lock-up of the system in some cases.

0.13.2 (11.01.2018)

Java Rest Client: It is now possible to retrieve the client version via MeshRestClient.getPlainVersion().

Core: The consistency checks have been enhanced.

Core: Fixed some bugs which left file handles open and thus clogged the system. This could lead a lock-up of the system in some cases.

0.13.1 (05.01.2018)

Core: A Vert.x bug has been patched which caused HTTP requests to fail which had the "Connection: close" header set.

REST: A concurrency issue has been addressed which only happens when deleting and creating projects in fast succession.

Core: A potential concurrency issue has been fixed when handling request parameters.

0.13.0 (02.01.2018)

The Java REST client was updated to use RxJava 2.

Core: The internal RxJava code has been migrated to version 2.

0.12.0 (21.12.2017)

The search.httpEnabled option within the mesh.yml has been removed. The embedded elasticsearch API can no longer be directly accessed via HTTP. The existing endpoint /api/v2/:projectName/search is unaffected by this change.

Core: The core Vert.x library was updated to version 3.5.0

Core: The internal server routing system has been overhauled.

0.11.8 (18.12.2017)

Image: Fixed a bug which left file handles open and thus clogged the system. This could lead a lock-up of the system in some cases.

0.11.7 (17.12.2017)

UI: Fixed an issue where the name in the explorer content list in always shown in English. #23

Storage: Binary field deletion has been made more resilient and will no longer fail if the referenced binary data is not stored within used binary storage. #235

REST: The hostname and ssl properties have been added to the project create request. This information will be directly added to the initial release of the project. The properties can thus be changed by updating the project.

REST: The link resolver mechanism was enhanced to also consider the hostname and ssl flag of the release of the node which is linked. The link resolver will make use of these properties as soon as mesh links point to nodes of foreign projects. You can read more on this topic in the cross domain link section of our documentation.

0.11.6 (15.12.2017)

Search: The automatic recreation of the search index will now also occur if an empty search index folder was found.

UI: Nodes are now always reloaded when the edit button is clicked in the explorer content list. #16

UI: Fixed an issue that was causing a click on a node in the explorer list to open it like a container, even if it is not a container.

UI: Dropdowns for required string fields with the allowed attribute now properly require a value to be set in order to save the node.

UI: Fixed a issue where contents of a micronode were not validated before saving a node.

Core: Reduce the memory load of the ChangeNumberStringsToNumber-changelog by reducing the size of a single transactions.

Image: Image handling has been optimized. Previously resizing larger images could temporarily lock up the http server.

0.11.5 (14.12.2017)

UI: Add multi binary upload dialogue. Users can now upload multiple files at once by clicking the button next to the create node button.

UI: Binary fields can now be used as display fields. The filename is used as the display name for the node. #11

UI: It is now possible to specify the URL to the front end of a system. This allows users to quickly go to the page that represents the node in the system. See the default mesh-ui-config.js or the online documentation for more details. #14

Upload: The upload handling code has been refactored in order to process the uploaded data in-parallel.

Storage: The binary storage mechanism has been overhauled in preparation for Amazon S3 / Minio support. The data within the local binary storage folder and all binary fields will automatically be migrated. The created binaryFilesMigrationBackup folder must be manually removed once the migration has finished.

Core: The OrientDB graph database was updated to version 2.2.31

Core: Binary fields can now be chosen as display fields. The value of the display field is the filename of the binary.

REST: The display name has been added to the node response. It can be found in the key displayName.

GraphQL: The display name can now be fetched from a node via the displayName field.

UI: Nodes in the "Select Node…​" dialogue are now sorted by their display name. #15

UI: The "Select Node…​" dialogue now remembers the last position it was opened. #12

UI: The dropdown for list types in the schema editor now only shows valid list types.

UI: Fixed a bug that causes image preview to disappear after saving a node. #18

Core: A bug has been fixed which prevented node updates. The issue occurred once a node was updated from which a language variant was previously deleted.

Search: The search index will now automatically be recreated if the search index folder could not be found.

Core: The values of number-fields where stored as strings in the database which caused issues when converting numbers to and from string. This has been fixed: the values of number-fields will now be stored as numbers.

Schema: The schema deletion process will now also include all schema versions, referenced changes and jobs.

Clustering: A NPE which could occur during initial setup of a clustered instance has been fixed.

0.11.4 (07.12.2017)

Core: Fixed various errors which could occur when loading a node for which the editor or creator user has been previously deleted.

0.11.3 (30.11.2017)

Core: Various performance enhancements have been made to increase the concurrency handling and to lower the request times.

Websocket: It is now possible to register to a larger set of internal events. A full list of all events is documented within the eventbus bridge / websocket documentation.

Config: The eventloop and worker pool size can now be configured within the mesh.yml file.

Logging: The logging verbosity was reduced.

GraphQL: It is now possible to load a list of all languages of a node via the added .languages field.

GraphQL: The underlying graphql-java library was updated to version 6.0

Core: Fixed a bug which prevented uploading multiple binaries to the same node.

UI: Fixed error message handling for failed save requests.

UI: Fixed the dropdown positioning in IE within the node edit area.

Memory: The memory usage for micronode migrations has been improved.

0.11.2 (21.11.2017)

Core: The OrientDB graph database was updated to version 2.2.30

Core: Fixed a bug which caused unusual high CPU usage. #201

0.11.1 (13.11.2017)

Elasticsearch: Add support for inline queries.

Elasticsearch: In some cases the connection to Elasticsearch was not directly ready during start up. This caused various issues. A start-up check has been added in order to prevent this.

Schema: A bug within the schema update mechanism which removed the urlField property value has been fixed.

Elasticsearch: A deadlock situation which could occur during schema validation was fixed.

0.11.0 (11.11.2017)

GraphQL: The root field releases has been removed. The root field release now takes no parameters and loads the active release.
Elasticsearch: Search queries will now automatically be wrapped in a boolean query in order to check permissions much more efficiently.
The schema field property searchIndex / searchIndex.addRaw has been removed. The property was replaced by a mapping definition which can be added to each field. All schemas will automatically be migrated to the new format. Please keep in mind to also update any existing schema files which you may have stored externally.
{
  "name": "dummySchema",
  "displayField": "name",
  "fields": [
    {
      "name": "name",
      "label": "Name",
      "required": true,
      "type": "string",
      "elasticsearch": {
        "raw": {
          "index": "not_analyzed",
          "type": "string"
        }
      }
    }
  ]
}

Schema: It is now possible to configure index settings and custom search index field mappings within the schema.

The index settings can be used to define new analyzers and tokenizer or other additional index settings. The specified settings will automatically be merged with a default set of settings.

Once a new analyzer has been defined it can be referenced by custom field mappings which can now be added to each field. The specified field mapping will be added to the generated fields property of the mapping. You can read more about this topic in the fields mapping documentation of Elasticsearch.

{
  "name": "dummySchema",
  "displayField": "name",
  "elasticsearch": {
    "settings": {
      "number_of_shards" :   1,
      "number_of_replicas" : 0
    },
    "analysis" : {
      "analyzer" : {
        "suggest" : {
          "tokenizer" : "mesh_default_ngram_tokenizer",
          "char_filter" : [ "html_strip" ],
          "filter" : [ "lowercase" ]
        }
      }
    }
  },
  "fields": [
    {
      "name": "name",
      "label": "Name",
      "required": true,
      "type": "string",
      "elasticsearch": {
        "suggest": {
          "analyzer": "suggest",
          "type": "string"
        }
      }
    }
  ]
}

You can use the POST /api/v2/utilities/validateSchema endpoint to validate and inspect the effective index configuration.

REST: The POST /api/v2/utilities/validateSchema and POST /api/v2/utilities/validateMicroschema endpoints can now be used to validate a schema/microschemaModel JSON without actually storing it. The validation response will also contain the generated Elasticsearch index configuration.

GraphQL: Nodes can now be loaded in the context of a schema. This will return all nodes which use the schema.

Search: The /api/v2/rawSearch/.. and /api/v2/:projectName/rawSearch/.. endpoints have been added. These can be used to invoke search requests which will return the raw elasticsearch response JSON. The needed indices will automatically be selected in order to only return the type specific documents. Read permissions on the document will also be automatically checked.

Search: Error information for failed Elasticsearch queries will now be added to the response.

Webroot: The schema property urlFields can now used to specify fields which contain webroot paths. The webroot endpoint in turn will first try to find a node which specified the requested path. If no path could be found using the urlField values the regular segment path will be used to locate the node. This feature can be used to set custom urls or short urls for your nodes.

Performance: Optimized binary download memory usage.

REST: Fixed a bug which prevented pages with more than 2000 items from being loaded.

0.10.4 (10.10.2017)

REST: The availableLanguages field now also contains the publish information of the languages of a node.

REST: Fixed a bug in the permission system. Permissions on microschemas will now correctly be updated when applying permission recursively on projects.

REST: ETags will now be updated if the permission on the element changes.

Core: Various bugs within the schema / microschemaModel migration code have been addressed and fixed.

Core: The search index handling has been updated. A differential synchronization will be run to update the new search index and thus the old index data can still be used.

Performance: Removing permissions has been optimized.

UI: A new action was added to the node action context menu. It is now possible to unpublish nodes.

UI: The Mesh UI was updated.

Config: It is now possible to configure the host to which the Gentics Mesh http server should bind to via the httpServer.host setting in the mesh.yml file. Default is still 0.0.0.0 (all interfaces).

REST: The /api/v2/:projectName/releases/:releaseUuid/migrateSchemas and /api/v2/:projectName/releases/:releaseUuid/migrateMicroschemas endpoints have been changed from GET to POST.

REST: The /api/v2/admin/reindex and /api/v2/admin/createMappings endpoints have been changed from GET to POST.

CLI: It is now possible to reset the admin password using the -resetAdminPassword command line argument.

GraphQL: The underlying graphql-java library was updated to version 5.0

Core: The OrientDB graph database was updated to version 2.2.29

0.10.3 (18.09.2017)

Logging: The logback.xml default logging configuration file will now be placed in the config folder. The file can be used to customize the logging configuration.

Configuration: It is now possible to set custom properties within the elasticsearch setting.

Core: The OrientDB graph database was updated to version 2.2.27

REST: It is now possible to set and read permissions using paths which contain the project name. Example: GET /api/v2/roles/:roleUuid/permissions/:projectName/…​

Search: A potential race condition has been fixed. This condition previously caused the elasticsearch to no longer accept any changes.

Performance: The REST API performance has been improved by optimizing the JSON generation process. #141

0.10.2 (14.09.2017)

Documentation: The new security and performance sections have been added to our documentation.

The Webroot-Response-Type header can now be used to differentiate between a webroot binary and node responses. The values of this header can either be binary or node.

The /api/v2/admin/status/migrations endpoint was removed. The status of a migration job can now be obtained via the /api/v2/admin/jobs endpoint. Successfully executed jobs will no longer be removed from the job list.

The /api/v2/:projectName/release/:releaseUuid/schemas and /api/v2/:projectName/release/:releaseUuid/microschemas endpoint has been reworked. The response format has been updated. The status and uuid of the job which has been invoked when the migration was started will now also be included in this response.

Java REST Client: A potential threading issue within the Java REST Client has been fixed. Vert.x http clients will no longer be shared across multiple threads.

Memory: Reduce memory footprint of microschemaModel migrations. #135

Fixed handling "required" and "allow" properties of schema fields when adding fields to schemas.

0.10.1 (08.09.2017)

Clustering: Added documentation and support for cluster configurations which use a list of static IP adresses instead of multicast discovery.

Node Migration: The node migration performance has been increased.

REST: Added new endpoints /api/v2/admin/jobs to list and check queued migration jobs. The new endpoints are described in the feature documentation.

Search: The raw field will no longer be added by default to the search index. Instead it can be added using the new searchIndex.addRaw flag within the schema field. Please note that the raw field value in the search index will be automatically truncated to a size of 32KB. Otherwise the value can’t be added to search index.

Migration: Interrupted migrations will now automatically be started again after the server has been started. Failed migration jobs can be purged or reset via the /api/v2/admin/jobs endpoint.

Migration: Migrations will no longer fail if a required field was added. The field will be created and no value will be set. Custom migration scripts can still be used to add a custom default value during migration.

{
    "name" : "name",
    "label" : "Name",
    "required" : true,
    "type" : "string",
    "searchIndex": {
        "addRaw": true
    }
}

Java REST Client: Various missing request parameter implementations have been added to the mesh-rest-client module.

Node Migration: A bug has been fixed which prevented node migrations with more than 5000 elements from completing.

GraphQL: Updated GraphiQL browser to latest version to fix various issues when using aliases.

0.10.0 (04.09.2017)

Manual Change: Configuration changes. For already existing mesh.yml files, the nodeName setting has to be added. Choose any name for the mesh instance.
Manual Change: Configuration changes. The clusterMode setting has been deprecated in favour of the new cluster configuration. This setting must be removed from the mesh.yml file.

Manual Change: The configuration files mesh.yml, keystore.jceks must be moved to a subfolder config folder.

mkdir config
mv mesh.yml config
mv keystore.jceks config

Manual Change: The graph database folder needs to be moved. Please create the storage subfolder and move the existing data into that folder.

mkdir -p data/graphdb/storage
mv data/graphdb/* data/graphdb/storage/

Clustering: This release introduces the master-master clustering support. You can read more about clustering and the configuration in the clustering documentation.

Core: The OrientDB graph database was updated to version 2.2.26

REST: The /api/v2/admin/consistency/check endpoint has been added. The endpoint can be used to verify the database integrity.

Core: Fixed missing OrientDB roles and users for some older graph databases. Some graph databases did not create the needed OrientDB user and roles. These roles and users are needed for the OrientDB server and are different from Gentics Mesh users and roles.

REST: Invalid date strings were not correctly handled. An error will now be thrown if a date string can’t be parsed.

REST: The delete handling has been updated. It is now possible to specify the ?recursive=true parameter to recursively delete nodes. By default ?recursive=false will be used. Deleting a node which contains children will thus cause an error. The behaviour of node language deletion has been updated as well. Deleting the last language of a node will also remove this node. This removal will again fail if no ?recursive=true query parameter has been added.

0.9.28 (28.08.2017)

Core: The permission check system has been updated. The elements which have only readPublished permission can now also be read if the user has only read permission. The read permission automatically also grants readPublished.

Java REST Client: The classes NodeResponse and MicronodeField now correctly implement the interface FieldContainer.

REST: The endpoint /api/v2/{projectName}/nodes/{nodeUuid}/binary/{fieldName} did not correctly handle the read published nodes permission. This has been fixed now. #111

0.9.27 (23.08.2017)

GraphQL: It is now possible to retrieve the unfiltered result count. This count is directly loaded from the search provider and may not match up with the exact filtered count. The advantage of this value is that it can be retrieved very fast.

Java REST Client: The client now also supports encrypted connections.

REST: Invalid date were not correctly handled. An error will now be thrown if a date string can’t be parsed.

GraphQL: Various errors which occurred when loading a schema of a node via GraphQL have been fixed now.

0.9.26 (10.08.2017)

UI: Added CORS support. Previously CORS was not supported by the UI.

REST API: Added a missing allowed CORS headers which were needed to use the Gentics Mesh UI in a CORS environment.

UI: Fixed translation action. Previously a error prevented translations from being executed.

UI: Fixed image handling for binary fields. Previously only the default language image was displayed in the edit view. This has been fixed.

0.9.25 (09.08.2017)

Demo: The demo dump extraction will now also work if an empty data exists. This is useful when providing a docker mount for the demo data.

GraphQL: The paging performance has been improved.

Core: Various missing permission checks have been added.

Core: A bug in the schema changes apply code has been fixed. The bug previously prevented schema changes from being applied.

0.9.24 (03.08.2017)

REST API: Added idempotency checks for various endpoints to prevent execution of superfluous operations. (E.g: Assign role to group, Assign schema to project)

Core: Fixed a bug which prevented micronodes from being transformed. SUP-4751

0.9.23 (02.08.2017)

Rest-Client: It is now possible to configure the base uri for the rest client.

GraphQL: It is now possible to get the reference of all projects from schemas and microschemas.

UI: Date fields now work with ISO 8601 strings rather than Unix timestamps.

UI: Fixed bugs with lists of microschemas. (SUP-4712)

UI: Fixed mouse clicks not working in lists in FF and (partially) in IE/Edge. (SUP-4717)

Core: The reindex performance has been increased and additional log output will be provided during operations actions.

0.9.22 (28.07.2017)

REST API: It is now possible to create nodes, users, groups, roles, releases and projects using a provided uuid.

Versioning: A publish error which was caused due to a bug in the node language deletion code has been fixed.

0.9.21 (26.07.2017)

Core: The OrientDB graph database was updated to version 2.2.24

Core: Fixed handling of ISO8601 dates which did not contain UTC flag or time offset value. Such dates could previously not be stored. Note that ISO8601 UTC dates will always be returned.

GraphQL: URL handling of the GraphQL browser has been improved. Previously very long queries lead to very long query parameters which could not be handled correctly. The query browser will now use the anchor part of the URL to store the query.

Migration: The error handling within the schema migration code has been improved.

GraphQL: It is now possible to load the schema version of a node using the schema field.

Versioning: Older Gentics Mesh instances (>0.8.x) were lacking some draft information. This information has been added now.

0.9.20 (21.07.2017)

License: The license was changed to Apache License 2.0

Schema Versions: The schema version field type was changed from number to string. It is now also possible to load schema and microschemaModel versions using the ?version query parameter.

Search: The error reporting for failing queries has been improved.

Search: The total page count value has been fixed for queries which were using ?perPage=0.

0.9.19 (07.07.2017)

UI: Fixed adding node to node list.

Docs: Various endpoints were not included in the generated RAML. This has been fixed now.

0.9.18 (30.06.2017)

Demo: Fixed demo data uuids.

Core: The OrientDB graph database was updated to version 2.2.22

Core: The Ferma OGM library was updated to version 2.2.2

0.9.17 (21.06.2017)

UI: A bug which prevented micronodes which contained empty node field from being saved was fixed.

Core: Issues within the error reporting mechanism have been fixed.

Server: The Mesh UI was added to the mesh-server jar.

Core: The internal transaction handling has been refactored.

Core: The Vert.x core dependency was updated to version 3.4.2

API: The version field of node responses and publish status responses are now strings instead of objects containing the version number.

0.9.16 (19.06.2017)

Documentation: Huge documentation update.

0.9.15 (19.06.2017)

GraphQL: Fixed loading tags for nodes.

0.9.14 (09.06.2017)

WebRoot: Bugs within the permission handling have been fixed. It is now possible to load nodes using only the read_published permission. This permission was previously ignored.

GraphQL: An introspection bug which prevented graphiql browser auto completion from working correctly has been fixed. The bug did not occur on systems which already used microschemas.

0.9.13 (08.06.2017)

UI: The UI was updated. An file upload related bug was fixed.

UI: Schema & Microschema description is no longer a required field.

0.9.12 (08.06.2017)

GraphQL: Fixed handling of node lists within micronodes.

GraphQL: Fixed Micronode type not found error.

GraphQL: Fixed GraphQL API for system which do not contain any microschemas.

GraphQL: Fixed permission handling and filtering when dealing with node children.

0.9.11 (07.06.2017)

GraphQL: The GraphQL library was updated. Various GraphQL related issues have been fixed.

0.9.10 (29.05.2017)

Schemas: The default content and folder schemas have been updated. The fileName and folderName fields have been renamed to slug. The name field was removed from the content schema and a teaser field has been added. These changes are optional and thus not automatically applied to existing installations.

Demo: The folderName and fileName fields have been renamed to slug. This change only affects new demo installations.

GraphQL: The language fallback handling was overhauled. The default language will no longer be automatically be append to the list of fallback languages. This means that loading nodes will only return nodes in those languages which have been specified by the lang argument.

GraphQL: The path handling for nodes within node lists has been fixed. Previously it was not possible to retrieve the path and various other fields for those nodes.

0.9.9 (19.05.2017)

Core: The OrientDB graph database was updated to version 2.2.20.

API: The following endpoints were moved:

  • /api/v2/admin/backup/api/v2/admin/graphdb/backup

  • /api/v2/admin/export/api/v2/admin/graphdb/export

  • /api/v2/admin/import/api/v2/admin/graphdb/import

  • /api/v2/admin/restore/api/v2/admin/graphdb/restore

Core: Added /api/v2/:projectName/releases/:releaseUuid/migrateMicroschemas endpoint which can be used to resume previously unfinished micronode migrations.

Performance: The startup performance has been increased when dealing with huge datasets.

Auth: The anonymous authentication mechanism can now also be disabled by setting the Anonymous-Authentication: disable header. This is useful for client applications which don’t need or want anonymous authentication. The Gentics Mesh REST client has been enhanced accordingly.

Core: The read performance of node lists has been improved.

Core: The write performance of nodes has been improved.

Demo: The demo data have been updated. The a folderName and fileName field has been added to the demo schemas.

GraphQL: Added micronode list handling. Previously it was not possible to handle micronode list fields.

Core: Fixed NPE that was thrown when loading releases on older systems.

Core: An upgrade error has been fixed which was caused by an invalid microschemaModel JSON format error.

UI: You will no longer be automatically logged in as anonymous user once your session expires.

Core: The language fallback handling for node breadcrumbs has been fixed. Previously the default language was not automatically added to the handled languages.

0.9.8 (08.05.2017)

UI: Microschemas can now be assigned to projects.

UI: Descriptions can now be assigned to schemas & microschemas.

Core: A bug was fixed which prevented the node response project property to be populated.

Core: The redundant isContainer field was removed from the node response.

Core: Various bugs for node migrations have been fixed.

Core: The allow property for micronode schema fields will now correctly be handled.

Core: Microschemas will now be assigned to projects during a schema update. This only applies for microschemas which are referenced by the schema (e.g. via a micronode field).

Core: The OrientDB graph database was updated to version 2.2.19.

0.9.7 (28.04.2017)

GraphQL: The nested content and contents fields have been removed. The properties of those fields have been merged with the node / nodes field.

GraphQL: The field names for paged resultset meta data have been updated to better match up with the REST API fields.

GraphQL: A language can now be specified when loading node reference fields using the lang argument.

GraphQL: It is now possible to resolve links within loaded fields using the linkType field argument.

Auth: Support for anonymous access has been added to mesh. Requests which do not provide a mesh.token will automatically try to use the anonymous user. This user is identified by username and the thus no anonymous access support is provided if the user can’t be located.

GraphQL: It is now possible to retrieve the path for a content using the path field. The Node.languagePaths has been removed in favour of this new field.

Auth: It is now possible to issue API tokens via the GET /api/v2/users/:userUuid/token endpoint. API tokens do not expire and work in conjunction with the regular JWT authentication mechanism. These tokens should only be used when SSL is enabled. The DELETE /api/v2/users/:userUuid/token endpoint can be used to revoke the issued API token. Only one API token is supported for one user. Generating a new API token will invalidate the previously issued token.

GraphQL: An error was fixed which occurred when loading a node using a bogus uuid.

Auth: An error which caused the keystore loading process to fail was fixed.

0.9.6 (14.04.2017)

It is now possible to resume previously aborted schema migrations via the /api/v2/:projectName/releases/:releaseUuid/migrateSchemas endpoint.

Auth: The Java keystore file will now automatically be created if none could be found. The keystore password will be taken from the mesh.yml file or randomly generated and stored in the config.

Core: Migration errors will no longer cause a migration to be aborted. The migration will continue and log the errors. An incomplete migration can be resumed later on.

Core: Fixed node migration search index handling. Previous migrations did not correctly update the index. A automatic reindex will be invoked during startup.

0.9.5 (13.04.2017)

Core: The schema check for duplicate field labels has been removed. The check previously caused schema updates to fail.

0.9.4 (13.04.2017)

UI: Fixed project creation.

UI: Fixed error when attempting to translate a node.

UI: Fixed incorrect search query.

UI: Display error when attempting to publish a node with an unpublished ancestor

JWT: The signatureSecret property within the Gentics Mesh configuration has been renamed to keystorePassword.

JWT: It is now possible to configure the algorithm which is used to sign the JWT tokens.

Java: The Java model classes have been updated to provide fluent API’s.

Demo: It is now possible to access elasticsearch head UI directly from mesh via http://localhost:8080/elastichead - The UI will only be provided if the elasticsearch http ports are enabled. Only enable this for development since mesh will not protect the Elasticsearch HTTP server.

Core: Downgrade and upgrade checks have been added. It is no longer possible to run Gentics Mesh using a dump which contains data which was touched by a newer mesh version. Upgrading a snapshot version of Gentics Mesh to a release version can be performed under advisement.

0.9.3 (10.04.2017)

UI: A bug which prevented assigning created schemas to projects was fixed.

A bug which could lead to concurrent request failing was fixed.

Error handling: A much more verbose error will be returned when creating a schema which lacks the type field for certain schema fields.

GraphQL: A bug which lead to incorrect column values for GraphQL errors was fixed.

The OrientDB dependency was updated to version 2.2.18.

GraphQL: The container/s field was renamed to content/s to ease usage.

GraphQL: It is no longer possible to resolve nodes using the provided webroot path. The path argument and the resolving was moved to the content field.

0.9.2 (04.04.2017)

The /api/v2/admin/backup, /api/v2/admin/restore, /api/v2/admin/import, /api/v2/admin/export endpoints were added to the REST API. These endpoint allow the creation of backup dumps.

GraphQL: It is now possible to execute elasticsearch queries. within the GraphQL query.

GraphQL: It is now possible to resolve a partial web root path using the child field of a node.

GraphQL: It is now possible to resolve information about the running mesh instance via GraphQL.

Various issues with the linkType argument within the GraphQL API have been fixed.

Fixed NPE that occurred when loading a container for a language which did not exist.

0.9.1 (28.03.2017)

The Access-Control-Allow-Credentials: true Header will now be returned when CORS support is enabled.

A NullPointerException within the Java Rest Client was fixed.

The AngularJS Demo was updated.

0.9.0 (27.03.2017)

Gentics Mesh now supports GraphQL.

The expandAll and expand parameters will be removed within an upcoming release of Gentics Mesh. We highly recommend to use the GraphQL endpoint instead if you want to fetch deeply nested data.

Schema name validation - Schema and microschemaModel names must only contain letter, number or underscore characters.

Node Tag Endpoint

The endpoint /api/v2/:projectName/nodes/:nodeUuid/tags was enhanced. It is now possible to post a list of tag references which will be applied to the node. Tags which are not part of the list will removed from the node. Tags which do not exist will be created. Please note that tag families will not automatically be created.

The tags field within the node response was updated accordingly.

0.8.3 (24.02.2017)

Tags are now also indexed in the node document in the field tagFamilies, grouped by tag families.

0.8.2 (23.02.2017)

The trigram filter configuration was updated so that all characters will be used to tokenize the content.

0.8.1 (21.02.2017)

A bug which prevented index creation in certain cases was fixed.

0.8.0 (10.02.2017)

Names, string fields and html field values will now be indexed using the trigram analyzer.

Binary Endpoint Overhaul

The field API endpoint /api/v2/:projectName/nodes/:nodeUuid/languages/:language/fields/:field was removed and replaced by the binary /api/v2/:projectName/nodes/:nodeUuid/binary endpoint. The binary endpoints are now also versioning aware and handle conflict detection. It is thus required to add the language and version form data parameters to the upload request.

Transform Endpoint Overhaul

The endpoint /api/v2/:projectName/nodes/:nodeUuid/languages/:language/fields/:field/transform was renamed to /api/v2/:projectName/nodes/:nodeUuid/binaryTransform. The transform endpoint will now return the updated node.

The no longer needed schemaReference property was removed from node update requests.

The rootNodeUuid property within node project response was changed.

Old structure:

{
…
  "rootNodeUuid" : "cd5ac8943a4448ee9ac8943a44a8ee25",
…
}

New structure:

{
…
  "rootNode": {
    "uuid" : "cd5ac8943a4448ee9ac8943a44a8ee25",
  },
…
}
— Example

The parentNodeUuid property within node create requests was changed.

Old structure:

{
…
  "parentNodeUuid" : "cd5ac8943a4448ee9ac8943a44a8ee25",
…
}

New structure:

{
…
  "parentNode": {
    "uuid" : "cd5ac8943a4448ee9ac8943a44a8ee25",
  },
…
}
— Example

JSON Schema information have been added to the RAML API documentation. This information can now be used to generate REST model types for various programming languages.

The navigation response JSON was restructured. The root element was removed.

Old structure:

{
  "root" : {
    "uuid" : "cd5ac8943a4448ee9ac8943a44a8ee25",
    "node" : {…},
    "children" : […]
  }
}

New structure:

{
  "uuid" : "cd5ac8943a4448ee9ac8943a44a8ee25",
  "node" : {…},
  "children" : […]
}
— Example

0.7.0 (19.01.2017)

Content releases support

This version of Gentics Mesh introduces Content Releases. A detailed description of this feature can be found in our Documentation.

Versioning support

This version of Gentics Mesh introduces versioning of contents. A detailed description of the versioning feature can be found in our Documentation.

Important changes summary:

  • Node update request must now include the version information

  • The query parameter ?version=published must be used to load published nodes. Otherwise the node will not be found because the default version scope is draft.

  • Two additional permissions for nodes have been added: publish, readpublished

Existing databases will automatically be migrated during the first setup.

The missing availableLanguages and defaultLanguage parameters have been added to the mesh-ui-config.js file. Previously no language was configured which removed the option to translate contents.

Image Property Support - The binary field will now automatically contain properties for image width, image height and the main dominant color in the image.

API Version endpoint - It is now possible to load the mesh version information via a GET request to /api/v2/.

Project endpoint - The current project information can now be loaded via a GET request to /api/v2/:projectName.

When the search indices where recreated with the reindex endpoint, the mapping for the raw fields was not added. This has been fixed now.

The search index mapping of fields of type "list" were incorrect and have been fixed now.

Various issues with the schema node migration process have been fixed.

0.6.29 (07.03.2017)

The documentation has been enhanced.

Missing fields could cause error responses. Instead the missing fields will now be set to null instead.

0.6.28 (21.10.2016)

Missing fields could cause error responses. Instead the missing fields will now be set to null instead.

0.6.27 (07.10.2016)

Various issues with the schema node migration process have been fixed.

0.6.26 (05.10.2016)

The maximum transformation depth limit was raised from 2 to 3.

0.6.25 (20.09.2016)

The used Vert.x version was bumped to 3.3.3.

0.6.24 (19.09.2016)

The Gentics Mesh admin ui has been updated. The UI will no longer send basic auth information for succeeding requests which were invoked after the login action had been invoked. Instead the basic auth login information will only be send directly during login.

A bug within the breadcrumb resolver has been fixed. Previously breadcrumbs did not account for language fallback options and thus returned a 404 path for nodes which used a different language compared to the language of the retrieved node. This has been fixed.

0.6.23 (14.09.2016)

The missing availableLanguages and defaultLanguage parameters have been added to the mesh-ui-config.js file. Previously no language was configured which removed the option to translate contents.

0.6.22 (24.08.2016)

It is now possible to publish language variants. Previously it was only possible to publish nodes. This affected all language variants of the node.

0.6.21 (17.08.2016)

The debug output in case of errors has been enhanced.

0.6.20 (03.08.2016)

The changelog processing action for existing installations was fixed.

0.6.19 (02.08.2016)

Mesh-Admin-UI was updated to version 0.6.13

0.6.18 (24.06.2016)

Previously a search request which queried a lot of nodes could result in a StackOverflow exception. The cause for this exception was fixed.

The gentics/mesh and gentics/mesh-demo images now use the alpine flavour base image and thus the size of the image stack has been reduced.

The performance of the search endpoints have been improved.

0.6.17 (22.06.2016)

The path property within the node response breadcrumb was not set. The property will contain the resolved webroot path for the breadcrumb element. No value will be set if the resolveLinks query parameter was configured or set to OFF. CL-459

0.6.16 (21.06.2016)

Gzip compression support was added. JSON responses are now pretty printed by default.

0.6.15 (20.06.2016)

Mesh-Admin-UI was updated to version 0.6.12

0.6.13 (17.06.2016)

Mesh-Admin-UI was updated to version 0.6.10

0.6.12 (02.06.2016)

A bug within the schema migration process was fixed. The label field was previously not correctly handled for newly added fields.

A bug within the schema migration process was fixed. The segmentfield value was reset to null when updating a schema. This has been fixed now.

The "AllChangeProperties" field was removed from the JSON response of schema fields.

0.6.11 (31.05.2016)

A bug which prevented node reference deletion was fixed. It is now possible to delete node references using a json null value in update requests.

OrientDB was updated to version 2.1.18

0.6.10 (25.05.2016)

It is now possible to grant and revoke permissions to microschemas using the roles/:uuid/permissions endpoint.

0.6.9 (04.05.2016)

The mesh-ui was updated.

It is now possible to also include non-container nodes in a navigation response using the includeAll parameter. By default only container nodes will be included in the response.

A minor issue within the webroot path handling of node references was fixed. CL-425

Fixed label and allow field property handling when updating schema fields. CL-357

Various concurrency issues have been addressed.

0.6.8 (26.04.2016)

The mesh-ui was updated.

OrientDB was updated to version 2.1.16

0.6.7 (25.04.2016)

Update checker. A bug that prevented the update checker from working correctly was fixed.

0.6.6 (06.04.2016)

Public open beta release

A bug within the reindex changelog entry was fixed. The bug prevented the node index to be recreated.

The mesh-ui-config.js default apiUrl parameter was changed to /api/v2 in order to allow access from hosts other than localhost.

0.6.5 (05.04.2016)

The displayField value was missing within the node search document. The value was added.

The changelog execution information was added to the demo data dump and thus no further changelog execution will happen during mesh demo startup.

An edge case that could cause multiple stack overflow exception was fixed.

A Cache-Control: no-cache header has been set to mesh responses.

The mesh-ui was updated.

Various search index related bugs have been fixed.

The mesh-ui configuration file was renamed to mesh-ui.config.js

0.6.4 (24.03.2016)

The mesh ui was updated.

0.6.3 (22.03.2016)

Database migration/changelog system. A changelog system was added to mesh. The system is used to upgrade mesh data from one mesh version to another.

The published flag can now be referenced within an elasticsearch query.

It was not possible to update the allow flag for schema lists (e.g. micronode lists). This has been fixed now.

The schema migration process did not update the node search index correctly. In some cases duplicate nodes would be returned (the old node and the migrated one). This has been fixed. Only the latest version of nodes will be returned now.

A NPE was fixed which occurred when updating or creating a node list which included elements which could not be found. (CL-358)

A typo within the search model document for users was fixed. The property emailadress was renamed to emailaddress.

0.6.2 (15.03.2016)

The microschemaModel and schema permission field was always empty for newly created elements.

0.6.1 (14.03.2016)

Added mesh-ui to gentics/mesh docker image

0.6.0 (14.03.2016)

Added image API endpoint Images can now be resized and cropped using the image endpoint.

Added schema versioning

Added schema migration process It is now possible to update schemas. Custom migration handlers can be defined in order to modify the node data.

Added Micronodes/Microschemas A new field type has been added which allows creation of micronodes.

Webroot API The webroot REST endpoint was added which allows easy retrieval of nodes by its web path.

JWT Authentication support has been added It is now possible to select JWT in order to authenticate the user.

Navigation Endpoint The navigation REST endpoint was added which allows retrieval of navigation tree data which can be used to render navigations.

Added docker support It is now possible to start mesh using the gentics/mesh or gentics/mesh-demo docker image.

Vert.x update The Vert.x dependency was updated to version 3.2.1

Fixed paging issue for nested tags

0.5.0 (17.11.2015)

Closed beta release