-
Notifications
You must be signed in to change notification settings - Fork 114
Testing for telemetry #616
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
Open
saishreeeee
wants to merge
268
commits into
main
Choose a base branch
from
telemetry-testing
base: main
Could not load branches
Branch not found: {{ refName }}
Loading
Could not load tags
Nothing to show
Loading
Are you sure you want to change the base?
Some commits from the old base branch may be removed from the timeline,
and old review comments may become outdated.
Open
Changes from all commits
Commits
Show all changes
268 commits
Select commit
Hold shift + click to select a range
afcb0f0
[ES-402013] Close cursors before closing connection (#38)
af945aa
Bump version to 2.0.5 and improve CHANGELOG (#40)
441a6ae
fix dco issue
moderakh 29fe6b4
fix dco issue
moderakh 06d9df8
Merge pull request #42 from moderakh/fix-dco-issue
moderakh cf3130e
dco tunning
moderakh 4387f93
dco tunning
moderakh 285e516
Merge pull request #43 from moderakh/dco-tunning
moderakh ea0f076
Github workflows: run checks on pull requests from forks (#47)
616a5c8
OAuth implementation (#15)
moderakh e39d294
Automate deploys to Pypi (#48)
1ea2fe0
[PECO-205] Add functional examples (#52)
3638fa2
Bump version to 2.1.0 (#54)
1a4cf4b
[SC-110400] Enabling compression in Python SQL Connector (#49)
mohitsingla-db 8d6d47f
Add tests for parameter sanitisation / escaping (#46)
3d3c692
Bump thrift dependency to 0.16.0 (#65)
5cbfcac
Bump version to 2.2.0 (#66)
c6e573c
Support Python 3.11 (#60)
7c53b76
Bump version to 2.2.1 (#70)
4f221b3
Add none check on _oauth_persistence in DatabricksOAuthProvider (#71)
jackyhu-db cfa38a1
Support custom oauth client id and redirect port (#75)
jackyhu-db 2f2a761
Bump version to 2.2.2 (#76)
jackyhu-db def5e0e
Merge staging ingestion into main (#78)
3cc9393
Bump version to 2.3.0 and update changelog (#80)
aa55a6e
Add pkgutil-style for the package (#84)
lu-wang-dl ce158cb
Add SQLAlchemy Dialect (#57)
0ed7e53
Bump to version 2.4.0(#89)
9a06d6c
Fix syntax in examples in root readme. (#92)
shea-parkes 20e789f
Less strict numpy and pyarrow dependencies (#90)
3a60599
Update example in docstring so query output is valid Spark SQL (#95)
e627649
Bump version to 2.4.1 (#96)
c43eaf8
Update CODEOWNERS (#97)
moderakh b0b6abd
Add Andre to CODEOWNERS (#98)
yunbodeng-db f440791
Add external auth provider + example (#101)
andrefurlan-db 5f247e5
Retry on connection timeout (#103)
andrefurlan-db c1d9510
[PECO-244] Make http proxies work (#81)
c5731d8
Bump to version 2.5.0 (#104)
7087236
Fix changelog release date for version 2.5.0
61b6911
Relax sqlalchemy requirement (#113)
b5ab608
Update to version 2.5.1 (#114)
ad6fbd9
Fix SQLAlchemy timestamp converter + docs (#117)
73108e2
Relax pandas and alembic requirements (#119)
7d85814
Bump to version 2.5.2 (#118)
4077c7f
Use urllib3 for thrift transport + reuse http connections (#131)
cdf1857
Default socket timeout to 15 min (#137)
mattdeekay 5539b26
Bump version to 2.6.0 (#139)
728e2b1
Fix: some thrift RPCs failed with BadStatusLine (#141)
eada549
Bump version to 2.6.1 (#142)
cdc50d2
[ES-706907] Retry GetOperationStatus for http errors (#145)
2904788
Bump version to 2.6.2 (#147)
782ebb6
[PECO-626] Support OAuth flow for Databricks Azure (#86)
jackyhu-db b7ada62
Use a separate logger for unsafe thrift responses (#153)
c6cf88f
Improve e2e test development ergonomics (#155)
95cf95b
Don't raise exception when closing a stale Thrift session (#159)
3680a0f
Bump to version 2.7.0 (#161)
ba2cd84
Cloud Fetch download handler (#127)
mattdeekay 061c763
Cloud Fetch download manager (#146)
mattdeekay e8fc63b
Cloud fetch queue and integration (#151)
mattdeekay 813c73c
Cloud Fetch e2e tests (#154)
mattdeekay d3f0513
Update changelog for cloudfetch (#172)
mattdeekay 6786933
Improve sqlalchemy backward compatibility with 1.3.24 (#173)
203735f
OAuth: don't override auth headers with contents of .netrc file (#122)
bd08f58
Fix proxy connection pool creation (#158)
sebbegg 9508c4f
Relax pandas dependency constraint to allow ^2.0.0 (#164)
itsdani 8140be9
Use hex string version of operation ID instead of bytes (#170)
850235c
SQLAlchemy: fix has_table so it honours schema= argument (#174)
4c766ef
Fix socket timeout test (#144)
mattdeekay 7fe5ddf
Disable non_native_boolean_check_constraint (#120)
bkyryliuk 50dfd93
Remove unused import for SQLAlchemy 2 compatibility (#128)
WilliamGentry 4b0b8bd
Bump version to 2.8.0 (#178)
f07df30
Fix typo in python README quick start example (#186)
dbarrundia-tiger 683e03c
Configure autospec for mocked Client objects (#188)
d168598
Use urllib3 for retries (#182)
fcfe8f4
Bump version to 2.9.0 (#189)
972f7cc
Explicitly add urllib3 dependency (#191)
jacobus-herman 1c3ce1e
Bump to 2.9.1 (#195)
667f719
Make backwards compatible with urllib3~=1.0 (#197)
ddf8a5f
Convenience improvements to v3 retry logic (#199)
56c7d41
Bump version to 2.9.2 (#201)
312c7b9
Github Actions Fix: poetry install fails for python 3.7 tests (#208)
9bc0d3e
Make backwards compatible with urllib3~=1.0 [Follow up #197] (#206)
33390db
Bump version to 2.9.3 (#209)
e176f65
Add note to sqlalchemy example: IDENTITY isn't supported yet (#212)
854c56f
[PECO-1029] Updated thrift compiler version (#216)
nithinkdb 0d1d7d8
[PECO-1055] Updated thrift defs to allow Tsparkparameters (#220)
nithinkdb c32b71a
Update changelog to indicate that 2.9.1 and 2.9.2 have been yanked. (…
4588ff3
Fix changelog typo: _enable_v3_retries (#225)
b9bd2a1
Introduce SQLAlchemy reusable dialog tests (#125)
unj1m 329b7ee
[PECO-1026] Add Parameterized Query support to Python (#217)
nithinkdb 9489087
Parameterized queries: Add e2e tests for inference (#227)
b94f59e
[PECO-1109] Parameterized Query: add suport for inferring decimal typ…
9592098
SQLAlchemy 2: reorganise dialect files into a single directory (#231)
84a6cbc
[PECO-1083] Updated thrift files and added check for protocol version…
nithinkdb 9d93e1b
[PECO-840] Port staging ingestion behaviour to new UC Volumes (#235)
ef5fbda
Query parameters: implement support for binding NoneType parameters (…
f138703
SQLAlchemy 2: Bump dependency version and update e2e tests for existi…
04c99e4
Revert "[PECO-1083] Updated thrift files and added check for protocol…
cbe21e5
SQLAlchemy 2: add type compilation for all CamelCase types (#238)
77a8886
SQLAlchemy 2: add type compilation for uppercase types (#240)
4a70379
SQLAlchemy 2: Stop skipping all type tests (#242)
0e791ba
[PECO-1134] v3 Retries: allow users to bound the number of redirects …
f198a25
Parameters: Add type inference for BIGINT and TINYINT types (#246)
d975611
SQLAlchemy 2: Stop skipping some non-type tests (#247)
a596776
SQLAlchemy 2: implement and refactor schema reflection methods (#249)
16a5106
Add GovCloud domain into AWS domains (#252)
jackyhu-db ca84f1a
SQLAlchemy 2: Refactor __init__.py into base.py (#250)
45c6073
SQLAlchemy 2: Finish implementing all of ComponentReflectionTest (#251)
3a8b4ea
SQLAlchemy 2: Finish marking all tests in the suite (#253)
8a0ec56
SQLAlchemy 2: Finish organising compliance test suite (#256)
4905952
SQLAlchemy 2: Fix failing mypy checks from development (#257)
7444425
Enable cloud fetch by default (#258)
9a8ac88
[PECO-1137] Reintroduce protocol checking to Python test fw (#248)
nithinkdb 6bc7413
sqla2 clean-up: make sqlalchemy optional and don't mangle the user-ag…
95e5595
SQLAlchemy 2: Add support for TINYINT (#265)
c69d886
Add OAuth M2M example (#266)
jackyhu-db 012f6ed
Native Parameters: reintroduce INLINE approach with tests (#267)
b09ff05
Document behaviour of executemany (#213)
martinitus fd4336e
SQLAlchemy 2: Expose TIMESTAMP and TIMESTAMP_NTZ types to users (#268)
f3081a5
Drop Python 3.7 as a supported version (#270)
ff51bfb
GH Workflows: remove Python 3.7 from the matrix for _all_ workflows (…
ca000db
Add README and updated example for SQLAlchemy usage (#273)
6aa7890
Rewrite native parameter implementation with docs and tests (#281)
bf084fe
Enable v3 retries by default (#282)
23b51c9
security: bump pyarrow dependency to 14.0.1 (#284)
5a1acdc
Bump package version to 3.0.0 (#285)
e768d48
Fix docstring about default parameter approach (#287)
Falydoor 505a522
[PECO-1286] Add tests for complex types in query results (#293)
5c01874
sqlalchemy: fix deprecation warning for dbapi classmethod (#294)
2027145
[PECO-1297] sqlalchemy: fix: can't read columns for tables containing…
9e963a0
Prepared 3.0.1 release (#297)
f703d81
Make contents of `__init__.py` equal across projects (#304)
pietern bdd2cb6
Fix URI construction in ThriftBackend (#303)
NodeJSmith 00b8d3e
[sqlalchemy] Add table and column comment support (#329)
a6e81ed
Pin pandas and urllib3 versions to fix runtime issues in dbt-databric…
benc-db c89da23
SQLAlchemy: TINYINT types didn't reflect properly (#315)
TimTheinAtTabs 6482c76
[PECO-1435] Restore `tests.py` to the test suite (#331)
d20d931
Bump to version 3.0.2 (#335)
e3e0f49
Update some outdated OAuth comments (#339)
jackyhu-db 456fec5
Redact the URL query parameters from the urllib3.connectionpool logs …
mkazia-db 01cfc66
Bump to version 3.0.3 (#344)
jackyhu-db 9ff99b8
[PECO-1411] Support Databricks OAuth on GCP (#338)
jackyhu-db 072ef2c
[PECO-1414] Support Databricks native OAuth in Azure (#351)
jackyhu-db f52c658
Prep for Test Automation (#352)
benc-db b1bd792
Update code owners (#345)
yunbodeng-db 70f3738
Reverting retry behavior on 429s/503s to how it worked in 2.9.3 (#349)
benc-db 912127c
Bump to version 3.1.0 (#358)
jackyhu-db 1ed5c9d
[PECO-1440] Expose current query id on cursor object (#364)
kravets-levko 1577506
Add a default for retry after (#371)
benc-db e01ef74
Fix boolean literals (#357)
aholyoke 7cfd6f6
Don't retry network requests that fail with code 403 (#373)
6cf12fb
Bump to 3.1.1 (#374)
benc-db 02d08d6
Fix cookie setting (#379)
benc-db 4122597
Fixing a couple type problems: how I would address most of #381 (#382)
wyattscarpenter 3631e55
fix the return types of the classes' __enter__ functions (#384)
wyattscarpenter 4b1b7ad
Add Kravets Levko to codeowners (#386)
kravets-levko f2d927b
Prepare for 3.1.2 (#387)
benc-db 2d2f8f7
Update the proxy authentication (#354)
amir-haroun d9802a8
Fix failing tests (#392)
kravets-levko 9c158d9
Relax `pyarrow` pin (#389)
dhirschfeld 0400bdb
Fix log error in oauth.py (#269)
susodapop 683a033
Enable `delta.feature.allowColumnDefaults` for all tables (#343)
dhirschfeld 3a68fa8
Fix SQLAlchemy tests (#393)
kravets-levko 94a2597
Add more debug logging for CloudFetch (#395)
kravets-levko 3a50d70
Update Thrift package (#397)
m1n0 37d8a7b
Prepare release 3.2.0 (#396)
kravets-levko 0017b0c
move py.typed to correct places (#403)
wyattscarpenter 2a1875a
Upgrade mypy (#406)
wyattscarpenter 9fd4a25
Do not retry failing requests with status code 401 (#408)
Hodnebo 74bcc86
[PECO-1715] Remove username/password (BasicAuth) auth option (#409)
jackyhu-db e7c0c06
[PECO-1751] Refactor CloudFetch downloader: handle files sequentially…
kravets-levko 677483d
Fix CloudFetch retry policy to be compatible with all `urllib3` versi…
kravets-levko 512efca
Disable SSL verification for CloudFetch links (#414)
kravets-levko 1a1497b
Prepare relese 3.3.0 (#415)
kravets-levko b751088
Fix pandas 2.2.2 support (#416)
kfollesdal 4959197
[PECO-1801] Make OAuth as the default authenticator if no authenticat…
jackyhu-db 7467860
[PECO-1857] Use SSL options with HTTPS connection pool (#425)
kravets-levko 2de70ec
Prepare release v3.4.0 (#430)
kravets-levko 2675099
[PECO-1926] Create a non pyarrow flow to handle small results for the…
jprakash-db c755ecc
[PECO-1961] On non-retryable error, ensure PySQL includes useful info…
shivam2680 1a44d91
Reformatted all the files using black (#448)
jprakash-db 92dff6c
Prepare release v3.5.0 (#457)
jackyhu-db b4bcf8a
[PECO-2051] Add custom auth headers into cloud fetch request (#460)
jackyhu-db 28a0fe6
Prepare release 3.6.0 (#461)
jackyhu-db 82efe73
[ PECO - 1768 ] PySQL: adjust HTTP retry logic to align with Go and N…
jprakash-db 5e11582
[ PECO-2065 ] Create the async execution flow for the PySQL Connector…
jprakash-db a9ae775
Fix for check_types github action failing (#472)
jprakash-db c251d91
Remove upper caps on dependencies (#452)
arredond 8a63786
Updated the doc to specify native parameters in PUT operation is not …
jprakash-db 9d6813b
Incorrect rows in inline fetch result (#479)
jprakash-db 8468a2b
Bumped up to version 3.7.0 (#482)
jprakash-db aa673ac
PySQL Connector split into connector and sqlalchemy (#444)
jprakash-db fd7f85c
Removed CI CD for python3.8 (#490)
jprakash-db b20c55b
Added CI CD upto python 3.12 (#491)
jprakash-db d61a964
Merging changes from v3.7.1 release (#488)
jprakash-db efd82fb
Bumped up to version 4.0.0 (#493)
jprakash-db ed19388
Updated action's version (#455)
newwingbird f8f9f4e
Support Python 3.13 and update deps (#510)
dhirschfeld 0e51281
Improve debugging + fix PR review template (#514)
samikshya-db 9665a74
Forward porting all changes into 4.x.x. uptil v3.7.3 (#529)
jprakash-db b24ddd7
Updated the CODEOWNERS (#531)
jprakash-db 0013ba4
Add version check for urllib3 in backoff calculation (#526)
shivam2680 851d23b
[ES-1372353] make user_agent_header part of public API (#530)
shivam2680 f321b49
Updates runner used to run DCO check to use databricks-protected-runn…
madhav-db b000892
Support multiple timestamp formats in non arrow flow (#533)
jprakash-db 2553bcf
prepare release for v4.0.1 (#534)
shivam2680 078f41b
Relaxed bound for python-dateutil (#538)
jprakash-db adc2c86
Bumped up the version for 4.0.2 (#539)
jprakash-db f9fe172
Added example for async execute query (#537)
jprakash-db 6f99449
Added urllib3 version check (#547)
jprakash-db 6790dca
Bump version to 4.0.3 (#549)
jprakash-db 3a4d6d3
Cleanup fields as they might be deprecated/removed/change in the futu…
vikrantpuppala 557bb68
Refactor decimal conversion in PyArrow tables to use direct casting (…
jayantsing-db 9a3f946
[PECOBLR-361] convert column table to arrow if arrow present (#551)
shivam2680 7233e4e
Update CODEOWNERS (#562)
jprakash-db b88eba0
Enhance Cursor close handling and context manager exception managemen…
madhav-db 14c8a7e
PECOBLR-86 improve logging on python driver (#556)
saishreeeee 8013a0d
Update github actions run conditions (#569)
jprakash-db fdd385f
Added classes required for telemetry (#572)
saishreeeee 9dc7d52
E2E POC for python telemetry for connect logs (#581)
saishreeeee ce2cc1a
Merge branch 'main' into HEAD
saishreeeee 99ec875
Merge branch 'main' into telemetry
saishreeeee cf89ce3
Added functionality for export of failure logs (#591)
saishreeeee 380b0b9
bugfix: stalling test issue (close in TelemetryClientFactory) (#609)
saishreeeee 67a8497
added multithreaded tests, exeception handling tests
saishreeeee 23d8881
Updated tests (#614)
jprakash-db 350e745
Add test to check thrift field IDs (#602)
vikrantpuppala 4a2356d
Revert "Enhance Cursor close handling and context manager exception m…
madhav-db 97df72e
Bump version to 4.0.5 (#615)
madhav-db 76e60fe
Merge branch 'telemetry' into telemetry-testing
saishreeeee 6748c2c
Merge branch 'main' into telemetry
saishreeeee 5a84e11
Merge branch 'telemetry' into telemetry-testing
saishreeeee 70fd810
used batch size instead of default batch size
saishreeeee 0dfe0f4
Add functionality for export of latency logs via telemetry (#608)
saishreeeee 6c5d6ba
Merge branch 'telemetry' into telemetry-testing
saishreeeee 3e9b47d
tests
saishreeeee 11d41ce
test
saishreeeee 10375a8
Merge branch 'main' into telemetry
saishreeeee 8c0f474
Revert "Merge branch 'main' into telemetry"
saishreeeee 13ebfb4
Revert "Revert "Merge branch 'main' into telemetry""
saishreeeee 79db09f
workflows
saishreeeee 5005561
-
saishreeeee 50e771b
actual e2e
saishreeeee ea86fe2
temp
saishreeeee 96813ad
changed enums to follow proto, get_extractor returns None if not Curs…
saishreeeee 846e701
formatting
saishreeeee d939fe3
auth mech test fix
saishreeeee cac9c7a
import logging
saishreeeee 1355283
Merge branch 'telemetry' into telemetry-testing
saishreeeee c106b95
actual send telemetry
saishreeeee 1f13936
merge main
saishreeeee File filter
Filter by extension
Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
There are no files selected for viewing
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,85 @@ | ||
import threading | ||
from unittest.mock import patch | ||
import pytest | ||
|
||
from databricks.sql.telemetry.telemetry_client import TelemetryClient, TelemetryClientFactory | ||
from tests.e2e.test_driver import PySQLPytestTestCase | ||
|
||
def run_in_threads(target, num_threads, pass_index=False): | ||
"""Helper to run target function in multiple threads.""" | ||
threads = [ | ||
threading.Thread(target=target, args=(i,) if pass_index else ()) | ||
for i in range(num_threads) | ||
] | ||
for t in threads: | ||
t.start() | ||
for t in threads: | ||
t.join() | ||
|
||
|
||
class TestE2ETelemetry(PySQLPytestTestCase): | ||
|
||
@pytest.fixture(autouse=True) | ||
def telemetry_setup_teardown(self): | ||
""" | ||
This fixture ensures the TelemetryClientFactory is in a clean state | ||
before each test and shuts it down afterward. Using a fixture makes | ||
this robust and automatic. | ||
""" | ||
# --- SETUP --- | ||
if TelemetryClientFactory._executor: | ||
TelemetryClientFactory._executor.shutdown(wait=True) | ||
TelemetryClientFactory._clients.clear() | ||
TelemetryClientFactory._executor = None | ||
TelemetryClientFactory._initialized = False | ||
|
||
yield # This is where the test runs | ||
|
||
# --- TEARDOWN --- | ||
if TelemetryClientFactory._executor: | ||
TelemetryClientFactory._executor.shutdown(wait=True) | ||
TelemetryClientFactory._executor = None | ||
TelemetryClientFactory._initialized = False | ||
|
||
def test_concurrent_queries_sends_telemetry(self): | ||
""" | ||
An E2E test where concurrent threads execute real queries against | ||
the staging endpoint, while we capture and verify the generated telemetry. | ||
""" | ||
num_threads = 5 | ||
captured_telemetry = [] | ||
captured_telemetry_lock = threading.Lock() | ||
captured_responses = [] | ||
captured_responses_lock = threading.Lock() | ||
|
||
original_send_telemetry = TelemetryClient._send_telemetry | ||
original_callback = TelemetryClient._telemetry_request_callback | ||
|
||
def send_telemetry_wrapper(self_client, events): | ||
with captured_telemetry_lock: | ||
captured_telemetry.extend(events) | ||
original_send_telemetry(self_client, events) | ||
|
||
with patch.object(TelemetryClient, "_send_telemetry", send_telemetry_wrapper): | ||
|
||
def execute_query_worker(thread_id): | ||
"""Each thread creates a connection and executes a query.""" | ||
with self.connection(extra_params={"enable_telemetry": True}) as conn: | ||
with conn.cursor() as cursor: | ||
cursor.execute(f"SELECT {thread_id}") | ||
cursor.fetchall() | ||
|
||
# Run the workers concurrently | ||
run_in_threads(execute_query_worker, num_threads, pass_index=True) | ||
|
||
if TelemetryClientFactory._executor: | ||
TelemetryClientFactory._executor.shutdown(wait=True) | ||
|
||
# --- VERIFICATION --- | ||
assert len(captured_telemetry) == num_threads * 3 # 4 events per thread (initial_telemetry_log, 2 latency_logs (execute, fetchall)) | ||
|
||
events_with_latency = [ | ||
e for e in captured_telemetry | ||
if e.entry.sql_driver_log.operation_latency_ms is not None and e.entry.sql_driver_log.sql_statement_id is not None | ||
] | ||
assert len(events_with_latency) == num_threads * 2 # 2 events per thread (execute, fetchall) |
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Oops, something went wrong.
Add this suggestion to a batch that can be applied as a single commit.
This suggestion is invalid because no changes were made to the code.
Suggestions cannot be applied while the pull request is closed.
Suggestions cannot be applied while viewing a subset of changes.
Only one suggestion per line can be applied in a batch.
Add this suggestion to a batch that can be applied as a single commit.
Applying suggestions on deleted lines is not supported.
You must change the existing code in this line in order to create a valid suggestion.
Outdated suggestions cannot be applied.
This suggestion has been applied or marked resolved.
Suggestions cannot be applied from pending reviews.
Suggestions cannot be applied on multi-line comments.
Suggestions cannot be applied while the pull request is queued to merge.
Suggestion cannot be applied right now. Please check back later.
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.
should we add these in a separate file? @jprakash-db what's the sop in python?