Uploaded image for project: 'Groovy'
  1. Groovy
  2. GROOVY-7673

Remove synchronized methods of groovy.sql.Sql and document it as not thread-safe

    XMLWordPrintableJSON

Details

    Description

      I am using groovy.sql.Sql with a commons dbcp2 BasicDataSource and am encountering a stacktrace as in [2] below. I do create many identical closures with different data, and I pass them all at once to ExecutorService.invokeAll. The closures are all using the same Sql instance.

      I believe this is a race condition because it happens only when the database is over a network, and not when the database is local.

      To work around I can set Sql.cacheNamedQueries = false. Problem is reliably gone in this case. So I guess the culprit is in [1], with my sql already being cached in namedParamSqlCache, but not yet in namedParamIndexPropCache?

      [1] the line in the source code
      https://github.com/apache/incubator-groovy/blob/GROOVY_2_4_X/subprojects/groovy-sql/src/main/java/groovy/sql/Sql.java#L4407

      [2] the stacktrace

      > java.lang.NullPointerException
      >       at java.util.ArrayList.<init>(ArrayList.java:168) ~[?:1.8.0]
      >       at groovy.sql.Sql.buildSqlWithIndexedProps(Sql.java:4422) ~[groovy-all-2.4.5.jar:2.4.5]
      >       at groovy.sql.Sql.checkForNamedParams(Sql.java:4369) ~[groovy-all-2.4.5.jar:2.4.5]
      >       at groovy.sql.Sql.getPreparedStatement(Sql.java:4360) ~[groovy-all-2.4.5.jar:2.4.5]
      >       at groovy.sql.Sql.getPreparedStatement(Sql.java:4439) ~[groovy-all-2.4.5.jar:2.4.5]
      >       at groovy.sql.Sql.execute(Sql.java:2366) ~[groovy-all-2.4.5.jar:2.4.5]
      >       at groovy.sql.Sql.execute(Sql.java:2438) ~[groovy-all-2.4.5.jar:2.4.5]
      >       at groovy.sql.Sql$execute$1.call(Unknown Source) ~[?:?]
      >       at es.acefael.BaseMigration.execute(BaseMigration.groovy:2017) ~[es-acefael-dostuff-SNAPSHOT.jar:?]
      

      Attachments

        Activity

          People

            pascalschumacher Pascal Schumacher
            acefael acefael
            Votes:
            0 Vote for this issue
            Watchers:
            5 Start watching this issue

            Dates

              Created:
              Updated:
              Resolved: