Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Support IPROTO_FEATURE_SPACE_AND_INDEX_NAMES #338

Closed
oleg-jukovec opened this issue Oct 19, 2023 · 8 comments · Fixed by #345
Closed

Support IPROTO_FEATURE_SPACE_AND_INDEX_NAMES #338

oleg-jukovec opened this issue Oct 19, 2023 · 8 comments · Fixed by #345
Assignees
Labels
3sp feature A new functionality teamE

Comments

@oleg-jukovec
Copy link
Collaborator

oleg-jukovec commented Oct 19, 2023

We could use space/index names directly without a resolving to space/index id by schema for Tarantool 3.0.

	 // Using space [index] names instead of identifiers support:
	 // IPROTO_SPACE_NAME and IPROTO_INDEX_NAME fields in IPROTO_SELECT,
	 // IPROTO_UPDATE and IPROTO_DELETE request body;
	 // IPROTO_SPACE_NAME field in IPROTO_INSERT, IPROTO_REPLACE,
	 // IPROTO_UPDATE and IPROTO_UPSERT request body.
	IPROTO_FEATURE_SPACE_AND_INDEX_NAMES =  5

See:

  1. https://github.com/tarantool/tarantool/blame/05751e6c6869579446b34ae67e0605a68fc56b89/src/box/iproto_features.h#L52-L59
  2. https://www.notion.so/Schemafull-IPROTO-cc315ad6bdd641dea66ad854992d8cbf#f4d4b3fa2b3646f1949319866428b6c0
  3. Accept names in IPROTO requests tarantool#8146
  4. box: support space and index names in IPROTO requests tarantool#8573
@DerekBum
Copy link

DerekBum commented Oct 31, 2023

So, here is the steps I think I need to do to resolve this issue:

  1. Add IPROTO_FEATURE_SPACE_AND_INDEX_NAMES feature to the list of features in the protocol.go (and update protocol-related tests).
  2. Add new func to the SchemaResolver type that will return true if the IPROTO_FEATURE_SPACE_AND_INDEX_NAMES is supported in the current Tarantool version. Or we can add a new bool field to the Schema structure (and fill it in the loadSchema function).
  3. After that create separate functions-fillers (as example, instead of just fillInsert create fillInsertBySpaceID and fillInsertBySpaceName), that will use different iproto keys (IPROTO_SPACE_ID, IPROTO_SPACE_NAME or IPROTO_INDEX_NAME for select, update and delete requests). But in this case, for example, for deleteRequest we will need 4 functions (because we can pass space_id or space_name as well as index_id or index_name).
    Or we can leave just fillInsert, but let it accept spaceInfo interface{} as a second argument and correct iproto key as fourth. As example, this function

    go-tarantool/request.go

    Lines 53 to 67 in a664c6b

    func fillInsert(enc *msgpack.Encoder, spaceNo uint32, tuple interface{}) error {
    if err := enc.EncodeMapLen(2); err != nil {
    return err
    }
    if err := enc.EncodeUint(uint64(iproto.IPROTO_SPACE_ID)); err != nil {
    return err
    }
    if err := enc.EncodeUint(uint64(spaceNo)); err != nil {
    return err
    }
    if err := enc.EncodeUint(uint64(iproto.IPROTO_TUPLE)); err != nil {
    return err
    }
    return enc.Encode(tuple)
    }

    will look like this:
func fillInsert(enc *msgpack.Encoder, spaceInfo interface{}, tuple interface{}, iprotoKey iproto.Key) error {
	if err := enc.EncodeMapLen(2); err != nil {
		return err
	}
	if err := enc.EncodeUint(uint64(iprotoKey)); err != nil {
		return err
	}
	if err := enc.Encode(spaceInfo); err != nil {
		return err
	}
	if err := enc.EncodeUint(uint64(iproto.IPROTO_TUPLE)); err != nil {
		return err
	}
	return enc.Encode(tuple)
}

Or, if we want to use enc.EncodeUint or enc.EncodeString instead of enc.Encode, we could create an if statement, that will check iprotoKey:

