Skip to content

Commit 829bca5

Browse files
solongordonrafiss
authored andcommitted
Call telemetry built-in on start-up
Backporting #196 as a squashed commit. Call the increment_feature_counter built-in at connection pool initialization time unless the disable_cockroachdb_telemetry config parameter is enabled.
1 parent 7695ffd commit 829bca5

File tree

5 files changed

+46
-1
lines changed

5 files changed

+46
-1
lines changed

README.md

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -27,6 +27,7 @@ development:
2727
In addition to the standard adapter settings, CockroachDB also supports the following:
2828

2929
- `use_follower_reads_for_type_introspection`: Use follower reads on queries to the `pg_type` catalog when set to `true`. This helps to speed up initialization by reading historical data, but may not find recently created user-defined types.
30+
- `disable_cockroachdb_telemetry`: Determines if a telemetry call is made to the database when the connection pool is initialized. Setting this to `true` will prevent the call from being made.
3031

3132
## Working with Spatial Data
3233

build/config.teamcity.yml

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -11,6 +11,7 @@ connections:
1111
user: root
1212
requiressl: disable
1313
min_messages: warning
14+
disable_cockroachdb_telemetry: true
1415
arunit_without_prepared_statements:
1516
database: activerecord_unittest
1617
host: localhost
@@ -19,10 +20,12 @@ connections:
1920
requiressl: disable
2021
min_messages: warning
2122
prepared_statements: false
23+
disable_cockroachdb_telemetry: true
2224
arunit2:
2325
database: activerecord_unittest2
2426
host: localhost
2527
port: 26257
2628
user: root
2729
requiressl: disable
2830
min_messages: warning
31+
disable_cockroachdb_telemetry: true

lib/active_record/connection_adapters/cockroachdb_adapter.rb

Lines changed: 25 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -51,6 +51,30 @@ def cockroachdb_connection(config)
5151

5252
module ActiveRecord
5353
module ConnectionAdapters
54+
module CockroachDBConnectionPool
55+
def initialize(spec)
56+
super(spec)
57+
disable_telemetry = spec.config[:disable_cockroachdb_telemetry]
58+
adapter = spec.config[:adapter]
59+
return if disable_telemetry || adapter != "cockroachdb"
60+
61+
with_connection do |conn|
62+
if conn.active?
63+
begin
64+
query = "SELECT crdb_internal.increment_feature_counter('ActiveRecord %d.%d')"
65+
conn.execute(query % [ActiveRecord::VERSION::MAJOR, ActiveRecord::VERSION::MINOR])
66+
rescue ActiveRecord::StatementInvalid
67+
# The increment_feature_counter built-in is not supported on this
68+
# CockroachDB version. Ignore.
69+
rescue StandardError => e
70+
conn.logger.warn "Unexpected error when incrementing feature counter: #{e}"
71+
end
72+
end
73+
end
74+
end
75+
end
76+
ConnectionPool.prepend(CockroachDBConnectionPool)
77+
5478
class CockroachDBAdapter < PostgreSQLAdapter
5579
ADAPTER_NAME = "CockroachDB".freeze
5680
DEFAULT_PRIMARY_KEY = "rowid"
@@ -239,6 +263,7 @@ def max_identifier_length
239263

240264
def initialize(connection, logger, conn_params, config)
241265
super(connection, logger, conn_params, config)
266+
242267
crdb_version_string = query_value("SHOW crdb_version")
243268
if crdb_version_string.include? "v1."
244269
version_num = 1

test/cases/adapters/postgresql/postgresql_adapter_test.rb

Lines changed: 14 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -16,7 +16,7 @@ def setup
1616
end
1717

1818
def teardown
19-
# use connection without follower_reads
19+
# use connection without follower_reads and telemetry
2020
database_config = { "adapter" => "cockroachdb", "database" => "activerecord_unittest" }
2121
ar_config = ActiveRecord::Base.configurations["arunit"]
2222
database_config.update(ar_config)
@@ -32,6 +32,19 @@ def test_database_exists_returns_false_when_the_database_does_not_exist
3232
"expected database #{bad_config[:database]} to not exist"
3333
end
3434

35+
def test_using_telemetry_builtin_connects_properly
36+
database_config = { "adapter" => "cockroachdb", "database" => "activerecord_unittest" }
37+
ar_config = ActiveRecord::Base.configurations["arunit"]
38+
database_config.update(ar_config)
39+
database_config[:disable_cockroachdb_telemetry] = false
40+
41+
ActiveRecord::Base.establish_connection(database_config)
42+
conn = ActiveRecord::Base.connection
43+
conn_config = conn.instance_variable_get("@config")
44+
45+
assert_equal(false, conn_config[:disable_cockroachdb_telemetry])
46+
end
47+
3548
def test_using_follower_reads_connects_properly
3649
database_config = { "use_follower_reads_for_type_introspection": true, "adapter" => "cockroachdb", "database" => "activerecord_unittest" }
3750
ar_config = ActiveRecord::Base.configurations["arunit"]

test/config.yml

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -5,14 +5,17 @@ connections:
55
host: localhost
66
port: 26257
77
user: root
8+
disable_cockroachdb_telemetry: true
89
arunit_without_prepared_statements:
910
min_messages: warning
1011
prepared_statements: false
1112
host: localhost
1213
port: 26257
1314
user: root
15+
disable_cockroachdb_telemetry: true
1416
arunit2:
1517
min_messages: warning
1618
host: localhost
1719
port: 26257
1820
user: root
21+
disable_cockroachdb_telemetry: true

0 commit comments

Comments
 (0)