Skip to content

Latest commit

 

History

History
851 lines (586 loc) · 25.5 KB

changelog.asciidoc

File metadata and controls

851 lines (586 loc) · 25.5 KB

Release notes

8.16.0

Features

Support for Elasticsearch v8.16

You can find all the API changes here.

Support Apache Arrow in ES|QL helper

The ES|QL helper can now return results as an Apache Arrow Table or RecordBatchReader, which enables high-performance calculations on ES|QL results, even if the response data is larger than the system’s available memory. See [esql-helper] for more information.

Fixes

Pass prototype poisoning options to serializer correctly

The client’s disablePrototypePoisoningProtection option was set to true by default, but when it was set to any other value it was ignored, making it impossible to enable prototype poisoning protection without providing a custom serializer implementation.

8.15.2

Features

Improved support for Elasticsearch v8.15

Updated TypeScript types based on fixes and improvements to the Elasticsearch specification.

8.15.1

Features

Improved support for Elasticsearch v8.15

Updated TypeScript types based on fixes and improvements to the Elasticsearch specification.

8.15.0

Features

Support for Elasticsearch v8.15.0

You can find all the API changes here.

OpenTelemetry zero-code instrumentation support

For those that use an observability service that supports OpenTelemetry spans, the client will now automatically generate traces for each Elasticsearch request it makes. See {jsclient}/observability.html#_opentelemetry[the docs] for more information.

8.14.1

Features

Improved support for Elasticsearch 8.14

Updated types based on fixes and changes to the Elasticsearch specification.

8.14.0

Features

Support for Elasticsearch v8.14.0

You can find all the API changes here.

ES|QL object API helper

A helper method has been added that parses the response of an ES|QL query and converts it into an array of objects. A TypeScript type parameter can also be provided to improve developer experience when working with the result. #2238

onSuccess callback added to bulk helper

The bulk helper now supports an onSuccess callback that will be called for each successful operation. #2199

Request retries are more polite

@elastic/transport v8.6.0 was released, which refactored when and how failed requests are retried. Timed-out requests are no longer retried by default, and retries now use exponential backoff rather than running immediately.

8.13.1

Fixes

Pin @elastic/transport to ~8.4.1

Switching from ^8.4.1 to ~8.4.1 ensures 8.13 client users are not required to update to Node.js v18+, which is a new requirement set by @elastic/transport v8.5.0. See elastic/elastic-transport-js#91 for details.

v8.13.0 was also released depending on v8.4.0 of @elastic/transport instead of v8.4.1, which was unintentional.

8.13.0

Features

Support for Elasticsearch v8.13.0

You can find all the API changes here.

Fixes

Ensure new connections inherit client’s set defaults #2159

When instantiating a client, any connection-related defaults (e.g. requestTimeout) set on that client instance would not be inherited by nodes if they were entered as strings rather than a ConnectionOptions object.

8.12.3

Fixes

Bump @elastic/transport to ~8.4.1

Switching from ^8.4.1 to ~8.4.1 ensures 8.12 client users are not required to update to Node.js v18+, which is a new requirement set by @elastic/transport v8.5.0. See elastic/elastic-transport-js#91 for details.

8.12.2

Fixes

Upgrade transport to 8.4.1 #2137

Upgrades @elastic/transport to 8.4.1 to resolve a bug where arrays in error diagnostics were unintentionally transformed into objects.

8.12.1

Fixes

Fix hang in bulk helper semaphore #2027

The failing state could be reached when a server’s response times are slower than flushInterval.

8.12.0

Features

Support for Elasticsearch v8.12.0

You can find all the API changes here.

8.11.1

Fixes

Bump @elastic/transport to ~8.4.0

Switching from ^8.4.0 to ~8.4.0 ensures 8.11 client users are not required to update to Node.js v18+, which is a new requirement set by @elastic/transport v8.5.0. See elastic/elastic-transport-js#91 for details.

8.11.0

Features

Support for Elasticsearch v8.11.0

You can find all the API changes here.

Enhanced support for redacting potentially sensitive data #2095

@elastic/transport version 8.4.0 introduces enhanced measures for ensuring that request metadata attached to some Error objects is redacted. This functionality is primarily to address custom logging solutions that don’t use common serialization methods like JSON.stringify, console.log, or util.inspect, which were already accounted for.

See [redaction] for more information.

8.10.1

