zabetak commented on code in PR #5661:
URL: https://github.com/apache/hive/pull/5661#discussion_r1987058308


##########
standalone-metastore/metastore-server/src/main/java/org/apache/hadoop/hive/metastore/datasource/HikariCPDataSourceProvider.java:
##########
@@ -90,7 +94,42 @@ public DataSource create(Configuration hdpConfig, int 
maxPoolSize) throws SQLExc
       config.addDataSourceProperty(kv.getKey(), kv.getValue());
     }
 
-    return new HikariDataSource(initMetrics(config));
+    return new HikariDataSource(initMetrics(config)) {
+      @Override
+      public Connection getConnection() throws SQLException {

Review Comment:
   The idea of using a connection proxy between Hikari and Hive for handling 
cleanup is resourceful but I feel that it's outside Hive's responsibility.
   
   Adding an override at this point makes the solution Hikari specific so it 
will not address the problem if another connection pool is used. The override 
changes the behavior of the connection pool so basically by adding a connection 
proxy we are essentially "implementing" our own JDBC connection pool with 
custom error handling behavior. 
   
   Since this is a Hikari extension it would fit better as a contribution to 
the Hikari project. However, it is pretty clear from existing discussions:
   * https://github.com/brettwooldridge/HikariCP/issues/823
   * https://github.com/brettwooldridge/HikariCP/issues/843
   
   that such changes wouldn't be accepted since they are against the philosophy 
of the project.
   
   Some other JDBC pool implementations 
([commons-dbcp](https://commons.apache.org/proper/commons-dbcp/configuration.html),
 [jdbc-pool](https://tomcat.apache.org/tomcat-9.0-doc/jdbc-pool.html)) allow 
applications to recover when connections are not closed properly (aka. 
abandoned) and in this cases it probably does not make much sense to have this 
kind of proxying logic.
   
   Moreover, the cleanup logic at the pool level shouldn't be necessary if 
everything was working correctly. There seems to be a bug somewhere and my 
feeling is that this is in datanucleus.
   
   Another more subtle point with this proxy approach is performance. Every 
single connection will now have an extra overhead on every method invocation. 
One of the main selling points of Hikaricp implementation is performance so I 
am not sure if this extra overhead is acceptable.
   
   Last but not least, we don't really know what side effects may appear if we 
introduce this rollback and close logic since test coverage right now is 
probably zero.



-- 
This is an automated message from the Apache Git Service.
To respond to the message, please log on to GitHub and use the
URL above to go to the specific comment.

To unsubscribe, e-mail: gitbox-unsubscr...@hive.apache.org

For queries about this service, please contact Infrastructure at:
us...@infra.apache.org


---------------------------------------------------------------------
To unsubscribe, e-mail: gitbox-unsubscr...@hive.apache.org
For additional commands, e-mail: gitbox-h...@hive.apache.org

Reply via email to