Server

Nuxeo Server Cloud 2020 Release Notes

Updated: July 30, 2020

This page relates to the release notes of Nuxeo Server and related addons for 11 cycle, a.k.a Cloud release 2020 cycle. It will list the improvements and features that are successively shipped with the 11.1 release. Evolutions are grouped by components.

You can also find detailed JIRA release notes:

We will also provide soon instructions for upgrading to the latest release.

Nuxeo Server

Core Storage

Allow Optimized MongoDB Ids With Shorter Size

(also available in 10.10)

We can now use 8 bytes MongoDB ids (instead of 36 bytes) to reduce database and index sizes.

 More on JIRA ticket NXP-28763

Blob Provider Improvements

(also available in 10.10)

A new blob provider implementation has been added to provide more flexibility and more options:

  • making them transactional,
  • adding a caching layer,
  • allowing direct deletion,
  • changing the digest computation for keys into something based on doc or blob info,
  • passing down more information to the storage layer (as filename, mime type, username,...),
  • avoid temporary files when streaming decrypted binaries (TL-318).

This new blob provider can be enabled using a property in nuxeo.config

 More on the following JIRA tickets:

Better Management of Temporary Files for the Encrypted (AES) Blob Provider

(also available in 10.10)

A new implementation of the AESBinaryManager has been added to improve temporary files management.

 More on JIRA ticket NXP-28456

DefaultBlobDispatcher Supports Full Regexp-Based Match

(also available in 10.10)

Full regexp-based match has been added to DefaultBlobDispatcher.

 More on JIRA ticket NXP-28267

Add ecm:path Variable to the Default Blob Dispatcher

(also available in 10.10)

ecm:path variable is added to the default blob dispatcher.

 More on JIRA ticket NXP-28227

Allow Avoiding Use of the HTTP Proxy for S3 Connections if the S3 Endpoint Is Internal

(also available in 10.10)

In some situations, the S3BinaryManager needs to connect to a local S3-compatible endpoint that must not go through the global nuxeo.http.proxy.host defined.

 More on JIRA ticket NXP-28185

Better Management of Authentication Parameters for Google Storage

(also available in 10.10)

We can now reference a file with the JSON content rather than the JSON value itself as a framework property.

 More on JIRA ticket NXP-27925

Configurable Digest in S3BinaryManager

(also available in 10.10)

The digest algorithm to use to compute a unique key when storing blobs in S3 can now be configured among standard algorithms listed here for Java 11.

The default value is MD5.

 More on JIRA ticket NXP-27805

S3 Cache and Connection Parameters Configurable Through nuxeo.conf

Instead of editing the template defining the S3 blob provider, we can now set the S3 cache and the connection parameters in nuxeo.conf

 More on JIRA ticket NXP-27777

S3 Transfer Acceleration Support

We now allow using the accelerate mode of S3, more details here: https://docs.aws.amazon.com/AmazonS3/latest/dev/transfer-acceleration.html

 More on JIRA ticket NXP-27657

Configure S3 Multipart Part Size

(also available in 10.10)

It is now possible to configure the chunk size of multipart part size (from 5MB to 5GB).

 More on JIRA ticket NXP-26899

Document Deletion With Bulk Action Framework on DBS

We now use the Bulk Action Framework to delete massively documents. This is supported for DBS only.

 More on JIRA ticket NXP-26908

MongoDB New Indexes

To improve performances, new indexes have been added on the metadata rend:sourceId and rend:sourceVersionableId that are used for standard queries on Nuxeo Server.

 More on JIRA ticket NXP-26676

H2 1.4.200

The Nuxeo Platform now relies on H2 1.4.200

 More on JIRA ticket NXP-28956

Directory

Allow Directory Initialization to Just Add Missing Entries

It is now possible to initialize a directory by adding missing entries and keep the existing entries untouched.

 More on JIRA ticket NXP-27877

Workflow

Support Task Variables on Nuxeo-Dropzone

Nuxeo-dropzone has been improved to be usable on workflow tasks layouts for uploading blobs to variables.

 More on JIRA ticket NXP-28263

Task Endpoint Paginable

(also available in 10.10)

