Releases: apple/servicetalk
0.41.11
Changes
This is a minor maintenance release appropriate for all ServiceTalk users that contains several bug fixes and improvements.
Bug fixes
- 378a61c -
RoundRobinLoadBalancer
: use anExecutor
with unbounded queue by default for health checks (#1937)
Improvements
- f09799b -
RoundRobinLoadBalancer
: reduce number of operators in health check chain (#1938) - 95c6bdd -
RoundRobinLoadBalancerFactory
flipeagerConnectionShutdown
tofalse
by default (#1934) - 934b7ba -
SingleThreadedScheduler
should fallback execution upon offloading failure and give visibility for unexpected exceptions fromoffloadExecutor
(#1936)
Thank you
Every idea, review, and bug-report counts and so we thought it is worth mentioning those who helped in this area. Please report an unintended omission.
0.41.10
Changes
This is a minor maintenance release appropriate for all ServiceTalk users that contains several bug fixes and improvements.
API deprecation
Developer note: Additional API deprecation advisories and guidance have been added in each of the 0.41.X releases. Please build your application with the latest 0.41.X release and carefully review the deprecation warnings reported and associated suggestions. Changes to applications may be required for compatibility with future versions of ServiceTalk beyond the API compatible 0.41.X series. While there are many deprecations for planned future API changes, most applications should require few changes as the most significant changes are to internal or specialized APIs. If you have concerns or expect problems related to any of the API deprecations please report these as an issue.
Bug fixes
- b6af2b6 - Fixes for
EmptyBuffer
implementation (#1929) - 70ce4bb - Make static final buffers unreleasable and read-only (#1928)
Improvements
Build/Release/Github actions
Dependency upgrades
Thank you
Every idea, review, and bug-report counts and so we thought it is worth mentioning those who helped in this area. Please report an unintended omission.
0.41.9
Changes
This is a minor maintenance release appropriate for all ServiceTalk users that contains several bug fixes and improvements.
API deprecation
Developer note: Additional API deprecation advisories and guidance have been added in each of the 0.41.X releases. Please build your application with the latest 0.41.X release and carefully review the deprecation warnings reported and associated suggestions. Changes to applications may be required for compatibility with future versions of ServiceTalk beyond the API compatible 0.41.X series. While there are many deprecations for planned future API changes, most applications should require few changes as the most significant changes are to internal or specialized APIs. If you have concerns or expect problems related to any of the API deprecations please report these as an issue.
- 847e50a - Deprecate
FilterableGrpcClient
(#1902) - cf21930 - Deprecate
ExecutionContext
related methods inGrpcServerBuilder
(#1888) - 1a2cc15 - Deprecate gRPC client filters (#1890)
- 4083567 - Deprecate gRPC service filters (#1887)
Bug fixes
Improvements
- 48a9851 - Use connection/context executor for timeout (#1911)
- 43d64fd - Improve POM/BOM publication metadata (#1917)
- e300d27 - Enhance javadoc to clarify StackOverflowError possibility (#1925)
- ff7bf79 - Add missed
serialVersionUID
for exceptions (#1919) - 5106670 - Enhance
GrpcStatus.fromCodeValue
static factories to include actual status code when it maps toUNKNOWN
(#1923)
Build/Release/Github actions
- 9b5fe0a - Enhance
japicmp.sh
to be less strict on finding artifacts (#1886) - 75bd33b - Replace deprecated Gradle 7 features (#1918)
- 8f83feb - Update
CONTRIBUTING.adoc
andREADME.adoc
(#1914) - 1e53627 - Update MAINTAINERS.adoc (#1913)
- e94393c - Fix protoc caching, re-enable gradle caching (#1909)
- bd3f288 - Disable gradle cache (#1907)
- 06200d6 - Fix build caching for protoc plugin (#1895)
- 620f4e4 - Bump actions/checkout from 2.3.4 to 2.3.5 (#1892)
Thank you
Every idea, review, and bug-report counts and so we thought it is worth mentioning those who helped in this area. Please report an unintended omission.
0.41.8
Changes
This is a minor maintenance release appropriate for all ServiceTalk users that contains several bug fixes and improvements.
API deprecation
Developer note: Additional API deprecation advisories and guidance have been added in each of the 0.41.X releases. Please build your application with the latest 0.41.X release and carefully review the deprecation warnings reported and associated suggestions. Changes to applications may be required for compatibility with future versions of ServiceTalk beyond the API compatible 0.41.X series. While there are many deprecations for planned future API changes, most applications should require few changes as the most significant changes are to internal or specialized APIs. If you have concerns or expect problems related to any of the API deprecations please report these as an issue.
- f249032 - Untangling
GrpcClientBuilder
fromSingleAddressHttpClientBuilder
(#1867) (#1882)- Introduce a
GrpcClientBuilder.HttpInitializer
interface and a correspondingGrpcClientBuilder#initializeHttp
method which accepts the initializer for the underlyingSingleAddressHttpClientBuilder
; - Deprecate
GrpcClientBuilder
methods which have only served the purpose of delegating to the underlying HTTP client builder;
- Introduce a
- f8aaa8d - Untangling
GrpcServerBuilder
fromHttpServerBuilder
(#1861)- Introduce a
GrpcServerBuilder.HttpInitializer
interface and a correspondingGrpcServerBuilder#initializeHttp
method which accepts the initializer for the underlyingHttpServerBuilder
; - Deprecate
GrpcServerBuilder
methods which have only served the purpose of delegating to the underlying HTTP server builder;
- Introduce a
Improvements
- 4814621 - gRPC catch-all filters should implement
HttpExecutionStrategyInfluencer
(#1884) - 04d351c - Removing
DefaultGrpc*SecurityConfigurator
classes (#1885) - 5479215 - Add missed
@FunctionalInterface
forGrpcClientBuilder.HttpInitializer
Build/Release/Github actions
- 8e9d0e6 - Use BOMs for versions of module dependencies (#1827)
- ebf2d8d - Remove
enforcedPlatform
from test fixtures (#1881)
Dependency upgrades
- 75ae480 - Update Netty 4.1.68 -> 4.1.69 (#1878)
- e3f8316 - Update protobuf 3.17.3 -> 3.18.1 (#1873)
- 0f26b14 - Update proto-google-common-protos 2.5.0 -> 2.5.1 (#1880)
- 91e64be - Update slf4j 1.7.30 -> 1.7.32 (#1875)
Dependency upgrades for tests
Thank you
Every idea, review, and bug-report counts and so we thought it is worth mentioning those who helped in this area. Please report an unintended omission.
0.41.7
Changes
This is a minor maintenance release appropriate for all ServiceTalk users that contains several bug fixes and improvements.
New features
- 29d4c4c - Identify
LoadBalancer
instance using atargetResource(String)
(#1831) - 349df1e - Support proxy for
MultiAddressHttpClientBuilder
and for clients using already resolved address (#1751)
API deprecation
Developer note: Additional API deprecation advisories and guidance has been added in each of the 0.41.X releases. Please build your application with the latest 0.41.X release and carefully review the deprecation warnings reported and associated suggestions. Changes to applications may be required for compatibility with future versions of ServiceTalk beyond the API compatible 0.41.X series. While there are many deprecations for planned future API changes, most applications should require few changes as the most significant changes are to internal or specialized APIs. If you have concerns or expect problems related to any of the API deprecations please report these as an issue.
- Combination of #1831 and #1852 deprecates the following:
LoadBalancerFactory#newLoadBalancer(Publisher, ConnectionFactory)
in favor of a new method:LoadBalancerFactory#newLoadBalancer(String, Publisher, ConnectionFactory)
;- Second argument changed from
Publisher<ServiceDiscovererEvent>
toPublisher<Collection<ServiceDiscovererEvent>>
to be aligned withServiceDiscoverer
API;
- 349df1e - Support proxy for
MultiAddressHttpClientBuilder
and for clients using already resolved address (#1751):- Deprecated
HttpClients.*viaProxy(...)
methods in favor ofSingleAddressHttpClientBuilder#proxyAddress(...)
method that allows configuring proxy at the builder;
- Deprecated
- 5cc648c - Enhance
RedirectingHttpRequesterFilter
: redirect headers and message body (#1792)- Deprecated unnecessary constructors on
RedirectingHttpRequesterFilter
in favor of a newRedirectingHttpRequesterFilter(RedirectConfig)
; - Deprecated
MultiAddressHttpClientBuilder#maxRedirects(int)
in favor of a newMultiAddressHttpClientBuilder#followRedirects(RedirectConfig)
;
- Deprecated unnecessary constructors on
Bug fixes
- 66eb875 - Fix race condition in
SpliceFlatStreamToMetaSingle
(#1845) - 6720628 -
RoundRobinLoadBalancer
: recover health checks from unexpected errors (#1871)
Improvements
- c15d825 - Unifying
ServiceDiscoverer
andLoadBalancerFactory
APIs (#1852) - 80c1ff8 - Log the cause of failed attempt to open a new connection (#1854)
- 5cc648c - Enhance
RedirectingHttpRequesterFilter
: redirect headers and message body (#1792) - c4ece4f -
RoundRobinLoadBalancer
: trace log when a connection added/removed (#1869) - c7f0d32 -
RoundRobinLoadBalancer
: further logging enhancements (#1870)
Improvements for tests
- 0a1a7b5 -
NettyHttpServerTest.testErrorBeforeRead
handle exception (#1848) - 28ae1e2 - Avoid mock abstract class creation in test (#1846)
- ad67f2d -
GrpcLifecycleObserverTest
: close client and server after each test (#1863) - db2fa60 - Rename default logger name for LifecycleObserver(s) (#1865)
Build/Release/Github actions
- 0b4043c - Build improvements from Gradle Enterprise testing (#1853)
- 358e0bb - Fix javadoc warnings for JDK17 (#1849)
- 759f589 - Fix how
CI
env variable is set for CodeQL workflow (#1858) - a3cd845 -
japicmp.sh
: skip jdkflow on JDK8 and adjust error msg format (#1864) - 2205490 - Bump dawidd6/action-download-artifact from 2.14.1 to 2.15.0 (#1868)
Dependency upgrades
Documentation
Thank you
Every idea, review, and bug-report counts and so we thought it is worth mentioning those who helped in this area. Please report an unintended omission.
0.41.6
Changes
This is a minor maintenance release appropriate for all ServiceTalk users that contains several bug fixes and improvements.
JDK17-compatible ✅
New features
- 258f33a -
BeforeFinallyHttpOperator
: add option to discard signals after cancellation (#1835) - 24ed0b3 - HTTP/gRPC LifecycleObserver API and logging implementations (#1824)
- 801f82f - Add Netty macos aarch64 runtime dependencies (#1841)
API deprecation
Developer note: Additional API deprecation advisories and guidance has been added in each of the 0.41.X releases. Please build your application with the latest 0.41.X release and carefully review the deprecation warnings reported and associated suggestions. Changes to applications may be required for compatibility with future versions of ServiceTalk beyond the API compatible 0.41.X series. While there are many deprecations for planned future API changes, most applications should require few changes as the most significant changes are to internal or specialized APIs. If you have concerns or expect problems related to any of the API deprecations please report these as an issue.
- 0ad42cc - Deprecate
IoExecutor
create w/ThreadFactory
(#1811)- Introduces
IoThreadFactory
as a replacement forjava.util.concurrent.ThreadFactory
which will be required in the future to build anIoExecutor
. - Adds new methods accepting
IoThreadFactory
and deprecates existingNettyIoExecutors
factories that acceptThreadFactory
.
- Introduces
- 78c10b9 - Deprecated
GrpcClientBuilder#MultiClientBuilder
andGrpcClientBuilder#buildMulti
method (#1808) - 69e98ae - Deprecate one-way boolean settings on builders (#1750) (#1823)
- Deprecated
GrpcClientBuilder.disableHostHeaderFallback
in favor ofGrpcClientBuilder.hostHeaderFallback(boolean)
; - Deprecated
GrpcClientBuilder.disableDrainingRequestPayloadBody
in favor ofGrpcClientBuilder.drainRequestPayloadBody(boolean)
; - Deprecated
HttpReporter.Builder.disableSpanBatching
in favor ofHttpReporter.Builder.spansBatchingEnabled(boolean)
; - Deprecated
HttpServerBuilder.disableDrainingRequestPayloadBody
in favor ofHttpServerBuilder.drainRequestPayloadBody(boolean)
; - Deprecated
SingleAddressHttpClientBuilder.disableHostHeaderFallback
in favor ofSingleAddressHttpClientBuilder.hostHeaderFallback(boolean)
;
- Deprecated
- 274f0d6 - Deprecate remaining disable* methods in builder APIs (#1825)
- Deprecated
DefaultAutoRetryStrategyProvider#disableWaitForLoadBalancer
in favor ofDefaultAutoRetryStrategyProvider#waitForLoadBalancer(boolean)
; - Deprecated
DefaultAutoRetryStrategyProvider#disableRetryAllRetryableExceptions
in favor ofDefaultAutoRetryStrategyProvider#retryAllRetryableExceptions(boolean)
;
- Deprecated
- f3261db - Deprecating
HttpServerBuilder
protected methods (#1830)- Deprecated
HttpServerBuilder#doListen
; - Deprecated
HttpServerBuilder#buildExecutionContext
;
- Deprecated
Bug fixes
Improvements
- 58c6e1d - Add missing
subscribeShareContext
to missing static sources (#1812) - 1c929b8 - Use internal
NettyIoExecutors
for publicNettyIoExecutors
(#1814) - 8be5b2b - LifecycleObservers: log
responseTime
andtotalTime
(#1843)
Improvements for tests
- eb246be - Test utility
ProxyTunnel
wait for all input to copy (#1816) - 537a726 -
ConnectionCloseHeaderHandlingTest
don't write empty payload (#1818) - 1d22cec - Avoid
appSerializerUtf8FixLen
in tests if content-length is byte length (#1822) - dc92964 - Improve split cookie crumbs test in
H2ToStH1UtilsTest
(#1748) - cdd65b3 - Disable frequently flaky
GracefulConnectionClosureHandlingTest
(s) (#1840)
Build/Release/Github actions
- f6fee95 - Github Actions: Switch to Zulu, Update PR builds JDK 16 -> 17 (#1837)
- d48941f - Update gradlew wrapper 7.1.1 -> 7.2 (#1765)
- 12891ee - Fix grpc-protoc maven publications (#1775)
- e37ff4c - Replace actions/cache with new setup-java cache feature of GitHub Actions (#1800)
- 3e834c0 - Extend
japicmp.sh
to compare versus local build (#1810) - 3e9b434 - Use bom to determine modules to compare (#1821)
- abae386 - Increase memory for quality build tasks (#1778)
Dependency upgrades
- 36e1806 - Upgrade Netty 4.1.67 -> 4.1.68, netty-tcnative 2.0.41 -> 2.0.43 (#1828)
- 83c8bc4 - Update mockito 2.28.2 -> 3.12.4 (#1799)
- 39e3372 - Update hamcrest 1.3 -> 2.2 (#1796)
- 4d24b1b - Upgrade JUnit 5.8.0-M1 -> 5.8.0 (#1829)
- 660039e - Update testng 6.14.3 -> 7.4.0 (#1785)
- ef5da86 - Update json-unit 2.8.1 -> 2.28.0 (#1787)
- 97f02fc - Update shadowJar 4.0.4 -> 7.0.0 (#1768)
- b189cf3 - Update grpc-java 1.37.0 -> 1.40.1 (compatibility testing) (#1786)
- 40d4e5f - Update proto-google-common-protos 2.3.2 -> 2.5.0 (#1784)
- 9f54474 - Update jmh gradle 0.6.4 -> 0.6.6 (#1790)
- 1028b78 - Update jmh-core 1.30 -> 1.33 (#1789)
Thank you
Every idea, review, and bug-report counts and so we thought it is worth mentioning those who helped in this area. Please report an unintended omission.
0.41.5
Changes
This is a minor maintenance release appropriate for all ServiceTalk users that contains several bug fixes and improvements.
New features
- 25191f3 - Add
EnforceSequentialModeRequesterFilter
forhttp-utils
module (#1752) - dd94bb1 - Enable wrapping
Callable
withAsyncContext
via public API (#1798) - f0faf8c - Allow users enable validation for header values (#1757)
- 019c270 - Add
Http2Exception
type to the public API that exposes HTTP/2 error code (#1803)
API deprecation
Developer note: Additional API deprecation advisories and guidance has been added in each of the 0.41.X releases. Please build your application with the latest 0.41.X release and carefully review the deprecation warnings reported and associated suggestions. Changes to applications may be required for compatibility with future versions of ServiceTalk beyond the API compatible 0.41.X series. While there are many deprecations for planned future API changes, most applications should require few changes as the most significant changes are to internal or specialized APIs. If you have concerns or expect problems related to any of the API deprecations please report these as an issue.
- 42688df - Deprecate
payloadBody(CloseableIterable<Buffer>)
methods (#1797) - b753dad - Deprecate
ExecutionStrategy
offload*()
(#1791) (#1795) - 708a0c7 - Deprecate
syncUninterruptibly()
andawaitRequestNUninterruptibly()
in tests (#1756) - e17b021 -
ExecutionStrategy
simplification deprecations for gRPC builders (#1804) - 1674e44 -
ExecutionStrategy
simplification deprecations (#1781) (#1793)
Bug fixes
- 019c270 - Convert
Http2Exception
into appropriateGrpcStatusCode
(#1803) - 35cd4e8 - gRPC send
RST_STREAM
on client deadline expire (#1801) - c176be5 - Catch exeptions thrown from
HttpService
(s) (#1753)
Improvements
- 02b8616 -
NettyHttpServer
: logDecoderException
s atWARN
level (#1749) - ceea6b6 -
IoThreadFactory
create daemon threads by default (#1739)
Improvements for tests
- 2f3fbe9 - Migrate
servicetalk-loadbalancer
module tests to jUnit5 (#1762) - 136509c - TestExecutor minor simplify AsyncContext wrapping (#1704)
- a6391fe - TestExecutor Runnable preserve AsyncContextMap (#1699)
- a64d009 - Permit copy for
TestExecutor
AsyncContextMap
(#1675) - 9526877 - Enforce correct
AsyncContext
use and name "thread" (#1662) - a635173 - Propogate
InterruptedException
to theNettyPipelinedConnectionTest
tests (#1744)
Build/Release/Github actions
Thank you
Every idea, review and bug report counts and so we thought it is worth mentioning those who helped in this area. Please report an unintended omission.
0.41.4
Changes
This is a minor maintenance release appropriate for all ServiceTalk users that contains several bug fixes and improvements.
New features
- 839294b - Load balancer health checks problematic hosts (#1709)
- 25afec5 - gRPC protoc plugin proto3 optional support (#1712)
API deprecation
- 6a3684e -
MultiAddressHttpClientBuilder
deprecation and de-deprecation refactoring (#1722)- Removed
@Deprecated
annotation fromioExecutor
,executionStrategy
, andbufferAllocator
methods; - Deprecated
MultiAddressHttpClientFilterFactory
; - Deprecated
appendClientFilter
methods acceptingMultiAddressHttpClientFilterFactory
; - Deprecated
StreamingHttpClientFilterFactory#asMultiAddressClientFilter
.
- Removed
- 168871d - Deprecate
HttpExecutionStrategy.invokeService
(#1720)
Bug fixes
- aa5c25e -
AllWritesPromise
should not be writable after channel is closed (#1696) - d37ea47 - Inspect deprecated
RoundRobinLoadBalancerFactory
for execution strategy computation (#1693)
Improvements
- 2b5db73 - Make sure
ConnectionInfo#toString()
format is consistent (#1746) - 49d20bf - Account for recent TFO changes in netty 4.1.67 for macOS (#1740)
- ae838ce - Fix gradle grpc protoc project local dependency sequencing (#1727)
- 813ab13 -
AbstractRetryingFilterBuilder
to require jitter (#1692)
Improvements for tests
- 57ebcfa - Fix flaky
HttpTransportObserverTest#clientFailsRequestPayloadBody
(#1702) - 4542639 - Fix flaky
HttpRequestDecoderTest.unexpectedContentAfterNoContentHeaders()
(#1700) - 0d334a3 -
PublisherFlatMapSingleTest
reuse existingExecutor
(#1707)
Documentation
- d473c8d - Add examples for redirect handling (#1708)
- a4e81da - Fix javadoc in example (#1714)
- 8f9e68d - Add snapshot build/version badges to README (#1725)
- cdc12b0 - javadoc fixes for JDK 16 compatibility (#1737)
Build/Release/Github actions
- fadad10 - Update gradlew 7.0.2 -> 7.1.1 (#1717)
- a1ce194 - Update gradlew wrapper and jar -> 7.1.1 (#1718)
- 8e24764 - Bump scacap/action-surefire-report from 1.0.12 to 1.0.13 (#1742)
- 9e83b0f - Bump dawidd6/action-download-artifact from 2.14.0 to 2.14.1 (#1719)
Dependency upgrades
- 21baf46 - Update Netty 4.1.66 -> 4.1.67 (#1735)
- f5c76ea - Update protobuf-gradle-plugin 0.8.16 -> 0.8.17 (#1736)
Thank you
Every idea and bug report counts and so we thought it is worth mentioning those who helped in this area. Please report an unintended omission.
0.41.3
Changes
This is a minor maintenance release appropriate for all ServiceTalk users that contains several bug fixes and improvements.
New features
API deprecation
- a6836d7 - Deprecate
RunnableCompletable
(#1686) - dd46d5c - Load balancer should not close existing connections (#1629):
- As part of this work we deprecated
RoundRobinLoadBalancer
class and plan to make it pkg-private in future releases. As a replacement, we offer a newRoundRobinLoadBalancerFactory
top-level class.
- As part of this work we deprecated
Bug fixes
- 5b66b7e -
Publisher#flatMapConcatIterable
propagate error even if no onSubscribe (#1671) - 579306e -
SequentialSubscription
reentry bug fix (#1676) - 4a829ec - Write of HTTP/2 message may never complete (#1679)
Improvements
- 85f75e2 -
StreamingHttpPayloadHolder
remove unused constructor argument (#1680) - da3ab3e - Remove unused imports from examples (#1681)
- e020017 - Consolidate
Completable#fromRunnable
andSingle#fromCallable
implementations (#1685) - 1053dfb - Code/test/javadoc updates for JDK 16 (#1687) (#1690)
- a991695 -
DefaultExecutor
internally useAutoCloseable
(#1691) - dd46d5c - Load balancer should not close existing connections (#1629)
Improvements for tests
- f220afd - Verify that TFO works with all protocols combinations (#1677)
- 8ac828c - Migrate servicetalk-grpc-* tests to junit5 (#1660)
- cff64ee - Improve TCK tests to actually use
repeatWhen
,retry
,retryWhen
(#1683)
Documentation
Build/Release/Github actions
Dependency upgrades
Thank you
Every idea and bug report counts and so we thought it is worth mentioning those who helped in this area. Please report an unintended omission.
0.41.2
Changes
This is a minor maintenance release appropriate for all ServiceTalk users that contains several bug fixes and improvements.
API deprecation
- ac72f93 - Deprecate OpenTracing APIs that will be removed later (#1669)
- For more context of future OpenTracing API changes see "Fix B3 sampling API to support missing values" (#1640)
- ebd777e - Deprecate
publishAndSubscribeOn
operators (#1648)
Bug fixes
- 05a1cc5 - Fix H2 Server with SNI bug (#1665)
- fd8f27e -
Publisher#buffer
doesn't emit if count is met or original terminates (#1650) - ac8937d - HTTP request may become non-retryable when first write fails (#1644)
- f615202 -
Single#concat(Publisher)
potential demand deadlock fix (#1646)
Improvements
- a0c4a43 - Mark any exception before the first message is written as
RetryableException
(#1641) - 1c19c0a -
FromNPublisher
: limit recursion depth to 1 (#1653) - ecd9ff3 -
SingleConcatWithPublisher
: limit recursion depth to 1 (#1654) - ea2f56c -
Single.concat(Publisher)
defer subscribe toPublisher
until requested (#1643)
Improvements for tests
- 6be8a8d -
ClientEffectiveStrategyTest
andServerEffectiveStrategyTest
cleanups (#1667) - 8f2c372 -
TestSubscription#requestedEquals(0)
incorrectly validates the value (#1642) - 1920d33 - Migrate
servicetalk-http-*
tests to junit5 (#1659) - fe4eff2 - Migrate tests of misc modules to junit5 (#1664)
- fb6fef8 - Migrate servicetalk-data-jackson-jersey and servicetalk-http-router-jersey tests to junit5 (#1645)
Documentation
- 1835d89 - Convert "ASCII-art" arrows to unicode arrows (#1668)
- af1f67d - Fixes issues with GRPC Examples documentation (#1656)
Build/Release/Github actions
- bae121c - Enable CI for
0.41
branch (#1651) - d697674 - Remove SNAPSHOT from validation path for docs (#1657)
Thank you
Every idea and bug report counts and so we thought it is worth mentioning those who helped in this area. Please report an unintended omission.