Skip to content

Commit

Permalink
chore: Stop sending legacy routing header.
Browse files Browse the repository at this point in the history
  • Loading branch information
amanda-tarafa committed Jan 19, 2024
1 parent e7167a3 commit 23b5df7
Show file tree
Hide file tree
Showing 5 changed files with 10 additions and 208 deletions.

This file was deleted.

This file was deleted.

This file was deleted.

23 changes: 10 additions & 13 deletions apis/Google.Cloud.Firestore.V1/Google.Cloud.Firestore.V1.sln
Original file line number Diff line number Diff line change
Expand Up @@ -3,24 +3,19 @@ Microsoft Visual Studio Solution File, Format Version 12.00
# Visual Studio Version 17
VisualStudioVersion = 17.0.31903.59
MinimumVisualStudioVersion = 10.0.40219.1
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Google.Cloud.Firestore.V1", "Google.Cloud.Firestore.V1\Google.Cloud.Firestore.V1.csproj", "{F9CE8ABD-FB0E-437E-B03A-27F52D7A9F9A}"
Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Google.Cloud.Firestore.V1", "Google.Cloud.Firestore.V1\Google.Cloud.Firestore.V1.csproj", "{F9CE8ABD-FB0E-437E-B03A-27F52D7A9F9A}"
EndProject
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Google.Cloud.Firestore.V1.GeneratedSnippets", "Google.Cloud.Firestore.V1.GeneratedSnippets\Google.Cloud.Firestore.V1.GeneratedSnippets.csproj", "{F841636E-5304-4C09-B151-7B1DDB0618C8}"
Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Google.Cloud.Firestore.V1.GeneratedSnippets", "Google.Cloud.Firestore.V1.GeneratedSnippets\Google.Cloud.Firestore.V1.GeneratedSnippets.csproj", "{F841636E-5304-4C09-B151-7B1DDB0618C8}"
EndProject
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Google.Cloud.ClientTesting", "..\..\tools\Google.Cloud.ClientTesting\Google.Cloud.ClientTesting.csproj", "{99487E3D-9DFC-419B-95AC-F8D5BEE8A3A4}"
Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Google.Cloud.ClientTesting", "..\..\tools\Google.Cloud.ClientTesting\Google.Cloud.ClientTesting.csproj", "{99487E3D-9DFC-419B-95AC-F8D5BEE8A3A4}"
EndProject
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Google.Cloud.Firestore.V1.Snippets", "Google.Cloud.Firestore.V1.Snippets\Google.Cloud.Firestore.V1.Snippets.csproj", "{4357F6C5-8599-41D7-84EF-ED59E32B54DF}"
EndProject
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Google.Cloud.Firestore.V1.Tests", "Google.Cloud.Firestore.V1.Tests\Google.Cloud.Firestore.V1.Tests.csproj", "{8C638D13-3585-4344-B597-DA0EA0266688}"
Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Google.Cloud.Firestore.V1.Snippets", "Google.Cloud.Firestore.V1.Snippets\Google.Cloud.Firestore.V1.Snippets.csproj", "{4357F6C5-8599-41D7-84EF-ED59E32B54DF}"
EndProject
Global
GlobalSection(SolutionConfigurationPlatforms) = preSolution
Debug|Any CPU = Debug|Any CPU
Release|Any CPU = Release|Any CPU
EndGlobalSection
GlobalSection(SolutionProperties) = preSolution
HideSolutionNode = FALSE
EndGlobalSection
GlobalSection(ProjectConfigurationPlatforms) = postSolution
{F9CE8ABD-FB0E-437E-B03A-27F52D7A9F9A}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
{F9CE8ABD-FB0E-437E-B03A-27F52D7A9F9A}.Debug|Any CPU.Build.0 = Debug|Any CPU
Expand All @@ -38,9 +33,11 @@ Global
{4357F6C5-8599-41D7-84EF-ED59E32B54DF}.Debug|Any CPU.Build.0 = Debug|Any CPU
{4357F6C5-8599-41D7-84EF-ED59E32B54DF}.Release|Any CPU.ActiveCfg = Release|Any CPU
{4357F6C5-8599-41D7-84EF-ED59E32B54DF}.Release|Any CPU.Build.0 = Release|Any CPU
{8C638D13-3585-4344-B597-DA0EA0266688}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
{8C638D13-3585-4344-B597-DA0EA0266688}.Debug|Any CPU.Build.0 = Debug|Any CPU
{8C638D13-3585-4344-B597-DA0EA0266688}.Release|Any CPU.ActiveCfg = Release|Any CPU
{8C638D13-3585-4344-B597-DA0EA0266688}.Release|Any CPU.Build.0 = Release|Any CPU
EndGlobalSection
GlobalSection(SolutionProperties) = preSolution
HideSolutionNode = FALSE
EndGlobalSection
GlobalSection(ExtensibilityGlobals) = postSolution
SolutionGuid = {A454C46B-D941-47B5-A3BD-218EC33797BE}
EndGlobalSection
EndGlobal
Original file line number Diff line number Diff line change
Expand Up @@ -37,115 +37,6 @@ partial void OnConstruction(Firestore.FirestoreClient grpcClient, FirestoreSetti
}
}

