Skip to content

Add support for custom static headers#2690

Merged
vam-google merged 15 commits intogoogleapis:masterfrom
vam-google:master
Dec 14, 2017
Merged

Add support for custom static headers#2690
vam-google merged 15 commits intogoogleapis:masterfrom
vam-google:master

Conversation

@vam-google
Copy link
Contributor

@vam-google vam-google commented Dec 8, 2017

Dependent on googleapis/gax-java#432 (will fail build until that is released)

Note, PubSub is supported only partially. Full support is dependent on migration of PubSub from Grpc stubs to Gapic stubs.

The spanner's SpannerOptions.Builder.setUserAgentPrefix() method is replaced with ServiceOptions.Builder.setHeaderProvider() and providing "user-agent" value there (it will be prefixing the header provider as explained in ServiceOptions.Builder.setHeaderProvider() documentation, see example below).

Usage:

// For manual/semi-manual clients:
//     Resource Manager
//     Translate
//     Compute
//     Storage
//     Datastore
//     Dns
//     BigQuery
//
//     Logging
//     Firestore
//     Spanner
HeaderProvider headerProvider =
    FixedHeaderProvider.create("user-agent", "my-client-name", "custom-header", "custom stuff");
DatastoreOptions options =
    DatastoreOptions.newBuilder().setHeaderProvider(headerProvider).build();
Datastore datastore = options.getService();

// For generated clients:
//    All others, except Pub/Sub
HeaderProvider headerProvider =
    FixedHeaderProvider.create("user-agent", "my-client-name", "custom-header", "custom stuff");
LanguageServiceSettings settings =
    LanguageServiceSettings.newBuilder().setHeaderProvider(headerProvider).build();
LanguageServiceClient client = LanguageServiceClient.create(settings);

// Note, PubSub is supported only partially. Full support is dependent on migration of PubSub from Grpc stubs to Gapic stubs

Dependent on googleapis/gax-java#432

Usage:

// For manual/semi-manual clients:
//   Resource Manager
//   Translate
//   Compute
//   Storage
//   Datastore
//   Dns
//   BigQuery
//
//   Logging
//   Firestore
//   Spanner

HeaderProvider headerProvider =
    FixedHeaderProvider.create("user-agent", "my-client-name", "custom-header", "custom stuff");

LanguageServiceSettings settings =
    LanguageServiceSettings.newBuilder().setHeaderProvider(headerProvider).build();

LanguageServiceClient client = LanguageServiceClient.create(settings);

// For generated clients:
// All others, except Pub/Sub

HeaderProvider headerProvider =
    FixedHeaderProvider.create("user-agent", "my-client-name", "custom-header", "custom stuff");

DatastoreOptions options =
    DatastoreOptions.newBuilder().setHeaderProvider(headerProvider).build();

Datastore datastore = options.getService();

// Note, PubSub is supported only partially. Full support is dependent on migration of PubSub from Grpc stubs to Gapic stubs
@googlebot googlebot added the cla: yes This human has signed the Contributor License Agreement. label Dec 8, 2017
@vam-google vam-google requested review from pongad and vkedia December 8, 2017 00:53
Copy link
Member

@garrettjonesgoogle garrettjonesgoogle left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

One initial comment

