NebulaGraph Java Client  release-3.8
StorageConnPoolFactory.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.KeyedPooledObjectFactory;
11 import org.apache.commons.pool2.PooledObject;
12 import org.apache.commons.pool2.impl.DefaultPooledObject;
13 import org.slf4j.Logger;
14 import org.slf4j.LoggerFactory;
15 
16 @SuppressWarnings("checkstyle:Indentation")
18  implements KeyedPooledObjectFactory<HostAddress, GraphStorageConnection>, Serializable {
19  private static final Logger LOGGER = LoggerFactory.getLogger(StorageConnPoolFactory.class);
20 
21  private final StoragePoolConfig config;
22 
24  this.config = config;
25  }
26 
27  @Override
28  public PooledObject<GraphStorageConnection> makeObject(HostAddress address) throws Exception {
30  return new DefaultPooledObject<>(connection);
31  }
32 
33  @Override
34  public void destroyObject(HostAddress hostAndPort,
35  PooledObject<GraphStorageConnection> pooledObject) {
36  pooledObject.getObject().close();
37  }
38 
39  @Override
40  public boolean validateObject(HostAddress hostAndPort,
41  PooledObject<GraphStorageConnection> pooledObject) {
42  GraphStorageConnection connection = pooledObject.getObject();
43  if (connection == null) {
44  return false;
45  }
46  try {
47  return connection.transport.isOpen();
48  } catch (Exception e) {
49  LOGGER.warn(String.format("storage connection with %s:%d is not open",
50  hostAndPort.getHost(), hostAndPort.getPort()), e);
51  return false;
52  }
53  }
54 
55  @Override
56  public void activateObject(HostAddress address,
57  PooledObject<GraphStorageConnection> pooledObject)
58  throws Exception {
59  pooledObject.getObject().open(
60  address,
61  config.getTimeout(),
62  config.isEnableSSL(),
63  config.getSslParam());
64  }
65 
66  @Override
67  public void passivateObject(HostAddress hostAndPort,
68  PooledObject<GraphStorageConnection> pooledObject) {
69  pooledObject.markReturning();
70  }
71 }