Skip to content

Tags: tarantool/go-tarantool

Tags

v2.3.2

Toggle v2.3.2's commit message
Release v2.3.2

This release improves the logic of `Connect` and `pool.Connect` in case
of a hung I/O connection.

Changed

- Previously, `pool.Connect` attempted to establish a connection one
  after another instance. It could cause the entire chain to hang if one
  connection hanged. Now connections are established in parallel. After
  the first successful connection, the remaining connections wait with
  a timeout of `pool.Opts.CheckTimeout` (#444).

Fixed

- Connect() may not cancel Dial() call on context expiration if network
  connection hangs (#443).
- pool.Connect() failed to connect to any instance if a first instance
  connection hangs (#444).

v2.3.1

Toggle v2.3.1's commit message
Release v2.3.1

The patch releases fixes expected Connect() behavior and reduces
allocations.

Added

- A usage of sync.Pool of msgpack.Decoder saves 2 object allocations per
  a response decoding (#440).

Changed

- Connect() now retry the connection if a failure occurs and
  opts.Reconnect > 0. The number of attempts is equal to
  opts.MaxReconnects or unlimited if opts.MaxReconnects == 0. Connect()
  blocks until a connection is established, the context is cancelled, or
  the number of attempts is exhausted (#436).

v2.3.0

Toggle v2.3.0's commit message
Release v2.3.0

The release extends box.info responses and ConnectionPool.GetInfo
return data.

Be careful, we have changed the test_helpers package a little since
we do not provide backward compatibility for it.

Added

- Extend box with replication information (#427).
- The Instance info has been added to ConnectionInfo for
  ConnectionPool.GetInfo response (#429).
- Added helpers to run Tarantool config storage (#431).

Changed

- Changed helpers API `StartTarantool` and `StopTarantool`, now it uses
  pointer on `TarantoolInstance`:
  * `StartTarantool()` returns `*TarantoolInstance`;
  * `StopTarantool()` and `StopTarantoolWithCleanup()` accepts
    `*TarantoolInstance` as arguments.
- Field `Cmd` in `TarantoolInstance` struct declared as deprecated.
  Suggested `Wait()`, `Stop()` and `Signal()` methods as safer to use
  instead of direct `Cmd.Process` access (#431).

Fixed

- Test helpers does not detect a fail to start a Tarantool instance if
  another Tarantool instance already listens a port (#431).

v2.2.1

Toggle v2.2.1's commit message
Release v2.2.1

The release fixes a schema lost after a reconnect.

Fixed

- `unable to use an index name because schema is not loaded` error
  after a reconnect (#424).

v2.2.0

Toggle v2.2.0's commit message
Release v2.2.0

The release introduces the IPROTO_INSERT_ARROW request
(arrow.InsertRequest) and a request to archive `box.info` values
(box.InfoRequest). Additionally, it includes some improvements to
logging.

Added

- Error logging to `ConnectionPool.Add()` in case, when unable to
  establish connection and ctx is not canceled (#389).
- Error logging for error case of `ConnectionPool.tryConnect()` calls in
  `ConnectionPool.controller()` and `ConnectionPool.reconnect()` (#389).
- Methods that are implemented but not included in the pooler
  interface (#395).
- Implemented stringer methods for pool.Role (#405).
- Support the IPROTO_INSERT_ARROW request (#399).
- A simple implementation of using the box interface (#410).

Changed

- More informative request canceling: log the probable reason for
  unexpected request ID and add request ID info to context done error
  message (#407).

v2.1.0

Toggle v2.1.0's commit message
Release v2.1.0

Overview

    The small release improves the ConnectionPool. The ConnectionPool
    is no longer required execute access for `box.info` from a user
    for Tarantool >= 3.0.0.

Breaking changes

    There are no breaking changes in the release.

New features

    `execute` access for `box.info` is no longer required for
    ConnectionPool for a Tarantool version >= 3.0.0 (#380).

Bugfixes

    `ConnectionPool.Remove()` does not notify a `ConnectionHandler`
    after an instance is already removed from the pool (#385).

v2.0.0

Toggle v2.0.0's commit message
Release 2.0.0

Overview

    There are a lot of changes in the new major version. The main ones:

    * The `go_tarantool_call_17` build tag is no longer needed, since
      by default the `CallRequest` is `Call17Request`.
    * The `go_tarantool_msgpack_v5` build tag is no longer needed,
      since only the `msgpack/v5` library is used.
    * The `go_tarantool_ssl_disable` build tag is no longer needed,
      since the connector is no longer depends on `OpenSSL` by default.
      You could use the external library go-tlsdialer[1] to create a
      connection with the `ssl` transport.
    * Required Go version is `1.20` now.
    * The `Connect` function became more flexible. It now allows
      to create a connection with cancellation and a custom `Dialer`
      implementation.
    * It is required to use `Request` implementation types with the
      `Connection.Do` method instead of `Connection.<Request>` methods.
    * The `connection_pool` package renamed to `pool`.

    See the migration guide[2] for more details.

Breaking changes

    connection_pool renamed to pool (#239).

    Use msgpack/v5 instead of msgpack.v2 (#236).

    Call/NewCallRequest = Call17/NewCall17Request (#235).

    Change encoding of the queue.Identify() UUID argument from binary
    blob to plain string. Needed for upgrade to Tarantool 3.0, where a
    binary blob is decoded to a varbinary object (#313).

    Use objects of the Decimal type instead of pointers (#238).

    Use objects of the Datetime type instead of pointers (#238).

    `connection.Connect` no longer return non-working connection
    objects (#136). This function now does not attempt to reconnect
    and tries to establish a connection only once. Function might be
    canceled via context. Context accepted as first argument.
    `pool.Connect` and `pool.Add` now accept context as the first
    argument, which user may cancel in process. If `pool.Connect` is
    canceled in progress, an error will be returned. All created
    connections will be closed.

    `iproto.Feature` type now used instead of `ProtocolFeature` (#337).

    `iproto.IPROTO_FEATURE_` constants now used instead of local
    `Feature` constants for `protocol` (#337).

    Change `crud` operations `Timeout` option type to `crud.OptFloat64`
    instead of `crud.OptUint` (#342).

    Change all `Upsert` and `Update` requests to accept
    `*tarantool.Operations`  as `ops` parameters instead of
    `interface{}` (#348).

    Change `OverrideSchema(*Schema)` to `SetSchema(Schema)` (#7).

    Change values, stored by pointers in the `Schema`, `Space`,
    `Index` structs,  to be stored by their values (#7).

    Make `Dialer` mandatory for creation a single connection (#321).

    Remove `Connection.RemoteAddr()`, `Connection.LocalAddr()`.
    Add `Addr()` function instead (#321).

    Remove `Connection.ClientProtocolInfo`,
    `Connection.ServerProtocolInfo`. Add `ProtocolInfo()` function
    instead, which returns the server protocol info (#321).

    `NewWatcher` checks the actual features of the server, rather
    than relying on the features provided by the user during connection
    creation (#321).

    `pool.NewWatcher` does not create watchers for connections that do
    not support it (#321).

    Rename `pool.GetPoolInfo` to `pool.GetInfo`. Change return type to
    `map[string]ConnectionInfo` (#321).

    `Response` is now an interface (#237).

    All responses are now implementations of the `Response`
    interface (#237). `SelectResponse`, `ExecuteResponse`,
    `PrepareResponse`, `PushResponse` are part of a public API.
    `Pos()`, `MetaData()`, `SQLInfo()` methods created for them to
    get specific info. Special types of responses are used with
    special requests.

    `IsPush()` method is added to the response iterator (#237). It
    returns the information if the current response is a
    `PushResponse`. `PushCode` constant is removed.

    Method `Get` for `Future` now returns response data (#237). To get
    the actual response new `GetResponse` method has been added.
    Methods `AppendPush` and `SetResponse` accept response `Header`
    and data as their arguments.

    `Future` constructors now accept `Request` as their argument
    (#237).

    Operations `Ping`, `Select`, `Insert`, `Replace`, `Delete`,
    `Update`, `Upsert`, `Call`, `Call16`, `Call17`, `Eval`, `Execute`
    of a `Connector` and `Pooler` return response data instead of an
    actual responses (#237).

    `pool.Connect`, `pool.ConnetcWithOpts` and `pool.Add` use a
    new type `pool.Instance` to determinate connection options (#356).

    `pool.Connect`, `pool.ConnectWithOpts` and `pool.Add` add
    connections to the pool even it is unable to connect to it (#372).

    Required Go version from `1.13` to `1.20` (#378).

    multi subpackage is removed (#240).

    msgpack.v2 support is removed (#236).

    pool/RoundRobinStrategy is removed (#158).

    DeadlineIO is removed (#158).

    UUID_extId is removed (#158).

    IPROTO constants are removed (#158).

    Code() method from the Request interface is removed (#158).

    `Schema` field from the `Connection` struct is removed (#7).

    `OkCode` and `PushCode` constants is removed (#237).

    SSL support is removed (#301).

    `Future.Err()` method is removed (#382).

New features

    Type() method to the Request interface (#158).

    Enumeration types for RLimitAction/iterators (#158).

    IsNullable flag for Field (#302).

    Meaningful description for read/write socket errors (#129).

    Support `operation_data` in `crud.Error` (#330).

    Support `fetch_latest_metadata` option for crud requests with
    metadata (#335).

    Support `noreturn` option for data change crud requests (#335).

    Support `crud.schema` request (#336, #351).

    Support `IPROTO_WATCH_ONCE` request type for Tarantool
    version >= 3.0.0-alpha1 (#337).

    Support `yield_every` option for crud select requests (#350).

    Support `IPROTO_FEATURE_SPACE_AND_INDEX_NAMES` for Tarantool
    version >= 3.0.0-alpha1 (#338). It allows to use space and index
    names in requests instead of their IDs.

    `GetSchema` function to get the actual schema (#7).

    Support connection via an existing socket fd (#321).

    `Header` struct for the response header (#237). It can be accessed
    via `Header()` method of the `Response` interface.

   `Response` method added to the `Request` interface (#237).

   New `LogAppendPushFailed` connection log constant (#237).
   It is logged when connection fails to append a push response.

   `ErrorNo` constant that indicates that no error has occurred while
   getting the response (#237).

   `AuthDialer` type for creating a dialer with authentication (#301).

   `ProtocolDialer` type for creating a dialer with `ProtocolInfo`
   receiving and  check (#301).

   `GreetingDialer` type for creating a dialer, that fills `Greeting`
   of a connection (#301).

   New method `Pool.DoInstance` to execute a request on a target
   instance in a pool (#376).

Bugfixes

    Race condition at roundRobinStrategy.GetNextConnection() (#309).

    Incorrect decoding of an MP_DECIMAL when the `scale` value is
    negative (#314).

    Incorrect options (`after`, `batch_size` and `force_map_call`)
    setup for crud.SelectRequest (#320).

    Incorrect options (`vshard_router`, `fields`, `bucket_id`, `mode`,
    `prefer_replica`, `balance`) setup for crud.GetRequest (#335).

    Splice update operation accepts 3 arguments instead of 5 (#348).

    Unable to use a slice of custom types as a slice of tuples or
    objects for `crud.*ManyRequest/crud.*ObjectManyRequest` (#365).

Testing

    More linters on CI (#310).

    Added an ability to mock connections for tests (#237). Added new
    types `MockDoer`, `MockRequest` to `test_helpers`.

    Fixed flaky decimal/TestSelect (#300).

    Fixed tests with crud 1.4.0 (#336).

    Fixed tests with case sensitive SQL (#341).

    Renamed `StrangerResponse` to `MockResponse` (#237).

Other

    All Connection.<Request>, Connection.<Request>Typed and
    Connection.<Request>Async methods are now deprecated. Instead you
    should use requests objects + Connection.Do() (#241).

    All ConnectionPool.<Request>, ConnectionPool.<Request>Typed and
    ConnectionPool.<Request>Async methods are now deprecated. Instead
    you should use requests objects + ConnectionPool.Do() (#241).

    box.session.push() usage is deprecated: Future.AppendPush() and
    Future.GetIterator() methods, ResponseIterator and
    TimeoutResponseIterator types (#324).

1. https://github.com/tarantool/go-tlsdialer
2. https://github.com/tarantool/go-tarantool/blob/master/MIGRATION.md

v1.12.2

Toggle v1.12.2's commit message
Release 1.12.2

Overview

    The patch release imports fixes from the master branch.

Breaking changes

    There are no breaking changes in the release.

Bugfixes

    Tests with crud 1.4.0 (#336).

    Tests with case sensitive SQL (#341).

    Potentially packet length overflow when reading (#361).

v1.12.1

Toggle v1.12.1's commit message
Release 1.12.1

Overview

    The patch release imports fixes from the master branch.

Breaking changes

    There are no breaking changes in the release.

Bugfixes

    Flaky decimal/TestSelect (#300).

    Race condition at roundRobinStrategy.GetNextConnection() (#309).

    Incorrect decoding of an MP_DECIMAL when the `scale` value is
    negative (#314).

    Incorrect options (`after`, `batch_size` and `force_map_call`)
    setup for crud.SelectRequest (#320).

Other

    Change encoding of the queue.Identify() UUID argument from binary
    blob to plain string. Needed for upgrade to Tarantool 3.0, where a
    binary blob is decoded to a varbinary object (#313).

v1.12.0

Toggle v1.12.0's commit message
Release 1.12.0

Overview

    The release introduces the ability to gracefully close Connection
    and ConnectionPool and also provides methods for adding or
    removing an endpoint from a ConnectionPool.

Breaking changes

    There are no breaking changes in the release.

New features

    Connection.CloseGraceful() unlike Connection.Close() waits for all
    requests to complete (#257).

    ConnectionPool.CloseGraceful() unlike ConnectionPool.Close() waits
    for all requests to complete (#257).

    ConnectionPool.Add()/ConnectionPool.Remove() to add/remove endpoints
    from a pool (#290).

Other

    Updates crud tests with Tarantool 3.0 (#293).

    Updates SQL tests with Tarantool 3.0 (#295).