Skip to content

Commit c39f57f

Browse files
ankiagaolavloite
andauthored
feat: add connection property for enableEndToEndTracing (#307)
* feat: Enabling endToEndTracing support * Fix * Update driver.go Co-authored-by: Knut Olav Løite <koloite@gmail.com> --------- Co-authored-by: Knut Olav Løite <koloite@gmail.com>
1 parent 2b783c4 commit c39f57f

File tree

2 files changed

+20
-11
lines changed

2 files changed

+20
-11
lines changed

driver.go

Lines changed: 10 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -57,14 +57,16 @@ const userAgent = "go-sql-spanner/1.0.2"
5757
// - disableRouteToLeader: Boolean that indicates if all the requests of type read-write and PDML
5858
// need to be routed to the leader region.
5959
// The default is false
60+
// - enableEndToEndTracing: Boolean that indicates if end-to-end tracing is enabled
61+
// The default is false
6062
// - minSessions: The minimum number of sessions in the backing session pool. The default is 100.
6163
// - maxSessions: The maximum number of sessions in the backing session pool. The default is 400.
6264
// - numChannels: The number of gRPC channels to use to communicate with Cloud Spanner. The default is 4.
6365
// - optimizerVersion: Sets the default query optimizer version to use for this connection.
6466
// - optimizerStatisticsPackage: Sets the default query optimizer statistic package to use for this connection.
6567
// - rpcPriority: Sets the priority for all RPC invocations from this connection (HIGH/MEDIUM/LOW). The default is HIGH.
6668
//
67-
// Example: `localhost:9010/projects/test-project/instances/test-instance/databases/test-database;usePlainText=true;disableRouteToLeader=true`
69+
// Example: `localhost:9010/projects/test-project/instances/test-instance/databases/test-database;usePlainText=true;disableRouteToLeader=true;enableEndToEndTracing=true`
6870
var dsnRegExp = regexp.MustCompile(`((?P<HOSTGROUP>[\w.-]+(?:\.[\w\.-]+)*[\w\-\._~:/?#\[\]@!\$&'\(\)\*\+,;=.]+)/)?projects/(?P<PROJECTGROUP>(([a-z]|[-.:]|[0-9])+|(DEFAULT_PROJECT_ID)))(/instances/(?P<INSTANCEGROUP>([a-z]|[-]|[0-9])+)(/databases/(?P<DATABASEGROUP>([a-z]|[-]|[_]|[0-9])+))?)?(([\?|;])(?P<PARAMSGROUP>.*))?`)
6971

7072
var _ driver.DriverContext = &Driver{}
@@ -268,6 +270,11 @@ func newConnector(d *Driver, dsn string) (*connector, error) {
268270
config.DisableRouteToLeader = val
269271
}
270272
}
273+
if strval, ok := connectorConfig.params["enableendtoendtracing"]; ok {
274+
if val, err := strconv.ParseBool(strval); err == nil {
275+
config.EnableEndToEndTracing = val
276+
}
277+
}
271278
config.UserAgent = userAgent
272279

273280
c := &connector{
@@ -1143,8 +1150,8 @@ var valuerReflectType = reflect.TypeOf((*driver.Valuer)(nil)).Elem()
11431150
// to those types to mean nil/NULL, just like the Go database/sql package.
11441151
func callValuerValue(vr driver.Valuer) (v driver.Value, err error) {
11451152
if rv := reflect.ValueOf(vr); rv.Kind() == reflect.Ptr &&
1146-
rv.IsNil() &&
1147-
rv.Type().Elem().Implements(valuerReflectType) {
1153+
rv.IsNil() &&
1154+
rv.Type().Elem().Implements(valuerReflectType) {
11481155
return nil, nil
11491156
}
11501157
return vr.Value()

driver_test.go

Lines changed: 10 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -154,7 +154,7 @@ func TestExtractDnsParts(t *testing.T) {
154154
},
155155
},
156156
{
157-
input: "spanner.googleapis.com/projects/p/instances/i/databases/d?minSessions=200;maxSessions=1000;numChannels=10;disableRouteToLeader=true;rpcPriority=Medium;optimizerVersion=1;optimizerStatisticsPackage=latest;databaseRole=child",
157+
input: "spanner.googleapis.com/projects/p/instances/i/databases/d?minSessions=200;maxSessions=1000;numChannels=10;disableRouteToLeader=true;enableEndToEndTracing=true;rpcPriority=Medium;optimizerVersion=1;optimizerStatisticsPackage=latest;databaseRole=child",
158158
wantConnectorConfig: connectorConfig{
159159
host: "spanner.googleapis.com",
160160
project: "p",
@@ -165,6 +165,7 @@ func TestExtractDnsParts(t *testing.T) {
165165
"maxsessions": "1000",
166166
"numchannels": "10",
167167
"disableroutetoleader": "true",
168+
"enableendtoendtracing": "true",
168169
"rpcpriority": "Medium",
169170
"optimizerversion": "1",
170171
"optimizerstatisticspackage": "latest",
@@ -183,13 +184,14 @@ func TestExtractDnsParts(t *testing.T) {
183184
TrackSessionHandles: spanner.DefaultSessionPoolConfig.TrackSessionHandles,
184185
InactiveTransactionRemovalOptions: spanner.DefaultSessionPoolConfig.InactiveTransactionRemovalOptions,
185186
},
186-
NumChannels: 10,
187-
UserAgent: userAgent,
188-
DisableRouteToLeader: true,
189-
QueryOptions: spanner.QueryOptions{Priority: spannerpb.RequestOptions_PRIORITY_MEDIUM, Options: &spannerpb.ExecuteSqlRequest_QueryOptions{OptimizerVersion: "1", OptimizerStatisticsPackage: "latest"}},
190-
ReadOptions: spanner.ReadOptions{Priority: spannerpb.RequestOptions_PRIORITY_MEDIUM},
191-
TransactionOptions: spanner.TransactionOptions{CommitPriority: spannerpb.RequestOptions_PRIORITY_MEDIUM},
192-
DatabaseRole: "child",
187+
NumChannels: 10,
188+
UserAgent: userAgent,
189+
DisableRouteToLeader: true,
190+
EnableEndToEndTracing: true,
191+
QueryOptions: spanner.QueryOptions{Priority: spannerpb.RequestOptions_PRIORITY_MEDIUM, Options: &spannerpb.ExecuteSqlRequest_QueryOptions{OptimizerVersion: "1", OptimizerStatisticsPackage: "latest"}},
192+
ReadOptions: spanner.ReadOptions{Priority: spannerpb.RequestOptions_PRIORITY_MEDIUM},
193+
TransactionOptions: spanner.TransactionOptions{CommitPriority: spannerpb.RequestOptions_PRIORITY_MEDIUM},
194+
DatabaseRole: "child",
193195
},
194196
},
195197
{

0 commit comments

Comments
 (0)