All notable changes to this project will be documented in this file.
All changes from the 6.x
stream (the 6.25.0 release) have been merged into the 7.4.0
release. See changelog entry 6.25.0
for details.
The supported Elasticsearch version has been upgraded to 7.5.2
(see #478, e19ed34).
Elasticsearch 7.5.2 is backwards compatible with Elasticsearch 6.x, so any dataset that has been created with an earlier Snow Owl 7.x release should be compatible with this release.
From Snow Owl 7.4.0, the API documentation can be found at the URL http://localhost:8080/snowowl
. (see 418feef)
This new documentation will gather and render all available groups from all available modules.
- Add
id
filter to/commits
API (121d15a, #473) - Support
affectedComponentId
inGET /commits
details()
expand parameter (af8da80, #473) - Implement RepositoryTransactionContext#clearContents (a540784)
- Change default REST API timeout to 2 minutes in most of the endpoints (ee51b29)
- Introduce
repository.maxThreads
configuration key (90ddade)- Replaces
numberOfWorkers
configuration key - Default value is set to
200
- The underlying worker pool will start with less threads and grow/shrink based on the number of incoming requests
- Excess threads will terminate after 1 minute (4577b2a)
- Replaces
- Remove unnecessary
systemUser
configuration key, mostly used by tests (24d3785)
- Add support for "complex map with map block" type reference (b0ce5ce, 824c3b8)
- Allow filtering reference set members by complex
mapBlock
property (4a03c51) - Support for
module()
expand in all component API endpoints (cd3e5b3) - Support expansion of
definitionStatus()
inGET /concept
API (f4ba3e6, 97f1ff9) - Support
acceptabilities()
expansion inGET /descriptions
APIs (ecba5d6) - Support
caseSignificance()
expansion inGET /descriptions
APIs (81659ce) - Support
characteristicType()
expansion inGET /relationships
APIs (a0cd98f) - Support
modifier()
expansion inGET /relationships
APIs (a0cd98f) - Redesign
inactivationProperties
in component endpoints (c0abbdc) - Support unpublished effectiveTime filter in REST API via
-1
andUnpublished
values (#485, ebd5521) - Allow descriptions to be created without any language reference set members (e2fa3c5)
- Change type of
SnomedConcept.definitionStatus
toSnomedConcept
(f4ba3e6, 2435c7c) - Migrate validation rule from
6.x
stream to7.x
(#471) - Make sure we time out from ECL evaluations after 3 minutes (09293f4)
- Change ValueSet
compose
property cardinality to0..1
(e4c4407)
- [core] increase embedded Elasticsearch max_buckets to
1.500.000
temporarily (e164183) - [core] fix unauthorized issue when executing console commands (14fe6b2)
- [core] prevent unnecessary mapping updates during startup (9f14138)
- [core] fix calculation of RevisionCompare added/changed/removed numbers (9384003)
- [core] fix incorrect paramType value for nested query parameters (5222a5f, #441)
- [core] fix RevisionSegment.withEnd(newEnd) logic, fixes
branch@timestamp
queries in certain deep branching scenarios (4651965) - [core] respond with HTTP Method Not Allowed properly in REST API (5a16c02)
- [core] improve performance of deletion of huge amounts of validation issues (b5a9f16)
- [snomed] run effective time restore only in non-import scenarios (2eb05b2)
- [snomed] fix OWL expression conversion issue (c49ed26)
- [snomed] fix incorrect conversion of
null
values to empty filter values in refset API (refSetType, referencedComponentType and mapTargetComponentType filters) (f737c14, #482) - [snomed] unset effective time of inactivated members properly during save (inactivated by another component inactivation) (307879a, b60acf1, eb988de)
- [lgtm] fix errors/warnings reported by LGTM (eacca94, 61f79f5, 4659b04, 0d00a34, c63c1a2, c4d3995, 37b4685, 8f331c2, 5497d95, e018278, a438fe1, e3fdf56, c6368dc, 72faec7, 5456f5a, 204632c, cb17a33, b808eed, 7d8fb27, 325ce93, e02857b, 64623ef, a7226e1, fc2e4b1, 0b769ac)
All changes from the 6.x
stream (the 6.24.0 release) have been merged into the 7.3.0
release. See changelog entry 6.24.0
for details.
- Support unprotected API routes/requests (d07e6c2, 2e5166a)
GET /admin/info
andPOST /admin/login
are unprotected routes
- Add back
responseTime
property (unit is milliseconds) to request log (57b913d)
- Exclude mapping members by default from ConceptMap responses (0ed6b1c, 14a1ad5, 67d1e03, 376391a, )
- [core] simplify raw index read requests in Java API (5214922)
- [jobs] reduce memory requirements of job clean up (b43d658)
- [log] improve error logging from failed API requests, omit Broken pipe errors (edbc7f9)
All changes from the 6.x
stream (since 6.19.0) have been merged into the 7.2.0
release. See changelog entries from 6.19.0
to 6.23.0
for details.
Snow Owl 7.2.0 now supports Docker based deployments via the official image. See here.
- Query parameters are not supplied to
Try it out
requests from the Swagger UI (see GH issue: #441)
- New Swagger API design and navigation menu (#419)
- Generate proper commit notifications after successful commit (32ce42d)
- Improve revision merging by introducing Git-like behaviour when merging a branch into another (e3d2da5)
- New
POST /login
endpoint to authenticate a user and get back a JWT token for further API calls (#403) - Support
X-Author
header in most transaction endpoints (#403) - New bearer token based authentication support (#403)
- New permission system to allow fine grained
operation:resource
based authorization (#403) - API endpoints that do not require permissions:
GET /admin/info
,GET /admin/jobs
,GET /admin/repositories
(#413)
- New rate-limiting configuration options are available (#409)
- Add support for refset member filtering based on the following properties:
acceptabilityId
,valueId
,correlationId
,descriptionFormat
,characteristicTypeId
,typeId
,mapCategoryId
,domainId
,contentTypeId
,ruleStrengthId
,mrcmRuleRefSetId
,relationshipGroup
,mapTarget
,grouped
(beede5f) - Support ECL expressions in the following refset member property filters:
characteristicTypeId
,correlationId
,descriptionFormat
,mapCategoryId
,targetComponentId
,targetComponent
,valueId
,mrcmDomainId
,mrcmContentTypeId
,mrmcRuleStrengthId
,mrcmRuleRefSetId
,owlExpressionConceptId
,owlExpressionDestinationId
,owlExpressionTypeId
(7b3d21c) - Allow creation of SNOMED CT Concepts without relationships (fc81d59)
- Validate
referencedComponentId
values when importing RF2 RefSet files (93167d2) - Register IDs in CIS after successfully importing RF2 content (908d053)
- Add ELK as default classifier (ee68a94)
- Health check now includes ES cluster and indices health statuses (2a6628b)
- Use retry policy to detect ES cluster outages and retry a few times before failing the request (97fc936, d5d8418)
- New easily extensible REST API modules (#403)
- Add shutdown hook to gracefully shut down Snow Owl (00faaae)
- Fix NPE in list branches OSGi command (80bc0c5)
- Fix potential NPE in case of communication failure with ES cluster (d00e56e)
- Fix
modifiers
field access issue on Java 12 (93cb94b) - Fix branch counter initialization issue causing issues after restart (277bf10)
- Do NOT index revisions when there are no changes (66c3f0e)
- Fix
namespace
field indexing issue (a09c44c) - Fix MRCM constraints deletion issue (88de20b)
- Fixed reported GH issues: #422, #424, #436, #442, #444, #450
- Bump Jackson to 2.9.10
- Bump SnakeYAML to 1.25
- Bump Spring to 5.1.9
- Bump Springfox to 2.9.2
- Bump Swagger to 1.5.23
- Bump Swagger UI to 3.24.3
- Bump micrometer to 1.3.2
- Bump Tycho to 1.5.0
This section discusses the changes that you need to be aware of when migrating your application to Snow Owl 7.1.0 (from any previous 6.x or 7.x version).
Starting from 7.1.0
, Snow Owl requires Java 11 both compile and runtime as minimum Java version (see https://jdk.java.net/archive/ for OpenJDK downloads).
All changes happened on the 6.x stream (between 6.10.0
and 6.19.0
) has been merged into the 7.1.0
release.
Major breaking changes that require a full RF2 re-import of any existing 7.0.x data:
- Concrete Domain Reference Set Member changes from #288 (https://github.com/b2ihealthcare/snow-owl/releases/tag/v6.11.0)
- SNOMED CT Query Language Support (https://github.com/b2ihealthcare/snow-owl/releases/tag/v6.12.0)
- OWL Axiom support (https://github.com/b2ihealthcare/snow-owl/releases/tag/v6.14.0)
Due to the move to Java 11, Snow Owl can no longer depend on Eclipse Virgo with Tomcat
server as OSGi container to provide its services and functionality.
Instead, it builds upon a bare Equinox OSGi runtime (Eclipse 4.12, Equinox 3.18.0) running a Jetty (9.4.18) web server.
This resulted in a much faster startup time and development of third party terminology plug-ins.
Important configuration changes that require attention when migrating to Snow Owl 7.1.0:
- Configuration key
snomed.ids
has been replaced with the newcis
root configuration node (#379) snomed.language
configuration key has been removed. APIs, commands now accept a list oflocales
in preference order to compute display names/labels/etc. (2ef2a4a)
- Snow Owl 7.1.0 introduces partial support for the official CIS API
- See full release notes here
- Supported FHIR API version has been upgraded to FHIR 4.0.0
- See additional documentation at the FHIR API docs
- Snow Owl 7.1.0 adds support for Debian systems with a dedicated
.deb
package.
- Bump Eclipse Platform to 4.12
- Bump Jetty to 9.4.18
- Bump Elasticsearch to 6.8.2
- Bump Classgraph (formerly
fast-classpath-scanner
) to 4.8.43 - Remove Virgo packaging and dependencies
This section discusses the changes that you need to be aware of when migrating your application to Snow Owl 7.0.0.
Snow Owl v7.0.0 does not support indexes created by Snow Owl 6.x stream anymore. Migration from Snow Owl 6.x to 7.x is still work in progress, in the meantime if you would like to try Snow Owl 7.0.0 out, we recommend starting from scratch from an RF2 export from your Snow Owl 6.x instance or by importing an official RF2 distribution.
MySQL RDBMS software requirement has been removed and Snow Owl no longer requires it for its data source. Instead, Snow Owl requires only a single Elasticsearch cluster to operate on.
The new improved and shiny Snow Owl 7.x documentation is available at https://docs.b2i.sg/snow-owl/
- FHIR v3.0.1 API support (https://www.hl7.org/fhir/http.html)
- New Swagger API endpoint collection is available at
/snowowl/fhir
- It supports read-only capabilities of
/CodeSystem
,/ValueSet
and/ConceptMap
concepts
- New Swagger API endpoint collection is available at
- APIs
- New
/stats
endpoint to scrape micrometer based statistics for prometheus - New
/commits
endpoint to query commits in a repository and for a given component - New
/compare
endpoint to efficiently compare two branches - New
<branch>@<timestamp>
branch path expression support to query a branch at any arbitrary point in time UTF-8
encoding to all endpoints
- New
- SNOMED CT
- New
JSON
based MRCM export and import format - Refactored classification services, using Elasticsearch indexes instead of custom Lucene store
- New
- Configuration
SO_PATH_CONF
environment variable to configure Snow Owl configuration folder- Environment variable substitution is now supported in
snowowl.yml
configuration file via${...}
expressions - Added
monitoring.tags
support for tagging metrics with custom tags
- Packaging
- Travis-CI build integration (https://travis-ci.org/b2ihealthcare/snow-owl/)
tar.gz
packaging for Unix/Linux systems- RPM packaging for RPM based systems (like CentOS, RedHat, etc.)
- Modules
- New plug-in mechanism with the help of classpath scanning to simplify development of third-party modules
com.b2international.snowowl.fhir.core
com.b2international.snowowl.fhir.api
com.b2international.snowowl.snomed.fhir
- Dependencies
- Added zjsonpatch
0.4.4
- Added micrometer
1.0.6
- Added picocli
3.5.1
- Added fast-classpath-scanner
3.1.6
- Bumped Spring to
4.3.10
- Bumped Protege to
5.0.0-beta21
- Bumped SLF4J to
1.7.13
- Bumped Logback to
1.1.3
- Added zjsonpatch
- Revision control features have been rewritten from the ground up to support scaling to billions of revision documents (using IPv6 based addressing)
- SNOMED CT RF2 importer APIs now use the new RF2 importer implementation
- Console
- Completely rewritten using the awesome
picocli
library with full version, help support, POSIX-style grouped short options and more
- Completely rewritten using the awesome
- Configuration
- Renamed
snowowl_config.yml
configuration file tosnowowl.yml
and move it inside theconfiguration
folder - Renamed
metrics
node tomonitoring
- Renamed
- SNOMED CT
- XMI based MRCM import/export functionality has been removed (remaining options are
CSV
andJSON
)
- XMI based MRCM import/export functionality has been removed (remaining options are
- Modules
org.eclipse.emf.cdo.*
org.eclipse.net4j.db.mysql
com.b2international.snowowl.snomed.model
com.b2international.snowowl.snomed.refset.model
com.b2international.snowowl.snomed.mrcm.model
com.b2international.snowowl.server.console
com.b2international.snowowl.datastore.server
com.b2international.snowowl.snomed.datastore.server
com.b2international.snowowl.snomed.exporter.server
com.b2international.snowowl.snomed.reasoner.server
com.b2international.snowowl.snomed.importer
com.b2international.snowowl.snomed.importer.rf2
system.bundle.package.exporter
- Configuration
yaml
andjson
file extension support forsnowowl.yml
configuration fileresources/defaults
XML configuration folder and support- Removed
database
configuration options fromrepository
node - Removed
revisionCache
configuration option fromrepository
node
- Support
definitionStatusId
inPOST /concepts
endpoint (8552b99) - Set definitionStatus to primitive automatically when inactivating a concept (8552b99)
- [cis] allow ID registration of already published IDs (ccc225d)
- [cis] do not report unauthorized and forbidden errors in the log (28ac77a)
- [cis] add CIS SCTID status update bash script (96776cc, f78ea65)
- Support filtering refset members by
mapPriority
(a0bff3d)
- [index] Log the number of pending cluster tasks (959a088)
- [index] fix query boosting issue (2de4841)
- [core] Allow customization of component adjustment during publication (a0e6820)
- [history] Ignore many-valued features altogether in HistoryInfoProvider (526d3e7)
- [snomed] Fix incorrectly categorized query refset evaluation changes (#467)
- [snomed] Fix incorrect parentage values when reactivating concept's relationships first then the concept in two different commits (5298252)
- [cis] accept all SNOMED CT ID statuses when publishing them (c914c05)
- [mrcm] Handle ECL expressions in attributes' concept set definitions in MRCM validation rules (0cc7b61)
- [export] Create general ExportResult class (filename, UUID pair) (8265617)
- Support OWL Axiom (
owlRelationships()
) expansion on OWL Reference Set Members
- Support OWL Axiom Members in certain SNOMED CT Validation Rules (#455)
- [reasoner] multiple changes to SNOMED to OWL conversion (28f6615)
- [reasoner] fix group numbering issue in classification (8678901)
- [validation] handle no result when evaluating query based validation rules (1cedb3b)
- [api] add filter by
mapGroup
member property (76560db) - [api] Add proper throws declarations for attachments api methods (adc2ed7)
- [ecl] support BooleanValueEquals and NotEquals data comparisons in concrete domain member refinements (3399d33)
- [validation] duplicate reference set member validation rule (#420)
- [classification] cancel classification task properly after cancelling the corresponding remote job (05bf99b)
- [jobs] Fix NPE for canceled but scheduled jobs (173fcb6)
- Support filtering refset members by OWL expression (#407)
- Add new concept set definition type (#408)
- Improve job filtering API (#411)
- Add auto cleanup option to job schedule (#406)
- Rename common validation rules (#410)
- Fix refset member duplication issue (#412)
- Allow adding inactive query refset members (#414)
- Expose special member property based filtering over REST API (5fde911)
- Add data synchronization script and migration guide to CIS product (d645ce1, 5f01750)
- New auto RF2 import script to automatically import RF2 files via REST API (#398)
- Supporting deletion of validation issues by tooling and branch (db9b492)
- Add published/unpublished filtering to validation issues (#391)
- Properly filter unpublished members in rule
snomed-common-4
(#394) - Add new description character length validation rule (#400)
- Handle reference sets properly in validation issue detail expansion (#402)
- Revert fix
[api] inactivate all language members when inactivating a SNOMED CT Description
- Allow duplicate relationships in DSV export (#393)
- Handle descriptions during equivalent concept merging during classification (#392)
- [api] allow description reactivation with RETIRED (aka empty) inactivation indicator
- [api] inactivate all language members when inactivating a SNOMED CT Description
- [api] allow creating inactive concepts and descriptions
- [export] avoid issues due to duplicate data during DSV export
- [export] compare source and target effective dates of latest module dependencies when calculating effective time for RF2 export
- [validation] update snomed common rule 4's description
- [classification] track redundant relationships as well in hasInferredChanges flag
- New CIS product and module is now available (#379)
- It partially supports the official CIS API
- Specifically the single and bulk ID operations, retrieval and authentication endpoints
- See the new
/snowowl/cis
Swagger API documentation page - Configure it under the new
cis
root configuration node
- Support filtering of validation white list entries by
created_at
andaffectedComponentLabel
(#376, #381) - New common validation rule to check duplicate preferred FSNs and Synonyms in any language reference set (#382)
- Disable TCP transport when setting
repository.port
to0
(740c904) - Configuration key
snomed.ids
has been replaced with the newcis
root configuration node (#379)
- Create SNOMED CT Extension aware module and namespace assignment algorithm (#380)
- [reindex] Recreate index document of branches that were created after the very last commit (#375)
- Fix SNOMED CT OWL Toolkit and Axiom conversion issue (c381c07)
- Exclude inactive query members from query refset evaluation (#383)
- Allow querying owl expressions by either
type
ordestination
ids (9ab1048, 958ee81) - Allow setting pending move inactivation indicator on SNOMED CT Descriptions of new SNOMED CT Concepts (63f4b1f)
- Remove logic that disallowed reactivating a concept while adding an inactivation indicator and/or association target(s) (86ed3c7)
- Support
defaultModuleId
for all enum based member updates (#368) - Remove minimum number of required SNOMED CT Relationships validation from SNOMED CT Concept create request (9ac5c99)
- New
user adduser
command has been added to the available OSGi commands (#374)
- Support id exclusion list (#372)
- Read and use all ID exclusion files under <SNOWOWL_HOME>/configuration/reservations folder
- Format: SNOMED CT Identifiers separated by new line character(s)
- Support whitelist entry labels (#369)
- Let the axiom conversion service create 'SubObjectPropertyOf' and 'SubDataPropertyOf' axioms (e9b9c34)
- [api] Fix refset member search request parameter (a76c0d7)
- [api] lookup moduleId when creating refset member (41adfc5)
- [api] fix potential race condition when building bulk request from multiple threads (9d1b64e)
- [console] fix
rf2_refset
import OSGi command (054da61) - [import] Fix error when importing SNAPSHOT without any valid data (69b9bda)
- [reasoner] Add missing concept IDs to the relationship module and namespace collector in the equivalent concept merging phase (a042274)
- [reasoner] Skip axiom relationships where either the source or the destination is inactive (96c4494)
- [reasoner] Fix initial state of SCHEDULED classification task (733e4b8)
- [validation] Remove stated MRCM rule (2657abd)
- Bump SNOMED OWL Toolkit to 2.6.0
- New
HTTP POST
/search
endpoints have been added for/:path/concepts
,/:path/descriptions
,/:path/relationships
,/:path/members
- Add sort query parameter to all search endpoints that have internal support for field-based sorting (
/concepts
,/descriptions
,/relationships
,/refsets
,/members
,/classifications
,/branches
) - Add term based sorting to concepts endpoint (
sort=term[:asc|desc]
) - Add
parent
,ancestor
,statedParent
,statedAncestor
based filtering directly to/:path/concepts
endpoints - Add
id
filter to all component search endpoints - Expose
refsetIds
filter to theRF2
Export REST API and makebranch
,modules
andrefsets
configurable in the auto RF2 export script - Expose
/reasoners
endpoint to get available reasoner from the REST API - Add
owlExpression.conceptId
andowlExpression.gci
filters to/:path/members
endpoints
- Make classification
excludedModuleIds
property configurable viasnowowl_config.yml
- Support term highlighting in Validation Framework
- [search] increase
query
column length to 8192 characters in MySQL Database schema
- [api] fix missing JSON/CSV Validation issues endpoints in Swagger UI
- [api] allow encoded slash in GET request URLs
- [docs] fix styling of client and server errors section
- [search] fix nested SNOMED CT Query evaluations
- [search] fix ascending flag bug for script-based sorts
- [reasoner] fix missing
ontology list
OSGi command - [reasoner] fix classification issues after applying OWL changes from
20190731
alpha release - [export] replace tab/newline chars in
owlExpression
to spaces
- New
com.b2international.snowowl.snomed.icons
module with default SNOMED CT Concept images (0d444fa, ac0123e) - New MRCM based type validation rule and stated version for all MRCM rule (#344)
- SNOMED CT API improvements:
- New
semanticTag
filter onGET /:path/concepts
endpoint (0f304ec) - New
semanticTag
filter onGET /:path/descriptions
endpoint (0f304ec) - New
caseSignificance
filter onGET /:path/descriptions
endpoint (0f304ec) characteristicTypeId
andmodifierId
have been added toSnomedRelationship
JSON representation (66bf620, 763e1ee)- Changed type of array values of
parentIds
,ancestorIds
,statedParentIds
,statedAncestorIds
toString
fromlong
(81f7628)
- New
- Updated OWLAPI to support more recent reasoner versions (#342)
defaults
directory support (6468aa1).xtend
files from all modules exceptcom.b2international.snowowl.snomed.ecl.tests
(#345)
- Fixed definition status calculation issue (1dbb3c5)
- Excluded whitelisted response items in
GET /validations/:id/issues
endpoint (#347) - Fixed incorrect Location URL returned in
POST /validations
endpoint (#347) - Fixed incorrect (non-null) effective time value after changing
targetComponentId
/valueId
on active reference set members (5959e88) - Fixed missing ECL cardinality conversion service in SNOMED CT Query Language infrastructure (706ba1c)
- Fixed incorrect wrapping of
IdRequest
in SNOMED CT transactions (#349)
- Bump OWLAPI to 4.5.10 (#342)
- Bump Protege libraries to 5.0.3-b2i (see repository https://github.com/b2ihealthcare/protege) (#342)
- Bump ELK reasoner to 0.4.3 (7bdb231)
- Change
moduleId
of updated relationship or concrete domain member using the currently set module assigner algorithm (#341) - Redirect Elasticsearch log messages to SLF4J logger instead of logging to stdout (86fdc02)
- Fix incorrect parent/ancestor array values on inactive SNOMED CT Concepts (#343)
- Fix random code system allocation bug in e2e SNOMED CT test cases (03b6001)
- Fix issue with SNOMED CT RF2 Snapshot file imports (c2a5bcd)
- OWL Axiom support
- Compute stated tree form based on OWL Axiom
SubClassOf
definitions - Query OWL Axioms when evaluating ECL expressions on stated form
- Hybrid mode on definition status updates (either updates an existing OWL Expression member or the Concept's
definitionStatusId
property)
- Compute stated tree form based on OWL Axiom
- Effective time restore functionality for SNOMED CT Reference Set Members
- Support for relationship group updates in classification
- Evaluation of ECL expressions on stated form
- New generic validation rule to report relationships with incorrect characteristic types
- Report only active relationships with inactive reference as conflicts upon merge/rebase
- Severity change in MRCM range validation rule
- Fix repeated header in Validation DSV Export API
- Fix various issues with Simple/Map type DSV Exports
- Fix incorrect update of concrete domain MRCM predicates
- Fix
session disconnect
command bug - Properly disconnect user after failed login attempt to prevent
Already logged in
exceptions
- Improve performance of SNOMED CT Bulk updates with lots of Reference Set Member updates
- Improve performance of restore effective time functionality
- Add SNOMED CT OWL Toolkit 2.3.2
- Upgrade Spring to 4.3.22
- Replace Swaggermvc 0.9.3 with Springfox 2.8.0
- Upgrade rest-assured library to 3.2.0
- Upgrade mapdb library to 3.0.7
- Upgrade SLF4J to 1.7.25
- Upgrade Logback to 1.2.3
- Upgrade Fastutil to 8.2.2
- Upgrade Tycho to 1.2.0
- New MRCM attribute range validation rule (#319)
- Numerous improvements to classification time equivalent concept merging functionality (#318)
- Acceptability merge conflict rule (#321)
- Fix incorrect update of members when more than 50 members were present for a concept (b224370)
- Fix occasional startup failure due to incorrect initialization phase used in the reasoner module (#325)
- Fix DSV export group occurence bug (c494229)
- Normal form generation performance improvements (#318)
- SNOMED CT Validation API (#307)
- Validate the content of SNOMED CT with custom queries and scripts
- Support sorting of validation issues by label (8b59181)
- SNOMED CT Query Language improvements (#306)
- Support
active
,moduleId
filters onConcept
andDescription
components - Support
languageCode
,typeId
,caseSignificanceId
,preferredIn
,acceptableIn
andlanguageRefSetId
filters on SNOMED CT Descriptions - Support regular expressions and exact term matching in
term
filter - Add
{{...}}
syntax to match the official SNOMED CT Query Language draft syntax
- Support
- Ignore property chain hierarchies collection if no type IDs make use of this functionality, to speed up normal form computation (a31ce0c)
- Replace line break and tab characters with empty spaces when exporting
query
andterm
fields in RF2 (#304, 920a0e2) - Fix issues with Simple type Reference Set DSV export (#309)
- Fix invalid validation errors when trying to import SNAPSHOT RF2 with Unpublished effective times (#308)
- Fix errors when trying to classify relationships with inactive source/destination concepts (fa540a8)
- Fix errors when trying to expand inactive
ancestors
ordescendants
in SNOMED CT Concept API (86f0aa0) - Fix UUID validation in SNOMED CT RF2 import validator (#315)
- Make classification requests more customizable/configurable (#305)
- Fix RF2 import lock timeout issue (#303)
- SNOMED CT Query Language feature (#298)
- The initial version of the language supports the full
ECL v1.3
and descriptionterm
filters filterByQuery
method has been added toSNOMED CT Concept Java API
query
parameter has been added toGET /:path/concepts
API
- The initial version of the language supports the full
- Customizable SNOMED CT RF2 export bash script has been added to automate RF2 export tasks (#299)
- Support RF2 packages where the OWLExpression files names are using the new file naming convention (c3de2d0)
- Environment variable substitution is now supported in
snowowl_config.yml
configuration file via ${...} expressions - Support ECL expression in filterBy
languageRefSet
,preferredIn
andacceptableIn
description filters. (7709d5a) locales
parameter to history API (04cb537)
- Apply classification changes from 7.x (#300)
snomed.language
configuration key has been removed. APIs, commands now accept a list of locales in preference order to compute display names/labels/etc. (2ef2a4a)- Deprecated
Export RefSet to Excel
functionality has been removed (ac9927d) - Deprecated
RF1
andRF2
exporter implementations (46d22e1)
- Fixed hot backup file path bug (23f896a, 2fff0f6)
- Fix relationship affected component label bug in SNOMED CT validation (d69b56f)
- Fix a few bugs in SNOMED CT Reference Set DSV export (94ccf64)
- Improve performance of RF2 import by reducing the amount of loaded available components during init (2772cb2)
This section discusses the changes that you need to be aware of when migrating your application to Snow Owl 6.11.0.
Property groups now can contain concrete domain properties as well, not just relationships (new column relationshipGroup
). Also, the attributeName
property has been renamed to typeId
and all concrete domain labels (attribute names) must be converted to valid, existing SNOMED CT Concepts in order to support new concrete domain schema. In case you did not had any concrete domain members and you are not planning to use this feature, you can safely use your existing dataset without issues. In other cases, feel free to contact B2i to support your migration to Snow Owl 6.11.0.
- Add
repository.index.clusterName
configuration key to customize the clusterName of the embedded ES instance (#281) - Add
so.index.es.useHttp
system property to enforce usage of HTTP connection to the embedded ES instance (#281) - Support for TCP based connection to remote Elasticsearch clusters (
clusterUrl
configuration key now supports bothtcp://
andhttp://
) (#281)- NOTE: TCP connection to a cluster does not yet support authentication
- Java API methods to simplify synchronous execution of requests (8d0e15d)
- Support for
childOf
HierarchyInclusionType in MRCM rules (#287) - Support for
dependencies
between two code system. A Code System now declare another as a dependency (#286) - New Concept and Description inactivation indicators (102b127)
- Make SNOMED CT Description
term
field mutable (#284) - Allow non-SNOMED CT identifier in
mapCategoryId
column (8b325be) - Export FSN in description term columns when exporting Mapping Reference Sets to DSV (#283)
- Elasticsearch has been bumped to the latest 6.5 version (#281)
- Set
write.wait_for_active_shards
setting toall
to fix inconsistencies in the underlying index when using replicas - Fix serialization issue when using the class
SctId
(8284600) - Fix missing clause for
referencedComponentType
filters (b98308a) - Report a conflict when an inbound relationship references detached destination concept. Fixes object not found and versioning errors (a8ce29e)
- Fix script arguments unrecognized by Elasticsearch (#289)
- Bump Jackson modules to 2.8.11 and Jackson Databind module to 2.8.11.2 (fixes security vulnerability issues reported by GitHub)
- Simplify and improve SNOMED CT Description term fuzzy matching functionality (9d7bce4)
- Delete all types of referring members when component is deleted (130d938)
- Fix de/serialization of module dependency member fields (a5f4369)
- Validate versionId before creating Code System Version entry (39efad0)
- Fix reference set DSV import related issues (bb3efa0, bc8ec3b)
- Fix potentional validation issue duplication (7956697)
- Fix error when trying to revert effective time of an RF2 component without any released versions (7f16873)
- Use single-node discovery in embedded mode by default (38075a3)
- Support for unpublished component only validation (#271)
- Inbound relationship expand for SNOMED CT Concept search and get requests (#267)
- Configuration option for Elasticsearch cluster health request timeout (2819c8c)
- Consider additional relationship types as well when computing MRCM rules for a concept (110f2e3)
sourceEffectiveTime
andtargetEffectiveTime
reference set member properties serialized as effective time instead of dates (8e0e830)
- Merged
com.b2international.snowowl.index.api
,com.b2international.snowowl.index.es
andcom.b2international.org.apache.lucene
bundles into a singlecom.b2international.snowowl.index
module (#269)
- Improve evaluation of ECL queries targeting large set of focus concepts (c73fd72, 35e1380)
- Improve execution of Concept search requests with both ECL and TERM filters (530eb15)
- Fix FUZZY + TERM filter bug when the term consist only of escaped characters (0cc2c4c)
- Fix NSEE when attempting to export an RF2 package with no SNOMED CT versions yet in the system (c79dc21)
- Fix server startup issue due to a bug in startup script (2530f67)
- Ignore 404 responses thrown by Elasticsearch REST client (c6be1d2)
- Support SNOMED CT component effective time filter in Validation Issues Search API (#260)
- Support affectedComponent label filter in Validation Issues Search API (20962f2)
- Complete
searchAfter
paging API support for REST API endpoints (#261) - A new
Other
Validation Rule severity type (#263) - Support basic authentication configuration values in Elasticsearch configuration in case of connecting to a remote cluster (#264)
- Use serialized
String
values forsearchAfter
parameters in search Java APIs (#261) - RF2 export archive and file effective times are now calculated based on module dependency refset entries of the selected module IDs (dc959e1)
- Fix attribute group cardinality bug in ECL evaluation (#259)
- Use socket timeout as retry timeout in Elasticsearch HTTP REST client (34a6eb4)
- Fix SSH connection to OSGi console (5e9cdff)
- A new
deploymentId
configuration key to specify both DB and Index name prefix to support multi-tenant deployments (#256) - Support MRCM reference set member properties in
SnomedRefSetMemberSearchRequest
(a14b9d9)
- Use the high-level Elasticsearch REST Client to communicate with either an embedded note or remote cluster (#251)
- Check all potential reference set member properties where a component ID might be referenced during module dependency updates (17b3a2a)
- Bump Virgo package version from
3.7.0.M3
to3.7.2
(#253) - Bump Elasticsearch version from
6.0.1
to6.3.2
(#251)
- Improve SNOMED CT RF2 export performance (#249)
- Reduce number of documents to load when using
snomed-query
based validation rules (4f980a1)
- Fix cache cleanup (memory leak) in
SnomedEditingContext/SnomedRefSetEditingContext
(d97bf3e) - Fix occasionally failing unit tests due to index refresh bug in
EsDocumentSearcher
(2d3cd7f) - Fix incorrect
RF2
archive effective date when usingendEffectiveDate
filter inRF2
Delta exports (cd54af3)
- Configuration options for validation thread pool sizes and parallel execution of rules (#246, 09c971e)
- Support field selection in low-level aggregations API (b429a46, a59cb7e)
- Support delimiter parameter in DSV exports (7ad7d6f)
- Support latest specification changes in OWL Axiom and Ontology Reference Sets (#248, 72994dc)
- Increase number of default shards for revision indexes to
6
(11ca54d)
- Use Groovy Eclipse release update site instead of snapshot (0e15090)
- Fix missing FSNs, PTs in RefSet DSV exports, change default file names to PT of the Reference Set (1bb3fe3, 3f7cd3e, af6d9d1)
- Reduce memory consumption and execution time of large scale validation jobs (#246, 9e35a24)
This section discusses the changes that you need to be aware of when migrating your application to Snow Owl 6.5.0.
All datasets created before 6.5.0 require a full reindex
due to changes in the MRCM document schema.
- API:
- Add
iconId
property to SNOMED CT component representations on all endpoints (90ccb2e) - Add
limit
query parameter toGET /branches
endpoint (e7fcaf7) - Support released flag filter in SNOMED CT component search API (091b8ea)
- Support
typeId
filter indescriptions()
expand parameter (b2ihealthcare#235) - Support support filtering members by set of referenced component IDs via
GET /:path/members
(710c894)
- Add
- SNOMED CT:
- Support new MRCM reference set types (b2ihealthcare#187, b2ihealthcare#231)
- Support new OWL reference set types (b2ihealthcare#187, b2ihealthcare#231)
- Support a dedicated Simple map with mapTargetDescription reference set type instead of reusing Simple map type (b2ihealthcare#222)
- Support bulk itemId generation (7279d1f)
- Validation:
- Add
resourceDir
script argument to Groovy-based validation scripts (da44b75)
- Add
- Improved donated content detection and resolution during SNOMED CT Extension upgrade (and merge) (b2ihealthcare#185)
- Redesigned MRCM constraint document schema (b2ihealthcare#236)
- Add support for source-only object mappings
- Add concept set definitions, predicates and attribute constraints from the MRCM Ecore model as document snippets
- Add domain-level representation for all parts as well
- Support the interpretation of the extended domain models in clients
- Fix missing argument when checking cluster health status (abf0dca)
- Fix deletion of SNOMED CT Reference Set Members referring to other components (b2ihealthcare#227)
- Fix deletion of unreleased but inactive reference set members (b2ihealthcare#232)
- Don't update certain descriptions twice in a change set (1de6633)
- Over 80% reduction in time for large scale changes (e.g. for updating batches of content using templates). (b2ihealthcare#230, f958f53, 6b58d0a, e0d041a)
- It now takes under 30 seconds to 1) create and save 10,000 new concepts with descriptions and an IS A relationship to SNOMED CT 2) Update all 10,000 concepts, changing their module and 3) Update all 10,000 concepts again, inactivating the relationship to SNOMED CT and adding a new one to Clinical finding. (see test case)
- Decrease execution time of scroll requests, especially when ECL evaluation is involved (39e78a5)
- Decrease execution time of branch merge operations (243509d)
- Reduce memory requirement of large scale validation requests (2abae78)
- Reduce execution time of e2e tests (b3c824c)
This section discusses the changes that you need to be aware of when migrating your application to Snow Owl 6.4.0.
All datasets created before 6.4.0 require a full reindex
due to changes in all codesystem schemas.
- Add inferred and stated parent ID arrays to the SNOMED CT Concept representations (a5f1f1f)
- Support revision expression values in search requests path parameters (6e5ab16)
- Reintroduce revision hashing to support proper calculation of change sets between two branch points (#219)
- Allow locally running applications to access embedded ES instance (adbf017)
- Allow SNOMED CT Descriptions as simple map referenced component types (52b6ca9)
- Fix ID Filter bug in search requests (773b241)
- Reduce amount of memory allocated when deserializing SNOMED CT index documents (98c4f2f, 2d4d749)
- Fix incorrect scroll state checks when scrolling documents (597f36b)
- Skip logging of script arguments to prevent possible memory leak (3c0c578)
- Properly prevent deletion of released components (#217)
- Fix line duplication issue of RF2 export (c7c802e)
- Fix ECL evaluation issues in RF2 export process (5fcec36)
- Improve index search request execution significantly (5f6d4fe)
- Improve performance of bulk member create requests (#216)
- Remove classification results from memory when saving changes (8d2456f)
This section discusses the changes that you need to be aware of when migrating your application to Snow Owl 6.3.0.
All datasets created before 6.3.0 require a full reindex
due to changes in SNOMED CT index schema.
- Support multiple language code files in RF2 import (#194)
- Support locale specific term based sorting in SNOMED CT Concept API (#199)
- Support running a selection of validation rules instead of all of them (#196, #212)
- Include Additional relationship types when exporting Reference Sets to DSV (#208)
- Support expansion of
preferredDescriptions()
in SNOMED CT Concept API - Support HEAD requests on
/snowowl/admin/info
endpoint (d8e90e5) - Track inactive memberships of SNOMED CT core components in
memberOf
index field
- Improve SNOMED CT RF2 Export API (#210)
- Allow SNOMED CT Relationships with inactive source/destination to be imported (#205)
- Reference Set identifier concept inactivation automatically inactivates members (e445053)
- Changed default CDO's soft reference based revision cache to time/size eviction based Guava Cache (#199)
- Field selection now uses indexed
docValues
instead of_source
to improve response time of search requests (2895245)
- Deprecated
filteredrefset
API (998368f)
- Fix conceptToKeep selection logic from equivalent concept sets (#200)
- Fix singleton module/namespace assigner bug in SNOMED CT Classification (#202)
- Fix branch timestamp update when importing RF2 with unpublished content (#203)
- Fix and simplify module dependency member collection logic (#191, #214)
- Reduce memory usage of revision compare (9d5b355)
- Reduce memory usage of RF2 import (a3642e9)
- Improve Validation Whitelist API performance (#206)
- Improve performance of Validation API (#209)
- Add
60s
timeout toEventBus
address synchronization (3cfb315) - Fix CDORemoveFeatureDelta bug (0929669)
- Fix occasionally failing bulk updates in index commits (cba7e18)
- Set status of stale remote jobs to FAILED during startup (580d3e3)
- Fix missing searchAfter argument from revision index searches (56a5e03)
- Serialize ECL expressions in a synchronized block (5d05844)
- New, generic scripting API module (com.b2international.scripting.api)
- Groovy implementation of the new scripting API module (com.b2international.scripting.groovy)
- SNOMED CT Validation API
- Add Groovy based validation rule implementation and execution
- Add white list support (#189)
isActiveMemberOf
filter now supports ECL expressions in SNOMED CT Component search requests- Add module and namespace assigner feature from
4.x
branch () - Deleted branches can be reused by creating a branch with the same path (parent + name) (dc53ade)
- Dependencies:
- Kotlin OSGI 1.1.51 has been added
- Groovy from
2.0.7
to2.4.13
- Jackson from
2.8.6
to2.8.10
- EMF JSON Serializer library has been removed
- Bunch of deprecated, unused API and functionality, related commits:
- 1de52b0
- 268bc5d
- 7a23851
- 94db418
- 2145d55
- 7b63998
- bbacfb5
- 5d104f8
- e8a3323
- 6db7221
- 4a790d8
- a67de24
- e274766
- 56c9636
- 613dd59
- b39ffd2
- c733563
- 3f92263
- Modules:
com.b2international.commons.groovy
com.b2international.snowowl.scripting.core
com.b2international.snowowl.scripting.services
com.b2international.snowowl.scripting.server.feature
- Fix DSV import bugs (02180b4)
- Fix component not found exception thrown when trying to look up new components from transaction (97918c5)
- Fix HTTP method type when communicating with external identifier service (CIS) (32e9e85)
This section discusses the changes that you need to be aware of when migrating your application to Snow Owl 6.0.0.
Snow Owl v6.0.0 does not support Lucene based indexes anymore. We've decided to remove that module completely in favor of the now fully supported and stable Elasticsearch based module.
All datasets (including the ones created with the experimental Elasticsearch module) need a full reindex
.
See Admin Console Reference Guide for details.
Removed offset
properties from all collection resource representation classes. Offset+Limit
based paging is resource-intensive, therefore it has been completely removed.
Your queries should either search for the topN hits or if you need to scroll a large result set, then use the scrollId
returned in the collection resource (alternatively you can scroll a live result set using the searchAfter
parameter).
Read more about scrolling here: https://www.elastic.co/guide/en/elasticsearch/reference/current/search-request-scroll.html
Replaced @Analyzed
with @Text
and @Keyword
to better reflect Elasticsearch field types text
and keyword
.
- Generic Terminology Validation API (750806e, ed64eae, 6102b86)
- SNOMED CT Request API based Validation Rule Support (f67aee5)
- A new, improved, but experimental SNOMED CT RF2 importer implementation
- SNOMED CT Java API:
- Support filtering SNOMED CT Descriptions by their
semantic tag
(659234e) - Support filtering SNOMED CT Components by multiple
namespace
IDs (7a7a5c1) - Support filtering SNOMED CT Components by
module
ECL query and by module ID set (416d1a9) - Support filtering SNOMED CT Descriptions by
case significance
(ECL or ID set) (416d1a9) - Support filtering by
term regex
in description search (e47ae40) - Support multiple SNOMED CT Reference Set IDs in
isActiveMemberOf
filter - Support language refset, acceptableIn and preferredIn filtering in description search (59e7b57)
- Support filtering SNOMED CT Descriptions by their
- SNOMED CT ECL
- ECL implementation now compatible with latest v1.3 spec (https://confluence.ihtsdotools.org/display/DOCECL/Previous+Versions)
- Support nested expressions in
memberOf
rules (v1.2 spec change) - Support nested expressions in attribute part of dotted expressions (v1.3 spec change)
- Support nested expressions in attribute part of refinement expressions (v1.3 spec change)
- Low-level index API:
- Support regular expression queries (0cb1c1c786c0fd7bcbc4c7b1e7d54c64a5c0baad)
- Support terms aggregations with tophits (50fd7338831dea7c4f84efc7aaefb4ee38e8ecd7)
- Support
Map
andString[]
return types in index search API (33c3bd9) - Scroll support to Index API (de439e9)
- SearchAfter based paging support to Index API (ee36a25)
- Java API changes:
- Type of Remote Job properties
parameters
andresult
changed toString
(contains a JSON serialized object) - Also added
getParameterAs
andgetReturnAs
methods to convert them to Java Objects easily Void
return types have been changed to Boolean (fixes unanswered client side requests)Empty
-ish values are accepted infilterBy*
methods (emptyCollection
s and emptyString
values)
- Type of Remote Job properties
- SNOMED CT RF2 import console command now accepts a single Code System short name instead of a descriptor file (bd7aea3d56822b405feb4adbf039cd4ce4599729)
- SNOMED CT Identifier Generation:
- Improve Sequential ID generation by skipping exponentially growing chunks of reserved/assigned IDs in order to find the next available ID faster (#180)
- SNOMED CT Classification changes:
- Enabled classification of concepts with the UK Clinical extension module
- Improved performance of SNOMED CT Classification by keeping the initially computed taxonomy in memory until normal form generation and change (b2ihealthcare#181)
- Generate inferred relationship IDs in bulk [5.x] (#176)
- File Attachment API now accepts any kind of file not just zip files (3b814b2)
- Low-level Index API changes:
- Improved low-level, fluent index Query API (cc7b5c1)
- Default number of index shards has been increased to 5 (Elasticsearch default value).
- ES module now executes bulk updates in parallel (5c5159b601a47e0d0bfad10eee70745eaa9641f1)
- Scripting language from Groovy to Painless in index layer scripts (see https://www.elastic.co/guide/en/elasticsearch/reference/5.0/breaking_50_scripting.html)
- Dependencies:
- Bump Lucene to 7.0.1
- Bump Elasticsearch to 6.0.0
- Bump Jackson to 2.8.6
- Bump Netty to 4.1.13
- Bump SnakeYAML to 1.17.0
- Add Jackson CBOR dataformat 2.8.6
- Remove Compression LZF
- ESCG support (it was deprecated since the introduction of ECL queries, v5.4)
- Bunch of deprecated, unused API and functionality, related commits:
- 1c5fe51
- 3d6d189
- 6ac0954
- 895a792
- 6d4cf50
- 5c10b7c
- f40d41e
- 16748d7
- 5bea2d3
- dcefb54
- Modules (completely removed or merged into a corresponding core module)
com.b2international.snowowl.index.lucene
com.b2international.snowowl.index.diff
com.b2international.snowowl.importer
com.b2international.snowowl.snomed.mrcm.core
com.b2international.snowowl.snomed.mrcm.core.server
com.b2international.snowowl.snomed.mrcm.core.server.tests
com.b2international.snowowl.authorization.server
com.b2international.snowowl.terminologyregistry.core.server
- Retry update-by-query requests in case of version conflicts (4a4ecf1)
- Fix partial field loading issue in SNOMED CT Reference Set Member API (2302aa0)
- Fix bootstrap initialization order issue by moving ClientPreferences init to Environment constructor (1a882e0)
- Use ECL when creating/evaluating query type refsets (b433de3ff7af35ef8654b806e6fb774cf628c779)
- Fix TaxonomyDefect serialization issue (b44b90ab3d8f13bd9c33b6eef12dd1c697730552)
- Disable classification of UK module entirely (81987250976baa11e4eff21d1310438c4c2bde90)
- Fix concept effective time issue when updating concept's components via concept update request (5ea826daf38c9cedd8a59110403e2e23ca9f0610)
- Support filter members by
mapTargetDescription
field (774bc0bf9463840db08f539b5d2e88b54032f2ce)
com.b2international.snowowl.emf.compare
module
- Fixed missing remote job documents issue (00ca848f624b0879bbeba27995be98116506d0b0)
- Fixed IOOBE issues when sending bulk delete requests (9a9b166d5b86c110d6a0bc86d63d0e630305ebe7)
- Remote jobs now properly track progress via the monitor available in the given context (8524e0e0d179e6bba331919c69bd616029282fb7, 83debbec4f1e86e35910d910d9f1a3fb299ae4d7)
- Improve rebase/merge performance significantly by disabling unnecessary taxonomy check rule (9cd76b9342cf014346aa3e6d125bb6d314cf99f1)
componentTypes
to SNOMED CT RF2 Export API configuration (b2ihealthcare#173)
- Allow multiple simultaneous RF2 exports (b2ihealthcare#173)
- Exporting a single reference set with their members should export only members (b2ihealthcare#173)
- Fixed CDO versions (builds now contain 4.1.10.b2i version of CDO bundles)
snowowl migrate
command to migrate terminology content from an external CDO repository (b2ihealthcare#170)UserRequests
Java API to fetch available User identities and their Roles/Permissions (b2ihealthcare#168)- Allow multiple identity providers (not just a single one)
com.b2international.snowowl.identity
has been addedcom.b2international.snowowl.identity.file
has been addedcom.b2international.snowowl.identity.ldap
has been added
- Snow Owl JAAS file has been removed in favor of the new YAML based identity provider configuration (see the updated
documentation/src/main/asciidoc/configuration_reference.adoc
) com.b2international.snowowl.authentication
module has been removedcom.b2international.snowowl.authentication.file
module has been removedcom.b2international.snowowl.authentication.ldap
module has been removedcom.b2international.snowowl.authorization.server
module has been removed
- Fixed inconsistent and exponentially growing CDO list indexes (b2ihealthcare#171)
com.b2international.snowowl.authorization
module has been removed
- Invalid Lucene startup script after reverting back to 5.9.x GC settings
- Initialization issue in authorization module (32d3e11a313b1f060601693c7df05d0e343c2192, a00d40c255635e4ba258d04b74a2f69655165bc7)
includeInactiveMembers
flag to include inactive reference set members in DSV exports- GC logging configuration to Windows and Linux startup scripts
- Revert back to 5.9.x JVM GC configuration (default GC performs better than CMS in most of our use cases)
- Replaced permission ID constants with six default permissions (b2ihealthcare#163)
- Deleted obsolete task context API
- Fixed performance issue in SNOMED CT Description/Language RefSet RF2 export (b2ihealthcare#158)
- Fixed memory leak in Lucene based index implementation (b2ihealthcare#157)
- Fix zip decompression issue in FileUtils.decompressZipArchive method when there are no folder entries (8d144f4010e8a5c4a1735d0577a862065fe63a9b)
- Fix Java serialization issue when using DSV export via the Java API (bd96aa60993e2fbef15a12a307d0a0db51adb874)
- Fix JSON serialization of ClassificationSettings, fixes missing remote job entries (df8c4e545d8b6b5af6d3ada90b97347a71069c58)
- Fixed issue with MRCM constraint indexing (782a6ad9bc63b003bb94e5fb23b18f548d901d3a)
- Fix missing terminology component extension point for MRCM rules (a00a7f0f492d2eacb9d63b3d0f6dbe6517072f71)
- Fix issues with language reference set export (c423bb741a5e3b78d0b7f04ee7eff294ce7c21fa, c877c9cda07200a1fa831be2df4e90974962af08)
- Support inactivation indicator and association target updates on active SNOMED CT concepts
- Support postRun application bootstrap phase (ea64e8b9fe8b172fa95fd409ca61a3fdc207c8dd)
- Fixed SNOMED CT Mapping Reference Set DSV export (dc1300e54cea6c6756d0898b62eca0bb26ff5b87)
- Normalize description scores into buckets using the following order:
-
- Exact
-
- All terms present
-
- All term prefixes present
-
- Fixed ordering of hits returned by
/:path/concepts
and/:path/descriptions
endpoints when filtering them by term - Include a unique tiebreaker sort field (
_id
) in search requests (both Lucene and Elasticsearch index modules) - Fixed stated/inferred expansion in TerminologyTree (d5f8b0fc19d754a5d2602b5d1a4607e928f620fd)
- Fixed score computation issue in index.lucene module (735551e372acd528123ec8c57f8a39fafed81ef0)
- Fixed doiFactor script to properly compute the final score of a doc (88a0d116f6eb5667f8f9b8e7bd39ec82d5241afb)
- New SNOMED CT DSV export Java API is available (see
SnomedRequests.dsv().prepareExport()
) - Support for SNOMED CT Reference Set Member filtering by mapTarget values (48e5179f7c70a54747177d5559bcd91c1c74bf5c)
- Support for SNOMED CT Relationship filtering by modifier values (1dcc314707286dbe650346d26724d1160668a804)
- Fixed issue with
pt()
andfsn()
expansion in/:path/concepts
endpoint (26ce744a7f8d0948831135d84da729c42e285f86) - Fixed CDO object deletion bug by backporting changes from eclipse/cdo commit (d7e9aa038ef50b296540620f7158f9b9b516f8d4)
- Fixed NPE thrown by Protegé module on shutdown (2e591d3148a3c81eb84d8756831d42dc5f94b093)
- Delete temp RF2 file after export finishes (reduces allocated disk space) (901750d3c1b1adf0565a8d6518f93bade3d56305)
- Fixed MRCM rendering issue (29ed90711b75462b277c72ce5d6b7c0e03367c57)
- Fixed version creation failure if complex map uses invalid map category ids
- Add versioning parameters to job params object (7ac489c6f715bb7fec791deb78bd83b681440613)
- Exclude UK products by their module ID from classifications (12164c8116701f9a21bce822810c2cfb9851b310)
- SNOMED CT Identifier service now properly moves all ASSIGNED ids to PUBLISHED and reports errors after the changes
- Default JVM settings have been changed to recommended default elasticsearch settings (835cbc700022abdc68bf8f764d92794cf8a42254)
- Exact term matching should use match query instead of term query (11ffb349d2e2b778d36f0673217e0446990dc795)
- Fixed invalid parsed text predicate -> ES query mapping (72043fb0d9c9b53a31b666643e5bce270beb9241)
- SNOMED CT Description API now supports exact term matching via new option
EXACT_TERM
(3e33b974fd67671b5d8f616c2d6eeefca46ad885) - SNOMED CT Reference Set Member API now supports user supplied UUID parameters
- Fixed serialization issue of SyntaxException (20dbbea9eb13acb14237864d9be69258ccd7bf1b)
- Fixed RemoteJobEntry result field mapping (3bc8b16febe593a6692873100ae32cb6f633ac40)
- Fixed invalid BoostExpression -> ES Query mapping (00c57a81a0bf4c18f0796eb7583b361af70a9fe6)
- Elasticsearch module now properly configures dynamic mapping on Object/Map field types
- Searching for SNOMED CT Concept with termFilter throws score evaluation exception
_id
document fields now indexed with doc_values enabledEMBEDDED
identifier service now operates on its own index, namedsnomedids
- SNOMED CT Description index mapping now uses more precise analyzers to provide the best possible text matches when search for description terms
- Exact term searches now possible via the new
term.exact
index field - Prefix searches now return better results (via the new
term.prefix
field), because the mapping now uses theedgengram
tokenfilter to generate1..20
length prefixes for each SNOMED CT Description term
- Exact term searches now possible via the new
- NOTE: Due to the above mentioned changes, datasets created before 5.10.0 require a full reindex
- Full (but still experimental) Elasticsearch support (b2ihealthcare#147)
- Supported elasticsearch version is
2.3.3
- Snow Owl starts a local-only Elasticsearch node by default, but it is possible to configure the node to connect to a cluster of others
- Configure the Elasticsearch node with the
configuration/elasticsearch.yml
ES configuration file - This index API implementation does not support the
SHA-1
_hash
field on revision documents thus it cannot skip them from a revision compare result and will return them. Clients should query the base and head of the branch and remove the false positive hits manually.
- Supported elasticsearch version is
- Configuration options
- Added
numberOfShards
configuration option to repository.index node in snowowl_config.yml - Added
commitConcurrencyLevel
configuration option to repository.index node in snowowl_config.yml
- Added
- Low-level Index API chanages (see b2ihealthcare#147 for details)
- API changes:
- JSON representations now include non-null values instead of non-empty
- SNOMED CT Concept inactivation properties are no longer auto-expanded. The new
inactivationProperties()
expand parameter need to be added to the expand parameter list in order to retrieve them.
- Fixed memory leak when using
gzip
compression on the in-JVM Net4j connection - Fixed invalid SNOMED CT Identifier state when supplying the identifiers instead of generating them (1e4488e35884cfa6f458471e73c7fd6943239722)
- Greatly improved performance of index queries by using filter clauses in boolean queries instead of must clauses (eac279977bf2b0c49da949701136ba19260b5aef)
- Datasets created before 5.9.0 require a full reindex in case you would like to use the new branch compare API (or you are using the old review-based compare feature).
- New branch compare Java API (b2ihealthcare#145)
- Index documents now store a
_hash
field. The value is computed from the semantic content of the document usingSHA-1
(requires reindex).
- Classification Java API now returns only SNOMED CT concept identifiers
- Include component type in commit notification's new/changed/deleted buckets (470f4e99e42d7c2c1c2e4159ea2003bc51c7aa08)
- Include version and codesystem changes in commit notification events
- Enable gzip compression by default on all Net4j protocols (b2ihealthcare#146)
compression
configuration option from RPC
- Branch compare now skips unchanged components even if they had changed, but got reverted to their original form in the meantime (fixed as part of b2ihealthcare#145)
- Description preferred acceptability update no longer update acceptabilities of other description (5f012c30a8346bc4905bafa92d9920ce9525dc3a)
- Fix concept document indexing when changing destination of a relationship in place (4a0ab3a5bcb9b5108785b799f86a1258f88c65e9)
- Allow editing immutable properties on unreleased SNOMED CT components (0e1444b9bac543c1cf5c22e90823c4ea42edd077)
typeId
,destinationId
on SNOMED CT RelationshipstypeId
,term
,languageCode
on SNOMED CT Descriptions
- Always create commit info document when processing a CDO commit (03e85d11b12c236ada328f8cce6e289558573bfc)
- Fix serialization issue of SortField when using it in SearchRequests (e733dbec3edb831d6fba4974ff9ea8a04832f50f)
- Initialize repositories only in GREEN health state (3bb706585d92ecc90336f62b6fc4530392486464)
- Fix expansion of
statedDescendants
when persisting classification results (b9de8620ca59f728adaeb82c3100b09f40737304) - Fix missing backpressure exception when using
Notifications
event stream (ce022786e59c1ad14c8dc5877c076158c053fae6)
- Field selection now supports single fields as well (049578f483150fb566ec2c92b9e2b1659e40dccb)
- Fix missing SNOMED CT icons after importing RF2 files (388c13b34f4194f759239506c2e8f09a1d4cfb5e)
- Fixed missing internal SNOMED CT ECL package export entry (required by ide and ui plugins)
- Fixed duplicate repository ID shown in diagnostic messages
- Fixed existing db index detection when ensuring index on CDO_CREATED columns
- Health Status has been added to Repository instances (b2ihealthcare#138)
- Repositories check their health status during the bootstrap process
RED
state: administrative action is required (restoring content from backup or initiating reindex on the repository). Accessing content is disallowed.YELLOW
state: administrative operation (eg. reindex) is in progress, accessing content is allowed, but the content can be incompleteGREEN
state: terminology content is consistent
- Server Info and Repository API (b2ihealthcare#138)
GET /snowowl/admin/info
endpoint to retrieve version and diagnostic information of the running serverGET /snowowl/admin/repositories
endpoint to retrieve all available repositories with their health statusesGET /snowowl/admin/repositories/:id
endpoint to retrieve a single repository and its health status
- Console
--version
command parameter has been added tosnowowl
command to retrieve the server's versionsnowowl repositories [id]
subcommand has been added to retrieve repository information and health status
- Sorting support in Java API (b2ihealthcare#140)
- Low-level API changes
- Support custom repository content initialization for empty repositories during the bootstrap process (usually primary code system entries are created here)
- SNOMED CT RF2 importer changes
- Importer is no longer able to create codeSystem as part of the import process, how ever they require that the codeSystem exists before starting the import.
- SNOMED CT ECL grammar improvements (b2ihealthcare#137)
- Optional
WS
before and after thePIPE
terminals - Case insensitive keyword support
- Fixed parser error when parsing empty ECL expression
- Branching API improvements (b2ihealthcare#143)
- Pagination support has been added to
GET /snowowl/snomed-ct/v2/branches
endpoint - Filter by
parent
property has been added toGET /snowowl/snomed-ct/v2/branches
endpoint - Filter by
name
property has been addSed toGET /snowowl/snomed-ct/v2/branches
endpoint
SnomedConcept
expansions
- Removed
form
parameter when expandingancestors
/descendants
of SNOMED CT concepts - Added
statedAncestors
/statedDescendants
expand parameters to expand concepts referenced viastated
IS_A relationships ancestors
/descendants
expansion expands concepts referenced viainferred
IS_A relationships
GET /snowowl/admin/repositories/:id/versions
obsolete endpoint has been removed in favor ofGET /snowowl/admin/codesystem/:id/versions
snowowl listrepositories
subcommand has been replaced withsnowowl repositories
- Xtext/Xtend changed from 2.8.4 to 2.11.0 (b2ihealthcare#137)
- EMF changed from 2.11.0 to 2.12.0 (b2ihealthcare#137)
- RxJava changed from 1.0.6 to 2.0.7 (b2ihealthcare#141)
- Validate SNOMED CT Text Definition files (if present) when import RF2 content
- Validate
branchPath
input parameter with givencodeSystemShortName
when running SNOMED CT RF2. It should be either full path or relative to the codesystem's main branch. - Fixed issue where files could not be opened after downloading them using the
FileRegistry.download(...)
api (c1088e217e1954952b57e70aec9f0d28f09083af) - Skip cdo repository initializer commits when reindexing a repository (b6d1e4f9e2cd170a8516bc2bcf1cda4f6ce6888c)
- Support UUID as return value of a RemoteJob (bee443409401b0ece88a520c009e07130b924357)
- Fixed invalid MRCM domain expression calculation in case of CompositeConceptSetDefinition (1600d9e1821b9d403ab3365e15f05a96f238eba1)
- Fixed serialization of IdGenerationStrategy (555c3a585b8ea721c396de18d18c3fad4ac9568d)
- Support reference set filtering in SNOMED CT RF2 export Java API
- Improved repository request log output
- Fixed serialization of ValidationException (62d3d0516b87c62e4841a6d9b0eba6e262e18410)
- Fixed class loading issue when using BulkRequests
- Fixed Highlighting.getMatchRegions() bug (e7d449df9843c188700c11591ca7e70755f9f140)
- Fixed node initialization issue when connecting to a master node (client-server mode)
- Fixed serialization of GetResourceRequest classes
- SNOMED CT Complex Map Members properties,
mapGroup
andmapPriority
are changed to integer type instead of byte. This requires migration of the SNOMED CT database (TODO ref to sql script).
- Reader/Writer database connection pool capacity configuration (see configuration guide)
- Domain representation classes for SNOMED CT MRCM Constraints
- SnomedRelationshipConstraint
- SnomedDescriptionConstraint
- SnomedConcreteDomainConstraint
- Complete Java and REST support for SNOMED CT Reference Sets and Members (b2ihealthcare#131)
- Generic request-based job API (b2ihealthcare#132)
- RxJava-based notification observable support (part of b2ihealthcare#132)
- File attachment API (b2ihealthcare#129)
- SNOMED CT RF2 export API
startEffectiveTime
andendEffectiveTime
export filters can be used for all RF2 export typescodeSystemShortName
andextensionOnly
properties to select the right content for your RF2 package- Export now always creates empty description, text definition and language refset files
- Export now creates description/text definition/lang refset files per language code
- A new RF2 API (b2ihealthcare#135)
- Index API
- Support java.util.Date types in document mapping
- Refactored SNOMED CT API test cases (part of b2ihealthcare#131)
- The obsolete rpc-based quick search API (use SearchResourceRequests instead)
- Properly dispose ReviewManager instance when disposing the Repository
- GET /{path}/relationships endpoint to search SNOMED CT Relationship components
- Namespace filter support to
- GET /{path}/descriptions
- GET /{path}/relationships
- EffectiveTime filter support to
- GET /{path}/concepts
- GET /{path}/descriptions
- GET /{path}/relationships
- ECL expression support to
GET /{path}/descriptions
endpoint's concept and type filter subclassDefinitionStatus
property toSnomedConceptSearchRequest
referenceSet
expand option to GET /{path}/concepts
- Fixed NPE when using only delimiter characters in
termFilter
query parameter - Server now fails to start if multiple terminology repositories have the same storageKey namespace ID assigned
- Source and target effective time values are now indexed on module dependency reference set member index documents
- Support for inactive component creation. See endpoints:
- POST /{path}/concepts
- POST /{path}/descriptions
- POST /{path}/relationships
- POST /{path}/members
- Support the complete SNOMED CT Identifier functionality via a dedicated Java API (
SnomedRequests.identifiers()
)
- SnomedDescription REST representation changes
- Changed
acceptabilityMap
toacceptability
- Changed
descriptionInactivationIndicator
toinactivationIndicator
- SnomedRelationship REST representation changes
- Changed
sourceConcept
tosource
- Changed
typeConcept
totype
- Changed
destinationConcept
todestination
- Removed
refinability
property
- POST /{path}/concepts
- Added support for relationship creation as part of concept creation
- Added support for member creation as part of concept creation
- POST /{path}/concepts/{id}/updates
- Added support for description updates
- Added support for relationship updates
- Added support for member updates
- Swagger API
- Replaced ISnomed* types with the corresponding Snomed* type
- The following endpoints have been completely removed from the REST API (equivalent requests can be initiated via expansion parameters, see GET /{path}/concepts endpoint)
- GET /{path}/concepts/ancestors
- GET /{path}/concepts/descriptions
- GET /{path}/concepts/descendants
- GET /{path}/concepts/outbound-relationships
- GET /{path}/concepts/inbound-relationships
- GET /{path}/concepts/pt
- GET /{path}/concepts/fsn
- Removed
defaultModule
configuration option (requests should specify the desired module viamoduleId
parameter) - Removed
defaultNamespace
configuration option (requests should specify the desired namespace vianamespaceId
parameter) - Removed
enforceNamespace
configuration option
- Support for Expression Constraint Language v1.1.1 has been added, see http://snomed.org/ecl for details
- Support BigDecimal property mapping in index API
- GET /{path}/concepts now supports filtering by ECL expressions via
ecl
query parameter - Deprecated
escg
filter on GET /concepts endpoint. Use theecl
query parameter instead - Snow Owl now uses sequential SNOMED CT identifier generation instead of random
- Fixed empty task branch issue when an exception occurs during rebase (rebase now works on a temporary branch until it completes and renames the branch to the original name using CDO branch rename functionality, see https://bugs.eclipse.org/bugs/show_bug.cgi?id=422145) (b2ihealthcare#118)
- Fixed missing non-stated relationship file from delta export (b2ihealthcare#119)
- Request new identifiers in bulk during bulk component updates (b2ihealthcare#121)
- Improved performance and memory usage of SNOMED CT RF2 importer (b2ihealthcare#122)
- SNOMED CT Concept, Description and Relationship index schema changes
- Added
referringRefSets
field to all three main SNOMED CT component documents - Added
referringMappingRefSets
field to all three main SNOMED CT component documents - Non-mapping reference set identifiers that reference a given component will be indexed in the
referringRefSets
- Mapping reference set identifiers that reference a given component will be indexed in the
referringMappingRefSets
- NOTE: to be able to use these fields reindex
snomedStore
repository using thesnowowl reindex snomedStore
command after dropping the index directory of it
- Fixed review change calculation bug, deleted components will mark their container component changed by default
- Fixed bug with new/dirty reference set (re)indexing without concept changes
- Handle unordered list index calculations properly during CDO revision compare
- New Java API to get/search commit information in a repository. See class
com.b2international.snowowl.datastore.request.CommitInfoRequests
. To make the new API work, you have to reindex your dataset using thesnowowl reindex
console command
- SNOMED CT RF2 importer now uses the same change processing/indexing as regular commits
- Support DOI score indexing during change processing (aka when committing changes)
- Fixed incorrect calculation of stated/inferred parent/ancestor information on SNOMED CT Concept documents in case of status change
Snow Owl is now using Java 8 both compile time and runtime. Make sure your execution (and development, if you are developing custom plug-ins for Snow Owl) environment supports and uses Java 8. From 5.1.0, the minimum required Java version is 1.8.0 update 102.
This section discusses the changes that you need to be aware of when migrating your application to Snow Owl 5.0.0.
Snow Owl v5.0.0 no longer supports nested index directory format. The new format is flat, branches do not have their own directories under the corresponding terminology repository's root index folder. Branching and revision information are coded into each document and each terminology component has multiple documents in the index, which is called revision index
and the documents are revisions
. Additionally with the new index format, Snow Owl moved from Lucene v4.9.0 to v5.5.0. Indexes, that still use the old index API, but depend on the new Lucene version, should be accessible and readable by Lucene v5.5.0.
To support migration of incompatible datasets, Snow Owl v5.0.0 comes with a reindex
command, which can be used to create the new index for any dataset based on the contents of the relational database. See updated Admin Console Reference Guide for details.
Due to index format changes, public APIs (generic and/or SNOMED CT terminology related) - that used the old format - become obsolete, and either marked with deprecated annotation or have been completely removed. See the affected public APIs in the Removed section.
In general the Review API
still works the same way as in the 4.x
versions, but the new, changed, deleted concept ID sets might contain non-Concept identifiers when a member of a Relationship/Description
changes, but the corresponding Relationship/Description
does not. It is recommended to fetch the container SNOMED CT Concept
identifier by querying the source branch for the new or changed Relationship/Descriptions, and extracting the SNOMED CT Concept identifier from either the conceptId or sourceId properties. Querying deleted revisions from the tip of a branch is currently not supported, see next section.
With this change and limited capabilities, Snow Owl will no longer support the current version of the Review API
starting from the next release (5.1.0
), and it will replace it with a more generic Branch Compare API
. This new API will return the new/changed/deleted document identifiers directly without trying to be smart and replace the document identifier with the corresponding container (root resource, like the SNOMED CT Concept
) component identifier. API consumers will be responsible for fetching and computing the final compare result based on the actual changes between the branches, if they would like to still show the review in the scope of a SNOMED CT Concept
. This enables Snow Owl
to use the same Branch Compare API
for different terminology implementations and the API will provide access points to query the proper revision of new/changed/deleted components (currently it only supports the latest revision, which returns HTTP 404 Not Found
for deleted components).
- Maintenance commands:
snowowl reindex <repositoryId> <failedCommitTimestamp>
- Reindexes the currently available database content from scratch, or from the specified commitTimestamp (if a previously initiated reindex process has failed at some point)snowowl optimize <repositoryId> <maxSegments>
- Optimizes the underlying index for the repository to have the supplied maximum number of segments (default number is 1)snowowl purge <repositoryId> <branchPath> <purgeStrategy>
- optimizes the underlying index by deleting unnecessary documents from the given branch using the given purge strategy (default strategy isLATEST
, available strategies areALL
,LATEST
,HISTORY
)
- New search options for SNOMED CT Reference Set Members:
acceptabilityId
characteristicTypeId
correlationId
descriptionFormat
mapCategoryId
operatorId
targetComponent
unitId
valueId
- New
revisionCache
configuration option inrepository
section. Enables/Disables CDO revision cache based on its value (default value istrue
). - New
index
configuration options underrepository
section:
commitInterval
- the interval in milliseconds, which specifies how often flush and sync index changes to disk (default is15000
, 15 seconds, minimum allowed value is1000
, 1 second)translogSyncInterval
- the interval in milliseconds, which specifies how often the transaction log flushes its changes to disk (default is5000
, 5 seconds, minimum allowed value is1000
, 1 second)queryWarnThreshold
- threshold in milliseconds, which specifies when to log a WARN level message in the log file about a slow query (default value is400
)queryInfoThreshold
- threshold in milliseconds, which specifies when to log an INFO level message in the log file about a slow query (default value is300
)queryDebugThreshold
- threshold in milliseconds, which specifies when to log a DEBUG level message in the log file about a slow query (default value is100
)queryTraceThreshold
- threshold in milliseconds, which specifies when to log a TRACE level message in the log file about a slow query (default value is50
)fetchWarnThreshold
- threshold in milliseconds, which specifies when to log a WARN level message in the log file about a slow fetch (default value is200
)fetchInfoThreshold
- threshold in milliseconds, which specifies when to log an INFO level message in the log file about a slow fetch (default value is100
)fetchDebugThreshold
- threshold in milliseconds, which specifies when to log a DEBUG level message in the log file about a slow fetch (default value is50
)fetchTraceThreshold
- threshold in milliseconds, which specifies when to log a TRACE level message in the log file about a slow fetch (default value is10
)
- New modules:
com.b2international.index.api
- Generic Index API modulecom.b2international.index.lucene
- Lucene based implementation of Generic Index API modulecom.b2international.index.api.tests
- Generic test cases to verify implementation modules of the Index API modulecom.b2international.index.api.tests.tools
- Useful utility classes when writing Index API based test casescom.b2international.collections.jackson
- Jackson ser/deser module forcom.b2international.collections.api
module
- Improved change processing performance by loading only the relevant revisions from the index
- Log entry format of requests has changed to the following
- The logged entry is now a valid JSON object
- Format:
{"repositoryId":"string", "type":"string", "metrics": {...}, ...request specific properties}
- Metrics
- All values are measured in milliseconds
- Read operations measure their execution time (
responseTime
) - Commit operations measure their execution time (
responseTime
) and commit subtask execution times (preCommit
,preRequest
,traceability
,indexing
,commit
)
- Deprecated public SNOMED CT APIs that have been replaced by the new Request based APIs
SnomedTerminologyBrowser
SnomedStatementBrowser
SnomedPredicateBrowser
SnomedComponentService
SnomedTaxonomyService
- Configuration options:
indexTimeout
configuration has been removed, because the new index API uses a single index and it does not require disposal of branch specific Index Readers/Writers
- New feature, SNOMED CT Extension support, see
snomed_extension_management.adoc
for details.
POST
/codesystems
- creates a new codesystemPUT
/codesystems
- updates an existing codesystem
- Representations
- New
branchPath
property on CodeSystems (currently active path of a CodeSystem) - New
repositoryUuid
property on CodeSystems (the current repository of the CodeSystem ) - New
extensionOf
property on CodeSystems (the base code system of the CodeSystem) - New
parentBranchPath
property on CodeSystemVersions (the parent branch path where the version branch is forked off)
effectiveTime
based filtering for all components (currently members only, other components will be support on release of 4.7)- New module for support full javadoc of Snow Owl public APIs (
com.b2international.snowowl.javadoc
). The new module is part of thesite
Maven profile.
- SNOMED CT Extension support
GET
/codesystems
- returns all currently known codesystems (in SNOMED CT, all releases, including extensions)GET
/codesystems/:id
- returns a codesystem by its unique identifier, which can be its short name or its oid (both should be unique)POST
/codesystems/:id/versions
- create a new version in a codesystem (or release in SNOMED CT)
- SNOMED CT RF2 import
POST
/imports
- new optional propertycodeSystemShortName
, identifies the target code system of the import, the default value is the short name of the SNOMED CT International Release
- Revise handling of structural reference set members (language, inactivation and association members)
- Try to reuse members where possible (reactivate if necessary)
- Keep only one active language reference set member per description and do not create new ones when acceptability changes
- Replaced custom
3.2.2
version oforg.semanticweb.owl.owlapi
module with a dependency to the3.4.4
version of it.
- Makes it possible to use
ELK v0.4.2
runtime and during tests
- Upgrade custom
Protegé
libraries from4.1
to4.3
- Replaced the unsupported pcj library with FastUtil and also added a nice primitive collection API on top of it to support replacement of the primitive collection library underneath (and/or support multiple libraries with different capabilities, performance at the same time)
- Migration from old terminology registry model to updated model, migration scripts are in
/documentation/src/main/asciidoc/scripts/migration_4.6_to_4.7/
com.b2international.collections.api
- primitive collections APIcom.b2international.collections.fastutil
- FastUtil implementation of primitive collections API
- Reduces thread usage of SNOMED CT change processing
- Index initialization during SNOMED CT RF2 import now filters content based on the current latest system effective time, resulting in much more reliable imports and content when the import completes
- No RF2 import config validation when the branchPath is unrelated with the given
codeSystemShortName
property
- All references set member properties are supported (using RF2 property names)
- Support for rebase queueing
GET
/merges
- returns all merges happened since the start of the server ()GET
/merges/:id
- return a merge by its identifierPOST
/merges
- creates and starts a new merge between two branch pointsDELETE
/merges/:id
- deletes a merge object by its identifier
- Expansion support improvements
- Expand
targetComponent
on association reference set members - Expand
members
of any SNOMED CT core component (Concept, Description, Relationship) (eq.expand=members()
) - Support
stated
andinferred
expansion ofdescendants
andancestors
(both Java and REST API)
- Representations (Java and REST API)
- New
iconId
property on SNOMED CT model components (not available in JSON representations) - New, expandable
typeConcept
object property on SNOMED CT Relationships (by default onlyid
is available on the object) - New, expandable
sourceConcept
object property on SNOMED CT Relationships (by default onlyid
is available on the object) - New, expandable
destinationConcept
object property on SNOMED CT Relationships (by default onlyid
is available on the object) - New, expandable
type
object property on SNOMED CT Relationships (by default onlyid
is available on the object)
- REST API property changes
targetComponentId
changed totargetComponent
(became nested object, expandable)
- Search improvements (Java API only, no REST support yet)
- Support for fuzzy matching
- Support for parsed terms
- Support for DOI based scoring (using a default DOI file, not configurable yet)
- Support for search profiles
- The type of the
group
property changed frombyte
toint
to support greater than127
values - Using time based rolling policy with 90 days worth of history instead of fixed window with size restriction
- Support for simple and query type reference sets and members in RESTful API
GET
/:path/refsets
GET
/:path/refsets/:id
GET
/:path/refsets/:id/history
POST
/:path/refsets
POST
/:path/refsets/:id/actions
GET
/:path/members
GET
/:path/members/:id
POST
/:path/members
PUT
/:path/members/:id
DELETE
/:path/members/:id
POST
/:path/members/:id/actions
- Integration with Component Identifier Service (CIS), see configuration_guide.adoc for details on how to configure it
- Indexing term, language code and acceptability values on SNOMED CT Description documents
- Initial version of the resource expansion API is currently available (expand
fsn
,pt
,descriptions
and other nested resources within a single request) numberOfWorkers
configuration parameter to tweak worker threads per repository (by default it will be set to3 x number of cores
)
- Fixed bug in
Accept-Language
header by introducing Extended Locales, they do support language reference set IDs properly (the original header spec. restricts the number of extension characters to8
) - Increased
asyncTimeout
in Tomcat to 60 seconds - Performance improvements on some endpoints by utilizing the new resource expansion API
- Marked a bunch of old APIs as deprecated, they will be removed in upcoming releases
- Removed label indexing from SNOMED CT component indexing (using Description term index field to find a label)
- CIS is currently unsupported in SNOMED CT RF2 imports (manual synchronization is required)
- Simple type mapping reference set membership is not tracked properly if there are multiple mappings for a single referenced component
- Support of MRCM rules import before/after SNOMED CT import (previously was part of the SNOMED CT import)
- Few missing SNOMED CT Inactivation Indicators have been added
- RF2 validation in SNOMED CT import validates content based on effective times (fixes invalid errors/warnings)
- Concept inactivation rewires immediate children to immediate parent (keeping all STATED ISA relationships and inactivating all inferred relationships)
- Hot backup script copies entire index folder of a repository instead of just the version indexes
- IndexService inactivity default timeout value changed to 30 minutes
- PostProcessing support has been completely removed
- Stopwords in index services have been completely removed
- Fixed stored mapTargetDescription values in SNOMED CT Simple Map Reference Set Members
- Fixed invalid setting of released flag to false in case of already published component import (set only the effective time)
- Removed tokenization of source field in IndexStore
- Keep dirty indexes alive when running service inactivity checker
- b2ihealthcare#21
- b2ihealthcare#22
- b2ihealthcare#23
- b2ihealthcare#24
- b2ihealthcare#25
- b2ihealthcare#26
- b2ihealthcare#27
- b2ihealthcare#28
- b2ihealthcare#33
- b2ihealthcare#34
- GET /:path/descriptions - support for association targets in SNOMED CT Description representations
- POST /:path/descriptions/:id/updates - support for inactivation indicators in SNOMED CT Description updates
- POST /:path/descriptions/:id/updates - support for association targets in SNOMED CT Description updates
- Renamed
descriptionInactivationIndicator
toinactivationIndicator
in SNOMED CT Description representations - Changed commit notification logging to be more readable and traceable
- Rebase across deep branches is now supported
- Fixed major commit processing bug (https://github.com/b2ihealthcare/snow-owl/commit/4f1ec749bd74f065f9463b75a4a54e0c7f257d0f)
- Support for relationships with stated characteristic type
- Importing/exporting sct2_StatedRelationship*.txt files
- Indexing stated parentage (parent and ancestor fields) on concepts
- Low-level Java API improvements
- Revamped index APIs (document building, query building, fields)
- Revamped change processing API (partial updates, parallel execution)
- Stated relationships support changes
- Classifier now uses the stated graph to produce changes to the DNF (inferred view)
- Classifier now deletes any unpublished redundant inferred relationships instead of inactivating them
- /browser/concepts/{id}/children now has a new parameter
form
(allowed values arestated
andinferred
)
- Reference set lucene documents fields merged into their corresponding identifier concept doc
-
Support for terminology reviews
POST
/reviews
GET
/reviews/:id
GET
/reviews/:id/concept-changes
DELETE
/reviews/:id
Changes are computed according to existing version comparison logic in Snow Owl Server; in particular, reference set identifier concepts are marked as changed if any members are added, removed or updated in the reference set. The first modification immediately after versioning triggers an update to "Module dependency", making it appear in concept change resources.
Inbound relationship changes do not mark the target concept as changed. Inactivating a concept marks it as changed, not deleted.
Concept change sets and review resources are kept for a limited time, which is configurable using the
snowowl_configuration.yml
file.
- Deep branching support has been implemented
POST
/branches
endpointGET
/branches
endpointDELETE
/branches/{path}
endpointGET
/branches/{path}
endpointGET
/branches/{path}/children
endpointPOST
/merges
endpoint
- Added support for Unpublished component import. RF2 rows with empty effectiveTime column can be imported into Snow Owl SNOMED CT repository.
- Breaking RESTful API changes
/{tag}[/tasks/{taskId}]/...
URLs are replaced with URL beginning with/{path}/...
, where "path" may include an arbitrary number of/
-separated segments
- Separate API documentation for each RESTful API
Administrative
: http://localhost:8080/snowowl/admin/SNOMED CT
: http://localhost:8080/snowowl/snomed-ct/v2/
- API documentation layout
- Two column layout, one for the API docs and one for the Swagger UI
- Deep branching support for Import/Export configuration (new
branchPath
) - API version is now included in SNOMED CT REST service URLs; the accepted media type is
application/vnd.com.b2international.snowowl+json
for both Administrative and SNOMED CT terminology services - Deployment changes: The preferred transaction isolation level is READ-COMMITTED for MySQL databases. For changing the corresponding server variable, refer to https://dev.mysql.com/doc/refman/5.6/en/set-transaction.html.
- Breaking RESTful API changes
- Removed /tasks API endpoints
- Associated index directories are not purged when a branch and any children are deleted
- Reopening a branch can not be rolled back; if applying changes fails after reopening a branch during rebase or merge operations, previous changes will be lost
- No additional metadata is present on version tag branches
-
WRP-89
: bothFULL
andDELTA
imports are now separating incoming import files into "layers" based on the effective time columns, and individual layers get imported in order. This enables importing the20150131
INT RF2 release delta, which includes components from20140731
as well. The import process can now create versions after importing each "layer" for all import types.Note that the above mentioned
20150131
release would require "re-tagging" of an already released20140731
version, which is not supported, or placing the additional content on the existing20140731
version branch as a patch. This, however, would make the extra20140731
content available on that version and that version only; it would be visible neither fromMAIN
, nor from20150131
.The current implementation issues a warning when such cases are encountered; the extra content will become visible on
MAIN
and20150131
, but not on version20140731
, which is left untouched. A possible workaround is to import20140731
from a delta with disabled version creation, then import the20150131
delta with enabled version creation.
WRP-135
: added propertiestaskId
andversionId
to the export configuration object to allow exporting content from task branches. URLs for exporting no longer include the version segment.- version/taskId is accepted, but not applicable (no tasks on versions)
- when taskId left out, it means MAIN or head of a particular version
- Added the
transientEffectiveTime
property to the export configuration object for specifying effective time values in export files, if unpublished components are present. Valid values are:""
or not setting the property: usesUnpublished
in exported files"NOW"
: uses the current server date in exported files- dates in
yyyyMMdd
format, eg."20150319"
: uses the specified date in exported files - anything else result in return code 400 bad request, date is not validated in terms of earlier/later (only proper format)
Note: unpublished components are filtered out from
DELTA
exports if the export configuration specifies an ending effective time.
- Changed the export service to export components from all modules if the
moduleIds
property of the export configuration object is not set. The previous behavior resulted in empty export files under the assumption that no modules should be exported. - Querying or exporting a non-existent export config returns now code 404 as opposed to 200 and an empty object.
- After downloading the export result, the export config is cleaned up.
- Make the
Accept
header mandatory for requests to "B2i" URLs, and produceapplication/json
responses on "Browser" URLs. This means that the latter endpoints will be hit when entered in a web browser's URL bar, making testing easier. - Increase concept children collection performance by using a combination of low-level calls. This
brings the test case of
123037004
's children down from ~22 seconds to ~350 ms. - Sort description search results by relevance, and add offset and limit to fetch search results in smaller segments.
- Split the API documentation into two sets: the administrative interface with the code system listing is separated from SNOMED CT services. The API viewer's own URL bar can be used to switch between generated documentation endpoints; two shortcuts were also added. The default URL is changed to http://localhost:8080/snowowl/admin/api-viewer/ .
- New API viewer category for URLs specific to the IHTSDO Browser:
GET
/{tag}[/tasks/{taskId}]/concepts/{SCTID}
for retrieving concepts and related detailsGET
/{tag}[/tasks/{taskId}]/concepts/{SCTID}/children
for retrieving concept childrenGET
/{tag}[/tasks/{taskId}]/descriptions?query={query_string}
for retrieving matching descriptionsGET
/{tag}[/tasks/{taskId}]/constants
for getting response constant FSNs and identifiers
effectiveDate
andeffectiveTime
properties on SNOMED CT components and code system versions now universally follow the shortyyyyMMdd
format (also applies when creating new versions), other dates should use ISO8601Accept-Language
is required on all new endpoints which return descriptions, as Snow Owl Server stores descriptions with different language codes and acceptability side-by-side- Constants must be retrieved on a version/task basis, as the FSN of these enumeration values can change between versions, tasks
isLeafStated
is not returned, as Snow Owl Server holds a mixed set of relationships which matches the inferred view only
WRP-26
: Support importing deltas without corresponding unchanged artefactsWRP-82
: Enable REST operation to support imports on branchesWRP-88
: Add support for namespace to REST API- Added folder
delta-import-examples
which includes a set of RF2 release .zip files, containing the minimally required content for each change. A separatereadme.txt
file within the folder has additional instructions on how these archives can be used.
- URLs under and including
/snomed-ct/imports
no longer require specifying the version to use as a path variable; - The input object for
POST
/snomed-ct/imports
should now include both the version as well as the task identifier, if applicable:
{
"version": "MAIN",
"taskId": "SO-001",
"type": "DELTA",
"languageRefSetId": "900000000000508004",
"createVersions": false
}
GET
/snomed-ct/imports/{importId}
will return information about the ongoing import and the original values from the import configuration:
{
"type": "DELTA",
"version": "MAIN",
"taskId": "SO-001",
"createVersions": false,
"languageRefSetId": "900000000000508004",
"id": "89feb6f4-f6a7-4652-90b9-b89b6b8587ce",
"status": "COMPLETED",
"startDate": "2015-02-13T15:39:56Z",
"completionDate": "2015-02-13T15:41:05Z"
}
- To keep the release file's size small, no indexes and SQL dumps have been attached; the ones from the previous release can be used instead. A database reload is required.