From 09928b7c1cd6082781d7d6754311a99791fe2295 Mon Sep 17 00:00:00 2001 From: Anqi Date: Tue, 15 Nov 2022 17:51:25 +0800 Subject: [PATCH 1/2] expose sessionID and ping check --- .../nebula/client/graph/net/Session.java | 51 ++++++++++++------- .../client/graph/net/SessionWrapper.java | 6 +++ .../client/graph/net/TestSessionsManager.java | 36 ++++++++----- 3 files changed, 62 insertions(+), 31 deletions(-) diff --git a/client/src/main/java/com/vesoft/nebula/client/graph/net/Session.java b/client/src/main/java/com/vesoft/nebula/client/graph/net/Session.java index a9780a117..f7fc2af03 100644 --- a/client/src/main/java/com/vesoft/nebula/client/graph/net/Session.java +++ b/client/src/main/java/com/vesoft/nebula/client/graph/net/Session.java @@ -39,7 +39,7 @@ * The user can directly read the data using the interface of ValueWrapper. */ -public class Session implements Serializable { +public class Session implements Serializable, AutoCloseable { private static final long serialVersionUID = -8855886967097862376L; @@ -357,6 +357,13 @@ public synchronized HostAddress getGraphHost() { return connection.getServerAddress(); } + /** + * get SessionID + */ + public long getSessionID() { + return sessionID; + } + /** * set current connection is invalid, and get a new connection from the pool, * if get connection failed, return false, else return true @@ -381,6 +388,7 @@ private boolean retryConnect() { /** * convert java list to nebula thrift list + * * @param list java list * @return nebula list */ @@ -394,11 +402,12 @@ private static NList list2Nlist(List list) throws UnsupportedOperationEx /** * convert java map to nebula thrift map + * * @param map java map * @return nebula map */ private static NMap map2Nmap(Map map) throws UnsupportedOperationException { - NMap nmap = new NMap(new HashMap()); + NMap nmap = new NMap(new HashMap()); for (Map.Entry entry : map.entrySet()) { nmap.kvs.put(entry.getKey().getBytes(), value2Nvalue(entry.getValue())); } @@ -408,6 +417,7 @@ private static NMap map2Nmap(Map map) throws UnsupportedOperatio /** * convert java value type to nebula thrift value type + * * @param value java obj * @return nebula value */ @@ -416,51 +426,56 @@ public static Value value2Nvalue(Object value) throws UnsupportedOperationExcept if (value == null) { nvalue.setNVal(NullType.__NULL__); } else if (value instanceof Boolean) { - boolean bval = (Boolean)value; + boolean bval = (Boolean) value; nvalue.setBVal(bval); } else if (value instanceof Integer) { - int ival = (Integer)value; + int ival = (Integer) value; nvalue.setIVal(ival); } else if (value instanceof Short) { - int ival = (Short)value; + int ival = (Short) value; nvalue.setIVal(ival); } else if (value instanceof Byte) { - int ival = (Byte)value; + int ival = (Byte) value; nvalue.setIVal(ival); } else if (value instanceof Long) { - long ival = (Long)value; + long ival = (Long) value; nvalue.setIVal(ival); } else if (value instanceof Float) { - float fval = (Float)value; + float fval = (Float) value; nvalue.setFVal(fval); } else if (value instanceof Double) { - double dval = (Double)value; + double dval = (Double) value; nvalue.setFVal(dval); } else if (value instanceof String) { - byte[] sval = ((String)value).getBytes(); + byte[] sval = ((String) value).getBytes(); nvalue.setSVal(sval); } else if (value instanceof List) { - nvalue.setLVal(list2Nlist((List)value)); + nvalue.setLVal(list2Nlist((List) value)); } else if (value instanceof Map) { - nvalue.setMVal(map2Nmap((Map)value)); + nvalue.setMVal(map2Nmap((Map) value)); } else if (value instanceof Value) { - return (Value)value; + return (Value) value; } else if (value instanceof Date) { - nvalue.setDVal((Date)value); + nvalue.setDVal((Date) value); } else if (value instanceof Time) { - nvalue.setTVal((Time)value); + nvalue.setTVal((Time) value); } else if (value instanceof Duration) { - nvalue.setDuVal((Duration)value); + nvalue.setDuVal((Duration) value); } else if (value instanceof DateTime) { - nvalue.setDtVal((DateTime)value); + nvalue.setDtVal((DateTime) value); } else if (value instanceof Geography) { nvalue.setGgVal((Geography) value); } else { // unsupport other Value type, use this function carefully throw new UnsupportedOperationException( "Only support convert boolean/float/int/string/map/list to nebula.Value but was" - + value.getClass().getTypeName()); + + value.getClass().getTypeName()); } return nvalue; } + + @Override + public synchronized void close() { + release(); + } } diff --git a/client/src/main/java/com/vesoft/nebula/client/graph/net/SessionWrapper.java b/client/src/main/java/com/vesoft/nebula/client/graph/net/SessionWrapper.java index bde95e257..ce8ce0f4a 100644 --- a/client/src/main/java/com/vesoft/nebula/client/graph/net/SessionWrapper.java +++ b/client/src/main/java/com/vesoft/nebula/client/graph/net/SessionWrapper.java @@ -16,10 +16,12 @@ public class SessionWrapper implements Serializable { private static final long serialVersionUID = -8128331485649098264L; private final Session session; + private final long sessionID; private final AtomicBoolean available = new AtomicBoolean(true); public SessionWrapper(Session session) { this.session = session; + this.sessionID = session.getSessionID(); } /** @@ -36,6 +38,10 @@ public ResultSet execute(String stmt) return session.execute(stmt); } + public boolean ping() { + return session.pingSession(); + } + void setNoAvailable() { this.available.set(false); } diff --git a/client/src/test/java/com/vesoft/nebula/client/graph/net/TestSessionsManager.java b/client/src/test/java/com/vesoft/nebula/client/graph/net/TestSessionsManager.java index e9aca15ff..53097d152 100644 --- a/client/src/test/java/com/vesoft/nebula/client/graph/net/TestSessionsManager.java +++ b/client/src/test/java/com/vesoft/nebula/client/graph/net/TestSessionsManager.java @@ -33,20 +33,20 @@ public void testBase() { NebulaPoolConfig nebulaPoolConfig = new NebulaPoolConfig(); nebulaPoolConfig.setMaxConnSize(1); Assert.assertTrue(pool.init(Collections.singletonList( - new HostAddress("127.0.0.1", 9670)), - nebulaPoolConfig)); + new HostAddress("127.0.0.1", 9670)), + nebulaPoolConfig)); Session session = pool.getSession("root", "nebula", true); ResultSet resp = session.execute( - "CREATE SPACE IF NOT EXISTS test_session_manager(vid_type=INT);"); + "CREATE SPACE IF NOT EXISTS test_session_manager(vid_type=INT);"); Assert.assertTrue(resp.getErrorMessage(), resp.isSucceeded()); session.release(); pool.close(); TimeUnit.SECONDS.sleep(3); } catch (UnknownHostException - | NotValidConnectionException - | AuthFailedException - | InterruptedException - | ClientServerIncompatibleException e) { + | NotValidConnectionException + | AuthFailedException + | InterruptedException + | ClientServerIncompatibleException e) { Assert.assertFalse(e.getMessage(), false); } @@ -54,11 +54,11 @@ public void testBase() { NebulaPoolConfig poolConfig = new NebulaPoolConfig(); poolConfig.setMaxConnSize(4); config.setAddresses(Collections.singletonList( - new HostAddress("127.0.0.1", 9670))) - .setUserName("root") - .setPassword("nebula") - .setSpaceName("test_session_manager") - .setPoolConfig(poolConfig); + new HostAddress("127.0.0.1", 9670))) + .setUserName("root") + .setPassword("nebula") + .setSpaceName("test_session_manager") + .setPoolConfig(poolConfig); SessionsManager sessionsManager = new SessionsManager(config); // Gets the session of the specified space SessionWrapper session = sessionsManager.getSessionWrapper(); @@ -75,7 +75,7 @@ public void testBase() { Assert.fail(); } catch (RuntimeException e) { Assert.assertTrue(e.getMessage().contains( - "The SessionsManager does not have available sessions.")); + "The SessionsManager does not have available sessions.")); Assert.assertTrue(e.getMessage(), true); } @@ -121,6 +121,16 @@ public void testBase() { assert false; } + // Test ping + try { + session = sessionsManager.getSessionWrapper(); + assert session.ping(); + session.release(); + assert (!session.ping()); + } catch (Exception e) { + assert false; + } + } catch (InvalidConfigException | IOErrorException | ClientServerIncompatibleException e) { Assert.fail(); } From 085796f4ceafe9a0e756052e80bca6fde43a02dc Mon Sep 17 00:00:00 2001 From: Anqi Date: Wed, 16 Nov 2022 10:48:28 +0800 Subject: [PATCH 2/2] fix test --- .../client/graph/net/SessionWrapper.java | 1 + .../client/graph/net/TestSessionsManager.java | 29 +++++++++++-------- 2 files changed, 18 insertions(+), 12 deletions(-) diff --git a/client/src/main/java/com/vesoft/nebula/client/graph/net/SessionWrapper.java b/client/src/main/java/com/vesoft/nebula/client/graph/net/SessionWrapper.java index ce8ce0f4a..a5047aa7d 100644 --- a/client/src/main/java/com/vesoft/nebula/client/graph/net/SessionWrapper.java +++ b/client/src/main/java/com/vesoft/nebula/client/graph/net/SessionWrapper.java @@ -52,6 +52,7 @@ boolean available() { void release() { session.release(); + setNoAvailable(); } Session getSession() { diff --git a/client/src/test/java/com/vesoft/nebula/client/graph/net/TestSessionsManager.java b/client/src/test/java/com/vesoft/nebula/client/graph/net/TestSessionsManager.java index 53097d152..3c0c1c444 100644 --- a/client/src/test/java/com/vesoft/nebula/client/graph/net/TestSessionsManager.java +++ b/client/src/test/java/com/vesoft/nebula/client/graph/net/TestSessionsManager.java @@ -101,27 +101,21 @@ public void testBase() { for (int i = 0; i < 3; i++) { sessionsManager.returnSessionWrapper(sessionList.get(i)); } + sessionList.clear(); try { for (int i = 0; i < 3; i++) { - sessionsManager.getSessionWrapper(); + sessionList.add(sessionsManager.getSessionWrapper()); } } catch (RuntimeException e) { Assert.assertFalse(e.getMessage(), true); } - // Test close - try { - session = sessionsManager.getSessionWrapper(); - sessionsManager.close(); - session.execute("SHOW SPACES"); - } catch (RuntimeException e) { - System.out.println(e.getMessage()); - assert true; - } catch (Exception e) { - assert false; - } // Test ping + for (int i = 0; i < 3; i++) { + sessionsManager.returnSessionWrapper(sessionList.get(i)); + } + try { session = sessionsManager.getSessionWrapper(); assert session.ping(); @@ -131,6 +125,17 @@ public void testBase() { assert false; } + // Test close + try { + session = sessionsManager.getSessionWrapper(); + sessionsManager.close(); + session.execute("SHOW SPACES"); + } catch (RuntimeException e) { + System.out.println(e.getMessage()); + assert true; + } catch (Exception e) { + assert false; + } } catch (InvalidConfigException | IOErrorException | ClientServerIncompatibleException e) { Assert.fail(); }