if (iprotoKey == iproto.IPROTO_SPACE_NAME) { use EncodeString }
else { use EncodeUint }
  1. After that, in the Body call, we check, if req.space (or req.index) has type string, we will call corresponding functions, or pass corresponding keys to the fill... function (without call to the ResolveSpaceIndex). But right now ResolveSpaceIndex resolves both space and index. So make things easier we could split this function into two (resolver for space and index). It will help with the cases, when user provides space_id and index_name (or space_name and index_id), so we need to resolve only one (but not two) argument.
    We also need to check if Tarantool supports IPROTO_FEATURE_SPACE_AND_INDEX_NAMES (given the info from the step 2). If it is not supported, and we have space_name or index_name we will try and resolve them as we do right now:

    go-tarantool/schema.go

    Lines 377 to 468 in a664c6b

    func (schema *Schema) ResolveSpaceIndex(s interface{}, i interface{}) (uint32, uint32, error) {
    var (
    spaceNo, indexNo uint32
    space *Space
    index *Index
    ok bool
    )
    switch s := s.(type) {
    case string:
    if schema == nil {
    return spaceNo, indexNo, fmt.Errorf("Schema is not loaded")
    }
    if space, ok = schema.Spaces[s]; !ok {
    return spaceNo, indexNo, fmt.Errorf("there is no space with name %s", s)
    }
    spaceNo = space.Id
    case uint:
    spaceNo = uint32(s)
    case uint64:
    spaceNo = uint32(s)
    case uint32:
    spaceNo = s
    case uint16:
    spaceNo = uint32(s)
    case uint8:
    spaceNo = uint32(s)
    case int:
    spaceNo = uint32(s)
    case int64:
    spaceNo = uint32(s)
    case int32:
    spaceNo = uint32(s)
    case int16:
    spaceNo = uint32(s)
    case int8:
    spaceNo = uint32(s)
    case Space:
    spaceNo = s.Id
    case *Space:
    spaceNo = s.Id
    default:
    panic("unexpected type of space param")
    }
    if i != nil {
    switch i := i.(type) {
    case string:
    if schema == nil {
    return spaceNo, indexNo, fmt.Errorf("schema is not loaded")
    }
    if space == nil {
    if space, ok = schema.SpacesById[spaceNo]; !ok {
    return spaceNo, indexNo, fmt.Errorf("there is no space with id %d", spaceNo)
    }
    }
    if index, ok = space.Indexes[i]; !ok {
    err := fmt.Errorf("space %s has not index with name %s", space.Name, i)
    return spaceNo, indexNo, err
    }
    indexNo = index.Id
    case uint:
    indexNo = uint32(i)
    case uint64:
    indexNo = uint32(i)
    case uint32:
    indexNo = i
    case uint16:
    indexNo = uint32(i)
    case uint8:
    indexNo = uint32(i)
    case int:
    indexNo = uint32(i)
    case int64:
    indexNo = uint32(i)
    case int32:
    indexNo = uint32(i)
    case int16:
    indexNo = uint32(i)
    case int8:
    indexNo = uint32(i)
    case Index:
    indexNo = i.Id
    case *Index:
    indexNo = i.Id
    default:
    panic("unexpected type of index param")
    }
    }
    return spaceNo, indexNo, nil
    }
  2. Update current tests, if needed.
  3. Write new tests, update docs.

@oleg-jukovec
Copy link
Collaborator Author

oleg-jukovec commented Oct 31, 2023

Thank you.

Add new func to the SchemaResolver type that will return true if the IPROTO_FEATURE_SPACE_AND_INDEX_NAMES is supported in the current Tarantool version.
But right now ResolveSpaceIndex resolves both space and index. So make things easier we could split this function into two (resolver for space and index).

Nice, let's see the final interface.

Or we can leave just fillInsert, but let it accept spaceInfo interface{} as a second argument and correct iproto key as fourth. As example, this function

I suggest first to try to run a benchmark with the change to see if there will be additional allocations because of this.

@DerekBum
Copy link

DerekBum commented Nov 1, 2023

I checked the change for Insert function using benchmem and memprofile, and there was no difference in the number of allocations. So I believe there is no additional allocations because of this change.

@oleg-jukovec
Copy link
Collaborator Author

