Skip to content

Commit fd55f6a

Browse files
committed
server: add Transaction Diagnostic Bundle APIs
This commit adds 3 new endpoints to the status server to support: - creating transaction diagnostic bundle requests - cancelling transaction diagnostic bundle requests - listing all outstanding transaction diagnostic bundle requests A new `TxnDiagnosticsRequester` interface is defined in `transaction_diagnostic_requests.go` which the `TxnRegistry` now implements to support the create and cancel operations since they need to interact with the registry at run-time. Resolves: CRDB-53544 Epic: CRDB-53541 Release note: None
1 parent f33561f commit fd55f6a

File tree

17 files changed

+998
-3
lines changed

17 files changed

+998
-3
lines changed

docs/generated/http/full.md

Lines changed: 185 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -4719,6 +4719,191 @@ Support status: [reserved](#support-status)
47194719

47204720

47214721

4722+
## CreateTransactionDiagnosticsReport
4723+
4724+
`POST /_status/txndiagreports`
4725+
4726+
4727+
4728+
Support status: [reserved](#support-status)
4729+
4730+
#### Request Parameters
4731+
4732+
4733+
4734+
4735+
createTransactionDiagnosticsReportRequest is a message that captures a
4736+
user's requst to capture a transaction diagnostic bundle.
4737+
4738+
4739+
| Field | Type | Label | Description | Support status |
4740+
| ----- | ---- | ----- | ----------- | -------------- |
4741+
| transaction_fingerprint_id | [bytes](#cockroach.server.serverpb.CreateTransactionDiagnosticsReportRequest-bytes) | | | [reserved](#support-status) |
4742+
| statement_fingerprint_ids | [bytes](#cockroach.server.serverpb.CreateTransactionDiagnosticsReportRequest-bytes) | repeated | | [reserved](#support-status) |
4743+
| min_execution_latency | [google.protobuf.Duration](#cockroach.server.serverpb.CreateTransactionDiagnosticsReportRequest-google.protobuf.Duration) | | | [reserved](#support-status) |
4744+
| expires_at | [google.protobuf.Duration](#cockroach.server.serverpb.CreateTransactionDiagnosticsReportRequest-google.protobuf.Duration) | | | [reserved](#support-status) |
4745+
| sampling_probability | [double](#cockroach.server.serverpb.CreateTransactionDiagnosticsReportRequest-double) | | | [reserved](#support-status) |
4746+
| redacted | [bool](#cockroach.server.serverpb.CreateTransactionDiagnosticsReportRequest-bool) | | | [reserved](#support-status) |
4747+
4748+
4749+
4750+
4751+
4752+
4753+
4754+
#### Response Parameters
4755+
4756+
4757+
4758+
4759+
4760+
4761+
4762+
| Field | Type | Label | Description | Support status |
4763+
| ----- | ---- | ----- | ----------- | -------------- |
4764+
| report | [TransactionDiagnosticsReport](#cockroach.server.serverpb.CreateTransactionDiagnosticsReportResponse-cockroach.server.serverpb.TransactionDiagnosticsReport) | | | [reserved](#support-status) |
4765+
4766+
4767+
4768+
4769+
4770+
4771+
<a name="cockroach.server.serverpb.CreateTransactionDiagnosticsReportResponse-cockroach.server.serverpb.TransactionDiagnosticsReport"></a>
4772+
#### TransactionDiagnosticsReport
4773+
4774+
TransactionDiagnosticsReport is a message that represents a
4775+
diagnostics capture request for a given transaction.
4776+
4777+
| Field | Type | Label | Description | Support status |
4778+
| ----- | ---- | ----- | ----------- | -------------- |
4779+
| id | [int64](#cockroach.server.serverpb.CreateTransactionDiagnosticsReportResponse-int64) | | | [reserved](#support-status) |
4780+
| completed | [bool](#cockroach.server.serverpb.CreateTransactionDiagnosticsReportResponse-bool) | | | [reserved](#support-status) |
4781+
| transaction_fingerprint_id | [bytes](#cockroach.server.serverpb.CreateTransactionDiagnosticsReportResponse-bytes) | | TODO(davidh): should these be strings or int64??? I think bytes is most correct. | [reserved](#support-status) |
4782+
| statement_fingerprint_ids | [bytes](#cockroach.server.serverpb.CreateTransactionDiagnosticsReportResponse-bytes) | repeated | | [reserved](#support-status) |
4783+
| transaction_fingerprint | [string](#cockroach.server.serverpb.CreateTransactionDiagnosticsReportResponse-string) | | | [reserved](#support-status) |
4784+
| transaction_diagnostics_id | [int64](#cockroach.server.serverpb.CreateTransactionDiagnosticsReportResponse-int64) | | | [reserved](#support-status) |
4785+
| requested_at | [google.protobuf.Timestamp](#cockroach.server.serverpb.CreateTransactionDiagnosticsReportResponse-google.protobuf.Timestamp) | | | [reserved](#support-status) |
4786+
| min_execution_latency | [google.protobuf.Duration](#cockroach.server.serverpb.CreateTransactionDiagnosticsReportResponse-google.protobuf.Duration) | | | [reserved](#support-status) |
4787+
| expires_at | [google.protobuf.Timestamp](#cockroach.server.serverpb.CreateTransactionDiagnosticsReportResponse-google.protobuf.Timestamp) | | | [reserved](#support-status) |
4788+
| sampling_probability | [double](#cockroach.server.serverpb.CreateTransactionDiagnosticsReportResponse-double) | | | [reserved](#support-status) |
4789+
| redacted | [bool](#cockroach.server.serverpb.CreateTransactionDiagnosticsReportResponse-bool) | | | [reserved](#support-status) |
4790+
| username | [string](#cockroach.server.serverpb.CreateTransactionDiagnosticsReportResponse-string) | | | [reserved](#support-status) |
4791+
4792+
4793+
4794+
4795+
4796+
4797+
## CancelTransactionDiagnosticsReport
4798+
4799+
`POST /_status/txndiagreports/cancel`
4800+
4801+
4802+
4803+
Support status: [reserved](#support-status)
4804+
4805+
#### Request Parameters
4806+
4807+
4808+
4809+
4810+
4811+
4812+
4813+
| Field | Type | Label | Description | Support status |
4814+
| ----- | ---- | ----- | ----------- | -------------- |
4815+
| request_id | [int64](#cockroach.server.serverpb.CancelTransactionDiagnosticsReportRequest-int64) | | | [reserved](#support-status) |
4816+
4817+
4818+
4819+
4820+
4821+
4822+
4823+
#### Response Parameters
4824+
4825+
4826+
4827+
4828+
4829+
4830+
4831+
| Field | Type | Label | Description | Support status |
4832+
| ----- | ---- | ----- | ----------- | -------------- |
4833+
| canceled | [bool](#cockroach.server.serverpb.CancelTransactionDiagnosticsReportResponse-bool) | | canceled indicates whether the request for the given fingerprint was actually canceled. | [reserved](#support-status) |
4834+
| error | [string](#cockroach.server.serverpb.CancelTransactionDiagnosticsReportResponse-string) | | error is set only if canceled is false. | [reserved](#support-status) |
4835+
4836+
4837+
4838+
4839+
4840+
4841+
4842+
## TransactionDiagnosticsRequests
4843+
4844+
`GET /_status/txndiagreports`
4845+
4846+
4847+
4848+
Support status: [reserved](#support-status)
4849+
4850+
#### Request Parameters
4851+
4852+
4853+
4854+
4855+
4856+
4857+
4858+
4859+
4860+
4861+
4862+
4863+
4864+
#### Response Parameters
4865+
4866+
4867+
4868+
4869+
4870+
4871+
4872+
| Field | Type | Label | Description | Support status |
4873+
| ----- | ---- | ----- | ----------- | -------------- |
4874+
| reports | [TransactionDiagnosticsReport](#cockroach.server.serverpb.TransactionDiagnosticsReportsResponse-cockroach.server.serverpb.TransactionDiagnosticsReport) | repeated | | [reserved](#support-status) |
4875+
4876+
4877+
4878+
4879+
4880+
4881+
<a name="cockroach.server.serverpb.TransactionDiagnosticsReportsResponse-cockroach.server.serverpb.TransactionDiagnosticsReport"></a>
4882+
#### TransactionDiagnosticsReport
4883+
4884+
TransactionDiagnosticsReport is a message that represents a
4885+
diagnostics capture request for a given transaction.
4886+
4887+
| Field | Type | Label | Description | Support status |
4888+
| ----- | ---- | ----- | ----------- | -------------- |
4889+
| id | [int64](#cockroach.server.serverpb.TransactionDiagnosticsReportsResponse-int64) | | | [reserved](#support-status) |
4890+
| completed | [bool](#cockroach.server.serverpb.TransactionDiagnosticsReportsResponse-bool) | | | [reserved](#support-status) |
4891+
| transaction_fingerprint_id | [bytes](#cockroach.server.serverpb.TransactionDiagnosticsReportsResponse-bytes) | | TODO(davidh): should these be strings or int64??? I think bytes is most correct. | [reserved](#support-status) |
4892+
| statement_fingerprint_ids | [bytes](#cockroach.server.serverpb.TransactionDiagnosticsReportsResponse-bytes) | repeated | | [reserved](#support-status) |
4893+
| transaction_fingerprint | [string](#cockroach.server.serverpb.TransactionDiagnosticsReportsResponse-string) | | | [reserved](#support-status) |
4894+
| transaction_diagnostics_id | [int64](#cockroach.server.serverpb.TransactionDiagnosticsReportsResponse-int64) | | | [reserved](#support-status) |
4895+
| requested_at | [google.protobuf.Timestamp](#cockroach.server.serverpb.TransactionDiagnosticsReportsResponse-google.protobuf.Timestamp) | | | [reserved](#support-status) |
4896+
| min_execution_latency | [google.protobuf.Duration](#cockroach.server.serverpb.TransactionDiagnosticsReportsResponse-google.protobuf.Duration) | | | [reserved](#support-status) |
4897+
| expires_at | [google.protobuf.Timestamp](#cockroach.server.serverpb.TransactionDiagnosticsReportsResponse-google.protobuf.Timestamp) | | | [reserved](#support-status) |
4898+
| sampling_probability | [double](#cockroach.server.serverpb.TransactionDiagnosticsReportsResponse-double) | | | [reserved](#support-status) |
4899+
| redacted | [bool](#cockroach.server.serverpb.TransactionDiagnosticsReportsResponse-bool) | | | [reserved](#support-status) |
4900+
| username | [string](#cockroach.server.serverpb.TransactionDiagnosticsReportsResponse-string) | | | [reserved](#support-status) |
4901+
4902+
4903+
4904+
4905+
4906+
47224907
## JobRegistryStatus
47234908

47244909
`GET /_status/job_registry/{node_id}`

pkg/server/BUILD.bazel

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -82,6 +82,7 @@ go_library(
8282
"testserver.go",
8383
"testserver_http.go",
8484
"testserver_sqlconn.go",
85+
"transaction_diagnostics_requests.go",
8586
"user.go",
8687
],
8788
cgo = True,

pkg/server/apiinternal/api_internal_status.go

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -57,6 +57,11 @@ func (r *apiInternalServer) registerStatusRoutes() {
5757
{POST, "/_status/stmtdiagreports/cancel", createHandler(r.status.CancelStatementDiagnosticsReport)},
5858
{GET, "/_status/stmtdiag/{statement_diagnostics_id}", createHandler(r.status.StatementDiagnostics)},
5959

60+
// Transaction diagnostics
61+
{GET, "/_status/txndiagreports", createHandler(r.status.TransactionDiagnosticsRequests)},
62+
{POST, "/_status/txndiagreports", createHandler(r.status.CreateTransactionDiagnosticsReport)},
63+
{POST, "/_status/txndiagreports/cancel", createHandler(r.status.CancelTransactionDiagnosticsReport)},
64+
6065
// Index statistics
6166
{GET, "/_status/indexusagestatistics", createHandler(r.status.IndexUsageStatistics)},
6267
{POST, "/_status/resetindexusagestats", createHandler(r.status.ResetIndexUsageStats)},

pkg/server/application_api/BUILD.bazel

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -29,9 +29,11 @@ go_test(
2929
"stmtdiag_test.go",
3030
"storage_inspection_test.go",
3131
"telemetry_test.go",
32+
"txndiag_test.go",
3233
"util_test.go",
3334
"zcfg_test.go",
3435
],
36+
embed = [":application_api"],
3537
exec_properties = select({
3638
"//build/toolchains:is_heavy": {"test.Pool": "heavy"},
3739
"//conditions:default": {"test.Pool": "default"},
@@ -69,12 +71,15 @@ go_test(
6971
"//pkg/sql/catalog/descpb",
7072
"//pkg/sql/clusterunique",
7173
"//pkg/sql/idxusage",
74+
"//pkg/sql/isql",
7275
"//pkg/sql/sem/catconstants",
7376
"//pkg/sql/sem/tree",
7477
"//pkg/sql/sessiondata",
7578
"//pkg/sql/sqlstats",
7679
"//pkg/sql/sqlstats/persistedsqlstats",
7780
"//pkg/sql/sqlstats/persistedsqlstats/sqlstatstestutil",
81+
"//pkg/sql/sqlstats/persistedsqlstats/sqlstatsutil",
82+
"//pkg/sql/types",
7883
"//pkg/storage/fs",
7984
"//pkg/testutils",
8085
"//pkg/testutils/diagutils",

0 commit comments

Comments
 (0)