-
Notifications
You must be signed in to change notification settings - Fork 60
Release 2.0.0 #383
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
Release 2.0.0 #383
Conversation
cdb1e1a to
9321b90
Compare
9321b90 to
7e9dab7
Compare
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
ceb9b5a to
8427f79
Compare
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
One small comment.
8427f79 to
c675c8c
Compare
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
LGTM!
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
c675c8c to
abcc5ac
Compare


Overview
There are a lot of changes in the new major version. The main ones:
go_tarantool_call_17build tag is no longer needed, since by default theCallRequestisCall17Request.go_tarantool_msgpack_v5build tag is no longer needed, since only themsgpack/v5library is used.go_tarantool_ssl_disablebuild tag is no longer needed, since the connector is no longer depends onOpenSSLby default. You could use the external library go-tlsdialer to create a connection with thessltransport.1.20now.Connectfunction became more flexible. It now allows to create a connection with cancellation and a customDialerimplementation.Requestimplementation types with theConnection.Domethod instead ofConnection.<Request>methods.connection_poolpackage renamed topool.See the migration guide for more details.
Breaking changes
identify()as string instead of binary #313).connection.Connectno longer return non-working connection objects (v2: restart on connection create #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.Connectandpool.Addnow accept context as the first argument, which user may cancel in process. Ifpool.Connectis canceled in progress, an error will be returned. All created connections will be closed.iproto.Featuretype now used instead ofProtocolFeature(Support IPROTO_WATCH_ONCE #337).iproto.IPROTO_FEATURE_constants now used instead of localFeatureconstants forprotocol(Support IPROTO_WATCH_ONCE #337).crudoperationsTimeoutoption type tocrud.OptFloat64instead ofcrud.OptUint(v2: consider reworking timeout value #342).UpsertandUpdaterequests to accept*tarantool.Operationsasopsparameters instead ofinterface{}(v2: invalid delete(, insert?) and splice update operations #348).OverrideSchema(*Schema)toSetSchema(Schema)(v2: soft automatic schema reload #7).Schema,Space,Indexstructs, to be stored by their values (v2: soft automatic schema reload #7).Dialermandatory for creation a single connection (Create connection from socket fd #321).Connection.RemoteAddr(),Connection.LocalAddr(). AddAddr()function instead (Create connection from socket fd #321).Connection.ClientProtocolInfo,Connection.ServerProtocolInfo. AddProtocolInfo()function instead, which returns the server protocol info (Create connection from socket fd #321).NewWatcherchecks the actual features of the server, rather than relying on the features provided by the user during connection creation (Create connection from socket fd #321).pool.NewWatcherdoes not create watchers for connections that do not support it (Create connection from socket fd #321).pool.GetPoolInfotopool.GetInfo. Change return type tomap[string]ConnectionInfo(Create connection from socket fd #321).Responseis now an interface (v2: ability to mock Connector.Do()/Future/Response in tests #237).Responseinterface (v2: ability to mock Connector.Do()/Future/Response in tests #237).SelectResponse,ExecuteResponse,PrepareResponse,PushResponseare 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 (v2: ability to mock Connector.Do()/Future/Response in tests #237). It returns the information if the current response is aPushResponse.PushCodeconstant is removed.GetforFuturenow returns response data (v2: ability to mock Connector.Do()/Future/Response in tests #237). To get the actual response newGetResponsemethod has been added. MethodsAppendPushandSetResponseaccept responseHeaderand data as their arguments.Futureconstructors now acceptRequestas their argument (v2: ability to mock Connector.Do()/Future/Response in tests #237).Ping,Select,Insert,Replace,Delete,Update,Upsert,Call,Call16,Call17,Eval,Executeof aConnectorandPoolerreturn response data instead of an actual responses (v2: ability to mock Connector.Do()/Future/Response in tests #237).pool.Connect,pool.ConnetcWithOptsandpool.Adduse a new typepool.Instanceto determinate connection options (v2: improve pool.Connect interface #356).pool.Connect,pool.ConnectWithOptsandpool.Addadd connections to the pool even it is unable to connect to it (pool: improve pool.Connect logic #372).1.13to1.20(gomod: bump go to 1.20 #378).Schemafield from theConnectionstruct is removed (v2: soft automatic schema reload #7).OkCodeandPushCodeconstants is removed (v2: ability to mock Connector.Do()/Future/Response in tests #237).Future.Err()method is removed (api: remove Future.Err() #382).New features
operation_dataincrud.Error(crud: supportoperation_datain errors #330).fetch_latest_metadataoption for crud requests with metadata (CRUD API improvements #335).noreturnoption for data change crud requests (CRUD API improvements #335).crud.schemarequest (crud: support schema #336, crud: support schema opts #351).IPROTO_WATCH_ONCErequest type for Tarantool version >= 3.0.0-alpha1 (Support IPROTO_WATCH_ONCE #337).yield_everyoption for crud select requests (crud: support yield_every in select #350).IPROTO_FEATURE_SPACE_AND_INDEX_NAMESfor Tarantool version >= 3.0.0-alpha1 (Support IPROTO_FEATURE_SPACE_AND_INDEX_NAMES #338). It allows to use space and index names in requests instead of their IDs.GetSchemafunction to get the actual schema (v2: soft automatic schema reload #7).Headerstruct for the response header (v2: ability to mock Connector.Do()/Future/Response in tests #237). It can be accessed viaHeader()method of theResponseinterface.Responsemethod added to theRequestinterface (v2: ability to mock Connector.Do()/Future/Response in tests #237).LogAppendPushFailedconnection log constant (v2: ability to mock Connector.Do()/Future/Response in tests #237). It is logged when connection fails to append a push response.ErrorNoconstant that indicates that no error has occurred while getting the response (v2: ability to mock Connector.Do()/Future/Response in tests #237).AuthDialertype for creating a dialer with authentication (Disable SSL by default #301).ProtocolDialertype for creating a dialer withProtocolInforeceiving and check (Disable SSL by default #301).GreetingDialertype for creating a dialer, that fillsGreetingof a connection (Disable SSL by default #301).Pool.DoInstanceto execute a request on a target instance in a pool (pool: add abiliry to make a request by an instance name #376).Bugfixes
scalevalue is negative (decimal: incorrect MP_DECIMAL decoding with scale < 0 #314).after,batch_sizeandforce_map_call) setup for crud.SelectRequest (How implement struct for use in crud insert request? #320).vshard_router,fields,bucket_id,mode,prefer_replica,balance) setup for crud.GetRequest (CRUD API improvements #335).crud.*ManyRequest/crud.*ObjectManyRequest(crud: typed batches #365).Testing
MockDoer,MockRequesttotest_helpers.StrangerResponsetoMockResponse(v2: ability to mock Connector.Do()/Future/Response in tests #237).Other