I am attempting to use Oracle for the GMS data sto...
# getting-started
s
I am attempting to use Oracle for the GMS data store and I am running into a type conversion error with EbeanAspectV2$PrimaryKey.version when executing the query in EbeanAspectDao.getNextVersion. On the database side the version column is defined as NUMBER(19,0) which I believe is the correct mapping for java long. Any thoughts on how to resolve this?
The actual error:
Copy code
Caused by: javax.persistence.PersistenceException: Error readSet on com.linkedin.metadata.entity.ebean.EbeanAspectV2$PrimaryKey.version
at io.ebeaninternal.server.deploy.BeanProperty.readSet(BeanProperty.java:657)
at io.ebeaninternal.server.deploy.AssocOneHelpEmbedded.read(AssocOneHelpEmbedded.java:39)
at io.ebeaninternal.server.deploy.BeanPropertyAssocOne.read(BeanPropertyAssocOne.java:620)
at io.ebeaninternal.server.query.CQueryFetchSingleAttribute.findList(CQueryFetchSingleAttribute.java:109)
at io.ebeaninternal.server.query.CQueryEngine.findAttributeList(CQueryEngine.java:109)
at io.ebeaninternal.server.query.CQueryEngine.findIds(CQueryEngine.java:158)
at io.ebeaninternal.server.query.DefaultOrmQueryEngine.findIds(DefaultOrmQueryEngine.java:96)
at io.ebeaninternal.server.core.OrmQueryRequest.findIds(OrmQueryRequest.java:425)
at io.ebeaninternal.server.core.DefaultServer.findIdsWithCopy(DefaultServer.java:1402)
at io.ebeaninternal.server.core.DefaultServer.findIds(DefaultServer.java:1384)
at io.ebeaninternal.server.querydefn.DefaultOrmQuery.findIds(DefaultOrmQuery.java:1431)
at com.linkedin.metadata.entity.ebean.EbeanAspectDao.getNextVersion(EbeanAspectDao.java:525)
at com.linkedin.metadata.entity.ebean.EbeanAspectDao.saveLatestAspect(EbeanAspectDao.java:126)
at com.linkedin.metadata.entity.ebean.EbeanEntityService.lambda$ingestAspect$7(EbeanEntityService.java:222)
at com.linkedin.metadata.entity.ebean.EbeanAspectDao.runInTransactionWithRetry(EbeanAspectDao.java:448)
at com.linkedin.metadata.entity.ebean.EbeanEntityService.ingestAspect(EbeanEntityService.java:205)
at com.linkedin.metadata.entity.ebean.EbeanEntityService.ingestAspect(EbeanEntityService.java:194)
at com.linkedin.metadata.entity.EntityService.lambda$ingestSnapshotUnion$5(EntityService.java:271)
at java.util.ArrayList.forEach(ArrayList.java:1259)\n\tat com.linkedin.metadata.entity.EntityService.ingestSnapshotUnion(EntityService.java:269)
at com.linkedin.metadata.entity.EntityService.ingestEntity(EntityService.java:238)
at com.linkedin.metadata.resources.dataset.Datasets.lambda$ingest$8(Datasets.java:406)
at com.linkedin.metadata.restli.RestliUtils.toTask(RestliUtils.java:27)
g
Have you tried defining the version columns as a LONGINTEGER instead?
NUMBER(p, 0)
does represent integers logically, but perhaps Ebean is trying to cast it to a floating point?
s
I have tried several Oracle numeric data types to no avail. It goes deeper than Ebean:
Copy code
Caused by: java.sql.SQLException: Fail to convert to internal representation at oracle.jdbc.driver.CharCommonAccessor.getLong(CharCommonAccessor.java:250)
at oracle.jdbc.driver.T4CVarcharAccessor.getLong(T4CVarcharAccessor.java:537)
at oracle.jdbc.driver.GeneratedStatement.getLong(GeneratedStatement.java:206)
at oracle.jdbc.driver.GeneratedScrollableResultSet.getLong(GeneratedScrollableResultSet.java:259)
at io.ebeaninternal.server.type.RsetDataReader.getLong(RsetDataReader.java:142)
at io.ebeaninternal.server.type.ScalarTypeLong.read(ScalarTypeLong.java:34)
at io.ebeaninternal.server.type.ScalarTypeLong.read(ScalarTypeLong.java:17)
at io.ebeaninternal.server.deploy.BeanProperty.readSet(BeanProperty.java:651)
b
Oh jeeze. As a first pass, I'm assuming nothing is popping up on StackOverflow etc?
g
Hey- we followed up separately and made some progress here 🙂
Still tbd what the source of the issue is but we are going to investigate more into the call to find the Key specifically
by fetching the rows as
SqlRow
instances rather than `EbeanAspectV2`s, we were able to fetch the version successfully
b
Oh that's interesting