The Task endpoint is now paginable.

 More on JIRA ticket NXP-28008

Nuxeo Streams

Kafka 2.5.0

The Nuxeo Platform now relies on Kafka 2.5.0.

 More on JIRA ticket NXP-29045

Report Stream lag and latency from Nuxeo

Previously, the stream processing lag and latency could be monitored by using Nuxeo stream.sh.

Stream lag and latency are now directly delivered by Nuxeo Server.

 More on JIRA ticket NXP-28801

Expose Nuxeo Stream latency metrics to Datadog

(also available in 10.10)

In the same way, it has been done for Graphite (cf. NXP-26248), we can now expose Nuxeo Stream lag and latency in Datadog.

 More on JIRA ticket NXP-28508

Nuxeo Stream probe in the default health check

The default Nuxeo health check that is used by the runningstatus REST endpoint now includes a probe to check Nuxeo Stream Processors.

 More on JIRA ticket NXP-28094

Nuxeo Stream expose latency to Prometheus

Nuxeo deployments with Nuxeo Stream/Kafka on Kubernetes/OpenShift exposes latency to Prometheus, the metrics and monitoring engine commonly bundled with Kubernetes/OpenShift.

 More on JIRA ticket NXP-26416

Enable to register a Processor without running it

There are cases where a processor needs to be defined but not start/stop by the StreamService. For instance, an import processor can be registered and start/stop using a REST API. Another case is when having different processors that work together, we may want to initialize all the streams first and then control the order the processors are started.

 More on JIRA ticket NXP-28356

Recovery procedure for systematic failure in a stream processor

There is a new option to recover from systematic stream processor failure.
First, add nuxeo.stream.recovery.skipFirstFailures=1 to a single Nuxeo node, Processors will skip the first record in failure instead of terminating. Second, once the problematic record is skipped remove the option from the nuxeo.conf and perform a rolling restart of other Nuxeo nodes to restore all processor threads.

 More on JIRA ticket NXP-27529

Expose stream processor failures as metrics

A new counter metric has been added when the processing enters in termination due to an error. Also, even if the probe is disabled, it will be nice to have the stream processor probe output to list which processing is failing.

 More on JIRA ticket NXP-27471

Stream Processor Probe in The runningstatus

Since 11.1, you can activate a health check probe to check the status of stream processors. The option to activate in nuxeo.conf is:nuxeo.stream.healthCheck.enabled=true

If a stream processor fails after retries and its failover policy is to stop on error the runningstatus will be in error.
When this happens the Nuxeo node needs to be restarted to continue the processing.
Note that, by default, the health check probe is not activated.

 More on JIRA ticket NXP-27164

WorkManager

Trigger an action after completion of a group of Works

(also available in 10.10)

The StreamWorkManager provides the capability to trigger an action once all tasks of a group of Works are completed. For instance, it is now possible to fire a document rendition done Event once all the renderings for a document are completed.

 More on JIRA ticket NXP-28182

New metrics for Works DLQ usage

(also available in 10.10)

Introduce a new metric nuxeo.works.dlq.count that counts the Works in failure that has been put in the dead letter queue (DLQ) stream since the instance is up.

 More on JIRA ticket NXP-27673

Store Work in Failure in DLQ for Repair Purpose

(also available in 10.10)

After retries, Works in failure are stored in a dead letter queue (DLQ) stream named dlq-work. This DLQ is activated by default on both WorkManager implementations (default and StreamWorkManager).

Works in this DLQ can be re-executed for repair purpose using an automation operation. Note that in cluster mode when NOT using Kafka you need to run this automation operation on each Nuxeo node.

 More on JIRA ticket NXP-27148

WorkManager Processing Disabling

You can now use nuxeo.work.processing.disable=true to disable WorkManager processing

 More on JIRA ticket NXP-24314

Scheduler

Scheduler Services to Support Multiple Nuxeo Nodes Startup

(also available in 10.10)

The scheduler services handle the startup with multiple Nuxeo nodes.

 More on JIRA ticket NXP-285585

Audit

Export Audit in CSV Files

(also available in 10.10)

Audit is now exportable as a CSV file.

 More on JIRA ticket NXP-27935