Fixes

Bump @elastic/transport to ~8.3.4

Switching from ^8.3.4 to ~8.3.4 ensures 8.10 client users are not required to update to Node.js v18+, which is a new requirement set by @elastic/transport v8.5.0. See elastic/elastic-transport-js#91 for details.

8.10.0

Features

Support for Elasticsearch v8.10.0

You can find all the API changes here.

8.9.2

Fixes

Bump @elastic/transport to ~8.3.4

Switching from ^8.3.4 to ~8.3.4 ensures 8.9 client users are not required to update to Node.js v18+, which is a new requirement set by @elastic/transport v8.5.0. See elastic/elastic-transport-js#91 for details.

8.9.1

Fixes

Upgrade Transport #1968

Upgrades @elastic/transport to the latest patch release to fix a bug that could cause the process to exit when handling malformed HEAD requests.

8.9.0

Features

Support for Elasticsearch v8.9.0

You can find all the API changes here.

Allow document to be overwritten in onDocument iteratee of bulk helper #1732

In the {jsclient}/client-helpers.html#bulk-helper[bulk helper], documents could not be modified before being sent to Elasticsearch. It is now possible to {jsclient}/client-helpers.html#_modifying_a_document_before_operation[modify a document] before sending it.

Fixes

Updated user-agent header #1954

The user-agent header the client used to connect to Elasticsearch was using a non-standard format that has been improved.

8.8.2

Fixes

Bump @elastic/transport to ~8.3.2

Switching from ^8.3.2 to ~8.3.2 ensures 8.8 client users are not required to update to Node.js v18+, which is a new requirement set by @elastic/transport v8.5.0. See elastic/elastic-transport-js#91 for details.

8.8.1

Features

Support for Elasticsearch v8.8.1

You can find all the API changes here.

Fixes

Fix index drift bug in bulk helper #1759

Fixes a bug in the bulk helper that would cause onDrop to send back the wrong JSON document or error on a nonexistent document when an error occurred on a bulk HTTP request that contained a delete action.

Fix a memory leak caused by an outdated version of Undici #1902

Undici 5.5.1, used by elastic-transport-js, could create a memory leak when a high volume of requests created too many HTTP abort listeners. Upgrading Undici to 5.22.1 removed the memory leak.

8.8.0

Features

Support for Elasticsearch v8.8.0

You can find all the API changes here.

Fixes

Fix type declarations for legacy types with a body key #1784

Prior releases contained a bug where type declarations for legacy types that include a body key were not actually importing the type that includes the body key.

8.7.3

Fixes

Bump @elastic/transport to ~8.3.1

Switching from ^8.3.1 to ~8.3.1 ensures 8.7 client users are not required to update to Node.js v18+, which is a new requirement set by @elastic/transport v8.5.0. See elastic/elastic-transport-js#91 for details.

8.7.0

Support for Elasticsearch v8.7.0

You can find all the API changes here.

8.6.1

Fixes

Bump @elastic/transport to ~8.3.1

Switching from ^8.3.1 to ~8.3.1 ensures 8.6 client users are not required to update to Node.js v18+, which is a new requirement set by @elastic/transport v8.5.0. See elastic/elastic-transport-js#91 for details.

8.6.0

Bump @elastic/transport to 8.3.1+ #1802

The @elastic/transport dependency has been bumped to ~8.3.1 to ensure fixes to the maxResponseSize option are available in the client.

Support for Elasticsearch v8.6.0

You can find all the API changes here.

8.5.0

Support for Elasticsearch v8.5.0

You can find all the API changes here.

8.4.0

Support for Elasticsearch v8.4.0

You can find all the API changes here.

8.2.1

Fixes

Support for Elasticsearch v8.2.1

You can find all the API changes here.

Fix ndjson APIs #1688

The previous release contained a bug that broken ndjson APIs. We have released v8.2.0-patch.1 to address this. This fix is the same as the one we have released and we strongly recommend upgrading to this version.

Fix node shutdown apis #1697

The shutdown APIs wheren’t complete, this fix completes them.

Types: move query keys to body #1693

The types definitions where wrongly representing the types of fields present in both query and body.

8.2.0

Breaking changes

Drop Node.js v12 #1670

According to our Node.js support matrix.

Features

Support for Elasticsearch v8.2

You can find all the API changes here.

More lenient parameter checks #1662

