Known issues in Content Delivery
The following list describes issues that are known to exist in Content Delivery.
- Quick installation script mentions wrong Content Deployer folder names
-
The Content Delivery quick installation scripts mentions the following folders:
- deployer
- deployer-worker
- deployer-combined
But to ensure a correct installation of the Content Deployer role, you should modify them as follows, respectively:- deployer-sites
- deployer-sites-worker
- deployer-sites-combined
- All Content Delivery microservices contain Add-on service client even when they don't use the Add-on service
-
Currently, all microservices contain an Add-on service client, while only Content Deployer and the (Session-enabled) Content Service can have Extensions. This has the following consequences:
- If the
addonserviceurlenvironment variable is set on its machine, a microservice will send heartbeats to the Add-on service, even when it doesn't use the Add-on service. - A microservice fails to start if the
addonserviceurlenvironment variable is set on its machine, while at the same time, the Add-on service is not up and running --regardless of whether the microservice actually uses the Add-on service.
- If the
- After loading an Add-on, affected microservices must be restarted
-
After uploading an Add-on containing Extensions to Content Delivery microservices, you must restart each microservice that has been extended in order for the Extension or Extensions to take effect.
- No status is reported if the same Extension is loaded twice from two different Add-on packages
-
If you upload two Add-ons, both of which contain the same Extensions to a Content Delivery microservice, the microservice does not report a problem, even if in fact, the two Extensions cause a conflict.
- Requests for non-published items still require a database roundtrip, possibly impacting performance
-
In certain scenarios, a query for an item that was never published (for example, as part of trying to resolve a hyperlink) results in a request to the database. The item being requested is what is called a "null value." Previously, such a query for a null value would be resolved by the cache. But now, such a query always results in a (fruitless) database roundtrip, which has the potential of impacting performance.
- If multiple base URLs were specified when configuring a Content Delivery environment in Topology Manager, Content Delivery queries return a random base URL
-
In Topology Manager, the
Add-TtmWebsitescript for configuring a website allows you to specify a list of one or more base URLs for the website. Specifying multiple base URLs can be useful if visitors access your website using multiple base URLs, say, by the site's IP address or by a hostname.However, with the website configured this way, a Content Delivery query return a URL that randomly uses one of the base URLs specified. For example, imagine that you have set theBaseUrlsproperty of theAdd-TtmWebsitecommand to"http://myhost:84/", "http://122.3.4.5/", and that your website runs the following query to get an image called example.jpg:{ tcm_binary: link(namespaceId: 1, publicationId: 5, itemId: 258, type: BINARY) { url } }The response to this query would now randomly be one of the following:
orhttp://myhost:84/example.jpghttp://122.3.4.5/example.jpgTo prevent this from happening, set
BaseUrlsto a single value when you run theAdd-TtmWebsitescript. - Specifying multiple targets for UGC in Topology Manager does not work
-
In Topology Manager, you can add UGC to a Publication mapping by including the
ExtensionPropertiesswitch in yourSet-TtmMappingcommand, in which you specify a value for theUGCTargetNameproperty.All UGC Capabilities need to reference one single target. It is not possible to configure multiple UGC targets, especially if you use multiple UGC databases.
- Content API filtering on custom metadata does not work if the metadata keys or values contain non-Latin characters
-
Here is an example of a GraphQL Content API query that does not return proper results, but instead returns null:
{ publications(namespaceId: 2, filter: {value: "conditionset.generated.value={\"Пример1\":[\"Вибірка 3\"],\"مثال\":[\"متغير2\"]}", valueType: STRING, queryType: CUSTOM_META}) { edges { cursor node { publicationId itemType } } } } - Content API filtering on a Float format returns null
-
Here is an example of a GraphQL Content API query that does not return proper results, but instead returns null:
{ publications(namespaceId: 2, filter: {value: "ishlogicalref.object.id=1312760.0", valueType: FLOAT, queryType: CUSTOM_META}) { edges { cursor node { publicationId itemType } } } } - Content Service throws null pointer exception in response to a query with a non-existent URL
- When using the dynamic metadata API to get back Page metadata for a URL that does not exist, the Content Service throws a null pointer exception, rather than a friendly and informative error message.
- .NET method Uri.EscapeDataString(urlString) has changed behavior
-
Version 4.0 or older of the Microsoft .NET Framework is not supported. This may have an effect on how your URLs are parsed if they contain brackets:
- In .NET 4.0 and older, characters that are reserved in RFC 2396 are escaped. RFC 2396 allows brackets.
- In .NET 4.5 and newer, characters that are restricted in RFC 3986 are escaped. RFC 3986 restricts brackets.
- Publish transactions fail in a high-volume publishing scenario
-
If you are executing a high-volume publish, you might find that some publish actions fail.
This is due to incidental conflicts that occur when the Content Data Store database is updated. Content Delivery has a fallback mechanism to deal with this problem: it retries the deployment of the content for up to 10 times. But if the number of conflicts is too high, this may not be enough.
If this happens, you have the following options:- You can set up your Content Deployer as a separate endpoint and worker, and set up multiple Content Deployer workers so that you can handle high-volume publishing.
- If you want to limit yourself to a single Content Deployer worker, contact SDL Customer Support to obtain the latest hotfixes for SDL Tridion Sites 9.1, and go through the Troubleshooting section to learn how to fine-tune your Publisher and Content Deployer.
- Finally, you can republish the content that failed.
- Staged upgrades do not support OAuth in Web sites for which Preview is enabled
-
The Preview Service does not work with an Experience Manager fast track publishing service if OAuth is enabled. To work around this problem, disable OAuth on the servers until they can complete the upgrade by upgrading Content Manager as well.
-auto-registerswitch does not automatically register the Web Capability-
If you start the Discovery Service using the
-auto-registerswitch, the Web Capability (used for mapping Publications to Web applications) is not registered automatically. To work around this problem, use the Discovery Service registration tool to register this Capability by hand. - The Content Interaction Library cannot be used to render JSP or ASCX fragments
-
It is not possible to render dynamic component presentations based upon ASCX Web Controls or JSP Script fragments through the client-side Content Interaction Library. Instead customers should publish their content using the Render Engine Language (REL).
- No Context Engine Server Controls in the Content Interaction Library
-
We do not provide Context Engine Server Controls that will run using the Content Interaction Library. To use expression evaluation, use REL tags instead.
- Personalization and Profiling API not available in Content Interaction Library
-
The API is not available.
- UGC .NET Web site extension required forwarding of Claims to be configured in an inconsistent location
-
The Java/JSP version of the UGC Web site extension expects its configuration of the forwarding of Claims to be in cd_ugc_conf.xml. But the .NET version of the same software component expects it in cd_ambient_conf.xml. This is inconsistent.
PageContentAssemblerlimitation-
When you use this class, the file system page name must match the Page name in Content Manager. If not, Experience Manager cannot render correctly using the Context Interaction Database.
- A Taxonomy Keyword with multiple parents can no longer retrieve its multiple parents
-
In the event that a Keyword in your Taxonomy has multiple parents, a call to primaryKeyword.getParentKeywords() used to be able to retrieve said parents. But this API call no longer works properly.
- Some older versions of CIL require a hotfix to talk to the CIS included with SDL Tridion Sites 9.1
-
If you are using Content Interaction Libraries from before SDL Tridion Sites 9 to talk to the SDL Tridion Sites 9.1 Content Interaction Services (microservices), contact SDL Customer Support to obtain a hotfix.
- Context Engine Cartridge: Expression cannot refer to property defined by another expression
-
If you define a property in your custom vocabulary (which means the property is defined by an expression), then you cannot refer to this property from another expression that defines another property in your custom vocabulary.
- Aspect properties in Context Engine Cartridge Claims are of a different type than before
-
The following incorrect type changes for aspect properties have been detected:
Property Old type New type taf:claim:context:browser:cssVersion com.sdl.context.api.types.GenericVersion com.google.gson.internal.LinkedTreeMap taf:claim:context:browser:displayColorDepth java.lang.Integer java.lang.Double taf:request:cookies java.util.collections$UnmodifiableMap com.google.gson.internal.LinkedTreeMap - Context Engine Cartridge does not work in combination with Footprint functionality in Experience Manager
-
Because the Footprint functionality overrides an Ambient Data Framework Claim indicating browser model, but not the user agent Claim, unexpected behavior occurs. This is because the Context Engine Cartridge determines the value of its
browser.modelproperty on the user agent. - Names of Context Engine Cartridge aspects and aspect properties cannot be equal to CEL reserved words
-
The name of an aspect or aspect property cannot be equal to a reserved word in CEL. To work around this problem, give your aspect or aspect property a different name. Specifically, your aspect or aspect property cannot be one of the following:
orandeqneltgtlegedivmodnotnulltruefalsenewvarreturn