I checked the change for Insert function using benchmem and memprofile, and there was no difference in the number of allocations. So I believe there is no additional allocations because of this change.

Does compiler with -mm (or something like this) report about escapes to heap?

@oleg-jukovec
Copy link
Collaborator Author

oleg-jukovec commented Nov 1, 2023

If not, then make sure that nothing change in that benchmark with the change for select request:
#283

And let's do that way. It looks easier from the code side.

@DerekBum
Copy link

DerekBum commented Nov 1, 2023

Does compiler with -mm (or something like this) report about escapes to heap?

After running go build -gcflags='-m=3' . |& grep escape I got this output: spaceNo does not escape (spaceNo was passed to the fillInsert function as an interface{} argument). I will also check a benchmark for select request soon.

@oleg-jukovec
Copy link
Collaborator Author

Does compiler with -mm (or something like this) report about escapes to heap?

After running go build -gcflags='-m=3' . |& grep escape I got this output: spaceNo does not escape (spaceNo was passed to the fillInsert function as an interface{} argument). I will also check a benchmark for select request soon.

Thank you. Ok, let's do in that way than.

@DerekBum
Copy link

DerekBum commented Nov 1, 2023

Benchmark for select request shows the same 15 allocations (after changes in fillSelect and fillSearch). With the spaceNo does not escape and indexNo does not escape messages from the compiler.

DerekBum added a commit that referenced this issue Nov 1, 2023
Support `IPROTO_FEATURE_SPACE_AND_INDEX_NAMES` for Tarantool
version >= 3.0.0-alpha. It allows to use space and index names instead
of their IDs.

`ResolveSpaceIndex` function for `SchemaResolver` interface split into two:
`ResolveSpace` and `ResolveIndex`. `NamesUseSupported` function added into the
interface to get information if usage of space and index names is supported.

Closes #338
DerekBum added a commit that referenced this issue Nov 1, 2023
Support `IPROTO_FEATURE_SPACE_AND_INDEX_NAMES` for Tarantool
version >= 3.0.0-alpha. It allows to use space and index names instead
of their IDs.

`ResolveSpaceIndex` function for `SchemaResolver` interface split into two:
`ResolveSpace` and `ResolveIndex`. `NamesUseSupported` function added into the
interface to get information if usage of space and index names is supported.

Closes #338
DerekBum added a commit that referenced this issue Nov 1, 2023
Support `IPROTO_FEATURE_SPACE_AND_INDEX_NAMES` for Tarantool
version >= 3.0.0-alpha. It allows to use space and index names instead
of their IDs.

`ResolveSpaceIndex` function for `SchemaResolver` interface split into two:
`ResolveSpace` and `ResolveIndex`. `NamesUseSupported` function added into the
interface to get information if usage of space and index names is supported.

Closes #338
DerekBum added a commit that referenced this issue Nov 1, 2023
Support `IPROTO_FEATURE_SPACE_AND_INDEX_NAMES` for Tarantool
version >= 3.0.0-alpha. It allows to use space and index names instead
of their IDs.

`ResolveSpaceIndex` function for `SchemaResolver` interface split into two:
`ResolveSpace` and `ResolveIndex`. `NamesUseSupported` function added into the
interface to get information if usage of space and index names is supported.

Closes #338
DerekBum added a commit that referenced this issue Nov 2, 2023
Support `IPROTO_FEATURE_SPACE_AND_INDEX_NAMES` for Tarantool
version >= 3.0.0-alpha. It allows to use space and index names instead
of their IDs.

`ResolveSpaceIndex` function for `SchemaResolver` interface split into two:
`ResolveSpace` and `ResolveIndex`. `NamesUseSupported` function added into the
interface to get information if usage of space and index names is supported.

Closes #338
DerekBum added a commit that referenced this issue Nov 2, 2023
Support `IPROTO_FEATURE_SPACE_AND_INDEX_NAMES` for Tarantool
version >= 3.0.0-alpha. It allows to use space and index names instead
of their IDs.

`ResolveSpaceIndex` function for `SchemaResolver` interface split into two:
`ResolveSpace` and `ResolveIndex`. `NamesUseSupported` function added into the
interface to get information if usage of space and index names is supported.

