1 package com.vesoft.nebula.client.graph.net;
3 import com.vesoft.nebula.client.graph.NebulaPoolConfig;
4 import com.vesoft.nebula.client.graph.data.HostAddress;
5 import com.vesoft.nebula.client.graph.exception.ClientServerIncompatibleException;
6 import com.vesoft.nebula.client.graph.exception.IOErrorException;
7 import java.io.Serializable;
8 import org.apache.commons.pool2.BasePooledObjectFactory;
9 import org.apache.commons.pool2.PooledObject;
10 import org.apache.commons.pool2.impl.DefaultPooledObject;
13 implements Serializable {
15 private static final long serialVersionUID = 6101157301791971560L;
19 private static final int retryTime = 3;
22 this.loadBalancer = loadBalancer;
29 if (address ==
null) {
31 "All servers are broken.");
33 int retry = retryTime;
37 if (config.isEnableSsl()) {
38 conn.open(address, config.getTimeout(), config.getSslParam(),
39 config.isUseHttp2(), config.getCustomHeaders());
41 conn.open(address, config.getTimeout(),
42 config.isUseHttp2(), config.getCustomHeaders());
49 this.loadBalancer.updateServersStatus();
56 public PooledObject<SyncConnection> wrap(
SyncConnection connection) {
57 return new DefaultPooledObject<>(connection);
61 public void destroyObject(PooledObject<SyncConnection> p)
throws Exception {
62 p.getObject().close();
64 super.destroyObject(p);
68 public boolean validateObject(PooledObject<SyncConnection> p) {
69 if (p.getObject() ==
null) {
72 if (!p.getObject().ping()) {
73 p.getObject().close();
80 public void activateObject(PooledObject<SyncConnection> p)
throws Exception {
81 if (p.getObject() ==
null) {
82 throw new RuntimeException(
"The connection is null.");
84 if (!p.getObject().ping()) {
85 throw new RuntimeException(
"The connection is broken.");
87 super.activateObject(p);
90 public boolean init() {
91 return loadBalancer.isServersOK();
94 public void updateServerStatus() {
95 loadBalancer.updateServersStatus();