| 235 | } |
| 236 | |
| 237 | bool InitBlockPool(RegisterCallback cb) { |
| 238 | if (!cb) { |
| 239 | errno = EINVAL; |
| 240 | return false; |
| 241 | } |
| 242 | if (g_cb) { |
| 243 | LOG(WARNING) << "Do not initialize block pool repeatedly"; |
| 244 | errno = EINVAL; |
| 245 | return false; |
| 246 | } |
| 247 | g_cb = cb; |
| 248 | if (FLAGS_rdma_memory_pool_max_regions < RDMA_MEMORY_POOL_MIN_REGIONS || |
| 249 | FLAGS_rdma_memory_pool_max_regions > RDMA_MEMORY_POOL_MAX_REGIONS) { |
| 250 | LOG(WARNING) << "rdma_memory_pool_max_regions(" |
| 251 | << FLAGS_rdma_memory_pool_max_regions << ") not in [" |
| 252 | << RDMA_MEMORY_POOL_MIN_REGIONS << "," |
| 253 | << RDMA_MEMORY_POOL_MAX_REGIONS << "]!"; |
| 254 | errno = EINVAL; |
| 255 | return false; |
| 256 | } |
| 257 | if (FLAGS_rdma_memory_pool_initial_size_mb < RDMA_MEMORY_POOL_MIN_SIZE || |
| 258 | FLAGS_rdma_memory_pool_initial_size_mb > RDMA_MEMORY_POOL_MAX_SIZE) { |
| 259 | LOG(WARNING) << "rdma_memory_pool_initial_size_mb(" |
| 260 | << FLAGS_rdma_memory_pool_initial_size_mb << ") not in [" |
| 261 | << RDMA_MEMORY_POOL_MIN_SIZE << "," |
| 262 | << RDMA_MEMORY_POOL_MAX_SIZE << "]!"; |
| 263 | errno = EINVAL; |
| 264 | return false; |
| 265 | } |
| 266 | if (FLAGS_rdma_memory_pool_increase_size_mb < RDMA_MEMORY_POOL_MIN_SIZE || |
| 267 | FLAGS_rdma_memory_pool_increase_size_mb > RDMA_MEMORY_POOL_MAX_SIZE) { |
| 268 | LOG(WARNING) << "rdma_memory_pool_increase_size_mb(" |
| 269 | << FLAGS_rdma_memory_pool_increase_size_mb << ") not in [" |
| 270 | << RDMA_MEMORY_POOL_MIN_SIZE << "," |
| 271 | << RDMA_MEMORY_POOL_MAX_SIZE << "]!"; |
| 272 | errno = EINVAL; |
| 273 | return false; |
| 274 | } |
| 275 | if (FLAGS_rdma_memory_pool_buckets < RDMA_MEMORY_POOL_MIN_BUCKETS || |
| 276 | FLAGS_rdma_memory_pool_buckets > RDMA_MEMORY_POOL_MAX_BUCKETS) { |
| 277 | LOG(WARNING) << "rdma_memory_pool_buckets(" |
| 278 | << FLAGS_rdma_memory_pool_buckets << ") not in [" |
| 279 | << RDMA_MEMORY_POOL_MIN_BUCKETS << "," |
| 280 | << RDMA_MEMORY_POOL_MAX_BUCKETS << "]!"; |
| 281 | errno = EINVAL; |
| 282 | return false; |
| 283 | } |
| 284 | g_buckets = FLAGS_rdma_memory_pool_buckets; |
| 285 | g_info = new (std::nothrow) GlobalInfo; |
| 286 | if (!g_info) { |
| 287 | return false; |
| 288 | } |
| 289 | |
| 290 | for (int i = 0; i < BLOCK_SIZE_COUNT; ++i) { |
| 291 | g_info->idle_list[i].resize(g_buckets, NULL); |
| 292 | if (g_info->idle_list[i].size() != g_buckets) { |
| 293 | return false; |
| 294 | } |