diff --git a/src/main/java/ca/uhn/fhir/jpa/starter/AppProperties.java b/src/main/java/ca/uhn/fhir/jpa/starter/AppProperties.java index e361776..8a00b71 100644 --- a/src/main/java/ca/uhn/fhir/jpa/starter/AppProperties.java +++ b/src/main/java/ca/uhn/fhir/jpa/starter/AppProperties.java @@ -68,6 +68,9 @@ public class AppProperties { private Boolean lastn_enabled = false; private NormalizedQuantitySearchLevel normalized_quantity_search_level = NormalizedQuantitySearchLevel.NORMALIZED_QUANTITY_SEARCH_NOT_SUPPORTED; + private Integer search_coord_core_pool_size = 20; + private Integer search_coord_max_pool_size = 100; + private Integer search_coord_queue_capacity = 200; private Boolean use_apache_address_strategy = false; private Boolean use_apache_address_strategy_https = false; @@ -450,6 +453,23 @@ public class AppProperties { this.normalized_quantity_search_level = normalized_quantity_search_level; } + public Integer getSearch_coord_core_pool_size() { return search_coord_core_pool_size; } + + public void setSearch_coord_core_pool_size(Integer search_coord_core_pool_size) { + this.search_coord_core_pool_size = search_coord_core_pool_size; + } + + public Integer getSearch_coord_max_pool_size() { return search_coord_max_pool_size; } + + public void setSearch_coord_max_pool_size(Integer search_coord_max_pool_size) { + this.search_coord_max_pool_size = search_coord_max_pool_size; + } + + public Integer getSearch_coord_queue_capacity() { return search_coord_queue_capacity; } + + public void setSearch_coord_queue_capacity(Integer search_coord_queue_capacity) { + this.search_coord_queue_capacity = search_coord_queue_capacity; + } public static class Cors { private Boolean allow_Credentials = true; diff --git a/src/main/java/ca/uhn/fhir/jpa/starter/FhirServerConfigDstu2.java b/src/main/java/ca/uhn/fhir/jpa/starter/FhirServerConfigDstu2.java index 5674d2a..6e26d41 100644 --- a/src/main/java/ca/uhn/fhir/jpa/starter/FhirServerConfigDstu2.java +++ b/src/main/java/ca/uhn/fhir/jpa/starter/FhirServerConfigDstu2.java @@ -13,6 +13,7 @@ import org.springframework.core.env.ConfigurableEnvironment; import org.springframework.orm.jpa.JpaTransactionManager; import org.springframework.orm.jpa.LocalContainerEntityManagerFactoryBean; +import javax.annotation.PostConstruct; import javax.persistence.EntityManagerFactory; import javax.sql.DataSource; @@ -31,6 +32,19 @@ public class FhirServerConfigDstu2 extends BaseJavaConfigDstu2 { @Autowired AppProperties appProperties; + @PostConstruct + public void initSettings() { + if(appProperties.getSearch_coord_core_pool_size() != null) { + setSearchCoordCorePoolSize(appProperties.getSearch_coord_core_pool_size()); + } + if(appProperties.getSearch_coord_max_pool_size() != null) { + setSearchCoordMaxPoolSize(appProperties.getSearch_coord_max_pool_size()); + } + if(appProperties.getSearch_coord_queue_capacity() != null) { + setSearchCoordQueueCapacity(appProperties.getSearch_coord_queue_capacity()); + } + } + @Override public DatabaseBackedPagingProvider databaseBackedPagingProvider() { DatabaseBackedPagingProvider pagingProvider = super.databaseBackedPagingProvider(); diff --git a/src/main/java/ca/uhn/fhir/jpa/starter/FhirServerConfigDstu3.java b/src/main/java/ca/uhn/fhir/jpa/starter/FhirServerConfigDstu3.java index 07406b2..a10ecb4 100644 --- a/src/main/java/ca/uhn/fhir/jpa/starter/FhirServerConfigDstu3.java +++ b/src/main/java/ca/uhn/fhir/jpa/starter/FhirServerConfigDstu3.java @@ -11,6 +11,7 @@ import org.springframework.core.env.ConfigurableEnvironment; import org.springframework.orm.jpa.JpaTransactionManager; import org.springframework.orm.jpa.LocalContainerEntityManagerFactoryBean; +import javax.annotation.PostConstruct; import javax.persistence.EntityManagerFactory; import javax.sql.DataSource; @@ -29,6 +30,20 @@ public class FhirServerConfigDstu3 extends BaseJavaConfigDstu3 { @Autowired AppProperties appProperties; + @PostConstruct + public void initSettings() { + if(appProperties.getSearch_coord_core_pool_size() != null) { + setSearchCoordCorePoolSize(appProperties.getSearch_coord_core_pool_size()); + } + if(appProperties.getSearch_coord_max_pool_size() != null) { + setSearchCoordMaxPoolSize(appProperties.getSearch_coord_max_pool_size()); + } + if(appProperties.getSearch_coord_queue_capacity() != null) { + setSearchCoordQueueCapacity(appProperties.getSearch_coord_queue_capacity()); + } + } + + @Override public DatabaseBackedPagingProvider databaseBackedPagingProvider() { DatabaseBackedPagingProvider pagingProvider = super.databaseBackedPagingProvider(); @@ -68,7 +83,12 @@ public class FhirServerConfigDstu3 extends BaseJavaConfigDstu3 { public ElasticsearchSvcImpl elasticsearchSvc() { if (EnvironmentHelper.isElasticsearchEnabled(configurableEnvironment)) { String elasticsearchUrl = EnvironmentHelper.getElasticsearchServerUrl(configurableEnvironment); - String elasticsearchHost = elasticsearchUrl.substring(elasticsearchUrl.indexOf("://")+3, elasticsearchUrl.lastIndexOf(":")); + String elasticsearchHost; + if (elasticsearchUrl.startsWith("http")) { + elasticsearchHost = elasticsearchUrl.substring(elasticsearchUrl.indexOf("://") + 3, elasticsearchUrl.lastIndexOf(":")); + } else { + elasticsearchHost = elasticsearchUrl.substring(0, elasticsearchUrl.indexOf(":")); + } String elasticsearchUsername = EnvironmentHelper.getElasticsearchServerUsername(configurableEnvironment); String elasticsearchPassword = EnvironmentHelper.getElasticsearchServerPassword(configurableEnvironment); int elasticsearchPort = Integer.parseInt(elasticsearchUrl.substring(elasticsearchUrl.lastIndexOf(":")+1)); diff --git a/src/main/java/ca/uhn/fhir/jpa/starter/FhirServerConfigR4.java b/src/main/java/ca/uhn/fhir/jpa/starter/FhirServerConfigR4.java index 31c0dcc..a53b057 100644 --- a/src/main/java/ca/uhn/fhir/jpa/starter/FhirServerConfigR4.java +++ b/src/main/java/ca/uhn/fhir/jpa/starter/FhirServerConfigR4.java @@ -12,6 +12,7 @@ import org.springframework.core.env.ConfigurableEnvironment; import org.springframework.orm.jpa.JpaTransactionManager; import org.springframework.orm.jpa.LocalContainerEntityManagerFactoryBean; +import javax.annotation.PostConstruct; import javax.persistence.EntityManagerFactory; import javax.sql.DataSource; @@ -31,6 +32,19 @@ public class FhirServerConfigR4 extends BaseJavaConfigR4 { @Autowired AppProperties appProperties; + @PostConstruct + public void initSettings() { + if(appProperties.getSearch_coord_core_pool_size() != null) { + setSearchCoordCorePoolSize(appProperties.getSearch_coord_core_pool_size()); + } + if(appProperties.getSearch_coord_max_pool_size() != null) { + setSearchCoordMaxPoolSize(appProperties.getSearch_coord_max_pool_size()); + } + if(appProperties.getSearch_coord_queue_capacity() != null) { + setSearchCoordQueueCapacity(appProperties.getSearch_coord_queue_capacity()); + } + } + @Override public DatabaseBackedPagingProvider databaseBackedPagingProvider() { DatabaseBackedPagingProvider pagingProvider = super.databaseBackedPagingProvider(); diff --git a/src/main/java/ca/uhn/fhir/jpa/starter/FhirServerConfigR5.java b/src/main/java/ca/uhn/fhir/jpa/starter/FhirServerConfigR5.java index 6e5bd98..2c6d72e 100644 --- a/src/main/java/ca/uhn/fhir/jpa/starter/FhirServerConfigR5.java +++ b/src/main/java/ca/uhn/fhir/jpa/starter/FhirServerConfigR5.java @@ -14,6 +14,7 @@ import org.springframework.core.env.ConfigurableEnvironment; import org.springframework.orm.jpa.JpaTransactionManager; import org.springframework.orm.jpa.LocalContainerEntityManagerFactoryBean; +import javax.annotation.PostConstruct; import javax.persistence.EntityManagerFactory; import javax.sql.DataSource; @@ -32,6 +33,19 @@ public class FhirServerConfigR5 extends BaseJavaConfigR5 { @Autowired AppProperties appProperties; + @PostConstruct + public void initSettings() { + if(appProperties.getSearch_coord_core_pool_size() != null) { + setSearchCoordCorePoolSize(appProperties.getSearch_coord_core_pool_size()); + } + if(appProperties.getSearch_coord_max_pool_size() != null) { + setSearchCoordMaxPoolSize(appProperties.getSearch_coord_max_pool_size()); + } + if(appProperties.getSearch_coord_queue_capacity() != null) { + setSearchCoordQueueCapacity(appProperties.getSearch_coord_queue_capacity()); + } + } + @Override public DatabaseBackedPagingProvider databaseBackedPagingProvider() { DatabaseBackedPagingProvider pagingProvider = super.databaseBackedPagingProvider(); @@ -71,7 +85,12 @@ public class FhirServerConfigR5 extends BaseJavaConfigR5 { public ElasticsearchSvcImpl elasticsearchSvc() { if (EnvironmentHelper.isElasticsearchEnabled(configurableEnvironment)) { String elasticsearchUrl = EnvironmentHelper.getElasticsearchServerUrl(configurableEnvironment); - String elasticsearchHost = elasticsearchUrl.substring(elasticsearchUrl.indexOf("://")+3, elasticsearchUrl.lastIndexOf(":")); + String elasticsearchHost; + if (elasticsearchUrl.startsWith("http")) { + elasticsearchHost = elasticsearchUrl.substring(elasticsearchUrl.indexOf("://") + 3, elasticsearchUrl.lastIndexOf(":")); + } else { + elasticsearchHost = elasticsearchUrl.substring(0, elasticsearchUrl.indexOf(":")); + } String elasticsearchUsername = EnvironmentHelper.getElasticsearchServerUsername(configurableEnvironment); String elasticsearchPassword = EnvironmentHelper.getElasticsearchServerPassword(configurableEnvironment); int elasticsearchPort = Integer.parseInt(elasticsearchUrl.substring(elasticsearchUrl.lastIndexOf(":")+1)); diff --git a/src/main/resources/application.yaml b/src/main/resources/application.yaml index b348225..f1b021d 100644 --- a/src/main/resources/application.yaml +++ b/src/main/resources/application.yaml @@ -6,6 +6,10 @@ spring: password: null driverClassName: org.h2.Driver max-active: 15 + + # database connection pool size + hikari: + maximum-pool-size: 10 jpa: properties: hibernate.format_sql: false @@ -90,6 +94,11 @@ hapi: # allowed_origin: # - '*' + # Search coordinator thread pool sizes + search-coord-core-pool-size: 20 + search-coord-max-pool-size: 100 + search-coord-queue-capacity: 200 + # logger: # error_format: 'ERROR - ${requestVerb} ${requestUrl}' # format: >-