Issues fixed in MarkLogic Server 9.0-4
- Last Updated: April 6, 2026
- 12 minute read
- MarkLogic Server
- Documentation
Released: Jan 19, 2018
The following issues have been addressed in this release:
| Platform | Component | Bug ID | Details |
|---|---|---|---|
| all | Common API | BUG-48048 | Set option namespace with options-ns when defining pipeline in json format When defining a pipeline in json MANAGE-INVALIDPAYLOAD error is thrown if there is an options key in the definition |
| all | security | BUG-47893 | Invalid coercion: certificate template status after CA loaded Exception with certificate template status after loading a CA instead of a certificate |
| all | MarkLogic REST API | BUG-47284 | REST API: document patch replacement in SJS Document patch requests in the REST API can specify replacement functions installed previously on the enode to provide custom services for replacing document nodes in response to patch requests. Previously, libraries with such replacement functions could be written only in XQuery. Now, libraries with replacement functions can be written in SJS. |
| all | adminGUI | BUG-48158 | Admin UI: Support request slow for large clusters In the Admin UI, generating a support request will be slow for large clusters. |
| all | JavaScript | BUG-48162 | Transactions hang and can't be cancelled In rare circumstances, there are transactions that hang and which cannot be cancelled. |
| all | xdmp | BUG-48659 | Monitoring history hourly and daily multi-forest database metrics incorrect The hourly and daily metrics displayed in monitoring history are calculated incorrectly for databases that have more than one forest. |
| all | Geospatial | BUG-47819 | cts:geospatial-region-query false negatives Results are missing in cts:search with cts:geospatial-region-query executed using raw coordinate system |
| all | Geospatial | BUG-48089 | geo:geohash-encode throws XDMP-BADGEOMETRY error geo:geohash-encode throws XDMP-BADGEOMETRY error for certain polygons at double precision with minimum tolerance |
| windows(64-bit) | Monitoring Dashboard | BUG-47428 | No error message in Monitoring History when Meters forest inaccessible The charts in Monitoring History do not appear when the Meters database forest runs out of space or is otherwise inaccessible. No message appears in the UI to describe the problem. |
| all | XQuery | BUG-48263 | Calling normalize-unicode in NFKD mode may cause server restart Calling normalize-unicode on a long string with NFKD mode may cause a server restart. |
| all | search | BUG-47650 | Proximity boost scores may vary when data reloaded or reindexed The score of a word-query with distance weight can be inconsistent, even over the same data when it is reloaded or reindexed. |
| all | Geospatial | BUG-47685 | Memory leak in geospatial region queries On MarkLogic Server version 9.0-3, there is a memory leak resulting from calls to cts:geospatial-region-query when using the "intersects" operation. |
| linux(64-bit) | SQL | BUG-46165 | SQL Subqueries Supporting SQL subqueries. |
| all | xdmp | BUG-48587 | Transactions neither timeout or cancel Rare internal locking issue results in a transaction hanging. The transaction does not timeout and cannot be cancelled. |
| all | Common API | BUG-48062 | manage-admin and Security roles for REST Management API The manage-admin and Security roles are required roles for accessing full functionality of the REST Management API. For read-only access use the manage-user role. |
| all | Query Console | BUG-43108 | Super databases: Duplicate URIs on Query Console Explore If a forest contains duplicate URIs, Query Console throws an error when "Explore" button clicked. |
| all | Common API | BUG-47866 | REST Management API support for xdqp ssl disabled protocols on servers Manage specific server xdqp ssl settings, via REST Management API, by enabling or disabling any of the following properties to false. xdqp-ssl-disable-sslv3 xdqp-ssl-disable-tlsv1 xdqp-ssl-disable-tlsv1-1 xdqp-ssl-disable-tlsv1-2 For example, curl -v -X PUT --anyauth --user $user:$pass --header "Content-Type:application/json" -d'{"xdqp-ssl-disable-sslv3":false, "xdqp-ssl-disable-tlsv1":true,"xdqp-ssl-disable-tlsv1-1":true,"xdqp-ssl-disable-tlsv1-2":false}' http://${host}:8002/manage/v2/servers/myServer/properties?group-id=Default&format=json |
| all | Common API | BUG-47579 | REST Management API: Enable database field meta data Enable a database field meta data by setting metadata properties to true, for example: PUT manage/v2/databases/myLovelyDatabase/properties { "field": [ { "field-name": "", "include-root": true }, { "field-name": "myLovelyField", "metadata": "true" } ]} |
| all | SQL | BUG-47904 | Optic after UNION statement on fromSQL Unable to use Optic operations after some UNION statement on fromSQL() |
| all | Bi-Temporal | BUG-48424 | temporal:collection-set-options XDMP-ARGTYPE temporal:collection-set-options throws XDMP-ARGTYPE when there are multiple options passed in to the function. |
| all | Bi-Temporal | BUG-48392 | Previous version of temporal document deleted temporal.documentLoad will delete the previous version of a temporal document when a new version is inserted |
| all | Optic API | BUG-47978 | Default casting for parameters of row requests An Optic query can specify placeholder parameters for query criteria or paging offset values, making it possible to optimize the query once but retrieve different row sets for different values. In the REST API, the values for such placeholder parameters within the query are specified with URI parameters for the /v1/rows endpoint. Previously, where such URI parameters didn't specify the data type explicitly, the data type defaulted to xs.numeric Now, the data type default to xs.double, xs.integer, xs.duration, xs.dateTime, xs.date, or xs.time if castable to one of those types. Otherwise, the data type defaults to sem.iri. |
| all | search | BUG-48180 | Lexicon calls return nothing instead of error When lexicon calls that take reference arguments (cts:values, for example) are passed references created via cts:reference-parse or references created with the "unchecked" option, they return nothing instead of raising an error if the reference is to a non-existent index. |
| all | xdmp | BUG-48104 | Meters Database cleanup task failure In some rare circumstances, MarkLogic task to clean up old entries in the meters database fails. The ErrorLog will show the error "Error: CleanupMeterTask::run: SVC-BAD: Bad Hash128Table::put". |
| all | Common API | BUG-47945 | REST Management API: set memberOf and member attributes in LDAP External Security definition Add the following additional attributes to the External Security REST Management API call to allow memberOf and member attributes to set. ldap-memberof-attribute ldap-member-attribute |
| all | Query Console | BUG-40135 | XQuery syntax highlighting fails on quoted JSON Editor highlighting failed after quoted JSON in query. |
| all | xdmp | BUG-48178 | Unexpected "Module cannot be found in a module database" error XDMP-MODNOTFOUND - "Module cannot be found in a module database" can occur if multiple module databases have modules with same name. |
| all | SQL | BUG-48361 | MarkLogic ODBC connector is currently unable to work with Microsoft Access 2016 While an ODBC connection between Excel 2016 and MarkLogic will allow the user to import a tabular SQL view directly into the spreadsheet, the same ODBC feature currently stops after the chosen table has been selected in Microsoft Access (with Access reporting an error 7). |
| all | xdmp | BUG-48253 | map and array string values do not change map and array string values do not change when the map or array is changed let $x := map:map() let $_ := map:put($x,"1","1") let $s := fn:string($x) let $_ := map:put($x,"2","2") let $t := fn:string($x) return ($s,$t); let $x := json:array() let $_ := json:array-push($x,"1") let $s := fn:string($x) let $_ := json:array-push($x,"2") let $t := fn:string($x) return ($s,$t) |
| all | Common API | BUG-47843 | database backup/restore password via REST Management API Secure backups of a database via the REST Management API by setting a password. POST manage/v2/databases/myDatabase { "operation":"backup-database", "backup-dir":"/home/tmp", "password":"myLovelyAndLongPassword" } To restore the backup you would then need to supply the same password POST manage/v2/databases/myDatabase { "operation": "restore-database", "backup-dir": "/home/tmp", "password":"myLovelyAndLongPassword" } |
| all | Admin API | BUG-48577 | XDMP-CAST in admin:database-get-reindexer-timestamp When a reindexer timestamp is set to any reasonable time, admin:database--get-reindexer-timestamp throws XDMP-CAST. |
| all | mlcp | BUG-48078 | MLCP: space character in transform_param When mlcp command contains spaces in transform_param, mlcp is not able to parse the command. |
| linux(64-bit) | Semantics | BUG-47373 | SPARQL query continues parallel work beyond the end of query execution Some SPARQL queries continue needless work in parallel threads beyond the end of query execution. |
| all | SQL | BUG-47635 | TDE template validation uses namespaces declared outside the template itself. An invalid template can pass validation because tde:validate() uses namespaces declared in surrounding XQuery code and does not reject invalid templates where the namespace declaration is missing from the template itself. |
| all | adminGUI | BUG-47419 | Admin User Interface: Failure modifying geospatial path region index Modifying geospatial path region indexes through the admin User Interface might incorrectly flag two different geo path region indexes as identical. The admin console would show the following warning: "Invalid input: Two or more geospatial region indexes are identical." When the 2 paths contain white spaces, the path expressions are incorrectly tokenized and could be considered identical if they have matching tokens. For example the following two paths might be considered identical: path1 = /a/b/box[@attr1 = "1"] path2 = /a/b/box[@attr1 = "2"] |
| all | Backup/Restore | BUG-47391 | Elastic Backup - Restore backup Forest list incorrect Elastic Backup - Admin UI Restore backup's Forest list may contains forests which are no longer attached to the database |
| all | JavaScript | BUG-48405 | Segmentation Fault: valueOf on empty sequence MarkLogic segmentation fault and restart when valueOf is called on an empty sequence. |
| all | Optic API | BUG-47892 | converting Optic AST to Optic source code The Optic API can export a built query to an AST (Abstract Syntax Tree) in JSON format to persist or transport a query as a document. Previously, the AST representation could only be imported to recreate the built query prior to executing it. Now, the toSource() function makes it possible to transform the AST representation into the SJS or XQuery source code representation of the same query. Thus, the toSource() function makes it possible to move an Optic query from a Java or Node.js Optic client routine to an SJS or XQuery enode routine. |
| all | xdmp | BUG-48623 | SSL XDQP client - recurring "SVC-SOCRECV: Socket receive error: BIO_read" errors Debug level XDQPClientListener errorlog message "SVC-SOCRECV: Socket receive error: BIO_read ..." followed by an XDQPClientConnection restart. Messages recur until successful connection is achieved. |
| all | Geospatial | BUG-48090 | geo:geohash-encode throws SVC-EXTIME error geo:geohash-encode throws SVC-EXTIME error for certain polygons at double precision with minimum tolerance |
| all | search | BUG-48336 | Synonym scoring with score-simple does not work correctly Synonym scoring with score-simple does not give the correct results in all cases. Example query: cts:search(/, cts:or-query(( cts:element-word-query(xs:QName("name1"), "example"), cts:element-word-query(xs:QName("name2"), "example") ), "synonym"), "score-simple" ) |
| all | Upgrade | BUG-48483 | Upgrade Error Logging Upgrade errors not sufficiently exposed in errorlog. |
| all | Geospatial | BUG-46875 | geo:geohash-encode throws XDMP-BADGEOMETRY error geo:geohash-encode throws XDMP-BADGEOMETRY error for certain polygons that have edges coincident with edges of the Goehash box |
| all | Geospatial | BUG-48020 | geo:geohash-encode throws XDMP-BADGEOMETRY error geo:geohash-encode throws XDMP-BADGEOMETRY error for certain polygons at lower tolerance values |
| all | xdmp | BUG-48517 | Upgrading from MarkLogic Server 9.0-1 to later release loses language baseline setting Upgrading from 9.0-1 to a later release omits the language-baseline configuration element from clusters.xml. This will cause clusters to use legacy tokenization and stemming, and in partially upgraded clusters may cause inconsistent tokenization and stemming. |
| linux(64-bit) | adminGUI | BUG-47896 | Duplicate localnames can be entered for a Word Query Included/Excluded Element The Admin UI allows the entry of duplicate localnames for a Word Query Included/Excluded Element. As a result of such an entry, a future Configuration Manager import of a configuration that includes the duplicate localnames may be unsuccessful – an error is thrown similar to: Info: Manage: ADMIN-DUPLICATECONFIGITEM: (err:FOER0000) Database resource 'excluded-element-test-db' already contains 'Excluded Element' |
| all | opsdirector | BUG-48556 | Unable to install OpsDirector on cluster with no account called admin If the user called 'admin', with role 'admin' does not exist, installation of OpsDirector fails with an error. |
| all | BUG-47716 | Segmentation fault in xdmp::BackupManager::findRemainingBackupForests Manual forest reassignments, by editing assignments.xml, may lead to segmentation fault in xdmp::BackupManager::findRemainingBackupForests. |
|
| all | security | BUG-48595 | Unfiltered fn:subsequence results not concealed by Element Level Security In certain cases, the return value from a fn:subsequence call in an unfiltered search results are not properly concealed based on protected-path definitions. This does not apply to the first item in the subsequence but does apply to all subsequent items. |
| all | xdmp | BUG-48491 | Unable to cancel resource consuming queries, query not timing out Some runaway queries can cause excessive load on the server and don't time out. Cancelling them also doesn't work. |
| all | xdmp | BUG-47647 | xdmp:validate does not recogine mixed="true" on extended type When validating a document against a schema holding a complexType with just attributes defined and extended by a complexType with mixed content MarkLogic incorrectly returns a validation error. |
| all | Common API | BUG-47651 | Attach subdatabase when creating a database via REST Management API When creating a database, attach a subdatabase by setting the subdatabase property, making sure to supply cluster-name if the database is on a coupled foreign cluster. curl -X POST --anyauth --user $user:$pass --header "Content-Type:application/json" -d'{"database-name": "myNewSuperDatabase","subdatabase": [{ "cluster-name":"myClusterName","database-name": "Documents"}]}' http://${host}:8002/manage/v2/databases |
| all | Upgrade | BUG-47690 | Upgrade changes app-server rewriter path If a user's app-server rewriter setting included 'rest-api', the upgrade changed the setting to '/MarkLogic/rest-api/rewriter.xml'. |
| all | Geospatial | BUG-47077 | The global reindex-fragment-count missing geospatial region reindexing The reindex fragment count for geospatial region indexes is not included in the global "reindex-fragment-count". The following might not return the correct fragment count if reindexing related to geospatial region indexes is taking place. - xdmp:forest-counts(xdmp:forest("Documents"), ("reindex-fragment-count")) - Admin UI: Database->Documents->Status->Reindexing/Refragmenting State |
| all | SQL | BUG-48171 | Windows: mlsqlodbc-1.3 and mlsqlodbc-1.1 show same version mlsqlodbc-1.3 and mlsqlodbc-1.1 show the same version in Control Panel on MS Windows. |
| all | Upgrade | BUG-48489 | Upgrade to 9.0-3.1 for AS@8001 fails with "XDMP-AS" Upgrading from any MarkLogic version to 9.0-3.1 fails with "XDMP-AS" for application server at port 8001. The error message can be observed in 8001_ErrorLog.txt. |
| all | SQL | BUG-47936 | SQL exists followed by correlated subquery SQL exists followed by correlated subquery returns wrong result |
| all | xdmp | BUG-48421 | Segmentation fault occurs under some circumstances when XQuery code is profiled Under certain circumstances code that runs without issue causes a segmentation fault when the profiler is used. |
| linux(64-bit) | xdmp | BUG-45899 | Forest 'updates-allowed' state inconsistency Setting a forest's 'updates-allowed' state to 'flash-backup' and then back to 'all' may result in a forest remaining in a 'read-only' state |
| all | Backup/Restore | BUG-47187 | Elastic backup mapping of incremental backups fails on restore. Elastic Backup-mapping an incremental backup's forest to a new added forest results in an "XDMP-FORESTRESTOREFAILED: Restore failed for forest : SVC-FILCOPYX: Source file does not exist." error. |
| all | MarkLogic REST API | BUG-48257 | mime type for single document GET Prior to 9.0-3, a GET request to the REST API for a single document set the Content-Type header to the mime type configured for the document URI extension in the Admin UI when specified. In 9.0-3, the REST API preferred the first mime type in the Accept header. Now the previous behavior has been restored. |
| all | xdmp | BUG-48205 | xsl:key not working as expected with parent fragment configured When using xsl:key() on a xml file with parent fragment setting configured no results are returned, when the parent fragment is deleted the correct results are returned. |
| all | xdmp | BUG-48173 | Unable to load balance at application level for certain load balancers or proxy servers In some cases working with batch inserts (over XCC) may cause unexpected results with some load balancers. Load balancers such as HAProxy rely on the SessionID cookie to balance traffic correctly to ensure transactions start and complete on the same transaction. This works fine for mult-statement transactions but for default single statement auto-commit transactions the SessionId cookie is not generated. While not required, as it is expected that a transaction will complete in the same session, some load balancers such as HAProxy do not handle the session closure correctly and the transaction does not always get committed. |
| all | SQL | BUG-48549 | XDMP-BADCHAR for Tableau queries on timestamp When Tableau issues queries with timestamp constraints, it uses the ODBC timestamp literal feature causing MarkLogic to raise a parse error. |
| all | SQL | BUG-47728 | Error running SQL/SPARQL during rolling upgrade from 9.0-1/9.0-2 to 9.0-3 During Rolling upgrade from 9.0-1 to 9.0-3, or from 9.0-2 to 9.0-3, SQL/SPARQL query can run into error. Avoid upgrade 9.0-1/9.0-2 to 9.0-3. Instead, Upgrade from 9.0-1 to 9.0-3.1 or 9.0-4 Upgrade from 9.0-2 to 9.0-3.1 or 9.0-4 |
| all | Geospatial | BUG-48181 | geo:geohash-encode hangs geo:geohash-encode hangs if a geodesic arc intersects Geohash box North/South edge twice |
| windows(64-bit) | security | BUG-47665 | ldap-search fails if LDAP user name has accented characters ldap-search fails with LDAP users having accented characters on Windows |
| all | SQL | BUG-46503 | Custom SQL query in tableau needs alias In tableau you can specify a custom SQL query and hard code a SQL statement. The hard-coded SQL query needs alias for aggregate function. |
| all | Scheduled Tasks | BUG-47915 | A task containing eval/invoke does not expire A task containing xdmp:eval or xdmp:invoke calls does not expire when its execution takes longer than the request time limit. |
| all | Geospatial | BUG-45094 | xdmp:forest-status merge size & Geospatial Region Indexes xdmp:forest-status returns incorrect merge size for Geospatial Region Indexes during forest merge |
| all | Common API | BUG-47449 | Attach subdatabase via REST Management API When creating a database, attach a subdatabase by setting the subdatabase property, making sure to supply cluster-name if the database is on a coupled foreign cluster. curl -X POST --anyauth --user $user:$pass --header "Content-Type:application/json" -d'{"database-name": "myNewSuperDatabase","subdatabase": [{ "cluster-name":"myClusterName","database-name": "Documents"}]}' http://${host}:8002/manage/v2/databases |
| all | xdmp | BUG-48649 | Triple and reverse indexes not counted in stand and forest memory The memory used by triple and reverse indexes is not counted in stand and forest memory. |
| all | Query Console | BUG-47384 | QConsole - XDMP-NOSERVER: xdmp:server-name when importing an old workspace XDMP-NOSERVER: xdmp:server-name when importing an old MarkLogic pre-5.0 workspace. |
| linux(64-bit) | conversion | BUG-48191 | DHF-ERROR_FILE_CANT_OPEN in xdmp:powerpoint conversion xdmp:powerpoint-convert, if both "slideBySlide" and "speakerNotes" options are set to true, it may throw DHF-ERROR_FILE_CANT_OPEN error. |
| all | Geospatial | BUG-40254 | cts:and-not-query with cts:geospatial-region-query operands false negatives Missing results for cts:and-not-query with cts:geospatial-region-query operands |
| linux(64-bit) | Upgrade | BUG-48007 | XDMP-CORRUPT: Merge after upgrade to 9.0-3 corrupts on-disk geospatial region indexes This bug occurs when data is loaded into a geospatial region index in a previous version, and the host is upgraded to 9.0-3. If the on-disk stand containing the index is merged, the resulting index may be corrupted. Queries and subsequent merges may fail with XDMP-CORRUPT errors, or queries may return incorrect results. |
| all | security | BUG-47852 | Cipher string "!SSLv3" breaks secure XDQP TLS sessions Coding a cipher string that contains !SSLv3 prevents secure XDQP TLS sessions from working |
| all | XSLT | BUG-48329 | Segmentation Fault: xsl:with-param with missing name attribute Executing an XSLT stylesheet that calls a template with an xsl:with-param that has no name attribute will cause a segmentation fault followed by a MarkLogic Server restart. |
| linux(64-bit) | SQL | BUG-42902 | Scalar subquery Support added for scalar subqueries. |
| all | security | BUG-48085 | Non-existing user documents created in LastLogin db with unsuccessful login Unsuccessful logins are not captured under the correct user in Last Login database |
| all | security | BUG-48264 | User with security role cannot read protected-paths created by different user with same role A user with the security role can create protected-paths, which are stored as documents in the Security database. Those documents are created with the default permissions of the user. Based on what the default permissions are, another user with the security role might not be able to read those documents, hence not able to see the protected-paths. |
| all | Geospatial | BUG-42941 | Complex polygon insert performance In some circumstances, inserting documents with complex polygons are not performant. |
| all | xdmp | BUG-48335 | Creating a malformed range index missing via admin API may not raise an error. If a range-element-index is created via the admin:database-add-range-element-index function with a missing collation element, the index is created without error, but any attempt to later update the index from the Admin UI causes an 500 Internal Server error. |