NebulaGraph Java Client  release-3.8
StorageConnPool.java
1 /* Copyright (c) 2020 vesoft inc. All rights reserved.
2  *
3  * This source code is licensed under Apache 2.0 License.
4  */
5 
6 package com.vesoft.nebula.client.storage;
7 
8 import com.vesoft.nebula.client.graph.data.HostAddress;
9 import java.io.Serializable;
10 import org.apache.commons.pool2.impl.GenericKeyedObjectPool;
11 import org.apache.commons.pool2.impl.GenericKeyedObjectPoolConfig;
12 import org.slf4j.Logger;
13 import org.slf4j.LoggerFactory;
14 
15 public class StorageConnPool implements Serializable {
16 
17  private static final Logger LOGGER = LoggerFactory.getLogger(StorageConnPool.class);
18  private static final long serialVersionUID = -6459633350295900558L;
19 
20  private final GenericKeyedObjectPool<HostAddress, GraphStorageConnection> keyedPool;
21  private final StorageConnPoolFactory poolFactory;
22 
23  public StorageConnPool(StoragePoolConfig config) {
24  poolFactory = new StorageConnPoolFactory(config);
25 
26  GenericKeyedObjectPoolConfig poolConfig = new GenericKeyedObjectPoolConfig();
27  poolConfig.setMaxIdlePerKey(config.getMaxConnsSize());
28  poolConfig.setMinIdlePerKey(config.getMinConnsSize());
29  poolConfig.setMinEvictableIdleTimeMillis(
30  config.getIdleTime() <= 0 ? Long.MAX_VALUE : config.getIdleTime());
31  poolConfig.setMaxTotal(config.getMaxTotal());
32  poolConfig.setMaxTotalPerKey(config.getMaxTotalPerKey());
33 
34  keyedPool = new GenericKeyedObjectPool<>(poolFactory);
35  keyedPool.setConfig(poolConfig);
36  }
37 
38  public void close() {
39  keyedPool.close();
40  }
41 
42  public GraphStorageConnection getStorageConnection(HostAddress address) throws Exception {
43  return keyedPool.borrowObject(address);
44  }
45 
46  public void release(HostAddress address, GraphStorageConnection connection) {
47  keyedPool.returnObject(address, connection);
48  }
49 
50  public int getNumActive(HostAddress address) {
51  return keyedPool.getNumActive(address);
52  }
53 
54  public int get(HostAddress address) {
55  return keyedPool.getNumIdle(address);
56  }
57 }