// Partial class to set up resource-based routing.
public partial class FirestoreClientImpl
{
/// <summary>
/// The name of the header used for efficiently routing requests.
/// </summary>
/// <remarks>
/// This should be set to the database resource name ("projects/{projectId}/databases/{databaseId}") for any RPC.
/// For non-streaming calls, <see cref="FirestoreClientImpl"/> performs this automatically. This cannot be performed
/// automatically for streaming calls due to the separation between initializing the stream and sending requests, so
/// client code should set the value in a <see cref="CallSettings"/>. Typically this is performed with either the
/// <see cref="CallSettings.FromHeader(string, string)"/> factory method or the
/// <see cref="CallSettingsExtensions.WithHeader(CallSettings, string, string)"/> extension method.
/// </remarks>
public const string ResourcePrefixHeader = "google-cloud-resource-prefix";

partial void Modify_BatchGetDocumentsRequest(ref BatchGetDocumentsRequest request, ref CallSettings settings) =>
ApplyResourcePrefixHeader(ref settings, request.Database);

partial void Modify_BeginTransactionRequest(ref BeginTransactionRequest request, ref CallSettings settings) =>
ApplyResourcePrefixHeader(ref settings, request.Database);

partial void Modify_CommitRequest(ref CommitRequest request, ref CallSettings settings) =>
ApplyResourcePrefixHeader(ref settings, request.Database);

partial void Modify_CreateDocumentRequest(ref CreateDocumentRequest request, ref CallSettings settings) =>
ApplyResourcePrefixHeader(ref settings, request.Parent);

partial void Modify_DeleteDocumentRequest(ref DeleteDocumentRequest request, ref CallSettings settings) =>
ApplyResourcePrefixHeader(ref settings, request.Name);

partial void Modify_GetDocumentRequest(ref GetDocumentRequest request, ref CallSettings settings) =>
ApplyResourcePrefixHeader(ref settings, request.Name);

partial void Modify_ListCollectionIdsRequest(ref ListCollectionIdsRequest request, ref CallSettings settings) =>
ApplyResourcePrefixHeader(ref settings, request.Parent);

partial void Modify_ListDocumentsRequest(ref ListDocumentsRequest request, ref CallSettings settings) =>
ApplyResourcePrefixHeader(ref settings, request.Parent);

partial void Modify_RollbackRequest(ref RollbackRequest request, ref CallSettings settings) =>
ApplyResourcePrefixHeader(ref settings, request.Database);

partial void Modify_RunQueryRequest(ref RunQueryRequest request, ref CallSettings settings) =>
ApplyResourcePrefixHeader(ref settings, request.Parent);

partial void Modify_RunAggregationQueryRequest(ref RunAggregationQueryRequest request, ref CallSettings settings) =>
ApplyResourcePrefixHeader(ref settings, request.Parent);

partial void Modify_UpdateDocumentRequest(ref UpdateDocumentRequest request, ref CallSettings settings) =>
ApplyResourcePrefixHeader(ref settings, request.Document?.Name);

private static void ApplyResourcePrefixHeader(ref CallSettings settings, string resource)
{
// If we haven't been given a resource name, just let the request as it is.
if (string.IsNullOrEmpty(resource))
{
return;
}
string database = GetDatabaseResourceName(resource);
settings = settings.WithHeader(ResourcePrefixHeader, database);
}

// Visible for testing

/// <summary>
/// Retrieves the database resource name from a full resource name.
/// Validation is performed as far as the database ID but no further; the database ID is deemed to end at the first slash.
/// </summary>
/// <param name="resource">The resource name, which must start with projects/{project_id}/databases/{database_id}</param>
/// <returns>The database resource name</returns>
internal static string GetDatabaseResourceName(string resource)
{
const string projectsPrefix = "projects/";
const string databasesPrefix = "databases/";
if (string.CompareOrdinal(resource, 0, projectsPrefix, 0, projectsPrefix.Length) != 0)
{
// "projects/" doesn't match
ThrowInvalidResource();
}
int endOfProjectId = resource.IndexOf('/', projectsPrefix.Length);
if (endOfProjectId == -1 || endOfProjectId == projectsPrefix.Length)
{
// Empty project ID or no slash at the end of it
ThrowInvalidResource();
}
if (string.CompareOrdinal(resource, endOfProjectId + 1, databasesPrefix, 0, databasesPrefix.Length) != 0)
{
// "databases/" doesn't match
ThrowInvalidResource();
}
int startOfDatabaseId = endOfProjectId + 1 + databasesPrefix.Length;
if (startOfDatabaseId == resource.Length)
{
// No database ID
ThrowInvalidResource();
}
int endOfDatabaseId = resource.IndexOf('/', startOfDatabaseId);
if (endOfDatabaseId == startOfDatabaseId)
{
ThrowInvalidResource();
}
// It's valid for the whole resource name to be the database name
return endOfDatabaseId == -1 ? resource : resource.Substring(0, endOfDatabaseId);

void ThrowInvalidResource() => throw new ArgumentException($"{resource} is not a valid Firestore resource name", nameof(resource));
}
}

// Support for FirestoreDbBuilder.
public sealed partial class FirestoreClientBuilder : ClientBuilderBase<FirestoreClient>
{
Expand Down

0 comments on commit 23b5df7

Please sign in to comment.