Query

NOW Expression in NXQL

(also available in 10.10)

NOW expression is supported in the NXQL language.

 More on JIRA ticket NXP-26305

Rendition

Ability to Disable the Rendition Computations

Previously, the renditions were automatically and systematically computed/re-computed when adding or updating a file content. It is now possible to configure Nuxeo Server to disable this behavior.

 More on JIRA ticket NXP-28743

Bulk Action Framework for Picture.RecomputeViews Operation

Picture.RecomputeViews operation has been re-implemented to use the Bulk Action Framework.

 More on JIRA ticket NXP-26420

Thumbnail Recomputation with Bulk Action Framework

(also available in 10.10)

Thumbnail recomputation is now done using the Bulk Action Framework.

 More on JIRA ticket NXP-27605

Elasticsearch

Elasticsearch nested Operator

(also available in 10.10)

Nuxeo Server now supports the Elasticsearch "nested" operator.

 More on JIRA ticket NXP-25489

Multiple Nuxeo With Embedded Elasticsearch

(also available in 10.10)

Multiple Nuxeo with embedded Elasticsearch can run on the same server.

 More on JIRA ticket NXP-27922

Elasticsearch Reindexing Optimization When a Document Is Checked In

(also available in 10.10)

The number of versions reindexed at document check-in has been optimized.

 More on JIRA ticket NXP-27663

Bulk Service (Aka "Bulk Action Framework")

Bulk Service Processor Can Be Contributed by Configuration

Previously, the Bulk Service Processor (the scroller and status computations) required development to handle the dynamic parts (the action source stream) and to control the initialization.

  • The Bulk Service Processor can now be created by using configuration only for:
  • Register a processor
  • Initialize its streams
  • Mark streams as external (defined in another processor)

 More on JIRA ticket NXP-28357

Bulk Service Handles Elasticsearch Scroller

(also available in 10.10)

Elasticsearch scroller is usable with the Bulk Service.

 More on JIRA ticket NXP-28086

Monitoring

Improvements in Error Messages

We improved some error messages to help analysis and diagnosis.

 More on the following JIRA tickets:

javax.mail Messages in Nuxeo Logs

(also available in 10.10)

javax.mail messages are now redirected to Nuxeo logs.

 More on JIRA ticket NXP-28275

nuxeoctl Now Starts Nuxeo Platform in Strict Mode

Previously, it was possible to start a Nuxeo instance with an undeployed component. This can be risky, especially in cluster mode.

By default, nuxeoctl start is now in strict mode which prevents this to happen.

 More on JIRA ticket NXP-20418

Datadog and Metrics Improvements

A lot of improvements have been made to improve metrics scope, visibility and usability:

  • Improve Datadog metrics using tagging,
  • Reduce the default number of metrics published by Graphite and Datadog,
  • Report Stream lag and latency from Nuxeo,
  • Expose stream processor failures as metrics,
  • Refactor MetricsService to support more reporters,
  • Enable to publish Datadog metrics in UDP,

It is now possible to easily build Datadog dashboards in the same way as for Grafana/Graphite.

 More on the following JIRA tickets:

Change Default Datadog Poll Interval to 1 Min

The option to configure the metrics poll interval for Datadog is now metrics.datadog.pollInterval and the default value is 60 (previously datadog.pollinterval=10)

 More on JIRA ticket NXP-28760

Comment Service

Rework Comments Storage/Architecture

(also available in 10.10)

  • The comments storage has been refactored to improve several aspects:
  • Permissions management
  • Storage
  • Versioning
  • Copy
  • export/import
  • ...

 More on JIRA ticket NXP-27984

Add Parent Post Content in 'New Comment' Notification

If a comment is a reply to another comment, the parent comment is now quoted in the comment notification mail.

 More on JIRA ticket NXP-28255

Comments Indexed on Linked Document Full-Text Field

Comments are now indexed on linked document full-text field.

 More on JIRA ticket NXP-26669

Automatically Send Notifications to the Users Who Participate in a Conversation

(also available in 10.10)

Automatic notifications are sent to users who participate on Comment conversation.

 More on JIRA ticket NXP-28254

Download Service

