• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
1 /*
2  *
3  * Copyright 2016 gRPC authors.
4  *
5  * Licensed under the Apache License, Version 2.0 (the "License");
6  * you may not use this file except in compliance with the License.
7  * You may obtain a copy of the License at
8  *
9  *     http://www.apache.org/licenses/LICENSE-2.0
10  *
11  * Unless required by applicable law or agreed to in writing, software
12  * distributed under the License is distributed on an "AS IS" BASIS,
13  * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
14  * See the License for the specific language governing permissions and
15  * limitations under the License.
16  *
17  */
18 
19 #ifndef GRPCPP_RESOURCE_QUOTA_H
20 #define GRPCPP_RESOURCE_QUOTA_H
21 
22 struct grpc_resource_quota;
23 
24 #include <grpcpp/impl/codegen/config.h>
25 #include <grpcpp/impl/codegen/grpc_library.h>
26 
27 namespace grpc {
28 
29 /// ResourceQuota represents a bound on memory and thread usage by the gRPC
30 /// library. A ResourceQuota can be attached to a server (via \a ServerBuilder),
31 /// or a client channel (via \a ChannelArguments).
32 /// gRPC will attempt to keep memory and threads used by all attached entities
33 /// below the ResourceQuota bound.
34 class ResourceQuota final : private GrpcLibraryCodegen {
35  public:
36   /// \param name - a unique name for this ResourceQuota.
37   explicit ResourceQuota(const grpc::string& name);
38   ResourceQuota();
39   ~ResourceQuota();
40 
41   /// Resize this \a ResourceQuota to a new size. If \a new_size is smaller
42   /// than the current size of the pool, memory usage will be monotonically
43   /// decreased until it falls under \a new_size.
44   /// No time bound is given for this to occur however.
45   ResourceQuota& Resize(size_t new_size);
46 
47   /// Set the max number of threads that can be allocated from this
48   /// ResourceQuota object.
49   ///
50   /// If the new_max_threads value is smaller than the current value, no new
51   /// threads are allocated until the number of active threads fall below
52   /// new_max_threads. There is no time bound on when this may happen i.e none
53   /// of the current threads are forcefully destroyed and all threads run their
54   /// normal course.
55   ResourceQuota& SetMaxThreads(int new_max_threads);
56 
c_resource_quota()57   grpc_resource_quota* c_resource_quota() const { return impl_; }
58 
59  private:
60   ResourceQuota(const ResourceQuota& rhs);
61   ResourceQuota& operator=(const ResourceQuota& rhs);
62 
63   grpc_resource_quota* const impl_;
64 };
65 
66 }  // namespace grpc
67 
68 #endif  // GRPCPP_RESOURCE_QUOTA_H
69