Closes #338
DerekBum added a commit that referenced this issue Nov 2, 2023
Support `IPROTO_FEATURE_SPACE_AND_INDEX_NAMES` for Tarantool
version >= 3.0.0-alpha. It allows to use space and index names instead
of their IDs.

`ResolveSpaceIndex` function for `SchemaResolver` interface split into two:
`ResolveSpace` and `ResolveIndex`. `NamesUseSupported` function added into the
interface to get information if usage of space and index names is supported.

Closes #338
DerekBum added a commit that referenced this issue Nov 2, 2023
Support `IPROTO_FEATURE_SPACE_AND_INDEX_NAMES` for Tarantool
version >= 3.0.0-alpha. It allows to use space and index names instead
of their IDs.

`ResolveSpaceIndex` function for `SchemaResolver` interface split into two:
`ResolveSpace` and `ResolveIndex`. `NamesUseSupported` function added into the
interface to get information if usage of space and index names is supported.

Closes #338
DerekBum added a commit that referenced this issue Nov 2, 2023
Support `IPROTO_FEATURE_SPACE_AND_INDEX_NAMES` for Tarantool
version >= 3.0.0-alpha. It allows to use space and index names instead
of their IDs.

`ResolveSpaceIndex` function for `SchemaResolver` interface split into two:
`ResolveSpace` and `ResolveIndex`. `NamesUseSupported` function added into the
interface to get information if usage of space and index names is supported.

Closes #338
DerekBum added a commit that referenced this issue Nov 2, 2023
Support `IPROTO_FEATURE_SPACE_AND_INDEX_NAMES` for Tarantool
version >= 3.0.0-alpha. It allows to use space and index names in requests
instead of their IDs.

`ResolveSpaceIndex` function for `SchemaResolver` interface split into two:
`ResolveSpace` and `ResolveIndex`. `NamesUseSupported` function added into the
interface to get information if usage of space and index names is supported.

Closes #338
DerekBum added a commit that referenced this issue Nov 7, 2023
Support `IPROTO_FEATURE_SPACE_AND_INDEX_NAMES` for Tarantool
version >= 3.0.0-alpha. It allows to use space and index names in requests
instead of their IDs.

`ResolveSpaceIndex` function for `SchemaResolver` interface split into two:
`ResolveSpace` and `ResolveIndex`. `NamesUseSupported` function added into the
interface to get information if usage of space and index names is supported.

Closes #338
DerekBum added a commit that referenced this issue Nov 7, 2023
Support `IPROTO_FEATURE_SPACE_AND_INDEX_NAMES` for Tarantool
version >= 3.0.0-alpha. It allows to use space and index names in requests
instead of their IDs.

`ResolveSpaceIndex` function for `SchemaResolver` interface split into two:
`ResolveSpace` and `ResolveIndex`. `NamesUseSupported` function added into the
interface to get information if usage of space and index names is supported.

Closes #338
DerekBum added a commit that referenced this issue Nov 7, 2023
Support `IPROTO_FEATURE_SPACE_AND_INDEX_NAMES` for Tarantool
version >= 3.0.0-alpha. It allows to use space and index names in requests
instead of their IDs.

`ResolveSpaceIndex` function for `SchemaResolver` interface split into two:
`ResolveSpace` and `ResolveIndex`. `NamesUseSupported` function added into the
interface to get information if usage of space and index names is supported.

Closes #338
DerekBum added a commit that referenced this issue Nov 9, 2023
Support `IPROTO_FEATURE_SPACE_AND_INDEX_NAMES` for Tarantool
version >= 3.0.0-alpha. It allows to use space and index names in requests
instead of their IDs.

`ResolveSpaceIndex` function for `SchemaResolver` interface split into two:
`ResolveSpace` and `ResolveIndex`. `NamesUseSupported` function added into the
interface to get information if usage of space and index names is supported.

`Schema` structure no longer implements `SchemaResolver` interface.

Closes #338
DerekBum added a commit that referenced this issue Nov 9, 2023
Support `IPROTO_FEATURE_SPACE_AND_INDEX_NAMES` for Tarantool
version >= 3.0.0-alpha. It allows to use space and index names in requests
instead of their IDs.

