- Supported internal allocator in
{session,statement}.Execute
for decrease memory usage - Fixed typo in
topic/README.md
- Upgraded
ydb-go-genproto
dependency - Fixed duplicating of traces in
table.Client.Do()
call - Supported
table.Transaction.WithCommit()
method for execute query and auto-commit after
- Added constructor of
options.TimeToLiveSettings
and fluent modifiers
- Added
options.WithAddAttribute
andoptions.WithDropAttribute
options forsession.AlterTable
request - Added
options.WithAddIndex
andoptions.WithDropIndex
options forsession.AlterTable
request - Added return error while create topic writer with not equal producer id and message group id.
- Added package
meta
with methods aboutYDB
metadata - Added
meta.WithTrailerCallback(ctx, callback)
context modifier for attaching callback function which will be called on incoming metadata - Added
meta.ConsumedUnits(metadata.MD)
method for getting consumed units from metadata - Added
NestedCall
field to retry trace start infos for alarm on nested calls - Added
topicoptions.WithWriterTrace
option for attach tracer into separated writer - Added
sugar.IsTableExists()
helper for check existence of table
- Removed message level partitioning from experimental topic API. It is unavailable on server side yet.
- Supported
NullValue
type as received type fromYDB
- Supported
types.SetValue
type - Added
types.CastTo(types.Value, destination)
public method for casttypes.Value
to golang native type value destination - Added
types.TupleItem(types.Value)
,types.StructFields(types.Value)
andtypes.DictValues(types.Value)
funcs (extractors of internal fields of tuple, struct and dict values) - Added
types.Value.Yql()
func for getting values string representation asYQL
literal - Added
types.Type.Yql()
func for gettingYQL
representation of type - Marked
table/types.WriteTypeStringTo
as deprecated - Added
table/options.WithDataColumns
for supporting covering indexes - Supported
balancer
query string parameter inDSN
- Fixed bug with scanning
YSON
value from result set - Added certificate caching in
WithCertificatesFromFile
andWithCertificatesFromPem
- Fixed bug from scan unexpected column name
- Changed type of
table/options.{Create,Alter,Drop}TableOption
from func to interface - Added implementations of
table/options.{Create,Alter,Drop}Option
- Changed type of
topic/topicoptions.{Create,Alter,Drop}Option
from func to interface - Added implementations of
topic/topicoptions.{Create,Alter}Option
- Fix internal race-condition bugs in internal background worker
- Added retries to initial discovering
- Added missing
RetentionPeriod
parameter for topic description - Fixed reconnect problem for topic client
- Added queue limit for sent messages and split large grpc messages while send to topic service
- Improved control plane for topic services: allow list topic in schema, read cdc feeds in table, retry on contol plane operations in topic client, full info in topic describe result
- Allowed writing zero messages to topic writer
- Fixed deadlock with implicit usage of
internal.table.Client.internalPoolAsyncCloseSession
- Fixed commit errors for experimental topic reader
- Updated
ydb-go-genproto
dependency - Added
table.WithSnapshotReadOnly()
TxOption
for supportingSnapshotReadOnly
transaction control - Fixed bug in
db.Scripting()
queries (not checked operation results) - Added
sugar.ToYdbParam(sql.NamedArg)
helper for convertingsql.NamedArg
totable.ParameterOption
- Changed type
table.ParameterOption
for getting name and value fromtable.ParameterOption
instance - Added topic writer experimental api with internal logger
- Refactored the internal closing behaviour of table client
- Implemented the
sql.driver.Validator
interface - Fixed update token for topic reader
- Marked sessions which creates from
database/sql
driver as supported server-side session balancing
- Changed type of truncated result error from
StreamExecuteScanQuery
to retryable error - Added closing sessions if node removed from discovery results
- Moved session status type from
table/options
package totable
- Changed session status source type from
uint32
tostring
alias
- Added to balancer notifying mechanism for listening in table client event about removing some nodes and closing sessions on them
- Removed from public client interfaces
closer.Closer
(for exclude undefined behaviour on client-side)
- Refactoring of
xsql
errors checking
- Revert the marking of context errors as required to delete session
- Fixed alter topic request - stop send empty setSupportedCodecs if customer not set them
- Marked the context errors as required to delete session
- Added log topic api reader for internal logger
- Fixed nil pointer exception in topic reader if reconnect failed
- Refactored the
xsql.badconn.Error
- Supported read-only
sql.LevelSnapshot
isolation with fake transaction andOnlineReadOnly
transaction control (transient, while YDB clusters are not updated with true snapshot isolation mode) - Supported the
*sql.Conn
as input typeydb.Unwrap
helper for go's 1.18
- Changed output of
sugar.GenerateDeclareSection
(added error as second result) - Specified
sugar.GenerateDeclareSection
forgo1.18
(supports input types*table.QueryParameters
[]table.ParameterOption
or[]sql.NamedArg
) - Supports different go's primitive value types as arg of
sql.Named("name", value)
- Added
database/sql
example and docs
- Fixed
xsql.Rows
error checking
- Changed behavior on
result.Err()
on truncated result (returns non-retryable error now, excludeStreamExecuteScanQuery
) - Added
ydb.WithIgnoreTruncated
option for disabling errors on truncated flag - Added simple transaction control constructors
table.OnlineReadOnlyTxControl()
andtable.StaleReadOnlyTxControl()
- Added transaction control specifier with context
ydb.WithTxControl
- Added value constructors
types.BytesValue
,types.BytesValueFromString
,types.TextValue
- Removed auto-prepending declare section on
xsql
queries - Supports
time.Time
as type destination inxsql
queries - Defined default dial timeout (5 seconds)
- Removed the deprecation warning for
ydb.WithSessionPoolIdleThreshold
option
- Replaced internal table client background worker to plain wait group for control spawned goroutines
- Replaced internal table client background session keeper to internal background session garbage collector for idle sessions
- Extended the
DescribeTopicResult
struct
- Added some description to error message from table pool get
- Moved implementation
sugar.GenerateDeclareSection
tointernal/table
- Added transaction trace callbacks and internal logging with them
- Stored context from
BeginTx
tointernal/xsql
transaction - Added automatically generated declare section to query text in
database/sql
usage - Removed supports
sql.LevelSerializable
- Added
retry.Do
helper for retry custom lambda withdatabase/sql
without transactions - Removed
retry.WithTxOptions
option (only default isolation supports)
- Changed
database/sql
driverprepare
behaviour tonop
with proxing call to conn exec/query with keep-in-cache flag - Added metadata to
trace.Driver.OnInvoke
andtrace.Driver.OnNewStream
done events
- Improved the
xsql
errors mapping todriver.ErrBadConn
- Extended
retry.DoTx
test for to achieve equivalence withretry.Retry
behaviour - Added
database/sql
events for tracingdatabase/sql
driver events - Added internal logging for
database/sql
events - Supports
YDB_LOG_DETAILS
environment variable for specify scope of log messages - Removed support of
YDB_LOG_NO_COLOR
environment variable - Changed default behaviour of internal logger to without coloring
- Fixed coloring (to true) with environment variable
YDB_LOG_SEVERITY_LEVEL
- Added
ydb.WithStaticCredentials(user, password)
option for make static credentials - Supports static credentials as part of connection string (dsn - data source name)
- Changed minimal supported version of go from 1.14 to 1.16 (required for jwt library)
- Added
retry.DoTx
helper for retryingdatabase/sql
transactions - Implemented
database/sql
driver overydb-go-sdk
- Marked as deprecated
trace.Table.OnPoolSessionNew
andtrace.Table.OnPoolSessionClose
events - Added
trace.Table.OnPoolSessionAdd
andtrace.Table.OnPoolSessionRemove
events - Refactored session lifecycle in session pool for fix flaked
TestTable
- Fixed deadlock in topicreader batcher, while add and read raw server messages
- Fixed bug in
db.Topic()
with send response to stop partition message
- Fixed flaky TestTable
- Renamed topic events in
trace.Details
enum
- Refactored
trace.Topic
(experimental) handlers - Fixed signature and names of helpers in
topic/topicsugar
package - Allowed parallel reading and committing topic messages
- Extended the
ydb.Connection
interface with experimentaldb.Topic()
client (control plane and reader API) - Removed
ydb.RegisterParser()
function (was needed fordatabase/sql
driver outsideydb-go-sdk
repository, necessity ofydb.RegisterParser()
disappeared with implementationdatabase/sql
driver in same repository) - Refactored
db.Table().CreateSession(ctx)
(maked retryable with internal create session timeout) - Refactored
internal/table/client.createSession(ctx)
(got rid of unnecessary goroutine) - Supported many user-agent records
- Added
ydb.RegisterParser(name string, parser func(value string) []ydb.Option)
function for register parser of specified param name (supporting additional params in connection string) - Fixed writing
KeepInCacheFlag
in table traces
- Fixed regression of
table/types.WriteTypeStringTo
- Added touching of last updated timestamp in existing conns on stage of applying new endpoint list
- Reverted
xerrors.IsTransportError(err)
behaviour for raw grpc errors to false
- Enabled server-side session balancing for sessions created from internal session pool
- Removed unused public
meta.Meta
methods - Renamed
meta.Meta.Meta(ctx)
public method tometa.Meta.Context(ctx)
- Reverted default balancer to
balancers.RandomChoice()
- Changed default balancer to
balancers.PreferLocalDC(balancers.RandomChoice())
- Refactored
internal/value
package for decrease CPU and memory workload with GC - Added
table/types.Equal(lhs, rhs)
helper for check equal for two types
- Fixed false-positive node pessimization on receiving from stream io.EOF
- Upgraded dependencies (grpc, protobuf, testify)
- Marked dial errors as retryable
- Supported node pessimization on dialing errors
- Marked error from
Invoke
andNewStream
as retryable if request not sended to server
- Added
sugar.GenerateDeclareSection()
helper for make declare section inYQL
- Added check when parameter name not started from
$
and automatically prepends it to name - Refactored connection closing
- Added internal experimental packages
internal/value/exp
andinternal/value/exp/allocator
with alternative value implementations with zero-allocation model - Supported parsing of database name from connection string URI path
- Added
options.WithExecuteScanQueryStats
option - Added to query stats plan and AST
- Changed behaviour of
result.Stats()
(if query result have no stats - returnsnil
) - Added context cancel with specific error
- Added mutex wrapper for mutex, rwmutex for guarantee unlock and better show critical section
- Fixed syntax mistake in
trace.TablePooStateChangeInfo
totrace.TablePoolStateChangeInfo
- Fixed bug with convert ydb value to
time.Duration
inresult.Scan[WithDefaults,Named]()
- Fixed bug with make ydb value from
time.Duration
intypes.IntervalValueFromDuration(d)
- Marked
table/types.{IntervalValue,NullableIntervalValue}
as deprecated
- Removed the processing of trailer metadata on stream calls
- Updated the
ydb-go-genproto
dependency
- Defined the
SerializableReadWrite
isolation level by default indb.Table.DoTx(ctx, func(ctx, tx))
- Updated the
ydb-go-genproto
dependency
- Disabled the
KeepInCache
policy for queries without params
- Updated the indirect dependency to
gopkg.in/yaml.v3
- Removed
Deprecated
mark fromtable/session.Prepare
method - Added comments for
table/session.Execute
method
- Refactored of making permissions from scheme entry
- Removed deprecated traces
- Fixed data race on session stream queries
- Renamed
internal/router
package tointernal/balancer
for unambiguous understanding of package mission - Implemented detection of local data-center with measuring tcp dial RTT
- Added
trace.Driver.OnBalancer{Init,Close,ChooseEndpoint,Update}
events - Marked the driver cluster events as deprecated
- Simplified the balancing logic
- Changed primary license to
Apache2.0
for auto-detect license - Refactored
types.Struct
value creation
- Fixed repeater initial force timeout from 500 to 0.5 second
- Fixed bug with unexpected failing of call
Invoke
andNewStream
on closed cluster - Fixed bug with releasing
internal/conn/conn.Pool
in cluster - Replaced interface
internal/conn/conn.Pool
to structinternal/conn/conn.Pool
- Added
ydb.GRPCConn(ydb.Connection)
helper for connect to driver-unsupported YDB services - Marked as deprecated
session.Prepare
callback - Marked as deprecated
options.WithQueryCachePolicyKeepInCache
andoptions.WithQueryCachePolicy
options - Added
options.WithKeepInCache
option - Enabled by default keep-in-cache policy for data queries
- Removed from
ydb.Connection
embedding ofgrpc.ClientConnInterface
- Fixed stopping of repeater
- Added log backoff between force repeater wake up's (from 500ms to 32s)
- Renamed
trace.DriverRepeaterTick{Start,Done}Info
totrace.DriverRepeaterWakeUp{Start,Done}Info
- Fixed unexpected
NullFlag
while parse nilJSONDocument
value - Removed
internal/conn/conn.streamUsages
andinternal/conn/conn.usages
(internal/conn.conn
always touching last usage timestamp on API calls) - Removed auto-reconnecting for broken conns
- Renamed
internal/database
package tointernal/router
for unambiguous understanding of package mission - Refactored applying actual endpoints list after re-discovery (replaced diff-merge logic to swap cluster struct, cluster and balancers are immutable now)
- Added
trace.Driver.OnUnpessimizeNode
trace event
- Changed default balancer to
RandomChoice()
becausePreferLocalDC()
balancer works incorrectly with DNS-balanced callDiscovery/ListEndpoints
- Refactored initialization of coordination, ratelimiter, scheme, scripting and table clients from
internal/lazy
package to each client initialization withsync.Once
- Removed
internal/lazy
package - Added retry option
retry.WithStackTrace
for wrapping errors with stacktrace
- Fixed re-opening case after close lazy-initialized clients
- Removed dependency of call context for initializing lazy table client
- Added
config.AutoRetry()
flag withtrue
value by default.config.AutoRetry()
affects how to errors handle in sub-clients calls. - Added
config.WithNoAutoRetry
for disabling auto-retry on errors in sub-clients calls - Refactored
internal/lazy
package (supported checkconfig.AutoRetry()
, removed all error wrappings with stacktrace)
- Added
WithTLSConfig
option for redefine TLS config - Added
sugar.LoadCertificatesFromFile
andsugar.LoadCertificatesFromPem
helpers
- Supported
json.Unmarshaler
type for scanning row to values - Reimplemented
sugar.DSN
withnet/url
- Fixed gtrace tool generation code style bug with leading spaces
- Removed accounting load factor (unused field) in balancers
- Enabled by default anonymous credentials
- Enabled by default internal dns resolver
- Removed from defaults
grpc.WithBlock()
option - Added
ydb.Open
method with required param connection string - Marked
ydb.New
method as deprecated - Removed package
dsn
- Added
sugar.DSN
helper for make dsn (connection string) - Refactored package
retry
(movedretryBackoff
andretryMode
implementations tointernal
) - Refactored
config.Config
(remove interfaceConfig
, renamed private structconfig
toConfig
) - Moved
discovery/config
tointernal/discovery/config
- Moved
coordination/config
tointernal/coordination/config
- Moved
scheme/config
tointernal/scheme/config
- Moved
scripting/config
tointernal/scripting/config
- Moved
table/config
tointernal/table/config
- Moved
ratelimiter/config
tointernal/ratelimiter/config
- Fixed race condition on lazy clients first call
- Fixed gofumpt linter issue on
credentials/credentials.go
- Added
table.DefaultTxControl()
transaction control creator with serializable read-write isolation mode and auto-commit - Fixed passing nil query parameters
- Fixed locking of cluster during call
cluster.Get
- Simplified README.md for godoc documentation in pkg.go.dev
- Added public package
dsn
for making piped data source name (connection string) - Marked
ydb.WithEndpoint
,ydb.WithDatabase
,ydb.WithSecure
,ydb.WithInsecure
options as deprecated - Moved
ydb.RegisterParser
to packagedsn
- Added version into all error and warn log messages
- Fixed duplicating
WithPanicCallback
proxying to table config options - Fixed comments for
xerrros.Is
andxerrros.As
- Renamed internal packages
errors
,net
andresolver
toxerrors
,xnet
andxresolver
for excluding ambiguous interpretation - Renamed internal error wrapper
xerrors.New
toxerrors.Wrap
- Added
WithPanicCallback
option to all service configs (discovery, coordination, ratelimiter, scheme, scripting, table) and auto-applying fromydb.WithPanicCallback
- Added panic recovering (if defined
ydb.WithPanicCallback
option) which thrown from retry operation
- Refactored balancers (makes concurrent-safe)
- Excluded separate balancers lock from cluster
- Refactored
cluster.Cluster
interface (Insert
andRemove
returning nothing now) - Replaced unsafe
cluster.close
boolean flag tocluster.done
chan for listening close event - Added internal checker
cluster.isClosed()
for check cluster state - Extracted getting available conn from balancer to internal helper
cluster.get
(called insidecluster.Get
as last effort) - Added checking
conn.Conn
availability withconn.Ping()
in prefer nodeID case
- Added
conn.Ping(ctx)
method for check availability ofconn.Conn
- Refactored
cluster.Cluster.Get(ctx)
to return only available connection (instead of returning any connection from balancer) - Added address to error description thrown from
conn.take()
- Renamed package
internal/db
tointernal/database
to exclude collisions with variable namedb
- Added
go1.18
to test matrix - Added
ydb.WithOperationTimeout
andydb.WithOperationCancelAfter
context modifiers
- Removed redundant
trace.With{Table,Driver,Retry}
andtrace.Context{Table,Driver,Retry}
funcs - Moved
gtrace
tool from./cmd/gtrace
to./internal/cmd/gtrace
- Refactored
gtrace
tool for generateCompose
options - Added panic recover on trace calls in
Compose
call step - Added
trace.With{Discovery,Driver,Coordination,Ratelimiter,Table,Scheme,Scripting}PanicCallback
options - Added
ydb.WithPanicCallback
option
- Fixed bug with check acquire error over
ydb.IsRatelimiterAcquireError
- Added full changelog link to github release description
- Added stacktrace to errors with issues
- Refactored
cluster.Cluster
andbalancer.Balancer
interfaces (removedUpdate
method) - Replaced
cluster.Update
withcluster.Remove
andcluster.Insert
calls - Removed
trace.Driver.OnClusterUpdate
event - Fixed bug with unexpected changing of local datacenter flag in endpoint
- Refactored errors wrapping (stackedError are not ydb error now, checking
errors.IsYdb(err)
witherrors.As
now) - Wrapped retry operation errors with
errors.WithStackTrace(err)
- Changed
trace.RetryLoopStartInfo.Context
type fromcontext.Context
to*context.Context
- Refactored internal operation and transport errors
- Added
config.ExcludeGRPCCodesForPessimization()
opttion for exclude some grpc codes from pessimization rules - Refactored pessimization node conditions
- Added closing of ticker in
conn.Conn.connParker
- Removed
config.WithSharedPool
and usages it - Removed
conn.Creator
interface and usage it - Removed unnecessary options append in
ydb.With
- Added closing
conn.Conn
if discovery client build failure - Added wrapping errors with stacktrace
- Added discharging banned state of
conn.Conn
oncluster.Update
step
- Rollback moving
meta.Meta
call to conn exclusively frominternal/db
andinternal/discovery
- Added
WithMeta()
discovery config option
- Added
config.SharedPool()
setting andconfig.WithSharedPool()
option - Added management of shared pool flag on change dial timeout and credentials
- Removed explicit checks of conditions for use (or not) shared pool in
ydb.With()
- Renamed
internal/db
interfaces - Changed signature of
conn.Conn.Release
(added error as result)
- Removed
WithMeta()
discovery config option - Moved
meta.Meta
call to conn exclusively
- Replaced panic on cluster close to error issues
- Fixed bug in
types.Nullable()
- Refactored package
meta
- Removed explicit call meta in
db.New()
- Added
WithMeta()
discovery config option - Fixed bug with credentials on discovery
- Refactored internal dns-resolver
- Added option
config.WithInternalDNSResolver
for use internal dns-resolver and use resolved IP-address for dialing instead FQDN-address
- Removed all conditions for trace retry errors
- Fixed background color of warn messages
- Added to log messages additional information about error, such as retryable (or not), delete session (or not), etc.
- Added github action for publish release tags
- Refactored version constant (split to major, minor and patch constants)
- Added
table.types.Nullable{*}Value
helpers andtable.types.Nullable()
common helper - Fixed race on check trailer on closing table grpc-stream
- Refactored traces (start and done struct names have prefix about trace)
- Replaced
errors.Error
,errors.Errorf
anderrors.ErrorfSkip
to singleerrors.WithStackTrace
- Refactored table client options
- Declared and implemented interface
errors.isYdbError
for checking ybd/non-ydb errors - Fixed double tracing table do events
- Added
retry.WithFastBackoff
andretry.WithFastBackoff
options - Refactored
table.CreateSession
as retry operation with options - Moved log level from root of repository to package
log
- Added details and address to transport error
- Fixed
recursive
param inratelimiter.ListResource
- Added counting stream usages for exclude park connection if it in use
- Added
trace.Driver
events about change stream usage andconn.Release()
call
- Implemented auto-removing
conn.Conn
fromconn.Pool
with counting usages ofconn.Conn
- Refactored naming of source files which declares service client interfaces
- Fixed bug with update balancer element with nil handle
- Refactored internal error wrapping (with file and line identification) - replaced
fmt.Printf("%w", err)
error wrapping to internalstackError
- Added
balacers.CreateFromConfig
balancer creator - Added
Create
method to interfacebalancer.Balancer
- Added
balacers.FromConfig
balancer creator
- Fixed linter issues
- Fixed race with read/write pool conns on closing conn
- Improved error messages
- Defended
cluster.balancer
withsync.RWMutex
oncluster.Insert
,cluster.Update
,cluster.Remove
andcluster.Get
- Excluded
Close
andPark
methods fromconn.Conn
interface - Fixed bug with
Multi
balancerCreate()
- Improved
errors.IsTransportError
(check a few transport error codes instead check single transport error code) - Improved
errors.Is
(check a few errors instead check single error) - Refactored YDB errors checking API on client-side
- Implemented of scripting traces
- Refactored
Connection
interface - Removed
CustomOption
and taking client with custom options - Removed
proxy
package - Improved
db.With()
helper for child connections creation - Set shared
conn.Pool
for all childrenydb.Connection
- Fixed bug with
RoundRobin
andRandomChoice
balancersCreate()
- Added
trace.Driver.OnConnPark
event - Added
trace.Driver.OnConnClose
event - Fixed bug with closing nil session in table retryer
- Restored repeater
Force
call on pessimize event - Changed mutex type in
conn.Conn
fromsync.Mutex
tosync.RWMutex
for exclude deadlocks - Reverted applying empty
discovery
results tocluster
- Added
balancers.Prefer
andbalancers.PreferWithFallback
constructors
- Added
trace.Driver.OnRepeaterWakeUp
event - Refactored package
repeater
- Added
trace.ClusterInsertDoneInfo.Inserted
boolean flag for notify about success of insert endpoint into balancer - Added
trace.ClusterRemoveDoneInfo.Removed
boolean flag for notify about success of remove endpoint from balancer
- Reverted usage of
math/rand
(insteadcrypto/rand
)
- Imported tool gtrace to
./cmd/gtrace
- Changed minimal version of go from 1.13 to 1.14
- Fixed composing of service traces
- Fixed end-call of
trace.Driver.OnConnStateChange
- Added
trace.EndpointInfo.LastUpdated()
timestamp - Refactored
endpoint.Endpoint
(split to structendopint
and interfaceEndpoint
) - Returned safe-thread copy of
endpoint.Endpoint
to trace callbacks - Added
endpoint.Endpoint.Touch()
func for refresh endpoint info - Added
conn.conn.onClose
slice for call optional funcs on close step - Added removing
conn.Conn
fromconn.Pool
onconn.Conn.Close()
call - Checked cluster close/empty on keeper goroutine
- Fixed
internal.errors.New
wrapping depth - Added context flag for no wrapping operation results as error
- Refactored
trace.Driver
conn events
- Removed internal alias-type
errors.IssuesIterator
- Changed
trace.GetCredentialsDoneInfo
token representation from bool to string - Added
log.Secret
helper for mask token
- Replaced meta in
proxyConnection.Invoke
andproxyConnection.NewStream
- Refactored
internal/cluster.Cluster
(add option for notify about external lock, lock cluster for update cluster endpoints) - Reverted
grpc.ClientConnInterface
API toydb.Connection
- Replaced in
table/types/compare_test.go
checking error by error message to checking witherrors.Is()
- Wrapped internal errors in retry operations
- Excluded error wrapping from retry operations
- Added
ydb.WithTLSSInsecureSkipVerify()
option - Added
trace.Table.OnPoolStateChange
event - Wrapped internal errors with print <func, file, line>
- Removed
trace.Table.OnPoolTake
event (unused) - Refactored
trace.Details
matching by string pattern - Added resolver trace callback
- Refactored initialization step of grpc dial options
- Added internal package
net
withnet.Conn
proxy object - Fixed closing proxy clients
- Added
ydb.Connection.With(opts ...ydb.CustomOption)
for taking proxyydb.Connection
with some redefined options - Added
ydb.MetaRequestType
andydb.MetaTraceID
aliases to internalmeta
package constants - Added
ydb.WithCustomCredentials()
option - Refactored
ydb.Ratelimiter().AcquireResource()
method (added options for defining type of acquire request) - Removed single point to define operation mode params (each grpc-call with
OperationParams
must explicit defineOperationParams
) - Removed defining operation params over context
- Removed
config.RequestTimeout
andconfig.StreamTimeout
(each grpc-call must manage context instead defineconfig.RequestTimeout
orconfig.StreamTimeout
) - Added internal
OperationTimeout
andOperationCancelAfter
to each client (ratelimiter, coordination, table, scheme, scripting, discovery) config.OperationTimeout
andOperationCancelAfter
config params defined from root config
- Extended
trace.Details
constants for support per-service events - Added
trace.Discovery
struct for traces discovery events - Added
trace.Ratelimiter
,trace.Coordination
,trace.Scripting
,trace.Scheme
stubs (will be implements in the future) - Added
ratelimiter/config
,coordination/config
,scripting/config
,scheme/config
,discovery/config
packages for specify per-service configs - Removed
trace.Driver.OnDiscovery
callback (moved totrace.Discovery
) - Refactored initialization step (firstly makes discovery client)
- Removed
internal/lazy.Discovery
(discovery client always initialized) - Fixed
trace.Table
event structs - Refactored grpc options for define dns-balancing configuration
- Refactored
retry.Retry
signature (addedretry.WithID
,retry.WithTrace
andretry.WithIdempotent
opt-in args, required paramisIdempotentOperation
removed) - Refactored package
internal/repeater
- Fixed data race on closing session pool
- Fixed busy loop on call internal logger with external logger implementation of
log.Logger
- Fixed
WithDiscoveryInterval()
option with negative argument (must useSingleConn
balancer)
- Added
WithMinTLSVersion
option
- Removed
ydb.EndpointDatabase
,ydb.ConnectionString
andydb.MustConnectionString
helpers - Removed
ydb.ConnectParams
struct andydb.WithConnectParams
option creator - Added internal package
dsn
for register external parsers and parse connection string - Added
ydb.RegisterParser
method for registering external parser of connection string
- Unwrap sub-tests called as
t.Run(...)
in integration tests - Updated
grpc
dependency (fromv1.38.0
tov1.43.0
) - Updated
protobuf
dependency (fromv1.26.0
tov1.27.1
) - Added internal retryers into
lazy.Ratelimiter
- Added internal retryers into
lazy.Coordination
- Added internal retryers into
lazy.Discovery
- Added internal retryers into
lazy.Scheme
- Added internal retryers into
lazy.Scripting
- Added internal retryer into
lazy.Table.CreateSession
- Fixed version
- Fixed misspell linter issue
- Removed debug print to log
- Refactored session shutdown test
- Ignored session shutdown test if no defined
YDB_SHUTDOWN_URLS
environment variable
- Added
ydb.WithInsecure()
option
- Fixed version
- Fixed syntax error in
CHANGELOG.md
- Fixed
CHANGELOG.md
- Updated
github.com/ydb-platform/ydb-go-genproto
- Fixed
trace.Table.OnPoolDoTx
- addedIdempotent
flag totrace.PoolDoTxStartInfo
- Added
table.result.Result.ScanNamed()
scan function - Changed connection secure to
true
by default - Renamed public package
balancer
tobalancers
(this package contains only constructors of balancers) - Moved interfaces from package
internal/balancer/ibalancer
tointernal/balancer
- Added
NextResultSetErr()
func for select next result set and return error - Added package
table/result/indexed
with interfacesindexed.Required
,indexed.Optional
,indexed.RequiredOrOptional
- Replaced abstract
interface{}
inScan
toindexed.RequiredOrOptional
- Replaced abstract
interface{}
inScanWithDefaults
toindexed.Required
- Replaced
trace.Table.OnPoolRetry
callback totrace.Table.OnPoolDo
andtrace.Table.OnPoolDoTx
callbacks - Supports server hint
session-close
for gracefully shutdown session
- Retry remove directory in
sugar.RemoveRecursive()
for retryable error
- Fixed panic on
result.Reset(nil)
- Replaced
Option
toCustomOption
onConnection
interface methods - Implements
WithCustom[Token,Database]
options for redefine database and token - Removed experimental
balancer.PreferEndpoints[WithFallback][RegEx]
balancers - Supported connections
TTL
withOption
WithConnectionTTL
- Remove unnecessary
WithFastDial
option (lazy connections are always fast inserts into cluster) - Added
Scripting
service client with API methodsExecute()
,StreamExecute()
andExplain()
- Added
String()
method totable.types.Type
interface - Added
With[Custom]UserAgent()
Option
andCustomOption
constructors - Refactored
log.Logger
interface and internal implementation - Added
retry.RetryableError()
for returns user-defined error which must be retryed - Renamed internal type
internal.errors.OperationCompleted
tointernal.errors.OperationStatus
- Added
String()
method totable.KeyRange
andtable.Value
types - Replaced creation of goroutine on each stream call to explicit call stream.Recv() on NextResultSet()
- Refactored table retry helpers
- Added new
PreferLocations[WithFallback][RegEx]
balancers - Added
trace.Details.String()
andtrace.Details.Strings()
helpers - Added
trace.DetailsFromString(s)
andtrace.DetailsFromStrings(s)
helper
- Switched closing cluster after closing all sub-services
- Added windows and macOS runtimes to unit and integration tests
- Added
config/balancer
package with popular balancers - Added new
PreferEndpoints[WithFallback][RegEx]
balancers - Removed
config.BalancerConfig
struct - Refactored internal packages (tree to flat, split balancers to different packages)
- Moved a taking conn to start of
conn.Invoke
/conn.NewStream
for applying timeouts to alive conn instead lazy conn (previous logic applied timeouts to all request including dialing on lazy conn)
- Added auto-close stream result on end of stream
- Changed
Logger
interface for support custom loggers - Added public type
LoggerOption
for proxies to internallogger.Option
- Fixed deadlock on table stream requests
- Fixed data race on closing table result
- Added custom dns-resolver to grpc options for use dns-balancing with round_robin balancing policy
- Wrapped with
recover()
system panic on getting system certificates pool - Added linters and fixed issues from them
- Changed API of
sugar
package
- Added system certificates for
darwin
system - Fixed
table.StreamResult
finishing - Fixes
sugar.MakePath()
- Added helper
ydb.MergeOptions()
for merge severalydb.Option
to singleydb.Option
- Added
ClosabelSession
interface which extendsSession
interface and provideClose
method - Added
CreateSession
method intotable.Client
interface - Added
Context
field intotrace.Driver.Net{Dial,Read,Write,Close}StartInfo
structs - Added
Address
field intotrace.Driver.DiscoveryStartInfo
struct - Improved logger options (provide err and out writers, provide external logger)
- Renamed package
table.resultset
totable.result
- Added
trace.Driver.{OnInit,OnClose}
events - Changed unit/integration tests running
- Fixed/added YDB error checkers
- Dropped
ydb.WithDriverConfigOptions
(duplicate ofydb.With
) - Fixed freeze on closing driver
- Fixed
CGO
race onDarwin
system when driver tried to expand tilde on certificates path - Removed
EnsurePathExists
andCleanupDatabase
from API ofscheme.Client
- Added helpers
MakePath
andCleanPath
to root of packageydb-go-sdk
- Removed call
types.Scanner.UnmarshalYDB()
insidescanner.setDefaults()
- Added
DoTx()
API method intotable.Client
- Added
String()
method intoConnectParams
for serialize params to connection string - Added early exit from Rollback for committed transaction
- Moved
HasNextResultSet()
method fromResult
interface to commonresult
interface. It provides access toHasNextResultSet()
on both result interfaces (unary and stream results) - Added public credentials constructors
credentials.NewAnonymousCredentials()
andcredentials.NewAccessTokenCredentials(token)
- Prefer
ydb.table.types.Scanner
scanner implementation oversql.Scanner
, when both available.
- Forced
round_robin
grpc load balancing instead defaultpick_first
- Added checker
IsTransportErrorCancelled
- Simplified
Is{Transport,Operation}Error
- Added
IsYdbError
helper
- Fixed retry reaction on operation error NotFound (non-retryable now)
- Fixed logic bug in
trace.Table.ExecuteDataQuery{Start,Done}Info
- Cleared repeater context for discovery goroutine
- Fixed type of
trace.Details
- Added
table.options.WithPartitioningSettings
- Added
trace.DriverConnEvents
constant
- Stored node ID into
endpoint.Endpoint
struct - Simplified <Host,Port> in
endpoint.Endpoint
to single fqdn Address - On table session requests now preferred the endpoint by
ID
extracted from sessionID
. If endpoint byID
not found - using the endpoint from balancer - Upgraded internal logger for print colored messages
- Fixed compare endpoints func
- Reverted
NodeID
as key for link between session and endpoint because yandex-cloud YDB installation not supportedEndpoint.ID
entity
- Dropped endpoint.Addr entity as unused. After change link type between session and endpoint to NodeID endpoint.Addr became unnecessary for internal logic of driver
- Enabled integration test table pool health
- Fixed race on session stream requests
- Returned context error when context is done on
session.StreamExecuteScanQuery
andsession.StreamReadTable
- Fixed bug of interpret tilda in path of certificates file
- Added chapter to
README.md
about ecosystem of debug tools overydb-go-sdk
- Fixed result type of
RawValue.String
(ydb string compatible) - Fixed scans ydb types into string and slice byte receivers
- Upgraded dependencies
- Added
WithEndpoint
andWithDatabase
Option constructors
- added package
log
with interfacelog.Logger
- implements
trace.Driver
andtrace.Table
withlog.Logger
- added internal leveled logger which implement interface
log.Logger
- supported environment variable
YDB_LOG_SEVERITY_LEVEL
- changed name of the field
RetryAttempts
toAttempts
in the structuretrace.PoolGetDoneInfo
. This change reduces back compatibility, but there are no external uses of v3 sdk, so this change is fine. We are sorry if this change broke your code
- published scheme Client interface
- refactored integration tests
- fixed table retry trace calls
- Refactored sources for splitting public interfaces and internal implementation for core changes in the future without change major version
- Refactored of transport level of driver - now we use grpc code generation by stock
protoc-gen-go
instead internal protoc codegen. New API provide operate from codegen grpc-clients with driver as a single grpc client connection. But driver hide inside self a pool of grpc connections to different cluster endpoints YDB. All communications with YDB (base services includes to driver: table, discovery, coordiantion and ratelimiter) provides stock codegen grpc-clients now. - Much changed API of driver for easy usage.
- Dropped package
ydbsql
(moved to external project) - Extracted yandex-cloud authentication to external project
- Extracted examples to external project
- Changed of traces API for next usage in jaeger и prometheus
- Dropped old APIs marked as
deprecated
- Added integration tests with docker ydb container
- Changed table session and endpoint link type from string address to integer NodeID
- Added possibility to override
x-ydb-database
metadata value
- Fixed context cancellation inside repeater loop
- Fixed data race on cluster get/pessimize
- Dropped internal cluster connections tracker
- Switched initial connect to all endpoints after discovery to lazy connect
- Added reconnect for broken conns
- Thrown context without deadline into discovery goroutine
- Added
Address
param toDiscoveryStartInfo
struct - Forced
round_bobin
grpc load balancing config instead defaultpick_first
- Fixed applying driver trace from context in
connect.New
- Excluded using session pool usage for create/take sessions in
database/sql
driver implementation. Packageydbsql
withdatabase/sql
driver implementation used directCreateSession
table client call in the best effort loop
- Fixed panic when ready conns is zero
- Initialized repeater permanently regardless of the value
DriverConfig.DiscoveryInterval
This change allow forcing re-discovery depends on cluster state
- Returned context error when context is done on
StreamExecuteScanQuery
- Fixed
mapBadSessionError()
inydbsql
package
- Fixed race on
ydbsql
concurrent connect. This hotfix only for v2 version
- Added
GlobalAsyncIndex
implementation of index interface
- Replaced
<session, endpoint>
link type from raw conn to plain endpoint address - Moved checking linked endpoint from
driver.{Call,StreamRead}
tocluster.Get
- Added pessimization endpoint code for
driver.StreamRead
if transport error received - Setted transport error
Cancelled
as needs to remove session from pool - Deprecated connection use policy (used auto policy)
- Fixed goroutines leak on StreamRead call
- Fixed force re-discover on receive error after 1 second
- Added timeout to context in
cluster.Get
if context deadline not defined
- Renamed context idempotent operation flag
- Forced cancelled transport error as retriable (only idempotent operations)
- Renamed some internal retry mode types
- Forced grpc keep-alive PermitWithoutStream parameter to true
- Added errors without panic
- Added check nil grpc.ClientConn connection
- Processed nil connection error in keeper loop
- Added RawValue and supported ydb.Scanner in Scan
- Added NextResultSet for both streaming and non-streaming operations
- Dropped busy checker logic
- Refactoring of
RetryMode
,RetryChecker
andRetryer
- Added fast/slow retry logic
- Supported context param for retry operation with no idempotent errors
- Added secondary indexes info to table describing method
- fix panic on lazy put to full pool
- Exported
SessionProvider.CloseSession
func - Implements by default async closing session and putting busy session into pool
- Added some session pool trace funcs for execution control of goroutines in tests
- Switched internal session pool boolean field closed from atomic usage to mutex-locked usage
- Added panic on double scan per row
- Supported nil and time conventions for scanner
- Reverted adds async sessionGet and opDo into
table.Retry
. - Added
sessionClose()
func intoSessionProvider
interface.
- Remove ready queue from session pool
- Fix put session into pool
- Fix panic on operate with result scanner
- Fix lock on write to chan in case when context is done
- Added
ScanRaw
for scan results as struct, list, tuple, map - Created
RawScanner
interface in order to generate method With
- Fixed deadlock in the session pool
- Added new scanner API.
- Fixed dualism of interpret data (default values were deprecated for optional values)
- Fixed
internal/stats/series.go
(index out of range) - Optimized rotate buckets in the
Series
- Moved
api/wrap.go
to root for next replacement api package to external genproto
- Correct session pool tests
- Fixed conditions with KeepAliveMinSize and
IdleKeepAliveThreshold
- Added credentials connect options:
connect.WithAccessTokenCredentials(accessToken)
connect.WithAnonymousCredentials()
connect.WithMetadataCredentials(ctx)
connect.WithServiceAccountKeyFileCredentiials(serviceAccountKeyFile)
- Added auth examples:
example/auth/environ
example/auth/access_token_credentials
example/auth/anonymous_credentials
example/auth/metadata_credentials
example/auth/service_account_credentials
- Fixed returning error from
table.StreamExecuteScanQuery
- Supported loading certs from file using
YDB_SSL_ROOT_CERTIFICATES_FILE
environment variable
- Fixed erasing session from pool if session keep-alive count great then
IdleKeepAliveThreshold
- Add major session pool config params as
connect.WithSessionPool*()
options
- Added panic for wrong
NextSet
/NextStreamSet
call
- Fixed infinite keep alive session on transport errors
Cancelled
andDeadlineExceeded
- Fixed parser of connection string
- Fixed
EnsurePathExists
andCleanupDatabase
methods - Fixed
basic_example_v1
- Renamed example cli flag
-link=connectionString
to-ydb=connectionString
for connection string to YDB - Added
-connect-timeout
flag to example cli - Fixed some linter issues
- Renamed package ydbx to connect. New usage semantic:
connect.New()
insteadydbx.Connect()
- Added
healthcheck
example - Fixed all examples with usage connect package
- Dropped
example/internal/ydbutil
package - Simplified API of Traces - replace all pairs start/done to single handler with closure.
- Fixed
WithYdbCA
at nil certPool case
- Fixed package name of
ydbx
- Added
ydbx
package
- Fixed
fmt.Errorf
error wrapping and some linter issues
- Added helper for create credentials from environ
- Added anonymous credentials
- Move YDB Certificate Authority from auth/iam package to root package. YDB CA need to dial with dedicated YDB and not need to dial with IAM. YDB CA automatically added to all grpc calling
- Added
Compose
method to traces
- Load YDB certificates by default with TLS connection
- Support scan-query method in
ydbsql
(database/sql API)
- Use
github.com/golang-jwt/jwt
instead ofgithub.com/dgrijalva/jwt-go
- Append (if not exits) SYNC Operation mode on table calls: *Session, *DataQuery, *Transaction, KeepAlive
- Remove unused ContextDeadlineMapping driver config (always used default value)
- Simplify operation params logic
- Append (if not exits) SYNC Operation mode on ExecuteDataQuery call
- Fixed timeout and cancellation setting for YDB operations
- Introduced possibility to use
ContextDeadlineNoMapping
once again
- Negative
table.Client.MaxQueryCacheSize
will disable a client query cache now - Refactoring of
meta.go
for simple adding in the future new headers to requests - Added support
x-ydb-trace-id
as standard SDK header
- Implements smart lazy createSession for best control of create/delete session balance. This feature fix leakage of forgotten sessions on server-side
- Some imporvements of session pool stats
- Fix closing sessions on PutBusy()
- Force setting operation timeout from client context timeout (if this timeout less then default operation timeout)
- Added helper
ydb.ContextWithoutDeadline
for clearing existing context from any deadlines
- SDK versioning switched to
Semantic Versioning 2.0.0
- Added
table.TimeToLiveSettings
struct and correspondingtable.WithTimeToLiveSettings
,table.WithSetTimeToLive
andtable.WithDropTimeToLive
options. - Deprecated
table.TTLSettings
struct alongside withtable.WithTTL
,table.WithSetTTL
andtable.WithDropTTL
functions.
- Add Truncated flag support.
- Fixed a race between
SessionPool.Put
andSessionPool.Get
, where the latter would end up waiting forever for a session that is already in the pool.
- Changed semantics of
table.Result.O...
methods (e.g.,OUTF8
): it will not fail if current item is non-optional primitive.
- added CommitTx method, which returns QueryStats
- re-implementation of ydb.Value comparison
- fix basic examples
- increase default and minimum
Dialer.KeepAlive
setting
- added
ydbsql/connector
options to configure default list ofExecDataQueryOption
- tune
grpc.Conn
behaviour
- function to compare two ydb.Value
- support scan query execution
- add table Ttl options
- added
KeyBloomFilter
support forCreateTable
,AlterTable
andDescribeTalbe
- added
PartitioningSettings
support forCreateTable
,AlterTable
andDescribeTalbe
. Move toPartitioningSettings
object
- add
FastDial
option toDriverConfig
. This will allowDialer
to returnDriver
as soon as the 1st connection is ready.
- parallelize endpoint operations
- added
ProcessCPUTime
method toQueryStats
- added
ReadReplicasSettings
support forCreateTable
,AlterTable
andDescribeTalbe
- added
StorageSettings
support forCreateTable
,AlterTable
andDescribeTalbe
- added
PartitioningSettings
support forCreateTable
andAlterTable
- added
CPUTime
andAffectedShards
fields toQueryPhase
struct - added
CompilationStats
statistics
- support manage table attributes
- support Column Families
- support new types: DyNumber, JsonDocument
- added coordination service
- added rate_limiter service
- made
api
wrapper forinternal
api subset
- return TableStats and PartitionStats on DescribeTable request with options
- added
ydbsql/connector
option to configureDefaultTxControl
- support go modules tooling for ydbgen
- refactored
InstanceServiceAccount
: refresh token in background. Also, will never produce error on creation - added getting
ydb.Credentials
examples
- exported internal
api.Wrap
/api.Unwrap
methods and linked structures
- return on discovery only endpoints that match SSL status of driver
- added GCP metadata auth style with
InstanceServiceAccount
inauth.iam
- fix race in
auth.metadata
- fix races in test hooks
- set limits to grpc
MaxCallRecvMsgSize
andMaxCallSendMsgSize
to 64MB - remove deprecated IAM (jwt)
Client
structure - fix panic on nil dereference while accessing optional fields of
IssueMessage
message
- added options to
DescribeTable
request - added
ydbsql/connector
options to configurepool
sKeepAliveBatchSize
,KeepAliveTimeout
,CreateSessionTimeout
,DeleteTimeout
- set session keepAlive period to 5 min - same as in other SDKs
- fix panic on access to index after pool close
- added session pre-creation limit check in pool
- added discovery trigger on more then half unhealthy transport connects
- await transport connect only if no healthy connections left
- support cloud IAM (jwt) authorization from service account file
- minimum version of Go become 1.13. Started support of new
errors
features