Skip to content

Commit 54f9813

Browse files
committed
Add checklist
Signed-off-by: Shizuo Fujita <fujita@clear-code.com> (cherry picked from commit 4fd93549dc9ec5c7ddbda2b5429ce40834a26fe6)
1 parent 4fa45f3 commit 54f9813

File tree

1 file changed

+108
-0
lines changed

1 file changed

+108
-0
lines changed

TODO.md

Lines changed: 108 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,108 @@
1+
This checklist indicates the implementation status of MUST / SHOULD in the protocol specification.
2+
Ref. https://github.com/open-telemetry/opentelemetry-proto/blob/main/docs/specification.md
3+
4+
# Protocol Details
5+
## OTLP/gRPC
6+
- [ ] [MUST] All server components MUST support the following transport compression options:
7+
- [ ] [MUST] No compression, denoted by none.
8+
- [ ] [MUST] Gzip compression, denoted by gzip.
9+
10+
### OTLP/gRPC Concurrent Requests
11+
- [ ] [SHOULD] The implementations that need to achieve high throughput SHOULD support concurrent Unary calls to achieve higher throughput.
12+
- [ ] [SHOULD] The client SHOULD send new requests without waiting for the response to the earlier sent requests, essentially creating a pipeline of requests that are currently in flight that are not acknowledged.
13+
- [ ] [SHOULD] The number of concurrent requests SHOULD be configurable.
14+
- [ ] [SHOULD] The client implementation SHOULD expose an option to turn on and off the waiting during a shutdown.
15+
16+
### OTLP/gRPC Response
17+
- Full Success
18+
- [ ] [MUST] On success, the server response MUST be a Export<signal>ServiceResponse message.
19+
- [ ] [MUST] The server MUST leave the partial_success field unset in case of a successful response.
20+
- [ ] [SHOULD] If the server receives an empty request the server SHOULD respond with success.
21+
- Partial Success
22+
- [ ] [MUST] The server response MUST be the same Export<signal>ServiceResponse message as in the Full Success case.
23+
- [ ] [MUST] The server MUST initialize the partial_success field, and it MUST set the respective rejected_spans, rejected_data_points, rejected_log_records or rejected_profiles field with the number of spans/data points/log records/profiles it rejected.
24+
- [ ] [MUST] Servers MAY also use the partial_success field to convey warnings/suggestions to clients even when the server fully accepts the request. The rejected_<signal> field MUST have a value of 0, and the error_message field MUST be non-empty.
25+
- [ ] [MUST] The client MUST NOT retry the request when it receives a partial success response where the partial_success is populated.
26+
- [ ] [SHOULD] The server SHOULD populate the error_message field with a human-readable error message in English.
27+
- Failures
28+
- [ ] [MUST] Not-retryable errors indicate that telemetry data processing failed, and the client MUST NOT retry sending the same telemetry data. The client MUST drop the telemetry data.
29+
- [ ] [MUST] The server MUST indicate retryable errors using code Unavailable.
30+
- [ ] Retryable errors indicate that telemetry data processing failed, and the client SHOULD record the error and may retry exporting the same data.
31+
- [ ] The client SHOULD maintain a counter of such dropped data.
32+
- [ ] The client SHOULD interpret gRPC status codes as retryable or not-retryable according to the following table.
33+
- [ ] When retrying, the client SHOULD implement an exponential backoff strategy.
34+
- [ ] The client SHOULD interpret RESOURCE_EXHAUSTED code as retryable only if the server signals that the recovery from resource exhaustion is possible.
35+
36+
### OTLP/gRPC Throttling
37+
- [ ] [MUST] The client MUST then throttle itself to avoid overwhelming the server.
38+
- [ ] [MUST] To signal backpressure when using gRPC transport, the server MUST return an error with code Unavailable.
39+
- [ ] [SHOULD] If the server is unable to keep up with the pace of data it receives from the client then it SHOULD signal that fact to the client.
40+
- [ ] [SHOULD] When the client receives this signal, it SHOULD follow the recommendations outlined in documentation for RetryInfo.
41+
- [ ] [SHOULD] The server SHOULD choose a retry_delay value that is big enough to give the server time to recover yet is not too big to cause the client to drop data while being throttled.
42+
43+
44+
## OTLP/HTTP
45+
- [ ] [MUST] All server components MUST support the following transport compression options:
46+
- [ ] [MUST] No compression, denoted by none.
47+
- [ ] [MUST] Gzip compression, denoted by gzip.
48+
- [ ] [SHOULD] Implementations that use HTTP/2 transport SHOULD fallback to HTTP/1.1 transport if HTTP/2 connection cannot be established.
49+
50+
### Binary Protobuf Encoding
51+
- [ ] [MUST] The client and the server MUST set "Content-Type: application/x-protobuf" request and response headers when sending binary Protobuf encoded payload.
52+
53+
### JSON Protobuf Encoding
54+
- [ ] [MUST] The client and the server MUST set "Content-Type: application/json" request and response headers when sending JSON Protobuf encoded payload.
55+
- [ ] [MUST] Values of enum fields MUST be encoded as integer values.
56+
- [ ] [MUST] OTLP/JSON receivers MUST ignore message fields with unknown names and MUST unmarshal the message as if the unknown field was not present in the payload.
57+
58+
### OTLP/HTTP Request
59+
- [ ] [MUST] The client MAY gzip the content and in that case MUST include "Content-Encoding: gzip" request header.
60+
61+
### OTLP/HTTP Response
62+
- [ ] [MUST] The response body MUST be the appropriate serialized Protobuf message.
63+
- [ ] [MUST] The server MUST set "Content-Type: application/x-protobuf" header if the response body is binary-encoded Protobuf payload.
64+
- [ ] [MUST] The server MUST set "Content-Type: application/json" if the response is JSON-encoded Protobuf payload.
65+
- [ ] [MUST] The server MUST use the same "Content-Type" in the response as it received in the request.
66+
- Full Success
67+
- [ ] [MUST] On success, the server MUST respond with HTTP 200 OK
68+
- [ ] [MUST] The response body MUST be a Protobuf-encoded Export<signal>ServiceResponse message.
69+
- [ ] [MUST] The server MUST leave the partial_success field unset in case of a successful response.
70+
- [ ] [SHOULD] If the server receives an empty request the server SHOULD respond with success.
71+
- Partial Success
72+
- [ ] [MUST] If the request is only partially accepted, the server MUST respond with HTTP 200 OK.
73+
- [ ] [MUST] The response body MUST be the same Export<signal>ServiceResponse message as in the Full Success case.
74+
- [ ] [MUST] The server MUST initialize the partial_success field, and it MUST set the respective rejected_spans, rejected_data_points, rejected_log_records or rejected_profiles field with the number of spans/data points/log records it rejected.
75+
- [ ] [MUST] Servers MAY also use the partial_success field to convey warnings/suggestions to clients even when it fully accepts the request. In such cases, the rejected_<signal> field MUST have a value of 0, and the error_message field MUST be non-empty.
76+
- [ ] [MUST] The client MUST NOT retry the request when it receives a partial success response where the partial_success is populated.
77+
- [ ] [SHOULD] The server SHOULD populate the error_message field with a human-readable error message in English.
78+
- Failures
79+
- [ ] [MUST] If the processing of the request fails, the server MUST respond with appropriate HTTP 4xx or HTTP 5xx status code.
80+
- [ ] [MUST] The response body for all HTTP 4xx and HTTP 5xx responses MUST be a Protobuf-encoded Status message that describes the problem.
81+
- [ ] [SHOULD] The Status.message field SHOULD contain a developer-facing error message as defined in Status message schema.
82+
- [ ] [SHOULD] The server SHOULD use HTTP response status codes to indicate retryable and not-retryable errors for a particular erroneous situation.
83+
- [ ] [SHOULD] The client SHOULD honour HTTP response status codes as retryable or not-retryable.
84+
- Retryable Response Codes
85+
- [ ] [MUST] All other 4xx or 5xx response status codes MUST NOT be retried.
86+
- [ ] [SHOULD] The requests that receive a response status code listed in following table SHOULD be retried.
87+
- Bad Data
88+
- [ ] [MUST] If the processing of the request fails because the request contains data that cannot be decoded or is otherwise invalid and such failure is permanent, then the server MUST respond with HTTP 400 Bad Request.
89+
- [ ] [MUST] The client MUST NOT retry the request when it receives HTTP 400 Bad Request response.
90+
- [ ] [SHOULD] The Status.details field in the response SHOULD contain a BadRequest that describes the bad data.
91+
- OTLP/HTTP Throttling
92+
- [ ] [SHOULD] If the server receives more requests than the client is allowed or the server is overloaded, the server SHOULD respond with HTTP 429 Too Many Requests or HTTP 503 Service Unavailable.
93+
- [ ] [SHOULD] The client SHOULD honour the waiting interval specified in the "Retry-After" header if it is present.
94+
- [ ] [SHOULD] The "Retry-After" header is not present in the response, then the client SHOULD implement an exponential backoff strategy between retries.
95+
- All Other Responses
96+
- [ ] [SHOULD] If the server disconnects without returning a response, the client SHOULD retry and send the same request.
97+
- [ ] [SHOULD] The client SHOULD implement an exponential backoff strategy between retries to avoid overwhelming the server.
98+
99+
### OTLP/HTTP Connection
100+
- [ ] [SHOULD] If the client cannot connect to the server, the client SHOULD retry the connection using an exponential backoff strategy between retries.
101+
- [ ] [SHOULD] The client SHOULD keep the connection alive between requests.
102+
- [ ] [SHOULD] Server implementations SHOULD accept OTLP/HTTP with binary-encoded Protobuf payload and OTLP/HTTP with JSON-encoded Protobuf payload requests on the same port and multiplex the requests to the corresponding payload decoder based on the "Content-Type" request header.
103+
104+
### OTLP/HTTP Concurrent Requests
105+
- [ ] [SHOULD] To achieve higher total throughput, the client MAY send requests using several parallel HTTP connections. In that case, the maximum number of parallel connections SHOULD be configurable.
106+
107+
# Future Versions and Interoperability
108+
- [ ] [MUST] When possible, the interoperability MUST be ensured between all versions of OTLP that are not declared obsolete.

0 commit comments

Comments
 (0)