`ResolveSpaceIndex` function for `SchemaResolver` interface split into two:
`ResolveSpace` and `ResolveIndex`. `NamesUseSupported` function added into the
interface to get information if usage of space and index names is supported.

`Schema` structure no longer implements `SchemaResolver` interface.

Closes #338
DerekBum added a commit that referenced this issue Nov 9, 2023
Support `IPROTO_FEATURE_SPACE_AND_INDEX_NAMES` for Tarantool
version >= 3.0.0-alpha. It allows to use space and index names in requests
instead of their IDs.

`ResolveSpaceIndex` function for `SchemaResolver` interface split into two:
`ResolveSpace` and `ResolveIndex`. `NamesUseSupported` function added into the
interface to get information if usage of space and index names is supported.

`Schema` structure no longer implements `SchemaResolver` interface.

Part of #338
DerekBum added a commit that referenced this issue Nov 9, 2023
Replaced `t.Errorf` + `return` by `t.Fatalf`. This made
all tests in the file follow the same code style.

Part of #338
DerekBum added a commit that referenced this issue Nov 9, 2023
Update Tarantool-ee version 1.10.11 to 1.10.15 and
2.10.0 t0 2.10.8. This was done because of one
flacking test:
https://github.com/tarantool/go-tarantool/actions/runs/6805504621/job/18505152412

Closes #338
DerekBum added a commit that referenced this issue Nov 9, 2023
Update Tarantool-ee version 1.10.11 to 1.10.15 and
2.10.0 t0 2.10.8. This was done because of one
flacking test:
https://github.com/tarantool/go-tarantool/actions/runs/6805504621/job/18505152412

Closes #338
DerekBum added a commit that referenced this issue Nov 9, 2023
Update Tarantool-ee version 1.10.11 to 1.10.15 and
2.10.0 t0 2.10.8. This was done because of one
flacking test:
https://github.com/tarantool/go-tarantool/actions/runs/6805504621/job/18505152412

Closes #338
DerekBum added a commit that referenced this issue Nov 9, 2023
Support `IPROTO_FEATURE_SPACE_AND_INDEX_NAMES` for Tarantool
version >= 3.0.0-alpha. It allows to use space and index names in requests
instead of their IDs.

`ResolveSpaceIndex` function for `SchemaResolver` interface split into two:
`ResolveSpace` and `ResolveIndex`. `NamesUseSupported` function added into the
interface to get information if usage of space and index names is supported.

`Schema` structure no longer implements `SchemaResolver` interface.

Part of #338
DerekBum added a commit that referenced this issue Nov 9, 2023
Replaced `t.Errorf` + `return` by `t.Fatalf`. This made
all tests in the file follow the same code style.

Part of #338
DerekBum added a commit that referenced this issue Nov 9, 2023
Update Tarantool-ee version 1.10.11 to 1.10.15 and
2.10.0 t0 2.10.8. This was done because of one
flacking test:
https://github.com/tarantool/go-tarantool/actions/runs/6805504621/job/18505152412

Closes #338
DerekBum added a commit that referenced this issue Nov 9, 2023
Support `IPROTO_FEATURE_SPACE_AND_INDEX_NAMES` for Tarantool
version >= 3.0.0-alpha. It allows to use space and index names in requests
instead of their IDs.

`ResolveSpaceIndex` function for `SchemaResolver` interface split into two:
`ResolveSpace` and `ResolveIndex`. `NamesUseSupported` function added into the
interface to get information if usage of space and index names is supported.

`Schema` structure no longer implements `SchemaResolver` interface.

Part of #338
DerekBum added a commit that referenced this issue Nov 9, 2023
Replaced `t.Errorf` + `return` by `t.Fatalf`. This made
all tests in the file follow the same code style.

Part of #338
DerekBum added a commit that referenced this issue Nov 9, 2023
Update Tarantool-ee version 1.10.11 to 1.10.15 and
2.10.0 t0 2.10.8. This was done because of one
flacking test:
https://github.com/tarantool/go-tarantool/actions/runs/6805504621/job/18505152412

Closes #338
DerekBum added a commit that referenced this issue Nov 13, 2023
Support `IPROTO_FEATURE_SPACE_AND_INDEX_NAMES` for Tarantool
version >= 3.0.0-alpha1. It allows to use space and index names in requests
instead of their IDs.

