• 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_IMPL_H
20  #define GRPCPP_RESOURCE_QUOTA_IMPL_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_impl {
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 ::grpc::GrpcLibraryCodegen {
35   public:
36    /// \param name - a unique name for this ResourceQuota.
37    explicit ResourceQuota(const std::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_impl
67  
68  #endif  // GRPCPP_RESOURCE_QUOTA_IMPL_H
69