When creating a new client, an undefined caFingerprint no longer trigger an error for a http connection.

Update TypeScript docs and export estypes #1675

You can import the full TypeScript requests & responses definitions as it follows:

import { estypes } from '@elastic/elasticsearch'

If you need the legacy definitions with the body, you can do the following:

import { estypesWithBody } from '@elastic/elasticsearch'

Fixes

Updated hpagent to the latest version transport/#49

You can fing the related changes here.

8.1.0

Features

Support for Elasticsearch v8.1

You can find all the API changes here.

Export SniffingTransport #1653

Now the client exports the SniffingTransport class.

Fixes

Fix onFlushTimeout timer not being cleared when upstream errors #1616

Fixes a memory leak caused by an error in the upstream dataset of the bulk helper.

Cleanup abort listener transport/#42

The legacy http client was not cleaning up the abort listener, which could cause a memory leak.

Improve undici performances transport/#41

Improve the stream body collection and keep alive timeout.

8.0.0

Features

Support for Elasticsearch v8.0

You can find all the API changes here.

Drop old typescript definitions

Breaking: Yes | Migration effort: Medium

The current TypeScript definitions will be removed from the client, and the new definitions, which contain request and response definitions as well will be shipped by default.

Drop callback-style API

Breaking: Yes | Migration effort: Large

Maintaining both API styles is not a problem per se, but it makes error handling more convoluted due to async stack traces. Moving to a full-promise API will solve this issue.

// callback-style api
client.search({ params }, { options }, (err, result) => {
 console.log(err || result)
})

// promise-style api
client.search({ params }, { options })
  .then(console.log)
  .catch(console.log)

// async-style (sugar syntax on top of promises)
const response = await client.search({ params }, { options })
console.log(response)

If you are already using the promise-style API, this won’t be a breaking change for you.

Remove the current abort API and use the new AbortController standard

Breaking: Yes | Migration effort: Small

The old abort API makes sense for callbacks but it’s annoying to use with promises

// callback-style api
const request = client.search({ params }, { options }, (err, result) => {
 console.log(err) // RequestAbortedError
})

request.abort()

// promise-style api
const promise = client.search({ params }, { options })

promise
  .then(console.log)
  .catch(console.log) // RequestAbortedError

promise.abort()

Node v12 has added the standard AbortController API which is designed to work well with both callbacks and promises.

const ac = new AbortController()
client.search({ params }, { signal: ac.signal })
  .then(console.log)
  .catch(console.log) // RequestAbortedError

ac.abort()
Remove the body key from the request

Breaking: Yes | Migration effort: Small

Thanks to the new types we are developing now we know exactly where a parameter should go. The client API leaks HTTP-related notions in many places, and removing them would definitely improve the DX.

This could be a rather big breaking change, so a double solution could be used during the 8.x lifecycle. (accepting body keys without them being wrapped in the body as well as the current solution).

To convert code from 7.x, you need to remove the body parameter in all the endpoints request. For instance, this is an example for the search endpoint:

// from
const response = await client.search({
  index: 'test',
  body: {
    query: {
      match_all: {}
    }
  }
})

// to
const response = await client.search({
  index: 'test',
  query: {
    match_all: {}
  }
})
Migrate to new separate transport

Breaking: Yes | Migration effort: Small to none

The separated transport has been rewritten in TypeScript and has already dropped the callback style API. Given that now is separated, most of the Elasticsearch specific concepts have been removed, and the client will likely need to extend parts of it for reintroducing them. If you weren’t extending the internals of the client, this won’t be a breaking change for you.

Breaking: Yes | Migration effort: Small

The client API leaks HTTP-related notions in many places, and removing them would definitely improve the DX. The client will expose a new request-specific option to still get the full response details.

The new behaviour returns the body value directly as response. If you want to have the 7.x response format, you need to add meta : true in the request. This will return all the HTTP meta information, including the body.

For instance, this is an example for the search endpoint:

// from
const response = await client.search({
  index: 'test',
  body: {
    query: {
      match_all: {}
    }
  }
})
console.log(response) // { body: SearchResponse, statusCode: number, headers: object, warnings: array }

// to
const response = await client.search({
  index: 'test',
  query: {
    match_all: {}
  }
})
console.log(response) // SearchResponse

