Google Cloud Spanner C++ Client
1.32.0
A C++ Client Library for Google Cloud Spanner
options.h
Go to the documentation of this file.
1
// Copyright 2021 Google LLC
2
//
3
// Licensed under the Apache License, Version 2.0 (the "License");
4
// you may not use this file except in compliance with the License.
5
// You may obtain a copy of the License at
6
//
7
// http://www.apache.org/licenses/LICENSE-2.0
8
//
9
// Unless required by applicable law or agreed to in writing, software
10
// distributed under the License is distributed on an "AS IS" BASIS,
11
// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
12
// See the License for the specific language governing permissions and
13
// limitations under the License.
14
15
#
ifndef
GOOGLE_CLOUD_CPP_GOOGLE_CLOUD_SPANNER_OPTIONS_H
16
#
define
GOOGLE_CLOUD_CPP_GOOGLE_CLOUD_SPANNER_OPTIONS_H
17
18
/**
19
* @file
20
*
21
* This file defines options to be used with instances of
22
* `google::cloud::Options`. By convention options are named with an "Option"
23
* suffix. As the name would imply, all options are optional, and leaving them
24
* unset will result in a reasonable default being chosen.
25
*
26
* Not all options are meaningful to all functions that accept a
27
* `google::cloud::Options` instance. Each function that accepts a
28
* `google::cloud::Options` should document which options it expects. This is
29
* typically done by indicating lists of options using "OptionList" aliases.
30
* For example, a function may indicate that users may set any option in
31
* `SpannerPolicyOptionList`.
32
*
33
* @note Unrecognized options are allowed and will be ignored. To debug issues
34
* with options set `GOOGLE_CLOUD_CPP_ENABLE_CLOG=yes` in the environment
35
* and unexpected options will be logged.
36
*
37
* @see `google::cloud::CommonOptionList`
38
* @see `google::cloud::GrpcOptionList`
39
*/
40
41
#
include
"google/cloud/spanner/backoff_policy.h"
42
#
include
"google/cloud/spanner/internal/session.h"
43
#
include
"google/cloud/spanner/polling_policy.h"
44
#
include
"google/cloud/spanner/request_priority.h"
45
#
include
"google/cloud/spanner/retry_policy.h"
46
#
include
"google/cloud/spanner/version.h"
47
#
include
"google/cloud/options.h"
48
#
include
<
chrono
>
49
#
include
<
map
>
50
#
include
<
memory
>
51
52
namespace
google
{
53
namespace
cloud
{
54
namespace
spanner
{
55
inline
namespace
SPANNER_CLIENT_NS
{
56
57
/**
58
* Option for `google::cloud::Options` to set a `spanner::RetryPolicy`.
59
*/
60
struct
SpannerRetryPolicyOption
{
61
using
Type = std::shared_ptr<
spanner
::RetryPolicy>;
62
};
63
64
/**
65
* Option for `google::cloud::Options` to set a `spanner::BackoffPolicy`.
66
*/
67
struct
SpannerBackoffPolicyOption
{
68
using
Type = std::shared_ptr<
spanner
::BackoffPolicy>;
69
};
70
71
/**
72
* Option for `google::cloud::Options` to set a `spanner::PollingPolicy`.
73
*/
74
struct
SpannerPollingPolicyOption
{
75
using
Type = std::shared_ptr<
spanner
::PollingPolicy>;
76
};
77
78
/**
79
* List of all "policy" options.
80
*/
81
using
SpannerPolicyOptionList =
82
OptionList<
spanner
::
SpannerRetryPolicyOption
,
SpannerBackoffPolicyOption
,
83
SpannerPollingPolicyOption
>;
84
85
/**
86
* Option for `google::cloud::Options` to set the minimum number of sessions to
87
* keep in the pool.
88
*
89
* Values <= 0 are treated as 0.
90
* This value will effectively be reduced if it exceeds the overall limit on
91
* the number of sessions (`max_sessions_per_channel` * number of channels).
92
*/
93
struct
SessionPoolMinSessionsOption
{
94
using
Type =
int
;
95
};
96
97
/**
98
* Option for `google::cloud::Options` to set the maximum number of sessions to
99
* create on each channel.
100
*
101
* Values <= 1 are treated as 1.
102
*/
103
struct
SessionPoolMaxSessionsPerChannelOption
{
104
using
Type =
int
;
105
};
106
107
/**
108
* Option for `google::cloud::Options` to set the maximum number of sessions to
109
* keep in the pool in an idle state.
110
*
111
* Values <= 0 are treated as 0.
112
*/
113
struct
SessionPoolMaxIdleSessionsOption
{
114
using
Type =
int
;
115
};
116
117
/// Action to take when the session pool is exhausted.
118
enum
class
ActionOnExhaustion
{
kBlock
,
kFail
};
119
/**
120
* Option for `google::cloud::Options` to set the action to take when
121
* attempting to allocate a session when the pool is exhausted.
122
*/
123
struct
SessionPoolActionOnExhaustionOption
{
124
using
Type =
spanner
::
ActionOnExhaustion
;
125
};
126
127
/**
128
* Option for `google::cloud::Options` to set the interval at which we refresh
129
* sessions so they don't get collected by the backend GC.
130
*
131
* The GC collects objects older than 60 minutes, so any duration
132
* below that (less some slack to allow the calls to be made to refresh the
133
* sessions) should suffice.
134
*/
135
struct
SessionPoolKeepAliveIntervalOption
{
136
using
Type = std::chrono::seconds;
137
};
138
139
/**
140
* Option for `google::cloud::Options` to set the labels used when creating
141
* sessions within the pool.
142
*
143
* * Label keys must match `[a-z]([-a-z0-9]{0,61}[a-z0-9])?`.
144
* * Label values must match `([a-z]([-a-z0-9]{0,61}[a-z0-9])?)?`.
145
* * The maximum number of labels is 64.
146
*/
147
struct
SessionPoolLabelsOption
{
148
using
Type = std::map<std::string, std::string>;
149
};
150
151
/**
152
* List of all SessionPool options.
153
*/
154
using
SessionPoolOptionList = OptionList<
155
SessionPoolMinSessionsOption
,
SessionPoolMaxSessionsPerChannelOption
,
156
SessionPoolMaxIdleSessionsOption
,
SessionPoolActionOnExhaustionOption
,
157
SessionPoolKeepAliveIntervalOption
,
SessionPoolLabelsOption
>;
158
159
/**
160
* Option for `google::cloud::Options` to set a `spanner::RequestPriority`.
161
*/
162
struct
RequestPriorityOption
{
163
using
Type =
spanner
::
RequestPriority
;
164
};
165
166
/**
167
* Option for `google::cloud::Options` to set a per-request tag.
168
*/
169
struct
RequestTagOption
{
170
using
Type = std::string;
171
};
172
173
/**
174
* List of all Request options.
175
*/
176
using
RequestOptionList = OptionList<
RequestPriorityOption
,
RequestTagOption
>;
177
178
}
// namespace SPANNER_CLIENT_NS
179
}
// namespace spanner
180
}
// namespace cloud
181
}
// namespace google
182
183
#
endif
// GOOGLE_CLOUD_CPP_GOOGLE_CLOUD_SPANNER_OPTIONS_H
Generated on Wed Oct 6 2021 01:08:43 for Google Cloud Spanner C++ Client by
1.9.1