public static void main(String... args) {
Datastore datastore = DatastoreOptions.getDefaultInstance().getService();
HeaderProvider headerProvider =
FixedHeaderProvider.create("user-agent", "my-client-name", "custom-header", "custom stuff");

This comment was marked as spam.

This comment was marked as spam.

</goals>
</execution>
</executions>
</plugin>

This comment was marked as spam.

This comment was marked as spam.

private SpannerOptions(Builder builder) {
super(SpannerFactory.class, SpannerRpcFactory.class, builder, new SpannerDefaults());
numChannels = builder.numChannels;
userAgent = builder.userAgentPrefix;

This comment was marked as spam.

This comment was marked as spam.

This comment was marked as spam.

This comment was marked as spam.

This comment was marked as spam.

This comment was marked as spam.

Pattern.compile("^(?<headerValue>projects/[^/]*/instances/[^/]*/databases/[^/]*)(.*)?");
private static final Pattern INSTANCE_PATTERN =
Pattern.compile("^(?<instance>projects/[^/]*/instances/[^/]*)(.*)?");
Pattern.compile("^(?<headerValue>projects/[^/]*/instances/[^/]*)(.*)?");

This comment was marked as spam.

This comment was marked as spam.

return headersAsMetadata;
}

Map<Key<String>, String> getResourceHeadersAsMetadata(

This comment was marked as spam.

This comment was marked as spam.

import java.util.regex.Matcher;
import java.util.regex.Pattern;

class SpannerClientHeaderProvider implements HeaderProvider {

This comment was marked as spam.

This comment was marked as spam.

This comment was marked as spam.

@vam-google
Copy link
Contributor Author

@vkedia PTAL


HeaderProvider mergedHeaderProvider = options.getMergedHeaderProvider(internalHeaderProvider);
this.headerProvider = SpannerHeaderProvider.create(mergedHeaderProvider.getHeaders(),
internalHeaderProviderBuilder.getResourceHeaderKey());

This comment was marked as spam.

This comment was marked as spam.

import java.util.regex.Matcher;
import java.util.regex.Pattern;

class SpannerHeaderProvider implements HeaderProvider {

This comment was marked as spam.

This comment was marked as spam.

}

return ImmutableMap.of(
Key.of(resourceHeaderKey, Metadata.ASCII_STRING_MARSHALLER), resourceToken);

This comment was marked as spam.

This comment was marked as spam.

Matcher m = DATABASE_PATTERN.matcher(resource);
if (m.matches()) {
return m.group("database");
Map<Metadata.Key<String>, String> headers = headerProvider.getHeadersAsMetadata();

This comment was marked as spam.

This comment was marked as spam.

@vam-google
Copy link
Contributor Author

vam-google commented Dec 13, 2017

@garrettjonesgoogle PTAL

Note that the header testing changes are additive, and thus are reflected here only in LanguageServiceClientTest as an example (the others will be added automatically once everything is regenerated using corresponding toolkit changes)

<gax-grpc.version>1.15.0</gax-grpc.version>
<gax.version>1.15.1-SNAPSHOT</gax.version>
<gax-grpc.version>1.15.1-SNAPSHOT</gax-grpc.version>
<gax-httpjson.version>0.32.1-SNAPSHOT</gax-httpjson.version>

This comment was marked as spam.

This comment was marked as spam.

@Test
public void testGetHeadersAsMetadata() {
Map<String, String> headers = ImmutableMap.of("header1", "value1", "header2", "value2");
SpannerMetadataProvider headerProvider = SpannerMetadataProvider.create(headers, "header3");

This comment was marked as spam.

This comment was marked as spam.

import java.util.regex.Matcher;
import java.util.regex.Pattern;

class SpannerMetadataProvider {

This comment was marked as spam.

This comment was marked as spam.

FixedHeaderProvider.create("user-agent", "my-client-name", "custom-header", "custom stuff");

LoggingOptions options =
LoggingOptions.newBuilder().setHeaderProvider(headerProvider).build();

This comment was marked as spam.

This comment was marked as spam.


// Create a dataset
String datasetId = "my_dataset_id";
String datasetId = "my_dataset_id_1";

This comment was marked as spam.

This comment was marked as spam.

return libraryVersion == null ? LIBRARY_NAME : LIBRARY_NAME + "/" + libraryVersion;
}

// We have to do it, since underlying layers often do not appreciate User-Agent provided as a

This comment was marked as spam.

@vam-google
Copy link
Contributor Author

@garrettjonesgoogle PTAL

@vam-google
Copy link
Contributor Author

@garrettjonesgoogle PTAL

@vam-google vam-google merged commit db0fdb1 into googleapis:master Dec 14, 2017
chingor13 pushed a commit that referenced this pull request Feb 20, 2026
…#2690)

* chore: Update generation configuration at Tue Oct  8 02:26:28 UTC 2024

* chore: generate libraries at Tue Oct  8 02:26:50 UTC 2024
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

cla: yes This human has signed the Contributor License Agreement.

Projects

None yet

Development

Successfully merging this pull request may close these issues.

4 participants