// with a bit of TypeScript and JavaScript magic...
const response = await client.search({
  index: 'test',
  query: {
    match_all: {}
  }
}, {
  meta: true
})
console.log(response) // { body: SearchResponse, statusCode: number, headers: object, warnings: array }
Use a weighted connection pool

Breaking: Yes | Migration effort: Small to none

Move from the current cluster connection pool to a weight-based implementation. This new implementation offers better performances and runs less code in the background, the old connection pool can still be used. If you weren’t extending the internals of the client, this won’t be a breaking change for you.

Migrate to the "undici" http client

Breaking: Yes | Migration effort: Small to none

By default, the HTTP client will no longer be the default Node.js HTTP client, but undici instead. Undici is a brand new HTTP client written from scratch, it offers vastly improved performances and has better support for promises. Furthermore, it offers comprehensive and predictable error handling. The old HTTP client can still be used. If you weren’t extending the internals of the client, this won’t be a breaking change for you.

Drop support for old camelCased keys

Breaking: Yes | Migration effort: Medium

Currently, every path or query parameter could be expressed in both snake_case and camelCase. Internally the client will convert everything to snake_case. This was done in an effort to reduce the friction of migrating from the legacy to the new client, but now it no longer makes sense. If you are already using snake_case keys, this won’t be a breaking change for you.

Rename ssl option to tls

Breaking: Yes | Migration effort: Small

People usually refers to this as tls, furthermore, internally we use the tls API and Node.js refers to it as tls everywhere.

// before
const client = new Client({
  node: 'https://localhost:9200',
  ssl: {
    rejectUnauthorized: false
  }
})

// after
const client = new Client({
  node: 'https://localhost:9200',
  tls: {
    rejectUnauthorized: false
  }
})
Remove prototype poisoning protection

Breaking: Yes | Migration effort: Small

Prototype poisoning protection is very useful, but it can cause performances issues with big payloads. In v8 it will be removed, and the documentation will show how to add it back with a custom serializer.

Remove client extensions API

Breaking: Yes | Migration effort: Large

Nowadays the client support the entire Elasticsearch API, and the transport.request method can be used if necessary. The client extensions API have no reason to exist.

client.extend('utility.index', ({ makeRequest }) => {
  return function _index (params, options) {
    // your code
  }
})

client.utility.index(...)

If you weren’t using client extensions, this won’t be a breaking change for you.

Move to TypeScript

Breaking: No | Migration effort: None

The new separated transport is already written in TypeScript, and it makes sense that the client v8 will be fully written in TypeScript as well.

Move from emitter-like interface to a diagnostic method

Breaking: Yes | Migration effort: Small

Currently, the client offers a subset of methods of the EventEmitter class, v8 will ship with a diagnostic property which will be a proper event emitter.

// from
client.on('request', console.log)

// to
client.diagnostic.on('request', console.log)
Remove username & password properties from Cloud configuration

Breaking: Yes | Migration effort: Small

The Cloud configuration does not support ApiKey and Bearer auth, while the auth options does. There is no need to keep the legacy basic auth support in the cloud configuration.

// before
const client = new Client({
  cloud: {
    id: '<cloud-id>',
    username: 'elastic',
    password: 'changeme'
  }
})

// after
const client = new Client({
  cloud: {
    id: '<cloud-id>'
  },
  auth: {
    username: 'elastic',
    password: 'changeme'
  }
})

If you are already passing the basic auth options in the auth configuration, this won’t be a breaking change for you.

Calling client.close will reject new requests

Once you call client.close every new request after that will be rejected with a NoLivingConnectionsError. In-flight requests will be executed normally unless an in-flight request requires a retry, in which case it will be rejected.

Parameters rename
  • ilm.delete_lifecycle: policy parameter has been renamed to name

  • ilm.get_lifecycle: policy parameter has been renamed to name

  • ilm.put_lifecycle: policy parameter has been renamed to name

  • snapshot.cleanup_repository: repository parameter has been renamed to name

  • snapshot.create_repository: repository parameter has been renamed to name

  • snapshot.delete_repository: repository parameter has been renamed to name

  • snapshot.get_repository: repository parameter has been renamed to name

  • snapshot.verify_repository: repository parameter has been renamed to name

Removal of snake_cased methods

The v7 client provided snake_cased methods, such as client.delete_by_query. This is no longer supported, now only camelCased method are present. So client.delete_by_query can be accessed with client.deleteByQuery