Digest and Last-Modified Negotiation for Download Service

(also available in 10.10)

Digest and Last-Modified negotiation are added to the download service to manage the following request/response headers:

  • Want-Digest / Digest
  • If-Modified-Since / Last-Modified

 More on JIRA ticket NXP-28092

Refactor Downloadservice.Downloadblob to Use Builder Pattern

(also available in 10.10)

Previously, the API DownloadService.downloadBlob had lots of different overloaded versions with different numbers of arguments.

We now use a builder pattern itself, to pass a download context object with all the required information.

 More on JIRA ticket NXP-28005

Make Download Service Deal With Head Efficiently

(also available in 10.10)

The download service responds to a HEAD request with a better efficiency.

 More on JIRA ticket NXP-28093

CMIS

Use the Nuxeo Downloadservice Framework for Cmis Downloads

(also available in 10.10)

We now use the Nuxeo DownloadService framework for CMIS downloads, instead of the native OpenCMIS library code. This allows us to better deal with buffering, transactions, and take into account potential CDN redirects.

 More on JIRA ticket NXP-27337

REST API

Facet API on SimpleDocumentModel

(also available in 10.10)

The facet API has been implemented on SimpleDocumentModel.

 More on JIRA ticket NXP-28597

Offset Support to PaginableObject

The PaginableObject.java now supports the ability to specify an offset instead of a page index when it comes to fetching a page provider result set.

 More on JIRA ticket NXP-28418

New Parameter to the Document.Copy Operation to Reset the Document Lifecycle

There is a listener linked to the copy event and which looks at a context variable to reset the lifecycle or not.

The new parameter "reset lifecycle" allows to set or not this context variable.

 More on JIRA ticket NXP-27735

Improve ConfigurationService API

A new API on ConfigurationService has been added to handle primitive like types:

  • Integer getInteger(String key) (TBC)
  • int getInteger(String key, int defaultValue) (TBC)
  • Long getLong(String key)
  • long getLong(String key, long defaultValue)
  • Boolean getBoolean(String key)
  • boolean getBoolean(String key, boolean defaultValue)
  • Duration getDuration(String key)
  • Duration getDuration(String key, Duration defaultValue)
  • String getString(String key)
  • String getString(String key, String defaultValue)

 More on JIRA ticket NXP-26181

AWS Service

Multiple Configurations for AWSConfigurationService

(also available in 10.10)

Multiple AWS configurations are now supported.

 More on JIRA ticket NXP-26823

CSV Export Service

Elasticsearch Scroll for CSV Export Bulk Action

The CSV Export now uses Elasticsearch scroll. This allows to improve resilience and ensure that an export from the UI (search result from Elasticsearch) matches the export.

 More on JIRA ticket NXP-28577

Scroll Service

(also available in 10.10)

We added a new service dedicated to retrieve a long list of identifiers representing a result set.

This service allows to globalize the existing scrolling API to get a document list ids or Elasticsearch resultset.

