This is an automated email from the ASF dual-hosted git repository.

libenchao pushed a commit to branch main
in repository https://gitbox.apache.org/repos/asf/calcite.git


The following commit(s) were added to refs/heads/main by this push:
     new 91ca42fbcc [CALCITE-5841] Improve singleton implementation for 
`ChinookAvaticaServer` in calcite-plus
91ca42fbcc is described below

commit 91ca42fbccafe044fb122427848a62e4c30a3eea
Author: Ran Tao <[email protected]>
AuthorDate: Thu Jul 13 00:01:13 2023 +0800

    [CALCITE-5841] Improve singleton implementation for `ChinookAvaticaServer` 
in calcite-plus
    
    Close apache/calcite#3313
---
 .../calcite/chinook/ChinookAvaticaServer.java      | 33 +++++++++++++---------
 1 file changed, 19 insertions(+), 14 deletions(-)

diff --git 
a/plus/src/main/java/org/apache/calcite/chinook/ChinookAvaticaServer.java 
b/plus/src/main/java/org/apache/calcite/chinook/ChinookAvaticaServer.java
index 306008a2e4..4bcb00540d 100644
--- a/plus/src/main/java/org/apache/calcite/chinook/ChinookAvaticaServer.java
+++ b/plus/src/main/java/org/apache/calcite/chinook/ChinookAvaticaServer.java
@@ -62,16 +62,18 @@ public class ChinookAvaticaServer {
     private static final CalciteConnectionProvider CONNECTION_PROVIDER =
         new CalciteConnectionProvider();
 
-    private static JdbcMeta instance = null;
+    private static volatile JdbcMeta instance = null;
 
     private static JdbcMeta getInstance() {
       if (instance == null) {
-        try {
-          instance =
-              new JdbcMeta(CalciteConnectionProvider.DRIVER_URL,
-                  CONNECTION_PROVIDER.provideConnectionInfo());
-        } catch (SQLException | IOException e) {
-          throw new RuntimeException(e);
+        synchronized (CalciteChinookMetaFactory.class) {
+          try {
+            instance =
+                new JdbcMeta(CalciteConnectionProvider.DRIVER_URL,
+                    CONNECTION_PROVIDER.provideConnectionInfo());
+          } catch (SQLException | IOException e) {
+            throw new RuntimeException(e);
+          }
         }
       }
       return instance;
@@ -86,16 +88,19 @@ public class ChinookAvaticaServer {
    * Factory for Chinook Calcite database wrapped in meta for Avatica.
    */
   public static class RawChinookMetaFactory implements Meta.Factory {
-    private static JdbcMeta instance = null;
+    private static volatile JdbcMeta instance = null;
 
     private static JdbcMeta getInstance() {
       if (instance == null) {
-        try {
-          instance =
-              new JdbcMeta(ChinookHsqldb.URI,
-                  ChinookHsqldb.USER, ChinookHsqldb.PASSWORD);
-        } catch (SQLException e) {
-          throw new RuntimeException(e);
+        synchronized (RawChinookMetaFactory.class) {
+          if (instance == null) {
+            try {
+              instance =
+                  new JdbcMeta(ChinookHsqldb.URI, ChinookHsqldb.USER, 
ChinookHsqldb.PASSWORD);
+            } catch (SQLException e) {
+              throw new RuntimeException(e);
+            }
+          }
         }
       }
       return instance;

Reply via email to