diff --git a/go.mod b/go.mod index 4f0346edbe5..ae7752aa990 100644 --- a/go.mod +++ b/go.mod @@ -204,6 +204,7 @@ require ( github.com/google/go-tpm v0.9.7 // indirect github.com/google/uuid v1.6.0 // indirect github.com/grpc-ecosystem/grpc-gateway/v2 v2.27.3 // indirect + github.com/hailocab/go-hostpool v0.0.0-20160125115350-e80d13ce29ed // indirect github.com/hashicorp/go-uuid v1.0.3 // indirect github.com/hashicorp/go-version v1.8.0 // indirect github.com/hashicorp/golang-lru v1.0.2 // indirect diff --git a/go.sum b/go.sum index 961bd8b59b2..0bd31d16b02 100644 --- a/go.sum +++ b/go.sum @@ -94,6 +94,10 @@ github.com/bboreham/go-loser v0.0.0-20230920113527-fcc2c21820a3 h1:6df1vn4bBlDDo github.com/bboreham/go-loser v0.0.0-20230920113527-fcc2c21820a3/go.mod h1:CIWtjkly68+yqLPbvwwR/fjNJA/idrtULjZWh2v1ys0= github.com/beorn7/perks v1.0.1 h1:VlbKKnNfV8bJzeqoa4cOKqO6bYr3WgKZxO8Z16+hsOM= github.com/beorn7/perks v1.0.1/go.mod h1:G2ZrVWU2WbWT9wwq4/hrbKbnv/1ERSJQ0ibhJ6rlkpw= +github.com/bitly/go-hostpool v0.0.0-20171023180738-a3a6125de932 h1:mXoPYz/Ul5HYEDvkta6I8/rnYM5gSdSV2tJ6XbZuEtY= +github.com/bitly/go-hostpool v0.0.0-20171023180738-a3a6125de932/go.mod h1:NOuUCSz6Q9T7+igc/hlvDOUdtWKryOrtFyIVABv/p7k= +github.com/bmizerany/assert v0.0.0-20160611221934-b7ed37b82869 h1:DDGfHa7BWjL4YnC6+E63dPcxHo2sUxDIu8g3QgEJdRY= +github.com/bmizerany/assert v0.0.0-20160611221934-b7ed37b82869/go.mod h1:Ekp36dRnpXw/yCqJaO+ZrUyxD+3VXMFFr56k5XYrpB4= github.com/cenkalti/backoff/v4 v4.3.0 h1:MyRJ/UdXutAwSAT+s3wNd7MfTIcy71VQueUuFK343L8= github.com/cenkalti/backoff/v4 v4.3.0/go.mod h1:Y3VNntkOUPxTVeUxJ/G5vcM//AlwfmyYozVcomhLiZE= github.com/cenkalti/backoff/v5 v5.0.3 h1:ZN+IMa753KfX5hd8vVaMixjnqRZ3y8CuJKRKj1xcsSM= @@ -227,6 +231,8 @@ github.com/goccy/go-json v0.10.5 h1:Fq85nIqj+gXn/S5ahsiTlK3TmC85qgirsdTP/+DeaC4= github.com/goccy/go-json v0.10.5/go.mod h1:oq7eo15ShAhp70Anwd5lgX2pLfOS3QCiwU/PULtXL6M= github.com/goccy/go-yaml v1.19.0 h1:EmkZ9RIsX+Uq4DYFowegAuJo8+xdX3T/2dwNPXbxEYE= github.com/goccy/go-yaml v1.19.0/go.mod h1:XBurs7gK8ATbW4ZPGKgcbrY1Br56PdM69F7LkFRi1kA= +github.com/gocql/gocql v1.7.0 h1:O+7U7/1gSN7QTEAaMEsJc1Oq2QHXvCWoF3DFK9HDHus= +github.com/gocql/gocql v1.7.0/go.mod h1:vnlvXyFZeLBF0Wy+RS8hrOdbn0UWsWtdg07XJnFxZ+4= github.com/gogo/googleapis v1.4.1 h1:1Yx4Myt7BxzvUr5ldGSbwYiZG6t9wGBZ+8/fX3Wvtq0= github.com/gogo/googleapis v1.4.1/go.mod h1:2lpHqI5OcWCtVElxXnPt+s8oJvMpySlOyM6xDCrzib4= github.com/gogo/protobuf v1.3.2 h1:Ov1cvc58UF3b5XjBnZv7+opcTcQFZebYjWzi34vdm4Q= @@ -239,6 +245,7 @@ github.com/golang/protobuf v1.5.0/go.mod h1:FsONVRAS9T7sI+LIUmWTfcYkHO4aIWwzhcaS github.com/golang/protobuf v1.5.4 h1:i7eJL8qZTpSEXOPTxNKhASYpMn+8e5Q6AdndVa1dWek= github.com/golang/protobuf v1.5.4/go.mod h1:lnTiLA8Wa4RWRcIUkrtSVa5nRhsEGBg48fD6rSs7xps= github.com/golang/snappy v0.0.1/go.mod h1:/XxbfmMg8lxefKM7IXC3fBNl/7bRcc72aCRzEWrmP2Q= +github.com/golang/snappy v0.0.3/go.mod h1:/XxbfmMg8lxefKM7IXC3fBNl/7bRcc72aCRzEWrmP2Q= github.com/golang/snappy v1.0.0 h1:Oy607GVXHs7RtbggtPBnr2RmDArIsAefDwvrdWvRhGs= github.com/golang/snappy v1.0.0/go.mod h1:/XxbfmMg8lxefKM7IXC3fBNl/7bRcc72aCRzEWrmP2Q= github.com/google/flatbuffers v25.2.10+incompatible h1:F3vclr7C3HpB1k9mxCGRMXq6FdUalZ6H/pNX4FP1v0Q= @@ -280,6 +287,8 @@ github.com/grafana/regexp v0.0.0-20250905093917-f7b3be9d1853 h1:cLN4IBkmkYZNnk7E github.com/grafana/regexp v0.0.0-20250905093917-f7b3be9d1853/go.mod h1:+JKpmjMGhpgPL+rXZ5nsZieVzvarn86asRlBg4uNGnk= github.com/grpc-ecosystem/grpc-gateway/v2 v2.27.3 h1:NmZ1PKzSTQbuGHw9DGPFomqkkLWMC+vZCkfs+FHv1Vg= github.com/grpc-ecosystem/grpc-gateway/v2 v2.27.3/go.mod h1:zQrxl1YP88HQlA6i9c63DSVPFklWpGX4OWAc9bFuaH4= +github.com/hailocab/go-hostpool v0.0.0-20160125115350-e80d13ce29ed h1:5upAirOpQc1Q53c0bnx2ufif5kANL7bfZWcc6VJWJd8= +github.com/hailocab/go-hostpool v0.0.0-20160125115350-e80d13ce29ed/go.mod h1:tMWxXQ9wFIaZeTI9F+hmhFiGpFmhOHzyShyFUhRm0H4= github.com/hashicorp/consul/api v1.32.0 h1:5wp5u780Gri7c4OedGEPzmlUEzi0g2KyiPphSr6zjVg= github.com/hashicorp/consul/api v1.32.0/go.mod h1:Z8YgY0eVPukT/17ejW+l+C7zJmKwgPHtjU1q16v/Y40= github.com/hashicorp/cronexpr v1.1.3 h1:rl5IkxXN2m681EfivTlccqIryzYJSXRGRNa0xeG7NA4= diff --git a/internal/storage/integration/fixtures/traces/default.json b/internal/storage/integration/fixtures/traces/default.json index cdc08db0a4c..c19c2d54944 100644 --- a/internal/storage/integration/fixtures/traces/default.json +++ b/internal/storage/integration/fixtures/traces/default.json @@ -1,25 +1,36 @@ { - "spans": [ + "resourceSpans": [ { - "traceId": "AAAAAAAAAAAAAAAAAAAAEQ==", - "spanId": "AAAAAAAAAAM=", - "operationName": "", - "references": [], - "startTime": "2017-01-26T16:46:31.639875Z", - "duration": "100000ns", - "tags": [], - "process": { - "serviceName": "query11-service", - "tags": [] + "resource": { + "attributes": [ + { + "key": "service.name", + "value": { + "stringValue": "query11-service" + } + } + ] }, - "logs": [ + "scopeSpans": [ { - "timestamp": "2017-01-26T16:46:31.639875Z", - "fields": [] - }, - { - "timestamp": "2017-01-26T16:46:31.639875Z", - "fields": [] + "scope": {}, + "spans": [ + { + "traceId": "00000000000000000000000000000011", + "spanId": "0000000000000003", + "startTimeUnixNano": "1485449191639875000", + "endTimeUnixNano": "1485449191639975000", + "events": [ + { + "timeUnixNano": "1485449191639875000" + }, + { + "timeUnixNano": "1485449191639875000" + } + ], + "status": {} + } + ] } ] } diff --git a/internal/storage/integration/fixtures/traces/dur_trace.json b/internal/storage/integration/fixtures/traces/dur_trace.json index 18d1088e377..deb6f94a2d7 100644 --- a/internal/storage/integration/fixtures/traces/dur_trace.json +++ b/internal/storage/integration/fixtures/traces/dur_trace.json @@ -1,25 +1,37 @@ { - "spans": [ + "resourceSpans": [ { - "traceId": "AAAAAAAAAAAAAAAAAAAACQ==", - "spanId": "AAAAAAAAAAM=", - "operationName": "placeholder", - "references": [], - "startTime": "2017-01-26T16:46:31.639875Z", - "duration": "5000ns", - "tags": [], - "process": { - "serviceName": "query09-service", - "tags": [] + "resource": { + "attributes": [ + { + "key": "service.name", + "value": { + "stringValue": "query09-service" + } + } + ] }, - "logs": [ + "scopeSpans": [ { - "timestamp": "2017-01-26T16:46:31.639875Z", - "fields": [] - }, - { - "timestamp": "2017-01-26T16:46:31.639875Z", - "fields": [] + "scope": {}, + "spans": [ + { + "traceId": "00000000000000000000000000000009", + "spanId": "0000000000000003", + "name": "placeholder", + "startTimeUnixNano": "1485449191639875000", + "endTimeUnixNano": "1485449191639880000", + "events": [ + { + "timeUnixNano": "1485449191639875000" + }, + { + "timeUnixNano": "1485449191639875000" + } + ], + "status": {} + } + ] } ] } diff --git a/internal/storage/integration/fixtures/traces/example_trace.json b/internal/storage/integration/fixtures/traces/example_trace.json index d716b4b5719..31248eb801f 100644 --- a/internal/storage/integration/fixtures/traces/example_trace.json +++ b/internal/storage/integration/fixtures/traces/example_trace.json @@ -1,125 +1,141 @@ { - "spans": [ + "resourceSpans": [ { - "traceId": "AAAAAAAAAAAAAAAAAAAAEQ==", - "spanId": "AAAAAAAAAAM=", - "operationName": "example-operation-1", - "references": [], - "startTime": "2017-01-26T16:46:31.639875Z", - "duration": "100000ns", - "tags": [], - "process": { - "serviceName": "example-service-1", - "tags": [] + "resource": { + "attributes": [ + { + "key": "service.name", + "value": { + "stringValue": "example-service-1" + } + } + ] }, - "logs": [ + "scopeSpans": [ { - "timestamp": "2017-01-26T16:46:31.639875Z", - "fields": [] - }, - { - "timestamp": "2017-01-26T16:46:31.639875Z", - "fields": [] + "scope": {}, + "spans": [ + { + "traceId": "00000000000000000000000000000011", + "spanId": "0000000000000003", + "name": "example-operation-1", + "startTimeUnixNano": "1485449191639875000", + "endTimeUnixNano": "1485449191639975000", + "events": [ + { + "timeUnixNano": "1485449191639875000" + }, + { + "timeUnixNano": "1485449191639875000" + } + ], + "status": {} + }, + { + "traceId": "00000000000000000000000000000011", + "spanId": "0000000000000006", + "name": "example-operation-3", + "kind": 2, + "startTimeUnixNano": "1485449191639875000", + "endTimeUnixNano": "1485449191639975000", + "events": [ + { + "timeUnixNano": "1485449191639875000" + }, + { + "timeUnixNano": "1485449191639875000" + } + ], + "status": {} + }, + { + "traceId": "00000000000000000000000000000011", + "spanId": "0000000000000007", + "name": "example-operation-4", + "kind": 3, + "startTimeUnixNano": "1485449191639875000", + "endTimeUnixNano": "1485449191639975000", + "events": [ + { + "timeUnixNano": "1485449191639875000" + }, + { + "timeUnixNano": "1485449191639875000" + } + ], + "status": {} + } + ] } ] }, { - "traceId": "AAAAAAAAAAAAAAAAAAAAEQ==", - "spanId": "AAAAAAAAAAQ=", - "operationName": "example-operation-2", - "references": [], - "startTime": "2017-01-26T16:46:31.639875Z", - "duration": "100000ns", - "tags": [], - "process": { - "serviceName": "example-service-2", - "tags": [] + "resource": { + "attributes": [ + { + "key": "service.name", + "value": { + "stringValue": "example-service-2" + } + } + ] }, - "logs": [ - { - "timestamp": "2017-01-26T16:46:31.639875Z", - "fields": [] - }, - { - "timestamp": "2017-01-26T16:46:31.639875Z", - "fields": [] - } - ] - }, - { - "traceId": "AAAAAAAAAAAAAAAAAAAAEQ==", - "spanId": "AAAAAAAAAAU=", - "operationName": "example-operation-1", - "references": [], - "startTime": "2017-01-26T16:46:31.639875Z", - "duration": "100000ns", - "tags": [], - "process": { - "serviceName": "example-service-3", - "tags": [] - }, - "logs": [ - { - "timestamp": "2017-01-26T16:46:31.639875Z", - "fields": [] - }, + "scopeSpans": [ { - "timestamp": "2017-01-26T16:46:31.639875Z", - "fields": [] + "scope": {}, + "spans": [ + { + "traceId": "00000000000000000000000000000011", + "spanId": "0000000000000004", + "name": "example-operation-2", + "startTimeUnixNano": "1485449191639875000", + "endTimeUnixNano": "1485449191639975000", + "events": [ + { + "timeUnixNano": "1485449191639875000" + }, + { + "timeUnixNano": "1485449191639875000" + } + ], + "status": {} + } + ] } ] }, { - "traceId": "AAAAAAAAAAAAAAAAAAAAEQ==", - "spanId": "AAAAAAAAAAY=", - "operationName": "example-operation-3", - "references": [], - "startTime": "2017-01-26T16:46:31.639875Z", - "duration": "100000ns", - "tags": [{ - "key": "span.kind", - "vType": "STRING", - "vStr": "server" - }], - "process": { - "serviceName": "example-service-1", - "tags": [] + "resource": { + "attributes": [ + { + "key": "service.name", + "value": { + "stringValue": "example-service-3" + } + } + ] }, - "logs": [ - { - "timestamp": "2017-01-26T16:46:31.639875Z", - "fields": [] - }, - { - "timestamp": "2017-01-26T16:46:31.639875Z", - "fields": [] - } - ] - }, - { - "traceId": "AAAAAAAAAAAAAAAAAAAAEQ==", - "spanId": "AAAAAAAAAAc=", - "operationName": "example-operation-4", - "references": [], - "startTime": "2017-01-26T16:46:31.639875Z", - "duration": "100000ns", - "tags": [{ - "key": "span.kind", - "vType": "STRING", - "vStr": "client" - }], - "process": { - "serviceName": "example-service-1", - "tags": [] - }, - "logs": [ - { - "timestamp": "2017-01-26T16:46:31.639875Z", - "fields": [] - }, + "scopeSpans": [ { - "timestamp": "2017-01-26T16:46:31.639875Z", - "fields": [] + "scope": {}, + "spans": [ + { + "traceId": "00000000000000000000000000000011", + "spanId": "0000000000000005", + "name": "example-operation-1", + "startTimeUnixNano": "1485449191639875000", + "endTimeUnixNano": "1485449191639975000", + "events": [ + { + "timeUnixNano": "1485449191639875000" + }, + { + "timeUnixNano": "1485449191639875000" + } + ], + "status": {} + } + ] } ] } diff --git a/internal/storage/integration/fixtures/traces/log_tags_trace.json b/internal/storage/integration/fixtures/traces/log_tags_trace.json index cb79923626e..4f96848889a 100644 --- a/internal/storage/integration/fixtures/traces/log_tags_trace.json +++ b/internal/storage/integration/fixtures/traces/log_tags_trace.json @@ -1,51 +1,69 @@ { - "spans": [ + "resourceSpans": [ { - "traceId": "AAAAAAAAAAAAAAAAAAAAAg==", - "spanId": "AAAAAAAAAAE=", - "operationName": "placeholder", - "references": [], - "startTime": "2017-01-26T16:46:31.639875Z", - "duration": "5000ns", - "tags": [], - "process": { - "serviceName": "query02-service", - "tags": [] + "resource": { + "attributes": [ + { + "key": "service.name", + "value": { + "stringValue": "query02-service" + } + } + ] }, - "logs": [ + "scopeSpans": [ { - "timestamp": "2017-01-26T16:46:31.639875Z", - "fields": [ - { - "key": "sameplacetag1", - "vType": "STRING", - "vStr": "sameplacevalue" - }, - { - "key": "sameplacetag2", - "vType": "INT64", - "vInt64": 123 - }, + "scope": {}, + "spans": [ { - "key": "sameplacetag4", - "vType": "BOOL", - "vBool": true - }, - { - "key": "sameplacetag3", - "vType": "FLOAT64", - "vFloat64": 72.5 - }, - { - "key": "blob", - "vType": "BINARY", - "vBinary": "AAAwOQ==" + "traceId": "00000000000000000000000000000002", + "spanId": "0000000000000001", + "name": "placeholder", + "startTimeUnixNano": "1485449191639875000", + "endTimeUnixNano": "1485449191639880000", + "events": [ + { + "timeUnixNano": "1485449191639875000", + "attributes": [ + { + "key": "sameplacetag1", + "value": { + "stringValue": "sameplacevalue" + } + }, + { + "key": "sameplacetag2", + "value": { + "intValue": 123 + } + }, + { + "key": "sameplacetag4", + "value": { + "boolValue": true + } + }, + { + "key": "sameplacetag3", + "value": { + "doubleValue": 72.5 + } + }, + { + "key": "blob", + "value": { + "bytesValue": "AAAwOQ==" + } + } + ] + }, + { + "timeUnixNano": "1485449191639875000" + } + ], + "status": {} } ] - }, - { - "timestamp": "2017-01-26T16:46:31.639875Z", - "fields": [] } ] } diff --git a/internal/storage/integration/fixtures/traces/max_dur_trace.json b/internal/storage/integration/fixtures/traces/max_dur_trace.json index c2217dbc053..0cff3c7a12c 100644 --- a/internal/storage/integration/fixtures/traces/max_dur_trace.json +++ b/internal/storage/integration/fixtures/traces/max_dur_trace.json @@ -1,25 +1,37 @@ { - "spans": [ + "resourceSpans": [ { - "traceId": "AAAAAAAAAAAAAAAAAAAAEA==", - "spanId": "AAAAAAAAAAI=", - "operationName": "placeholder", - "references": [], - "startTime": "2017-01-26T16:46:31.639875Z", - "duration": "1000ns", - "tags": [], - "process": { - "serviceName": "query10-service", - "tags": [] + "resource": { + "attributes": [ + { + "key": "service.name", + "value": { + "stringValue": "query10-service" + } + } + ] }, - "logs": [ + "scopeSpans": [ { - "timestamp": "2017-01-26T16:46:31.639875Z", - "fields": [] - }, - { - "timestamp": "2017-01-26T16:46:31.639875Z", - "fields": [] + "scope": {}, + "spans": [ + { + "traceId": "00000000000000000000000000000010", + "spanId": "0000000000000002", + "name": "placeholder", + "startTimeUnixNano": "1485449191639875000", + "endTimeUnixNano": "1485449191639876000", + "events": [ + { + "timeUnixNano": "1485449191639875000" + }, + { + "timeUnixNano": "1485449191639875000" + } + ], + "status": {} + } + ] } ] } diff --git a/internal/storage/integration/fixtures/traces/multi_index_trace.json b/internal/storage/integration/fixtures/traces/multi_index_trace.json index 8d0bb2c61f7..3efae526aa2 100644 --- a/internal/storage/integration/fixtures/traces/multi_index_trace.json +++ b/internal/storage/integration/fixtures/traces/multi_index_trace.json @@ -1,48 +1,53 @@ - { - "spans": [ +{ + "resourceSpans": [ { - "traceId": "AAAAAAAAAAAAAAAAAAAABQ==", - "spanId": "AAAAAAAAAAE=", - "operationName": "operation-list-test2", - "references": [], - "startTime": "2017-01-26T00:03:31.639875Z", - "duration": "5000ns", - "tags": [], - "process": { - "serviceName": "query05-service", - "tags": [] + "resource": { + "attributes": [ + { + "key": "service.name", + "value": { + "stringValue": "query05-service" + } + } + ] }, - "logs": [ + "scopeSpans": [ { - "timestamp": "2017-01-26T16:46:31.639875Z", - "fields": [] - }, - { - "timestamp": "2017-01-26T16:46:31.639875Z", - "fields": [] - } - ] - }, - { - "traceId": "AAAAAAAAAAAAAAAAAAAABQ==", - "spanId": "AAAAAAAAAAI=", - "operationName": "operation-list-test3", - "references": [], - "startTime": "2017-01-25T23:56:31.639875Z", - "duration": "5000ns", - "tags": [], - "process": { - "serviceName": "query05-service", - "tags": [] - }, - "logs": [ - { - "timestamp": "2017-01-26T16:46:31.639875Z", - "fields": [] - }, - { - "timestamp": "2017-01-26T16:46:31.639875Z", - "fields": [] + "scope": {}, + "spans": [ + { + "traceId": "00000000000000000000000000000005", + "spanId": "0000000000000001", + "name": "operation-list-test2", + "startTimeUnixNano": "1485389011639875000", + "endTimeUnixNano": "1485389011639880000", + "events": [ + { + "timeUnixNano": "1485449191639875000" + }, + { + "timeUnixNano": "1485449191639875000" + } + ], + "status": {} + }, + { + "traceId": "00000000000000000000000000000005", + "spanId": "0000000000000002", + "name": "operation-list-test3", + "startTimeUnixNano": "1485388591639875000", + "endTimeUnixNano": "1485388591639880000", + "events": [ + { + "timeUnixNano": "1485449191639875000" + }, + { + "timeUnixNano": "1485449191639875000" + } + ], + "status": {} + } + ] } ] } diff --git a/internal/storage/integration/fixtures/traces/multi_spot_tags_trace.json b/internal/storage/integration/fixtures/traces/multi_spot_tags_trace.json index b466fa88800..2ba27a49b96 100644 --- a/internal/storage/integration/fixtures/traces/multi_spot_tags_trace.json +++ b/internal/storage/integration/fixtures/traces/multi_spot_tags_trace.json @@ -1,48 +1,65 @@ { - "spans": [ + "resourceSpans": [ { - "traceId": "AAAAAAAAAAAAAAAAAAAABA==", - "spanId": "AAAAAAAAAAE=", - "operationName": "placeholder", - "references": [], - "startTime": "2017-01-26T16:46:31.639875Z", - "duration": "5000ns", - "tags": [ - { - "key": "sameplacetag4", - "vType": "BOOL", - "vBool": true - }, - { - "key": "sameplacetag3", - "vType": "FLOAT64", - "vFloat64": 72.5 - } - ], - "process": { - "serviceName": "query04-service", - "tags": [ + "resource": { + "attributes": [ + { + "key": "service.name", + "value": { + "stringValue": "query04-service" + } + }, { "key": "sameplacetag1", - "vType": "STRING", - "vStr": "sameplacevalue" + "value": { + "stringValue": "sameplacevalue" + } } ] }, - "logs": [ + "scopeSpans": [ { - "timestamp": "2017-01-26T16:46:31.639875Z", - "fields": [ + "scope": {}, + "spans": [ { - "key": "sameplacetag2", - "vType": "INT64", - "vInt64": 123 + "traceId": "00000000000000000000000000000004", + "spanId": "0000000000000001", + "name": "placeholder", + "startTimeUnixNano": "1485449191639875000", + "endTimeUnixNano": "1485449191639880000", + "attributes": [ + { + "key": "sameplacetag4", + "value": { + "boolValue": true + } + }, + { + "key": "sameplacetag3", + "value": { + "doubleValue": 72.5 + } + } + ], + "events": [ + { + "timeUnixNano": "1485449191639875000", + "attributes": [ + { + "key": "sameplacetag2", + "value": { + "intValue": 123 + } + } + ] + }, + { + "timeUnixNano": "1485449191639875000" + } + ], + "status": {} } ] - }, - { - "timestamp": "2017-01-26T16:46:31.639875Z", - "fields": [] } ] } diff --git a/internal/storage/integration/fixtures/traces/multiple1_trace.json b/internal/storage/integration/fixtures/traces/multiple1_trace.json index 34e390e2296..f8ff7f45564 100644 --- a/internal/storage/integration/fixtures/traces/multiple1_trace.json +++ b/internal/storage/integration/fixtures/traces/multiple1_trace.json @@ -1,25 +1,36 @@ { - "spans": [ + "resourceSpans": [ { - "traceId": "AAAAAAAAAAAAAAAAAAACIQ==", - "spanId": "AAAAAAAAAAM=", - "operationName": "", - "references": [], - "startTime": "2017-01-26T16:46:31.639875Z", - "duration": "100000ns", - "tags": [], - "process": { - "serviceName": "query22-service", - "tags": [] + "resource": { + "attributes": [ + { + "key": "service.name", + "value": { + "stringValue": "query22-service" + } + } + ] }, - "logs": [ + "scopeSpans": [ { - "timestamp": "2017-01-26T16:46:31.639875Z", - "fields": [] - }, - { - "timestamp": "2017-01-26T16:46:31.639875Z", - "fields": [] + "scope": {}, + "spans": [ + { + "traceId": "00000000000000000000000000000221", + "spanId": "0000000000000003", + "startTimeUnixNano": "1485449191639875000", + "endTimeUnixNano": "1485449191639975000", + "events": [ + { + "timeUnixNano": "1485449191639875000" + }, + { + "timeUnixNano": "1485449191639875000" + } + ], + "status": {} + } + ] } ] } diff --git a/internal/storage/integration/fixtures/traces/multiple2_trace.json b/internal/storage/integration/fixtures/traces/multiple2_trace.json index e0a1c7c0811..440e26c5796 100644 --- a/internal/storage/integration/fixtures/traces/multiple2_trace.json +++ b/internal/storage/integration/fixtures/traces/multiple2_trace.json @@ -1,25 +1,36 @@ { - "spans": [ + "resourceSpans": [ { - "traceId": "AAAAAAAAAAAAAAAAAAACIg==", - "spanId": "AAAAAAAAAAM=", - "operationName": "", - "references": [], - "startTime": "2017-01-26T16:46:31.639875Z", - "duration": "100000ns", - "tags": [], - "process": { - "serviceName": "query22-service", - "tags": [] + "resource": { + "attributes": [ + { + "key": "service.name", + "value": { + "stringValue": "query22-service" + } + } + ] }, - "logs": [ + "scopeSpans": [ { - "timestamp": "2017-01-26T16:46:31.639875Z", - "fields": [] - }, - { - "timestamp": "2017-01-26T16:46:31.639875Z", - "fields": [] + "scope": {}, + "spans": [ + { + "traceId": "00000000000000000000000000000222", + "spanId": "0000000000000003", + "startTimeUnixNano": "1485449191639875000", + "endTimeUnixNano": "1485449191639975000", + "events": [ + { + "timeUnixNano": "1485449191639875000" + }, + { + "timeUnixNano": "1485449191639875000" + } + ], + "status": {} + } + ] } ] } diff --git a/internal/storage/integration/fixtures/traces/multiple3_trace.json b/internal/storage/integration/fixtures/traces/multiple3_trace.json index e006b8e835e..5d9151441f8 100644 --- a/internal/storage/integration/fixtures/traces/multiple3_trace.json +++ b/internal/storage/integration/fixtures/traces/multiple3_trace.json @@ -1,25 +1,36 @@ { - "spans": [ + "resourceSpans": [ { - "traceId": "AAAAAAAAAAAAAAAAAAACIw==", - "spanId": "AAAAAAAAAAM=", - "operationName": "", - "references": [], - "startTime": "2017-01-26T16:46:31.639875Z", - "duration": "100000ns", - "tags": [], - "process": { - "serviceName": "query22-service", - "tags": [] + "resource": { + "attributes": [ + { + "key": "service.name", + "value": { + "stringValue": "query22-service" + } + } + ] }, - "logs": [ + "scopeSpans": [ { - "timestamp": "2017-01-26T16:46:31.639875Z", - "fields": [] - }, - { - "timestamp": "2017-01-26T16:46:31.639875Z", - "fields": [] + "scope": {}, + "spans": [ + { + "traceId": "00000000000000000000000000000223", + "spanId": "0000000000000003", + "startTimeUnixNano": "1485449191639875000", + "endTimeUnixNano": "1485449191639975000", + "events": [ + { + "timeUnixNano": "1485449191639875000" + }, + { + "timeUnixNano": "1485449191639875000" + } + ], + "status": {} + } + ] } ] } diff --git a/internal/storage/integration/fixtures/traces/multispottag_dur_trace.json b/internal/storage/integration/fixtures/traces/multispottag_dur_trace.json index 28e7b00b3f6..2e6b08610bd 100644 --- a/internal/storage/integration/fixtures/traces/multispottag_dur_trace.json +++ b/internal/storage/integration/fixtures/traces/multispottag_dur_trace.json @@ -1,53 +1,71 @@ { - "spans": [ + "resourceSpans": [ { - "traceId": "AAAAAAAAAAAAAAAAAAAAIA==", - "spanId": "AAAAAAAAAAM=", - "operationName": "placeholder", - "references": [], - "startTime": "2017-01-26T16:46:31.639875Z", - "duration": "5000ns", - "tags": [ - { - "key": "sameplacetag2", - "vType": "INT64", - "vInt64": 123 - }, - { - "key": "sameplacetag4", - "vType": "BOOL", - "vBool": true - } - ], - "process": { - "serviceName": "query20-service", - "tags": [ + "resource": { + "attributes": [ + { + "key": "service.name", + "value": { + "stringValue": "query20-service" + } + }, { "key": "sameplacetag3", - "vType": "FLOAT64", - "vFloat64": 72.5 + "value": { + "doubleValue": 72.5 + } }, { "key": "blob", - "vType": "BINARY", - "vBinary": "AAAwOQ==" + "value": { + "bytesValue": "AAAwOQ==" + } } ] }, - "logs": [ + "scopeSpans": [ { - "timestamp": "2017-01-26T16:46:31.639875Z", - "fields": [ + "scope": {}, + "spans": [ { - "key": "sameplacetag1", - "vType": "STRING", - "vStr": "sameplacevalue" + "traceId": "00000000000000000000000000000020", + "spanId": "0000000000000003", + "name": "placeholder", + "startTimeUnixNano": "1485449191639875000", + "endTimeUnixNano": "1485449191639880000", + "attributes": [ + { + "key": "sameplacetag2", + "value": { + "intValue": 123 + } + }, + { + "key": "sameplacetag4", + "value": { + "boolValue": true + } + } + ], + "events": [ + { + "timeUnixNano": "1485449191639875000", + "attributes": [ + { + "key": "sameplacetag1", + "value": { + "stringValue": "sameplacevalue" + } + } + ] + }, + { + "timeUnixNano": "1485449191639875000" + } + ], + "status": {} } ] - }, - { - "timestamp": "2017-01-26T16:46:31.639875Z", - "fields": [] } ] } diff --git a/internal/storage/integration/fixtures/traces/multispottag_maxdur_trace.json b/internal/storage/integration/fixtures/traces/multispottag_maxdur_trace.json index a8f39fdb939..410c081dc5a 100644 --- a/internal/storage/integration/fixtures/traces/multispottag_maxdur_trace.json +++ b/internal/storage/integration/fixtures/traces/multispottag_maxdur_trace.json @@ -1,52 +1,71 @@ { - "spans": [ + "resourceSpans": [ { - "traceId": "AAAAAAAAAAAAAAAAAAAAIQ==", - "spanId": "AAAAAAAAAAU=", - "operationName": "placeholder", - "references": [], - "startTime": "2017-01-26T16:46:31.639875Z", - "duration": "1000ns", - "tags": [ - { - "key": "sameplacetag1", - "vType": "STRING", - "vStr": "sameplacevalue" - } - ], - "process": { - "serviceName": "query21-service", - "tags": [ + "resource": { + "attributes": [ + { + "key": "service.name", + "value": { + "stringValue": "query21-service" + } + }, { "key": "sameplacetag4", - "vType": "BOOL", - "vBool": true + "value": { + "boolValue": true + } }, { "key": "sameplacetag3", - "vType": "FLOAT64", - "vFloat64": 72.5 + "value": { + "doubleValue": 72.5 + } } ] }, - "logs": [ - { - "timestamp": "2017-01-26T16:46:31.639875Z", - "fields": [ - { - "key": "sameplacetag2", - "vType": "INT64", - "vInt64": 123 - } - ] - }, + "scopeSpans": [ { - "timestamp": "2017-01-26T16:46:31.639875Z", - "fields": [ + "scope": {}, + "spans": [ { - "key": "blob", - "vType": "BINARY", - "vBinary": "AAAwOQ==" + "traceId": "00000000000000000000000000000021", + "spanId": "0000000000000005", + "name": "placeholder", + "startTimeUnixNano": "1485449191639875000", + "endTimeUnixNano": "1485449191639876000", + "attributes": [ + { + "key": "sameplacetag1", + "value": { + "stringValue": "sameplacevalue" + } + } + ], + "events": [ + { + "timeUnixNano": "1485449191639875000", + "attributes": [ + { + "key": "sameplacetag2", + "value": { + "intValue": 123 + } + } + ] + }, + { + "timeUnixNano": "1485449191639875000", + "attributes": [ + { + "key": "blob", + "value": { + "bytesValue": "AAAwOQ==" + } + } + ] + } + ], + "status": {} } ] } diff --git a/internal/storage/integration/fixtures/traces/multispottag_opname_dur_trace.json b/internal/storage/integration/fixtures/traces/multispottag_opname_dur_trace.json index d2bca1e21cf..d6bcfaf12ff 100644 --- a/internal/storage/integration/fixtures/traces/multispottag_opname_dur_trace.json +++ b/internal/storage/integration/fixtures/traces/multispottag_opname_dur_trace.json @@ -1,52 +1,71 @@ { - "spans": [ + "resourceSpans": [ { - "traceId": "AAAAAAAAAAAAAAAAAAAAGQ==", - "spanId": "AAAAAAAAAAU=", - "operationName": "query19-operation", - "references": [], - "startTime": "2017-01-26T16:46:31.639875Z", - "duration": "5000ns", - "tags": [ - { - "key": "sameplacetag1", - "vType": "STRING", - "vStr": "sameplacevalue" - } - ], - "process": { - "serviceName": "query19-service", - "tags": [ + "resource": { + "attributes": [ + { + "key": "service.name", + "value": { + "stringValue": "query19-service" + } + }, { "key": "sameplacetag4", - "vType": "BOOL", - "vBool": true + "value": { + "boolValue": true + } }, { "key": "sameplacetag3", - "vType": "FLOAT64", - "vFloat64": 72.5 + "value": { + "doubleValue": 72.5 + } } ] }, - "logs": [ - { - "timestamp": "2017-01-26T16:46:31.639875Z", - "fields": [ - { - "key": "sameplacetag2", - "vType": "INT64", - "vInt64": 123 - } - ] - }, + "scopeSpans": [ { - "timestamp": "2017-01-26T16:46:31.639875Z", - "fields": [ + "scope": {}, + "spans": [ { - "key": "blob", - "vType": "BINARY", - "vBinary": "AAAwOQ==" + "traceId": "00000000000000000000000000000019", + "spanId": "0000000000000005", + "name": "query19-operation", + "startTimeUnixNano": "1485449191639875000", + "endTimeUnixNano": "1485449191639880000", + "attributes": [ + { + "key": "sameplacetag1", + "value": { + "stringValue": "sameplacevalue" + } + } + ], + "events": [ + { + "timeUnixNano": "1485449191639875000", + "attributes": [ + { + "key": "sameplacetag2", + "value": { + "intValue": 123 + } + } + ] + }, + { + "timeUnixNano": "1485449191639875000", + "attributes": [ + { + "key": "blob", + "value": { + "bytesValue": "AAAwOQ==" + } + } + ] + } + ], + "status": {} } ] } diff --git a/internal/storage/integration/fixtures/traces/multispottag_opname_maxdur_trace.json b/internal/storage/integration/fixtures/traces/multispottag_opname_maxdur_trace.json index f4bca01e6a4..4f8c6aa0b00 100644 --- a/internal/storage/integration/fixtures/traces/multispottag_opname_maxdur_trace.json +++ b/internal/storage/integration/fixtures/traces/multispottag_opname_maxdur_trace.json @@ -1,52 +1,71 @@ { - "spans": [ + "resourceSpans": [ { - "traceId": "AAAAAAAAAAAAAAAAAAAAGA==", - "spanId": "AAAAAAAAAAQ=", - "operationName": "query18-operation", - "references": [], - "startTime": "2017-01-26T16:46:31.639875Z", - "duration": "1000ns", - "tags": [ - { - "key": "sameplacetag1", - "vType": "STRING", - "vStr": "sameplacevalue" - } - ], - "process": { - "serviceName": "query18-service", - "tags": [ + "resource": { + "attributes": [ + { + "key": "service.name", + "value": { + "stringValue": "query18-service" + } + }, { "key": "sameplacetag3", - "vType": "FLOAT64", - "vFloat64": 72.5 + "value": { + "doubleValue": 72.5 + } } ] }, - "logs": [ + "scopeSpans": [ { - "timestamp": "2017-01-26T16:46:31.639875Z", - "fields": [ - { - "key": "sameplacetag2", - "vType": "INT64", - "vInt64": 123 - } - ] - }, - { - "timestamp": "2017-01-26T16:46:31.639875Z", - "fields": [ - { - "key": "sameplacetag4", - "vType": "BOOL", - "vBool": true - }, + "scope": {}, + "spans": [ { - "key": "blob", - "vType": "BINARY", - "vBinary": "AAAwOQ==" + "traceId": "00000000000000000000000000000018", + "spanId": "0000000000000004", + "name": "query18-operation", + "startTimeUnixNano": "1485449191639875000", + "endTimeUnixNano": "1485449191639876000", + "attributes": [ + { + "key": "sameplacetag1", + "value": { + "stringValue": "sameplacevalue" + } + } + ], + "events": [ + { + "timeUnixNano": "1485449191639875000", + "attributes": [ + { + "key": "sameplacetag2", + "value": { + "intValue": 123 + } + } + ] + }, + { + "timeUnixNano": "1485449191639875000", + "attributes": [ + { + "key": "sameplacetag4", + "value": { + "boolValue": true + } + }, + { + "key": "blob", + "value": { + "bytesValue": "AAAwOQ==" + } + } + ] + } + ], + "status": {} } ] } diff --git a/internal/storage/integration/fixtures/traces/multispottag_opname_trace.json b/internal/storage/integration/fixtures/traces/multispottag_opname_trace.json index 38317e218d3..aefaca7a39a 100644 --- a/internal/storage/integration/fixtures/traces/multispottag_opname_trace.json +++ b/internal/storage/integration/fixtures/traces/multispottag_opname_trace.json @@ -1,47 +1,65 @@ { - "spans": [ + "resourceSpans": [ { - "traceId": "AAAAAAAAAAAAAAAAAAAAFw==", - "spanId": "AAAAAAAAAAQ=", - "operationName": "query17-operation", - "references": [], - "startTime": "2017-01-26T16:46:31.639875Z", - "duration": "5000ns", - "tags": [ - { - "key": "sameplacetag3", - "vType": "FLOAT64", - "vFloat64": 72.5 - } - ], - "process": { - "serviceName": "query17-service", - "tags": [ + "resource": { + "attributes": [ + { + "key": "service.name", + "value": { + "stringValue": "query17-service" + } + }, { "key": "sameplacetag1", - "vType": "STRING", - "vStr": "sameplacevalue" + "value": { + "stringValue": "sameplacevalue" + } } ] }, - "logs": [ - { - "timestamp": "2017-01-26T16:46:31.639875Z", - "fields": [ - { - "key": "sameplacetag2", - "vType": "INT64", - "vInt64": 123 - } - ] - }, + "scopeSpans": [ { - "timestamp": "2017-01-26T16:46:31.639875Z", - "fields": [ + "scope": {}, + "spans": [ { - "key": "sameplacetag4", - "vType": "BOOL", - "vBool": true + "traceId": "00000000000000000000000000000017", + "spanId": "0000000000000004", + "name": "query17-operation", + "startTimeUnixNano": "1485449191639875000", + "endTimeUnixNano": "1485449191639880000", + "attributes": [ + { + "key": "sameplacetag3", + "value": { + "doubleValue": 72.5 + } + } + ], + "events": [ + { + "timeUnixNano": "1485449191639875000", + "attributes": [ + { + "key": "sameplacetag2", + "value": { + "intValue": 123 + } + } + ] + }, + { + "timeUnixNano": "1485449191639875000", + "attributes": [ + { + "key": "sameplacetag4", + "value": { + "boolValue": true + } + } + ] + } + ], + "status": {} } ] } diff --git a/internal/storage/integration/fixtures/traces/opname_dur_trace.json b/internal/storage/integration/fixtures/traces/opname_dur_trace.json index a77f7b5a2ec..fdd620134ae 100644 --- a/internal/storage/integration/fixtures/traces/opname_dur_trace.json +++ b/internal/storage/integration/fixtures/traces/opname_dur_trace.json @@ -1,25 +1,37 @@ { - "spans": [ + "resourceSpans": [ { - "traceId": "AAAAAAAAAAAAAAAAAAAACA==", - "spanId": "AAAAAAAAAAI=", - "operationName": "query08-operation", - "references": [], - "startTime": "2017-01-26T16:46:31.639875Z", - "duration": "5000ns", - "tags": [], - "process": { - "serviceName": "query08-service", - "tags": [] + "resource": { + "attributes": [ + { + "key": "service.name", + "value": { + "stringValue": "query08-service" + } + } + ] }, - "logs": [ + "scopeSpans": [ { - "timestamp": "2017-01-26T16:46:31.639875Z", - "fields": [] - }, - { - "timestamp": "2017-01-26T16:46:31.639875Z", - "fields": [] + "scope": {}, + "spans": [ + { + "traceId": "00000000000000000000000000000008", + "spanId": "0000000000000002", + "name": "query08-operation", + "startTimeUnixNano": "1485449191639875000", + "endTimeUnixNano": "1485449191639880000", + "events": [ + { + "timeUnixNano": "1485449191639875000" + }, + { + "timeUnixNano": "1485449191639875000" + } + ], + "status": {} + } + ] } ] } diff --git a/internal/storage/integration/fixtures/traces/opname_maxdur_trace.json b/internal/storage/integration/fixtures/traces/opname_maxdur_trace.json index 9f1b0f37569..0edaa73a9f2 100644 --- a/internal/storage/integration/fixtures/traces/opname_maxdur_trace.json +++ b/internal/storage/integration/fixtures/traces/opname_maxdur_trace.json @@ -1,45 +1,46 @@ { - "spans": [ + "resourceSpans": [ { - "traceId": "AAAAAAAAAAAAAAAAAAAABw==", - "spanId": "AAAAAAAAAAM=", - "operationName": "query07-operation", - "tags": [], - "references": [ - { - "refType": "CHILD_OF", - "traceId": "AAAAAAAAAAAAAAAAAAAABw==", - "spanId": "AAAAAAAAAAI=" - } - ], - "startTime": "2017-01-26T16:46:31.639875Z", - "duration": "1000ns", - "process": { - "serviceName": "query07-service", - "tags": [] + "resource": { + "attributes": [ + { + "key": "service.name", + "value": { + "stringValue": "query07-service" + } + } + ] }, - "logs": [] - }, - { - "traceId": "AAAAAAAAAAAAAAAAAAAABw==", - "spanId": "AAAAAAAAAAI=", - "operationName": "query07-operation", - "references": [], - "startTime": "2017-01-26T16:46:31.639875Z", - "duration": "2000ns", - "tags": [], - "process": { - "serviceName": "query07-service", - "tags": [] - }, - "logs": [ - { - "timestamp": "2017-01-26T16:46:31.639875Z", - "fields": [] - }, + "scopeSpans": [ { - "timestamp": "2017-01-26T16:46:31.639875Z", - "fields": [] + "scope": {}, + "spans": [ + { + "traceId": "00000000000000000000000000000007", + "spanId": "0000000000000003", + "parentSpanId": "0000000000000002", + "name": "query07-operation", + "startTimeUnixNano": "1485449191639875000", + "endTimeUnixNano": "1485449191639876000", + "status": {} + }, + { + "traceId": "00000000000000000000000000000007", + "spanId": "0000000000000002", + "name": "query07-operation", + "startTimeUnixNano": "1485449191639875000", + "endTimeUnixNano": "1485449191639877000", + "events": [ + { + "timeUnixNano": "1485449191639875000" + }, + { + "timeUnixNano": "1485449191639875000" + } + ], + "status": {} + } + ] } ] } diff --git a/internal/storage/integration/fixtures/traces/opname_trace.json b/internal/storage/integration/fixtures/traces/opname_trace.json index ff16272b55a..2a2c20dea4f 100644 --- a/internal/storage/integration/fixtures/traces/opname_trace.json +++ b/internal/storage/integration/fixtures/traces/opname_trace.json @@ -1,25 +1,37 @@ { - "spans": [ + "resourceSpans": [ { - "traceId": "AAAAAAAAAAAAAAAAAAAABg==", - "spanId": "AAAAAAAAAAE=", - "operationName": "query06-operation", - "references": [], - "startTime": "2017-01-26T16:46:31.639875Z", - "duration": "5000ns", - "tags": [], - "process": { - "serviceName": "query06-service", - "tags": [] + "resource": { + "attributes": [ + { + "key": "service.name", + "value": { + "stringValue": "query06-service" + } + } + ] }, - "logs": [ + "scopeSpans": [ { - "timestamp": "2017-01-26T16:46:31.639875Z", - "fields": [] - }, - { - "timestamp": "2017-01-26T16:46:31.639875Z", - "fields": [] + "scope": {}, + "spans": [ + { + "traceId": "00000000000000000000000000000006", + "spanId": "0000000000000001", + "name": "query06-operation", + "startTimeUnixNano": "1485449191639875000", + "endTimeUnixNano": "1485449191639880000", + "events": [ + { + "timeUnixNano": "1485449191639875000" + }, + { + "timeUnixNano": "1485449191639875000" + } + ], + "status": {} + } + ] } ] } diff --git a/internal/storage/integration/fixtures/traces/otlp_scope_attributes.json b/internal/storage/integration/fixtures/traces/otlp_scope_attributes.json new file mode 100644 index 00000000000..7f9f74193bc --- /dev/null +++ b/internal/storage/integration/fixtures/traces/otlp_scope_attributes.json @@ -0,0 +1,51 @@ +{ + "resourceSpans": [ + { + "resource": { + "attributes": [ + { + "key": "service.name", + "value": { + "stringValue": "otlp-test-service" + } + } + ] + }, + "scopeSpans": [ + { + "scope": { + "name": "test-instrumentation-library", + "version": "2.1.0", + "attributes": [ + { + "key": "scope.attribute.key", + "value": { + "stringValue": "scope-value" + } + } + ] + }, + "spans": [ + { + "traceId": "00000000000000000000000000000001", + "spanId": "0000000000000001", + "name": "test-span-with-scope-attributes", + "kind": 2, + "startTimeUnixNano": "1485467191639875000", + "endTimeUnixNano": "1485467191639875000", + "attributes": [ + { + "key": "span.attribute", + "value": { + "stringValue": "test-value" + } + } + ], + "status": {} + } + ] + } + ] + } + ] +} diff --git a/internal/storage/integration/fixtures/traces/otlp_span_links.json b/internal/storage/integration/fixtures/traces/otlp_span_links.json new file mode 100644 index 00000000000..9b3d8cf87a4 --- /dev/null +++ b/internal/storage/integration/fixtures/traces/otlp_span_links.json @@ -0,0 +1,49 @@ +{ + "resourceSpans": [ + { + "resource": { + "attributes": [ + { + "key": "service.name", + "value": { + "stringValue": "otlp-link-test-service" + } + } + ] + }, + "scopeSpans": [ + { + "scope": { + "name": "test-instrumentation-library", + "version": "1.0.0" + }, + "spans": [ + { + "traceId": "00000000000000000000000000000002", + "spanId": "0000000000000002", + "name": "test-span-with-links", + "kind": 2, + "startTimeUnixNano": "1485467191639875000", + "endTimeUnixNano": "1485467191639875000", + "links": [ + { + "traceId": "00000000000000000000000000000003", + "spanId": "0000000000000003", + "attributes": [ + { + "key": "link.attribute.key", + "value": { + "stringValue": "link-value" + } + } + ] + } + ], + "status": {} + } + ] + } + ] + } + ] +} diff --git a/internal/storage/integration/fixtures/traces/process_tags_trace.json b/internal/storage/integration/fixtures/traces/process_tags_trace.json index 0983bee64cb..d72ed1801c6 100644 --- a/internal/storage/integration/fixtures/traces/process_tags_trace.json +++ b/internal/storage/integration/fixtures/traces/process_tags_trace.json @@ -1,51 +1,67 @@ { - "spans": [ + "resourceSpans": [ { - "traceId": "AAAAAAAAAAAAAAAAAAAAAw==", - "spanId": "AAAAAAAAAAE=", - "operationName": "placeholder", - "references": [], - "startTime": "2017-01-26T16:46:31.639875Z", - "duration": "5000ns", - "tags": [], - "process": { - "serviceName": "query03-service", - "tags": [ + "resource": { + "attributes": [ + { + "key": "service.name", + "value": { + "stringValue": "query03-service" + } + }, { "key": "sameplacetag1", - "vType": "STRING", - "vStr": "sameplacevalue" + "value": { + "stringValue": "sameplacevalue" + } }, { "key": "sameplacetag2", - "vType": "INT64", - "vInt64": 123 + "value": { + "intValue": 123 + } }, { "key": "sameplacetag4", - "vType": "BOOL", - "vBool": true + "value": { + "boolValue": true + } }, { "key": "sameplacetag3", - "vType": "FLOAT64", - "vFloat64": 72.5 + "value": { + "doubleValue": 72.5 + } }, { "key": "blob", - "vType": "BINARY", - "vBinary": "AAAwOQ==" + "value": { + "bytesValue": "AAAwOQ==" + } } ] }, - "logs": [ - { - "timestamp": "2017-01-26T16:46:31.639875Z", - "fields": [] - }, + "scopeSpans": [ { - "timestamp": "2017-01-26T16:46:31.639875Z", - "fields": [] + "scope": {}, + "spans": [ + { + "traceId": "00000000000000000000000000000003", + "spanId": "0000000000000001", + "name": "placeholder", + "startTimeUnixNano": "1485449191639875000", + "endTimeUnixNano": "1485449191639880000", + "events": [ + { + "timeUnixNano": "1485449191639875000" + }, + { + "timeUnixNano": "1485449191639875000" + } + ], + "status": {} + } + ] } ] } diff --git a/internal/storage/integration/fixtures/traces/span_tags_trace.json b/internal/storage/integration/fixtures/traces/span_tags_trace.json index 10dd105bd3a..2d1689a0714 100644 --- a/internal/storage/integration/fixtures/traces/span_tags_trace.json +++ b/internal/storage/integration/fixtures/traces/span_tags_trace.json @@ -1,44 +1,63 @@ { - "spans": [ + "resourceSpans": [ { - "traceId": "AAAAAAAAAAAAAAAAAAAAAQ==", - "spanId": "AAAAAAAAAAI=", - "operationName": "some-operation", - "references": [], - "startTime": "2017-01-26T16:46:31.639875Z", - "duration": "7000ns", - "tags": [ - { - "key": "sameplacetag1", - "vType": "STRING", - "vStr": "sameplacevalue" - }, - { - "key": "sameplacetag2", - "vType": "INT64", - "vInt64": 123 - }, - { - "key": "sameplacetag4", - "vType": "BOOL", - "vBool": true - }, - { - "key": "sameplacetag3", - "vType": "FLOAT64", - "vFloat64": 72.5 - }, + "resource": { + "attributes": [ + { + "key": "service.name", + "value": { + "stringValue": "query01-service" + } + } + ] + }, + "scopeSpans": [ { - "key": "blob", - "vType": "BINARY", - "vBinary": "AAAwOQ==" + "scope": {}, + "spans": [ + { + "traceId": "00000000000000000000000000000001", + "spanId": "0000000000000002", + "name": "some-operation", + "startTimeUnixNano": "1485449191639875000", + "endTimeUnixNano": "1485449191639882000", + "attributes": [ + { + "key": "sameplacetag1", + "value": { + "stringValue": "sameplacevalue" + } + }, + { + "key": "sameplacetag2", + "value": { + "intValue": 123 + } + }, + { + "key": "sameplacetag4", + "value": { + "boolValue": true + } + }, + { + "key": "sameplacetag3", + "value": { + "doubleValue": 72.5 + } + }, + { + "key": "blob", + "value": { + "bytesValue": "AAAwOQ==" + } + } + ], + "status": {} + } + ] } - ], - "process": { - "serviceName": "query01-service", - "tags": [] - }, - "logs": [] + ] } ] } diff --git a/internal/storage/integration/fixtures/traces/tags_dur_trace.json b/internal/storage/integration/fixtures/traces/tags_dur_trace.json index 390aa805a0b..41aeb014eca 100644 --- a/internal/storage/integration/fixtures/traces/tags_dur_trace.json +++ b/internal/storage/integration/fixtures/traces/tags_dur_trace.json @@ -1,51 +1,69 @@ { - "spans": [ + "resourceSpans": [ { - "traceId": "AAAAAAAAAAAAAAAAAAAAFQ==", - "spanId": "AAAAAAAAAAQ=", - "operationName": "placeholder", - "references": [], - "startTime": "2017-01-26T16:46:31.639875Z", - "duration": "5000ns", - "tags": [ - { - "key": "sameplacetag1", - "vType": "STRING", - "vStr": "sameplacevalue" - }, - { - "key": "sameplacetag2", - "vType": "INT64", - "vInt64": 123 - }, - { - "key": "sameplacetag4", - "vType": "BOOL", - "vBool": true - }, - { - "key": "sameplacetag3", - "vType": "FLOAT64", - "vFloat64": 72.5 - }, - { - "key": "blob", - "vType": "BINARY", - "vBinary": "AAAwOQ==" - } - ], - "process": { - "serviceName": "query15-service", - "tags": [] + "resource": { + "attributes": [ + { + "key": "service.name", + "value": { + "stringValue": "query15-service" + } + } + ] }, - "logs": [ - { - "timestamp": "2017-01-26T16:46:31.639875Z", - "fields": [] - }, + "scopeSpans": [ { - "timestamp": "2017-01-26T16:46:31.639875Z", - "fields": [] + "scope": {}, + "spans": [ + { + "traceId": "00000000000000000000000000000015", + "spanId": "0000000000000004", + "name": "placeholder", + "startTimeUnixNano": "1485449191639875000", + "endTimeUnixNano": "1485449191639880000", + "attributes": [ + { + "key": "sameplacetag1", + "value": { + "stringValue": "sameplacevalue" + } + }, + { + "key": "sameplacetag2", + "value": { + "intValue": 123 + } + }, + { + "key": "sameplacetag4", + "value": { + "boolValue": true + } + }, + { + "key": "sameplacetag3", + "value": { + "doubleValue": 72.5 + } + }, + { + "key": "blob", + "value": { + "bytesValue": "AAAwOQ==" + } + } + ], + "events": [ + { + "timeUnixNano": "1485449191639875000" + }, + { + "timeUnixNano": "1485449191639875000" + } + ], + "status": {} + } + ] } ] } diff --git a/internal/storage/integration/fixtures/traces/tags_escaped_operator_trace_1.json b/internal/storage/integration/fixtures/traces/tags_escaped_operator_trace_1.json index 6079e9beea5..bc2434ea41e 100644 --- a/internal/storage/integration/fixtures/traces/tags_escaped_operator_trace_1.json +++ b/internal/storage/integration/fixtures/traces/tags_escaped_operator_trace_1.json @@ -1,31 +1,45 @@ { - "spans": [ + "resourceSpans": [ { - "traceId": "AAAAAAAAAAAAAAAAAAAFEh==", - "spanId": "AAAAAAAAAAU=", - "operationName": "query23-operation", - "references": [], - "startTime": "2017-01-26T16:46:31.639875Z", - "duration": "1000ns", - "tags": [ - { - "key": "sameplacetag1", - "vType": "STRING", - "vStr": "same*" - } - ], - "process": { - "serviceName": "query23-service", - "tags": [] + "resource": { + "attributes": [ + { + "key": "service.name", + "value": { + "stringValue": "query23-service" + } + } + ] }, - "logs": [ - { - "timestamp": "2017-01-26T16:46:31.639875Z", - "fields": [] - }, + "scopeSpans": [ { - "timestamp": "2017-01-26T16:46:31.639875Z", - "fields": [] + "scope": {}, + "spans": [ + { + "traceId": "00000000000000000000000000000512", + "spanId": "0000000000000005", + "name": "query23-operation", + "startTimeUnixNano": "1485449191639875000", + "endTimeUnixNano": "1485449191639876000", + "attributes": [ + { + "key": "sameplacetag1", + "value": { + "stringValue": "same*" + } + } + ], + "events": [ + { + "timeUnixNano": "1485449191639875000" + }, + { + "timeUnixNano": "1485449191639875000" + } + ], + "status": {} + } + ] } ] } diff --git a/internal/storage/integration/fixtures/traces/tags_escaped_operator_trace_2.json b/internal/storage/integration/fixtures/traces/tags_escaped_operator_trace_2.json index 2a0da0ddc5a..5de57ab489a 100644 --- a/internal/storage/integration/fixtures/traces/tags_escaped_operator_trace_2.json +++ b/internal/storage/integration/fixtures/traces/tags_escaped_operator_trace_2.json @@ -1,31 +1,45 @@ { - "spans": [ + "resourceSpans": [ { - "traceId": "AAAAAAAAAAAAAAAAAABZEh==", - "spanId": "AAAAAAAAAAU=", - "operationName": "query23-operation", - "references": [], - "startTime": "2017-01-26T16:46:31.639875Z", - "duration": "1000ns", - "tags": [ - { - "key": "sameplacetag1", - "vType": "STRING", - "vStr": "sameplacedifferentvalue" - } - ], - "process": { - "serviceName": "query23-service", - "tags": [] + "resource": { + "attributes": [ + { + "key": "service.name", + "value": { + "stringValue": "query23-service" + } + } + ] }, - "logs": [ - { - "timestamp": "2017-01-26T16:46:31.639875Z", - "fields": [] - }, + "scopeSpans": [ { - "timestamp": "2017-01-26T16:46:31.639875Z", - "fields": [] + "scope": {}, + "spans": [ + { + "traceId": "00000000000000000000000000005912", + "spanId": "0000000000000005", + "name": "query23-operation", + "startTimeUnixNano": "1485449191639875000", + "endTimeUnixNano": "1485449191639876000", + "attributes": [ + { + "key": "sameplacetag1", + "value": { + "stringValue": "sameplacedifferentvalue" + } + } + ], + "events": [ + { + "timeUnixNano": "1485449191639875000" + }, + { + "timeUnixNano": "1485449191639875000" + } + ], + "status": {} + } + ] } ] } diff --git a/internal/storage/integration/fixtures/traces/tags_maxdur_trace.json b/internal/storage/integration/fixtures/traces/tags_maxdur_trace.json index 64d808adfdf..9158a4e9688 100644 --- a/internal/storage/integration/fixtures/traces/tags_maxdur_trace.json +++ b/internal/storage/integration/fixtures/traces/tags_maxdur_trace.json @@ -1,51 +1,66 @@ { - "spans": [ + "resourceSpans": [ { - "traceId": "AAAAAAAAAAAAAAAAAAAAFg==", - "spanId": "AAAAAAAAAAU=", - "operationName": "", - "references": [], - "startTime": "2017-01-26T16:46:31.639875Z", - "duration": "1000ns", - "tags": [], - "process": { - "serviceName": "query16-service", - "tags": [ + "resource": { + "attributes": [ + { + "key": "service.name", + "value": { + "stringValue": "query16-service" + } + }, { "key": "sameplacetag1", - "vType": "STRING", - "vStr": "sameplacevalue" + "value": { + "stringValue": "sameplacevalue" + } }, { "key": "sameplacetag2", - "vType": "INT64", - "vInt64": 123 + "value": { + "intValue": 123 + } }, { "key": "sameplacetag4", - "vType": "BOOL", - "vBool": true + "value": { + "boolValue": true + } }, { "key": "sameplacetag3", - "vType": "FLOAT64", - "vFloat64": 72.5 + "value": { + "doubleValue": 72.5 + } }, { "key": "blob", - "vType": "BINARY", - "vBinary": "AAAwOQ==" + "value": { + "bytesValue": "AAAwOQ==" + } } ] }, - "logs": [ - { - "timestamp": "2017-01-26T16:46:31.639875Z", - "fields": [] - }, + "scopeSpans": [ { - "timestamp": "2017-01-26T16:46:31.639875Z", - "fields": [] + "scope": {}, + "spans": [ + { + "traceId": "00000000000000000000000000000016", + "spanId": "0000000000000005", + "startTimeUnixNano": "1485449191639875000", + "endTimeUnixNano": "1485449191639876000", + "events": [ + { + "timeUnixNano": "1485449191639875000" + }, + { + "timeUnixNano": "1485449191639875000" + } + ], + "status": {} + } + ] } ] } diff --git a/internal/storage/integration/fixtures/traces/tags_opname_dur_trace.json b/internal/storage/integration/fixtures/traces/tags_opname_dur_trace.json index d5f777aa9c1..57f448821cb 100644 --- a/internal/storage/integration/fixtures/traces/tags_opname_dur_trace.json +++ b/internal/storage/integration/fixtures/traces/tags_opname_dur_trace.json @@ -1,51 +1,69 @@ { - "spans": [ + "resourceSpans": [ { - "traceId": "AAAAAAAAAAAAAAAAAAAAFA==", - "spanId": "AAAAAAAAAAM=", - "operationName": "query14-operation", - "references": [], - "startTime": "2017-01-26T16:46:31.639875Z", - "duration": "5000ns", - "tags": [], - "process": { - "serviceName": "query14-service", - "tags": [] + "resource": { + "attributes": [ + { + "key": "service.name", + "value": { + "stringValue": "query14-service" + } + } + ] }, - "logs": [ + "scopeSpans": [ { - "timestamp": "2017-01-26T16:46:31.639875Z", - "fields": [ - { - "key": "sameplacetag1", - "vType": "STRING", - "vStr": "sameplacevalue" - }, - { - "key": "sameplacetag2", - "vType": "INT64", - "vInt64": 123 - }, + "scope": {}, + "spans": [ { - "key": "sameplacetag4", - "vType": "BOOL", - "vBool": true - }, - { - "key": "sameplacetag3", - "vType": "FLOAT64", - "vFloat64": 72.5 - }, - { - "key": "blob", - "vType": "BINARY", - "vBinary": "AAAwOQ==" + "traceId": "00000000000000000000000000000014", + "spanId": "0000000000000003", + "name": "query14-operation", + "startTimeUnixNano": "1485449191639875000", + "endTimeUnixNano": "1485449191639880000", + "events": [ + { + "timeUnixNano": "1485449191639875000", + "attributes": [ + { + "key": "sameplacetag1", + "value": { + "stringValue": "sameplacevalue" + } + }, + { + "key": "sameplacetag2", + "value": { + "intValue": 123 + } + }, + { + "key": "sameplacetag4", + "value": { + "boolValue": true + } + }, + { + "key": "sameplacetag3", + "value": { + "doubleValue": 72.5 + } + }, + { + "key": "blob", + "value": { + "bytesValue": "AAAwOQ==" + } + } + ] + }, + { + "timeUnixNano": "1485449191639875000" + } + ], + "status": {} } ] - }, - { - "timestamp": "2017-01-26T16:46:31.639875Z", - "fields": [] } ] } diff --git a/internal/storage/integration/fixtures/traces/tags_opname_maxdur_trace.json b/internal/storage/integration/fixtures/traces/tags_opname_maxdur_trace.json index 07275a81fa6..9aea1acc51e 100644 --- a/internal/storage/integration/fixtures/traces/tags_opname_maxdur_trace.json +++ b/internal/storage/integration/fixtures/traces/tags_opname_maxdur_trace.json @@ -1,67 +1,89 @@ { - "spans": [ + "resourceSpans": [ { - "traceId": "AAAAAAAAAAAAAAAAAAAAEw==", - "spanId": "AAAAAAAAAAc=", - "operationName": "query13-operation", - "references": [], - "startTime": "2017-01-26T16:46:31.639875Z", - "duration": "1000ns", - "tags": [ - { - "key": "tag1", - "vType": "STRING", - "vStr": "value1" - } - ], - "process": { - "serviceName": "query13-service", - "tags": [ + "resource": { + "attributes": [ + { + "key": "service.name", + "value": { + "stringValue": "query13-service" + } + }, { "key": "sameplacetag1", - "vType": "STRING", - "vStr": "sameplacevalue" + "value": { + "stringValue": "sameplacevalue" + } }, { "key": "sameplacetag2", - "vType": "INT64", - "vInt64": 123 + "value": { + "intValue": 123 + } }, { "key": "sameplacetag4", - "vType": "BOOL", - "vBool": true + "value": { + "boolValue": true + } }, { "key": "sameplacetag3", - "vType": "FLOAT64", - "vFloat64": 72.5 + "value": { + "doubleValue": 72.5 + } }, { "key": "blob", - "vType": "BINARY", - "vBinary": "AAAwOQ==" + "value": { + "bytesValue": "AAAwOQ==" + } } ] }, - "logs": [ - { - "timestamp": "2017-01-26T16:46:31.639875Z", - "fields": [ - { - "key": "tag3", - "vType": "STRING", - "vStr": "value3" - } - ] - }, + "scopeSpans": [ { - "timestamp": "2017-01-26T16:46:31.639875Z", - "fields": [ + "scope": {}, + "spans": [ { - "key": "something", - "vType": "STRING", - "vStr": "blah" + "traceId": "00000000000000000000000000000013", + "spanId": "0000000000000007", + "name": "query13-operation", + "startTimeUnixNano": "1485449191639875000", + "endTimeUnixNano": "1485449191639876000", + "attributes": [ + { + "key": "tag1", + "value": { + "stringValue": "value1" + } + } + ], + "events": [ + { + "timeUnixNano": "1485449191639875000", + "attributes": [ + { + "key": "tag3", + "value": { + "stringValue": "value3" + } + } + ] + }, + { + "timeUnixNano": "1485449191639875000", + "attributes": [ + { + "key": "something", + "value": { + "stringValue": "blah" + } + } + ] + } + ], + "status": {} } ] } diff --git a/internal/storage/integration/fixtures/traces/tags_opname_trace.json b/internal/storage/integration/fixtures/traces/tags_opname_trace.json index 664c19f9e9d..16f8c7d1c5c 100644 --- a/internal/storage/integration/fixtures/traces/tags_opname_trace.json +++ b/internal/storage/integration/fixtures/traces/tags_opname_trace.json @@ -1,60 +1,101 @@ { - "spans": [ + "resourceSpans": [ { - "traceId": "AAAAAAAAAAAAAAAAAAAAEg==", - "spanId": "AAAAAAAAAAQ=", - "operationName": "query12-operation", - "references": [ - { - "refType": "CHILD_OF", - "traceId": "AAAAAAAAAAAAAAAAAAAA/w==", - "spanId": "AAAAAAAAAP8=" - }, - { - "refType": "CHILD_OF", - "traceId": "AAAAAAAAAAAAAAAAAAAAAQ==", - "spanId": "AAAAAAAAAAI=" - }, - { - "refType": "FOLLOWS_FROM", - "traceId": "AAAAAAAAAAAAAAAAAAAAAQ==", - "spanId": "AAAAAAAAAAI=" - } - ], - "tags": [ - { - "key": "sameplacetag1", - "vType": "STRING", - "vStr": "sameplacevalue" - }, - { - "key": "sameplacetag2", - "vType": "INT64", - "vInt64": 123 - }, - { - "key": "sameplacetag4", - "vType": "BOOL", - "vBool": true - }, - { - "key": "sameplacetag3", - "vType": "FLOAT64", - "vFloat64": 72.5 - }, + "resource": { + "attributes": [ + { + "key": "service.name", + "value": { + "stringValue": "query12-service" + } + } + ] + }, + "scopeSpans": [ { - "key": "blob", - "vType": "BINARY", - "vBinary": "AAAwOQ==" + "scope": {}, + "spans": [ + { + "traceId": "00000000000000000000000000000012", + "spanId": "0000000000000004", + "name": "query12-operation", + "startTimeUnixNano": "1485449191639875000", + "endTimeUnixNano": "1485449191639877000", + "attributes": [ + { + "key": "sameplacetag1", + "value": { + "stringValue": "sameplacevalue" + } + }, + { + "key": "sameplacetag2", + "value": { + "intValue": 123 + } + }, + { + "key": "sameplacetag4", + "value": { + "boolValue": true + } + }, + { + "key": "sameplacetag3", + "value": { + "doubleValue": 72.5 + } + }, + { + "key": "blob", + "value": { + "bytesValue": "AAAwOQ==" + } + } + ], + "links": [ + { + "traceId": "000000000000000000000000000000ff", + "spanId": "00000000000000ff", + "attributes": [ + { + "key": "opentracing.ref_type", + "value": { + "stringValue": "child_of" + } + } + ] + }, + { + "traceId": "00000000000000000000000000000001", + "spanId": "0000000000000002", + "attributes": [ + { + "key": "opentracing.ref_type", + "value": { + "stringValue": "child_of" + } + } + ] + }, + { + "traceId": "00000000000000000000000000000001", + "spanId": "0000000000000002", + "attributes": [ + { + "key": "opentracing.ref_type", + "value": { + "stringValue": "follows_from" + } + } + ] + } + ], + "status": {} + } + ] } - ], - "startTime": "2017-01-26T16:46:31.639875Z", - "duration": "2000ns", - "process": { - "serviceName": "query12-service", - "tags": [] - }, - "logs": [] + ] } ] } diff --git a/internal/storage/integration/fixtures/traces/tags_wildcard_regex_1.json b/internal/storage/integration/fixtures/traces/tags_wildcard_regex_1.json index 9eaa2731950..a2b23155a6b 100644 --- a/internal/storage/integration/fixtures/traces/tags_wildcard_regex_1.json +++ b/internal/storage/integration/fixtures/traces/tags_wildcard_regex_1.json @@ -1,25 +1,38 @@ { - "spans": [ + "resourceSpans": [ { - "traceId": "AAAAAAAAAAAAAAAAAAAKEg==", - "spanId": "AAAAAAAAAAQ=", - "operationName": "", - "references": [ - ], - "tags": [ + "resource": { + "attributes": [ + { + "key": "service.name", + "value": { + "stringValue": "query24-service" + } + } + ] + }, + "scopeSpans": [ { - "key": "sameplacetag1", - "vType": "STRING", - "vStr": "sameplacevalue1" + "scope": {}, + "spans": [ + { + "traceId": "00000000000000000000000000000a12", + "spanId": "0000000000000004", + "startTimeUnixNano": "1485449191639875000", + "endTimeUnixNano": "1485449191639877000", + "attributes": [ + { + "key": "sameplacetag1", + "value": { + "stringValue": "sameplacevalue1" + } + } + ], + "status": {} + } + ] } - ], - "startTime": "2017-01-26T16:46:31.639875Z", - "duration": "2000ns", - "process": { - "serviceName": "query24-service", - "tags": [] - }, - "logs": [] + ] } ] } diff --git a/internal/storage/integration/fixtures/traces/tags_wildcard_regex_2.json b/internal/storage/integration/fixtures/traces/tags_wildcard_regex_2.json index 887978c6c4c..1b0ed94d100 100644 --- a/internal/storage/integration/fixtures/traces/tags_wildcard_regex_2.json +++ b/internal/storage/integration/fixtures/traces/tags_wildcard_regex_2.json @@ -1,25 +1,38 @@ { - "spans": [ + "resourceSpans": [ { - "traceId": "AAAAAAAAAAAAAAAAAAASEg==", - "spanId": "AAAAAAAAAAQ=", - "operationName": "", - "references": [ - ], - "tags": [ + "resource": { + "attributes": [ + { + "key": "service.name", + "value": { + "stringValue": "query24-service" + } + } + ] + }, + "scopeSpans": [ { - "key": "sameplacetag1", - "vType": "STRING", - "vStr": "sameplacevalue2" + "scope": {}, + "spans": [ + { + "traceId": "00000000000000000000000000001212", + "spanId": "0000000000000004", + "startTimeUnixNano": "1485449191639875000", + "endTimeUnixNano": "1485449191639877000", + "attributes": [ + { + "key": "sameplacetag1", + "value": { + "stringValue": "sameplacevalue2" + } + } + ], + "status": {} + } + ] } - ], - "startTime": "2017-01-26T16:46:31.639875Z", - "duration": "2000ns", - "process": { - "serviceName": "query24-service", - "tags": [] - }, - "logs": [] + ] } ] } diff --git a/internal/storage/integration/integration.go b/internal/storage/integration/integration.go index a7e22287b71..6c382e1deb2 100644 --- a/internal/storage/integration/integration.go +++ b/internal/storage/integration/integration.go @@ -23,6 +23,7 @@ import ( "github.com/stretchr/testify/assert" "github.com/stretchr/testify/require" "go.opentelemetry.io/collector/pdata/pcommon" + "go.opentelemetry.io/collector/pdata/ptrace" "github.com/jaegertracing/jaeger-idl/model/v1" "github.com/jaegertracing/jaeger/internal/storage/v1/api/samplingstore" @@ -141,6 +142,8 @@ var CassandraSkippedTests = []string{ "Duration_range", "max_Duration", "Multiple_Traces", + "OTLPScopeMetadata", + "OTLPSpanLinks", } func (s *StorageIntegration) skipIfNeeded(t *testing.T) { @@ -321,33 +324,128 @@ func (s *StorageIntegration) testGetTrace(t *testing.T) { s.skipIfNeeded(t) defer s.cleanUp(t) - expected := s.loadParseAndWriteExampleTrace(t) - expectedTraceID := v1adapter.FromV1TraceID(expected.Spans[0].TraceID) + // Subtest 1: Basic trace validation (works for all backends) + t.Run("BasicTrace", func(t *testing.T) { + expected := s.loadParseAndWriteExampleTrace(t) + expectedTraceID := v1adapter.FromV1TraceID(expected.Spans[0].TraceID) + + actual := &model.Trace{} + found := s.waitForCondition(t, func(t *testing.T) bool { + iterTraces := s.TraceReader.GetTraces(context.Background(), tracestore.GetTraceParams{TraceID: expectedTraceID}) + traces, err := v1adapter.V1TracesFromSeq2(iterTraces) + if err != nil { + t.Log(err) + return false + } + if len(traces) == 0 { + return false + } + actual = traces[0] + return len(actual.Spans) == len(expected.Spans) + }) + if !assert.True(t, found) { + CompareTraces(t, expected, actual) + } - actual := &model.Trace{} // no spans - found := s.waitForCondition(t, func(t *testing.T) bool { - iterTraces := s.TraceReader.GetTraces(context.Background(), tracestore.GetTraceParams{TraceID: expectedTraceID}) - traces, err := v1adapter.V1TracesFromSeq2(iterTraces) - if err != nil { - t.Log(err) + t.Run("NotFound error", func(t *testing.T) { + fakeTraceID := v1adapter.FromV1TraceID(model.TraceID{High: 0, Low: 1}) + iterTraces := s.TraceReader.GetTraces(context.Background(), tracestore.GetTraceParams{TraceID: fakeTraceID}) + traces, err := v1adapter.V1TracesFromSeq2(iterTraces) + require.NoError(t, err) + assert.Empty(t, traces) + }) + }) + + // Subtest 2: OTLP Scope metadata preservation (skip for Cassandra/ES) + t.Run("OTLPScopeMetadata", func(t *testing.T) { + s.skipIfNeeded(t) + + expectedTraces := loadOTLPFixture(t, "otlp_scope_attributes") + traceID := extractTraceID(t, expectedTraces) + s.writeTrace(t, expectedTraces) + + var retrievedTraces ptrace.Traces + found := s.waitForCondition(t, func(t *testing.T) bool { + iter := s.TraceReader.GetTraces(context.Background(), tracestore.GetTraceParams{TraceID: traceID}) + + for trSlice, err := range iter { + if err != nil { + t.Logf("Error iterating traces: %v", err) + return false + } + if len(trSlice) > 0 && trSlice[0].SpanCount() > 0 { + retrievedTraces = trSlice[0] + return true + } + } return false - } - if len(traces) == 0 { + }) + + require.True(t, found, "Failed to retrieve OTLP trace") + require.Positive(t, retrievedTraces.ResourceSpans().Len(), "Should have resource spans") + + scopeSpans := retrievedTraces.ResourceSpans().At(0).ScopeSpans() + require.Positive(t, scopeSpans.Len(), "Should have scope spans") + + scope := scopeSpans.At(0).Scope() + + assert.Equal(t, "test-instrumentation-library", scope.Name(), "Scope name should be preserved") + assert.Equal(t, "2.1.0", scope.Version(), "Scope version should be preserved") + + scopeAttrs := scope.Attributes() + assert.Positive(t, scopeAttrs.Len(), "Scope should have attributes") + + val, exists := scopeAttrs.Get("scope.attribute.key") + assert.True(t, exists, "Scope attribute 'scope.attribute.key' should exist") + assert.Equal(t, "scope-value", val.Str(), "Scope attribute value should match") + + t.Log("OTLP InstrumentationScope metadata and attributes preserved successfully") + }) + + // Subtest 3: OTLP Span Links with attributes (skip for Cassandra/ES) + t.Run("OTLPSpanLinks", func(t *testing.T) { + s.skipIfNeeded(t) + + expectedTraces := loadOTLPFixture(t, "otlp_span_links") + traceID := extractTraceID(t, expectedTraces) + s.writeTrace(t, expectedTraces) + + var retrievedTraces ptrace.Traces + found := s.waitForCondition(t, func(t *testing.T) bool { + iter := s.TraceReader.GetTraces(context.Background(), tracestore.GetTraceParams{TraceID: traceID}) + + for trSlice, err := range iter { + if err != nil { + t.Logf("Error iterating traces: %v", err) + return false + } + if len(trSlice) > 0 && trSlice[0].SpanCount() > 0 { + retrievedTraces = trSlice[0] + return true + } + } return false + }) + + require.True(t, found, "Failed to retrieve OTLP trace") + require.Positive(t, retrievedTraces.ResourceSpans().Len(), "Should have resource spans") + + span := retrievedTraces.ResourceSpans().At(0).ScopeSpans().At(0).Spans().At(0) + links := span.Links() + + require.Positive(t, links.Len(), "Span should have links") + + for i := 0; i < links.Len(); i++ { + link := links.At(i) + linkAttrs := link.Attributes() + assert.Positive(t, linkAttrs.Len(), "Link should have attributes") + + val, exists := linkAttrs.Get("link.attribute.key") + assert.True(t, exists, "Link attribute 'link.attribute.key' should exist") + assert.Equal(t, "link-value", val.Str(), "Link attribute value should match") } - actual = traces[0] - return len(actual.Spans) == len(expected.Spans) - }) - if !assert.True(t, found) { - CompareTraces(t, expected, actual) - } - t.Run("NotFound error", func(t *testing.T) { - fakeTraceID := v1adapter.FromV1TraceID(model.TraceID{High: 0, Low: 1}) - iterTraces := s.TraceReader.GetTraces(context.Background(), tracestore.GetTraceParams{TraceID: fakeTraceID}) - traces, err := v1adapter.V1TracesFromSeq2(iterTraces) - require.NoError(t, err) // v2 TraceReader no longer returns an error for not found - assert.Empty(t, traces) + t.Logf("OTLP span links with attributes preserved successfully: %d links", links.Len()) }) } @@ -367,12 +465,14 @@ func (s *StorageIntegration) testFindTraces(t *testing.T) { for _, traceFixture := range queryTestCase.ExpectedFixtures { trace, ok := allTraceFixtures[traceFixture] if !ok { - trace = s.getTraceFixture(t, traceFixture) - s.writeTrace(t, trace) + otelTraces := s.getTraceFixture(t, traceFixture) + s.writeTrace(t, otelTraces) + trace = s.getTraceFixtureV1(t, traceFixture) allTraceFixtures[traceFixture] = trace } expected = append(expected, trace) } + expectedTracesPerTestCase = append(expectedTracesPerTestCase, expected) } for i, queryTestCase := range s.Fixtures { @@ -409,21 +509,21 @@ func (s *StorageIntegration) findTracesByQuery(t *testing.T, query *tracestore.T return traces } -func (s *StorageIntegration) writeTrace(t *testing.T, trace *model.Trace) { - t.Logf("%-23s Writing trace with %d spans", time.Now().Format("2006-01-02 15:04:05.999"), len(trace.Spans)) +func (s *StorageIntegration) writeTrace(t *testing.T, traces ptrace.Traces) { + spanCount := traces.SpanCount() + t.Logf("%-23s Writing trace with %d spans", time.Now().Format("2006-01-02 15:04:05.999"), spanCount) ctx, cx := context.WithTimeout(context.Background(), 5*time.Minute) defer cx() - otelTraces := v1adapter.V1TraceToOtelTrace(trace) - err := s.TraceWriter.WriteTraces(ctx, otelTraces) + err := s.TraceWriter.WriteTraces(ctx, traces) require.NoError(t, err, "Not expecting error when writing trace to storage") - t.Logf("%-23s Finished writing trace with %d spans", time.Now().Format("2006-01-02 15:04:05.999"), len(trace.Spans)) + t.Logf("%-23s Finished writing trace with %d spans", time.Now().Format("2006-01-02 15:04:05.999"), spanCount) } func (s *StorageIntegration) loadParseAndWriteExampleTrace(t *testing.T) *model.Trace { - trace := s.getTraceFixture(t, "example_trace") - s.writeTrace(t, trace) - return trace + otelTraces := s.getTraceFixture(t, "example_trace") + s.writeTrace(t, otelTraces) + return s.getTraceFixtureV1(t, "example_trace") } func (s *StorageIntegration) writeLargeTraceWithDuplicateSpanIds( @@ -431,7 +531,7 @@ func (s *StorageIntegration) writeLargeTraceWithDuplicateSpanIds( totalCount int, dupFreq int, ) *model.Trace { - trace := s.getTraceFixture(t, "example_trace") + trace := s.getTraceFixtureV1(t, "example_trace") repeatedSpan := trace.Spans[0] trace.Spans = make([]*model.Span, totalCount) for i := range totalCount { @@ -446,15 +546,36 @@ func (s *StorageIntegration) writeLargeTraceWithDuplicateSpanIds( newSpan.StartTime = newSpan.StartTime.Add(time.Second * time.Duration(i+1)) trace.Spans[i] = newSpan } - s.writeTrace(t, trace) + // Convert to OTLP for writing + otelTraces := v1adapter.V1TraceToOtelTrace(trace) + s.writeTrace(t, otelTraces) return trace } -func (*StorageIntegration) getTraceFixture(t *testing.T, fixture string) *model.Trace { - fileName := fmt.Sprintf("fixtures/traces/%s.json", fixture) - return getTraceFixtureExact(t, fileName) +// getTraceFixture returns OTLP traces ready for v2 API +func (s *StorageIntegration) getTraceFixture(t *testing.T, fixture string) ptrace.Traces { + return loadOTLPFixture(t, fixture) +} + +// getTraceFixtureV1 returns v1 model.Trace for comparison purposes +func (s *StorageIntegration) getTraceFixtureV1(t *testing.T, fixture string) *model.Trace { + // Load OTLP fixture + otelTraces := loadOTLPFixture(t, fixture) + + // Create an iterator that yields the single trace + iter := func(yield func([]ptrace.Traces, error) bool) { + yield([]ptrace.Traces{otelTraces}, nil) + } + + // Use V1TracesFromSeq2 to convert + traces, err := v1adapter.V1TracesFromSeq2(iter) + require.NoError(t, err, "Failed to convert OTLP to v1 trace") + require.Len(t, traces, 1, "Expected exactly one trace in fixture") + + return traces[0] } + func getTraceFixtureExact(t *testing.T, fileName string) *model.Trace { var trace model.Trace loadAndParseJSONPB(t, fileName, &trace) @@ -627,6 +748,66 @@ func (s *StorageIntegration) insertThroughput(t *testing.T) { require.NoError(t, err) } +// loadOTLPFixture loads an OTLP trace fixture by name from the fixtures directory. +func loadOTLPFixture(t *testing.T, fixtureName string) ptrace.Traces { + fileName := fmt.Sprintf("fixtures/traces/%s.json", fixtureName) + data, err := fixtures.ReadFile(fileName) + require.NoError(t, err, "Failed to read OTLP fixture %s", fileName) + + unmarshaler := &ptrace.JSONUnmarshaler{} + traces, err := unmarshaler.UnmarshalTraces(data) + require.NoError(t, err, "Failed to unmarshal OTLP fixture %s", fixtureName) + + normalizeOTLPTimestamps(traces) + + return traces +} + +// normalizeOTLPTimestamps adjusts all span timestamps in the trace to be recent. +// This ensures test queries with time ranges work correctly regardless of when the test runs. +func normalizeOTLPTimestamps(traces ptrace.Traces) { + resourceSpans := traces.ResourceSpans() + if resourceSpans.Len() == 0 { + return + } + + var firstStart time.Time + targetStart := time.Now().Add(-time.Minute).UTC() + + // Use OTLP iterator functions to traverse and adjust timestamps + for _, rs := range resourceSpans.All() { + for _, ss := range rs.ScopeSpans().All() { + for _, span := range ss.Spans().All() { + // Detect first timestamp if not yet found + if firstStart.IsZero() { + firstStart = span.StartTimestamp().AsTime() + if firstStart.IsZero() { + continue + } + } + + // Calculate delta and adjust timestamps + delta := targetStart.Sub(firstStart) + start := span.StartTimestamp().AsTime().Add(delta) + end := span.EndTimestamp().AsTime().Add(delta) + + span.SetStartTimestamp(pcommon.NewTimestampFromTime(start)) + span.SetEndTimestamp(pcommon.NewTimestampFromTime(end)) + } + } + } +} + +// extractTraceID extracts the first trace ID from ptrace.Traces for retrieval testing. +func extractTraceID(t *testing.T, traces ptrace.Traces) pcommon.TraceID { + require.Positive(t, traces.ResourceSpans().Len(), "Trace must have resource spans") + rs := traces.ResourceSpans().At(0) + require.Positive(t, rs.ScopeSpans().Len(), "Resource must have scope spans") + ss := rs.ScopeSpans().At(0) + require.Positive(t, ss.Spans().Len(), "Scope must have spans") + return ss.Spans().At(0).TraceID() +} + // RunAll runs all integration tests func (s *StorageIntegration) RunAll(t *testing.T) { s.RunSpanStoreTests(t)