It also allows to have other document scrollers:

  • a list of ids (so we don't have to query the repository or elastic)
  • a file in transient store containing a list of ids
  • Or to scroll on non-documents identifier:
  • audit entry ids
  • user ids
  • dictionary ids
  • a stream

 More on JIRA ticket NXP-28334

Customisation

Allow Global Disabling of Schemas, Like Files

(also available in 10.10)

We can now disable an existing schema (make it so that it's ignored whenever a doctype references it, or when the list of all schemas is returned). For instance, some use cases require that no attachments are created in the platform. With this feature, this becomes possible by simply disabling the files schema.

 More on JIRA ticket NXP-27962

Allow Global Disabling of Facets, Like Versionable

(also available in 10.10)

A facet can be globally disabled. For instance, some use cases require that no versions are created in the platform.

 More on JIRA ticket NXP-27873

Allow Map and List in Nuxeo Platform List Template Parameters

It is now possible to contribute a complex structure as templateParam.

 More on JIRA ticket NXP-27613

Improve OpenID Provider Descriptor to Handle User Info Request Authentication per Bearer

(also available in 10.10)

We improved OpenID provider to be able to choose between authentication though query parameters or through Authentication header.

 More on JIRA ticket NXP-27446

Packaging / Distribution / Miscellaneous

Tomcat 9.0.35

The Nuxeo Platform now relies on Tomcat 9.0.35.

 More on JIRA ticket NXP-29093

Other Upgrades

Other upgrades are listed in the following JIRA ticket: NXP-28537

Remove Post Commit Listeners

Post-commit listeners have been converted to asynchronous listeners.

 More on JIRA ticket NXP-2691

Allow Event.Fire to Use Properties

It is now possible to use properties into the asynchronous events.

 More on JIRA ticket NXP-26449

DocumentModelJsonWriter Exposes Schemas

(also available in 10.10)

Documents exported through JSON now have an addition schemas field (similar to facets).

 More on JIRA ticket NXP-27995

Clusterservice to Hold Cluster Node Info

A new service has been added to hold info about whether clustering is enabled and the cluster node id. This replaces ad-hoc uses of the framework properties repository.clustering.enabled and repository.clustering.id and multiple different random generations of ids when there is no node id specified. Current direct users of the properties are:

  • MigrationServiceImpl
  • StreamPubSubProvider
  • CacheServiceImpl

 More on JIRA ticket NXP-25499

Reduce Response Size of the ACL Enricher

(also available in 10.10)

The User object representation is now returned to the client without its groups.

 More on JIRA ticket NXP-27947

ecm:isProxy A Valid Field for Aggregates

(also available in 10.10)

The field ecm:isProxy is now part of the valid fields for Elasticsearch aggregates.

 More on JIRA ticket NXP-26656

Cleanup

This release also comes with hundreds of bugs fixed and also code cleanups, making Nuxeo Server more solid than ever.

Addons

Web UI

For more information on Web UI latest release:

Farewell

Apache Derby

The support of the Apache Derby embedded database has been removed. H2 is now the only option to handle in-memory data sources.

 More on JIRA ticket NXP-28673

JAAS

JAAS has been removed (the use of LoginContext, security domains, LoginModules, etc.) and replaced per a direct call to NuxeoAuthenticationPlugins.

New methods:

  • Framework.loginSystem()
  • Framework.loginSystem(originatingUser)
  • Framework.loginUser(username)
  • NuxeoPrincipal.getCurrent()
  • NuxeoPrincipal.isCurrentAdministrator()

The above loginSystem and loginUser methods now return a NuxeoLoginContext that is AutoCloseable and can therefore be used in a try-with-resources.

Deprecated methods:

  • Framework.login()
    -> Framework.loginSystem()
  • Framework.loginAs(originatingUser)
    -> Framework.loginSystem(originatingUser)
  • Framework.loginAsUser(username)
    -> Framework.loginUser(username)
  • Framework.login(username, password)
    -> Framework.loginUser(username)
  • ClientLoginModule.clearThreadLocalLogin()
    -> LoginComponent.clearPrincipalStack() (INTERNAL)
  • ClientLoginModule.getThreadLocalLogin()
    -> LoginComponent (INTERNAL)
  • ClientLoginModule.getCurrentLogin()
    -> LoginComponent.getCurrentPrincipal()
  • ClientLoginModule.getCurrentPrincipal()
    -> NuxeoPrincipal.getCurrent()
  • ClientLoginModule.isCurrentAdministrator()
    -> NuxeoPrincipal.isCurrentAdministrator()
  • LoginStack

These extension points or part of their contributions are removed:

  • <loginModulePlugin> in the element <authenticationPlugin> of extension point authenticators of org.nuxeo.ecm.platform.ui.web.auth.service.PluggableAuthenticationService
  • the extension point domains of org.nuxeo.runtime.LoginComponent (which included registration of LoginModule classes)
  • the extension point plugin of org.nuxeo.ecm.platform.login.LoginPluginRegistry (which included registration of LoginPlugin classes)

Behavior change:

  • NuxeoAuthenticationPlugin.handleRetrieveIdentity should now contain all the authentication code, and return a UserIdentificationInfo with credentialsChecked = true (using the 1-arg constructor) if the credentials have already been checked by the auth plugin itself. Otherwise the method may return a UserIdentificationInfo that includes a username and password, to let the generic filter check the password against the UserManager.

 More on JIRA ticket NXP-27942

NXCore Class

Usage of NXCore is deprecated and its usage is removed from the platform.

 More on JIRA ticket NXP-22532

Nuxeo Static WAR

The nuxeoctl pack command used to generate a static WAR has been removed as well as the nuxeo-distribution/nuxeo-war-tests module testing it.

 More on JIRA ticket NXP-28100

Nuxeo SDK Distribution

The Nuxeo Server Tomcat SDK build has been removed. The Maven profile sdk does not exist anymore.

 More on JIRA ticket NXP-28101

Post Commit Listeners

Post-commit listeners have been converted to asynchronous listeners.

From 11.1, the post commit event listeners were made either asynchronous or synchronous. We strongly recommend to do the same thing with any custom event listener.

Later on, we will deprecate the post commit event listener execution mechanism relying on PostCommitEventExecutor, see NXP-27986.

For this purpose, a warning is logged when running a post commit event listener to inform that its execution will soon be deprecated and advising to update the listener contributions to make them asynchronous with <listener async=\"true\"...>.

The warning can be disabled with the following logger in NUXEO_SERVER/lib/log4j2.xml:

<Logger name="org.nuxeo.ecm.core.event.impl.PostCommitEventExecutor" level="warn">
  <RegexFilter regex="Running post commit event listeners.*" onMatch="DENY" onMismatch="NEUTRAL" />
</Logger>

 More on JIRA ticket NXP-26911

GWT Modules

All GWT related modules have been removed from nuxeo-jsf-ui repository:

  • nuxeo-annot-api
  • nuxeo-annot-contrib
  • nuxeo-annot-core
  • nuxeo-annot-http
  • nuxeo-annot-repo
  • nuxeo-platform-imaging-tiling
  • nuxeo-platform-imaging-tiling-preview

The PictureTilesRestlets restlet related to the nuxeo-platform-imaging-tiling has also been removed: the endpoint /nuxeo/restAPI/getTiles/ does not exist anymore.

All GWT artifacts in the Nuxeo root pom dependencyManagement have also been removed. If you depend on those ones, you must update your project pom to add them.

The related nuxeo.old.jsf.preview (introduced with NXP-25110) and nuxeo.text.annotations configuration properties that were used to activate the old preview and the GWT text annotations have been removed: setting them has no impact.

 More on JIRA ticket NXP-27447

Nuxeo DAM Dependency

The Nuxeo DAM Package and Nuxeo DAM JSF UI Package have been removed for Nuxeo 11.1. All the features (Picture, Video, ...) installed through those packages are now integrated by default in a Nuxeo Server. You do not need to depend on nuxeo-dam package anymore on your Nuxeo package, for instance:

<dependencies>
    <package>nuxeo-web-ui</package>
    <package>nuxeo-dam</package>
</dependencies>

 More on JIRA ticket NXP-28626

Nuxeo Wizard

The Nuxeo Wizard has been removed.

 More on JIRA ticket NXP-28621

Marklogic Connector

The Marklogic connector has been removed.

 More on JIRA ticket NXP-26571

Nuxeo Connect Report Tools

The Nuxeo Connect Report Tools nuxeo-connect-tools has been removed.

 More on JIRA ticket NXP-27864

Nuxeo Shell

The Nuxeo Shell nuxeo-shell addon has been removed.

 More on JIRA ticket NXP-27312

Template Rendering Samples

The Template Rendering Samples has been removed.

 More on JIRA ticket NXP-28059

Nuxeo Agenda

The Nuxeo Agenda nuxeo-agenda addon has been removed.

 More on JIRA ticket NXP-27271

Others Packages

The following deprecated and unused packages have been removed:

  • nuxeo-activity
  • nuxeo-business-days-management
  • nuxeo-core-binarymanager-sql
  • nuxeo-http-client
  • nuxeo-javaagent
  • nuxeo-logs-viewer
  • nuxeo-rating
  • nuxeo-resources-compat
  • nuxeo-review-workflows-dashboards
  • nuxeo-session-inspector

 More on JIRA ticket NXP-27271

We'd love to hear your thoughts!

All fields required