nebula-java客户端,连接池级别加了一把锁,是出于什么考虑?

  • nebula 版本:3.3.0
  • 部署方式:单机
  • 安装方式:RPM
  • 是否上生产环境:N
  • 硬件信息
    • 磁盘 HDD 100G
    • 2C16G
  • 在使用nebula-java客户端,sessionPool连接池发现,com.vesoft.nebula.client.graph.SessionPool#execute(java.lang.String, java.util.Map<java.lang.String,java.lang.Object>)重载方法,连接池级别加了锁,如此设计是出于什么考虑?

假如去除此处的锁,有什么影响,此连接池锁着实影响吞吐量,望各位大佬指点

你是看的什么版本的, 这个方法在最新代码中已经被Deprecated了。这里可以不用加sync,最早用sync是为了保证多线程执行时不会拿到同一个session, 目前锁是加在getSession上,该方法的锁可以去掉。
你最好使用execute非参数化方法。

1 个赞

嗯嗯 ,感谢指导,我看nebula-client客户端库在3.5.0这个版本上确实标记为Deprecated了。既然getSession已经加了锁,保证了多线程不会共用session,为啥excute参数化方法的锁还不去掉。后续版本会去掉此锁吗?或者说此重载方法会被移除,我感觉还是有保留的必要

bug吧,getSession已经加锁了,外部方法没必要留着锁了。
你有需求要在sessionPool中使用参数化执行方法的话,可以提需求issue, 也可以提pr优化掉该方法上的锁。

1 个赞

嗯嗯,了解哒,感谢您的解答!

1 个赞

此话题已在最后回复的 7 天后被自动关闭。不再允许新回复。