googleapis / googleapis/google-cloud-cpp

Support idempotency token for Storage client

Aperta
#12,294 4 commenti 0 reazioni 0 assegnatari Vedi su GitHub
api: storage external type: feature request
Lingua principale
C++
Stelle
659
Fork
462
Merge medio
1g 2h
PR unite (30g)
89

Descrizione

The GCS API supports (or soon will support) an idempotency token header. The header allows GCS to detect if a request is a duplicate, and returns the same value for duplicate requests.

To implement this we need to:

- Create the unique id in the `RetryClient`
- The decorators below `RetryClient` need to accept a new "context" field on each function
- The gRPC and REST-based implementations need to consume this field and send it to the service as a header.

It is time to split the `RawClient` stack in two, like we do for all the other libraries. The `*Connection` stack will be used for mocks and to implement the retry loop. The typical function will look like so:

```cc
virtual StatusOr GetBucketMetadata(
GetBucketMetadataRequest const& request) = 0;
```

The `*Stub` will implement logging, tracing, and actually sending the data to the service, the typical function will look like so:

```cc
virtual StatusOr GetBucketMetadata(
rest_internal::RestContext& context,
Options const& options,
GetBucketMetadataRequest const& request) = 0;
```

Note how the options are passed explicitly and not tunneled via `CurrentOptions`. Also note that the "context" object is REST-based. We can change both over time, as the classes in the `*Stub` hierarchy are not needed for mocking.

----

Java implemented this in:

https://github.com/googleapis/java-storage/pull/2027

Internally, the design doc is [go/gcs-client-idem-token](http://goto.google.com/gcs-client-idem-token)

Guida per i contributori

Apri la guida per i contributori

Valutazione

Questa issue non è ancora stata valutata.

Ricevi le nuove issue nella tua casella

Un breve riepilogo di issue GitHub adatte ai principianti.