/*
 * Copyright 2017 Twitter, Inc.
 *
 * Licensed under the Apache License, Version 2.0 (the "License");
 * you may not use this file except in compliance with the License.
 * You may obtain a copy of the License at
 *
 *   http://www.apache.org/licenses/LICENSE-2.0
 *
 * Unless required by applicable law or agreed to in writing, software
 * distributed under the License is distributed on an "AS IS" BASIS,
 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
 * See the License for the specific language governing permissions and
 * limitations under the License.
 */

////////////////////////////////////////////////////////////////////////////////
// Just defines the static member of Mempool class
////////////////////////////////////////////////////////////////////////////////
#include "basics/basics.h"
#include "glog/logging.h"

/* The initial value of pool size limit is 512. This value will
   be overridden by value read from config during initialization
   of stream manager. The reason why we do this is to avoid
   circular dependency problem. See https://github.com/twitter/heron/pull/2073
   for details */
MemPool<google::protobuf::Message>* __global_protobuf_pool__ =
                                   new MemPool<google::protobuf::Message>(512);
std::mutex __global_protobuf_pool_mutex__;

void __global_protobuf_pool_set_pool_max_number_of_messages__(sp_int32 _pool_limit) {
  std::lock_guard<std::mutex> guard(__global_protobuf_pool_mutex__);
  LOG(INFO) << "Set max size of each memory pool to " << _pool_limit;
  __global_protobuf_pool__->set_pool_max_number_of_messages(_pool_limit);
}
