Question
· Jun 21, 2019

Licenses in Docker image of IRIS (store/intersystems/iris:2019.2.0.107.0-community)

Hi! I am working in a java project (Spring Boot+ Maven + Hibernate) using jpa/hibernate to manage the persistance with the IRIS database from the Docker image (store/intersystems/iris:2019.2.0.107.0-community) and I've found an issue using the IRIS instance, when I define tables with relationships OneToMany, ManyToOne or ManyToMany and I try to fetch all the rows of the tables using the default method findAll (JpaRepository implements that method to get all the rows by default) the query automatically exceeds the limit of licenses availables. I've tested the same query using a local IRIS instance with a regular license (InterSystems IRIS 2018.1 Enterprise - Concurrent Users for x86-64 (Microsoft Windows):250, Non-Production Instance) and works perfectly.

Could be possible increase the number of licenses availables for the IRIS image in Docker?

 

Thank you in advance!

 

Discussion (11)1
Log in or sign up to continue

Yes, it is, but in this case, it exceeded connections limit for one license unit and it is even just only 4 in comparing with 25 for ordinary versions.

And I think this message in the log should be changed to be more clear. 

Another issue, here

USER> Write $SYSTEM.License.MaxConnections()
25

25 connections for ordinary version, but Community Edition, has only 4 connections and fails to start more.

And another problem is that reaching connections limit for just one user, changes state of the instance as with warn

root@d5eaa844235c:/# iris list

Configuration 'IRIS'   (default)
        directory:    /usr/irissys
        versionid:    2019.2.0.107.0com
        datadir:      /dur/config
        conf file:    iris.cpf  (SuperServer port = 51773, WebServer = 52773)
        status:       running, since Tue Jun 25 13:00:11 2019
        state:        warn
        product:      InterSystems IRIS

And this state used for HEALTHCHECK of the container, so, this container became as Unhealthy, which means in production such container should be killed, even it is actually in good condition.

$ docker-compose ps
        Name                   Command               State     
---------------------------------------------------------------
jdbc-jpa-rest_iris_1   /iris-main             Up (unhealthy)

Hi Dmitry, It's true, it's not a problem of licenses, it's a problem of connections:

Before the select: only 1 connection used.

When the project execute the findAll query: Connections used = 5

It seems like a problem with the connection pool manager, it reserves connections for each query and when the connections achieve the maximum the execution is blockade.

so, my application.properties

in this case, I have only 4 connections on the server, without any issues with licenses

spring.datasource.driverClassName = com.intersystems.jdbc.IRISDriver
spring.datasource.url = jdbc:IRIS://127.0.0.1:9091/USER
spring.datasource.username = _SYSTEM
spring.datasource.password = 1234
spring.datasource.testOnBorrow = true
spring.datasource.testWhileIdle = true
spring.datasource.timeBetweenEvictionRunsMillis = 60000
spring.datasource.minEvictableIdleTimeMillis = 30000
spring.datasource.validationQuery = SELECT 1
spring.datasource.max-wait = 8000
spring.jpa.properties.hibernate.dialect = org.hibernate.dialect.InterSystemsIRISDialect
spring.jpa.hibernate.ddl-auto = create
spring.jpa.properties.hibernate.temp.use_jdbc_metadata_defaults=false = false
spring.datasource.hikari.maximumPoolSize = 4

I've modified spring.datasource.hikari.maximumPoolSize values (with differents values 1, 2, 3 and 4) and when the application execute a findAll or a query without the clause WHERE the execution is blockade.

In theory there are 2 free connections but the error returned is:

org.springframework.transaction.CannotCreateTransactionException: Could not open JPA EntityManager for transaction; nested exception is org.hibernate.exception.JDBCConnectionException: Unable to acquire JDBC Connection