`ResolveSpaceIndex` function for `SchemaResolver` interface split into two:
`ResolveSpace` and `ResolveIndex`. `NamesUseSupported` function added into the
interface to get information if usage of space and index names is supported.

`Schema` structure no longer implements `SchemaResolver` interface.

Part of #338
DerekBum added a commit that referenced this issue Nov 13, 2023
Replaced `t.Errorf` + `return` by `t.Fatalf`. This made
all tests in the file follow the same code style.

Part of #338
DerekBum added a commit that referenced this issue Nov 13, 2023
Update Tarantool EE version 1.10.11 to 1.10.15,
2.10.0 to 2.10.8 and 2.11.0 to 2.11.1. This was done because of
the one flacking test:
https://github.com/tarantool/go-tarantool/actions/runs/6805504621/job/18505152412

Closes #338
DerekBum added a commit that referenced this issue Nov 13, 2023
Support `IPROTO_FEATURE_SPACE_AND_INDEX_NAMES` for Tarantool
version >= 3.0.0-alpha1. It allows to use space and index names in requests
instead of their IDs.

`ResolveSpaceIndex` function for `SchemaResolver` interface split into two:
`ResolveSpace` and `ResolveIndex`. `NamesUseSupported` function added into the
interface to get information if usage of space and index names is supported.

`Schema` structure no longer implements `SchemaResolver` interface.

Part of #338
DerekBum added a commit that referenced this issue Nov 13, 2023
Replaced `t.Errorf` + `return` by `t.Fatalf`. This made
all tests in the file follow the same code style.

Part of #338
DerekBum added a commit that referenced this issue Nov 13, 2023
Update Tarantool EE version 1.10.11 to 1.10.15,
2.10.0 to 2.10.8 and 2.11.0 to 2.11.1. This was done because of
the one flacking test:
https://github.com/tarantool/go-tarantool/actions/runs/6805504621/job/18505152412

Closes #338
oleg-jukovec pushed a commit that referenced this issue Nov 13, 2023
Support `IPROTO_FEATURE_SPACE_AND_INDEX_NAMES` for Tarantool
version >= 3.0.0-alpha1. It allows to use space and index names in requests
instead of their IDs.

`ResolveSpaceIndex` function for `SchemaResolver` interface split into two:
`ResolveSpace` and `ResolveIndex`. `NamesUseSupported` function added into the
interface to get information if usage of space and index names is supported.

`Schema` structure no longer implements `SchemaResolver` interface.

Part of #338
oleg-jukovec pushed a commit that referenced this issue Nov 13, 2023
Replaced `t.Errorf` + `return` by `t.Fatalf`. This made
all tests in the file follow the same code style.

Part of #338
oleg-jukovec pushed a commit that referenced this issue Nov 13, 2023
Update Tarantool EE version 1.10.11 to 1.10.15,
2.10.0 to 2.10.8 and 2.11.0 to 2.11.1. This was done because of
the one flacking test:
https://github.com/tarantool/go-tarantool/actions/runs/6805504621/job/18505152412

Closes #338
oleg-jukovec added a commit that referenced this issue Feb 11, 2024
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).

    More linters on CI (#310).

    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

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

    Flaky decimal/TestSelect (#300).

    Tests with crud 1.4.0 (#336).

    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
oleg-jukovec added a commit that referenced this issue Feb 11, 2024
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).

    More linters on CI (#310).

    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

    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
oleg-jukovec added a commit that referenced this issue Feb 11, 2024
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
oleg-jukovec added a commit that referenced this issue Feb 11, 2024
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
oleg-jukovec added a commit that referenced this issue Feb 12, 2024
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
oleg-jukovec added a commit that referenced this issue Feb 12, 2024
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
oleg-jukovec added a commit that referenced this issue Feb 12, 2024
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
oleg-jukovec added a commit that referenced this issue Feb 12, 2024
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
oleg-jukovec added a commit that referenced this issue Feb 12, 2024
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
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
3sp feature A new functionality teamE
Projects
None yet
Development

Successfully merging a pull request may close this issue.

2 participants