specify / specify6

Source Code for Specify 6, Biological Collections Management Platform
https://specifysoftware.org
GNU General Public License v2.0
14 stars 6 forks source link

Java Exception when declining a Schema Update #509

Closed maxpatiiuk closed 4 years ago

maxpatiiuk commented 4 years ago

I pressed a Cancel button when Specify was asking for root login and password

Here is a path that leads to this bug: Screenshot (5)

class_name: edu.ku.brc.specify.config.AppPrefsGlobalDBIOIImpl
comments: 

stack_trace: 
org.hibernate.exception.SQLGrammarException: could not load an entity: [edu.ku.brc.specify.datamodel.Agent#3]
    at org.hibernate.exception.SQLStateConverter.convert(SQLStateConverter.java:67)
    at org.hibernate.exception.JDBCExceptionHelper.convert(JDBCExceptionHelper.java:43)
    at org.hibernate.loader.Loader.loadEntity(Loader.java:1874)
    at org.hibernate.loader.entity.AbstractEntityLoader.load(AbstractEntityLoader.java:48)
    at org.hibernate.loader.entity.AbstractEntityLoader.load(AbstractEntityLoader.java:42)
    at org.hibernate.persister.entity.AbstractEntityPersister.load(AbstractEntityPersister.java:3044)
    at org.hibernate.event.def.DefaultLoadEventListener.loadFromDatasource(DefaultLoadEventListener.java:395)
    at org.hibernate.event.def.DefaultLoadEventListener.doLoad(DefaultLoadEventListener.java:375)
    at org.hibernate.event.def.DefaultLoadEventListener.load(DefaultLoadEventListener.java:139)
    at org.hibernate.event.def.DefaultLoadEventListener.proxyOrLoad(DefaultLoadEventListener.java:179)
    at org.hibernate.event.def.DefaultLoadEventListener.onLoad(DefaultLoadEventListener.java:103)
    at org.hibernate.impl.SessionImpl.fireLoad(SessionImpl.java:878)
    at org.hibernate.impl.SessionImpl.internalLoad(SessionImpl.java:846)
    at org.hibernate.type.EntityType.resolveIdentifier(EntityType.java:557)
    at org.hibernate.type.EntityType.resolve(EntityType.java:379)
    at org.hibernate.engine.TwoPhaseLoad.initializeEntity(TwoPhaseLoad.java:116)
    at org.hibernate.loader.Loader.initializeEntitiesAndCollections(Loader.java:854)
    at org.hibernate.loader.Loader.doQuery(Loader.java:729)
    at org.hibernate.loader.Loader.doQueryAndInitializeNonLazyCollections(Loader.java:236)
    at org.hibernate.loader.Loader.doList(Loader.java:2220)
    at org.hibernate.loader.Loader.listIgnoreQueryCache(Loader.java:2104)
    at org.hibernate.loader.Loader.list(Loader.java:2099)
    at org.hibernate.loader.hql.QueryLoader.list(QueryLoader.java:378)
    at org.hibernate.hql.ast.QueryTranslatorImpl.list(QueryTranslatorImpl.java:338)
    at org.hibernate.engine.query.HQLQueryPlan.performList(HQLQueryPlan.java:172)
    at org.hibernate.impl.SessionImpl.list(SessionImpl.java:1121)
    at org.hibernate.impl.QueryImpl.list(QueryImpl.java:79)
    at edu.ku.brc.specify.dbsupport.HibernateDataProviderSession.getDataList(HibernateDataProviderSession.java:241)
    at edu.ku.brc.specify.config.SpecifyAppContextMgr.getAppResDir(SpecifyAppContextMgr.java:792)
    at edu.ku.brc.specify.config.AppPrefsGlobalDBIOIImpl.createResDir(AppPrefsGlobalDBIOIImpl.java:51)
    at edu.ku.brc.specify.config.AppPrefsDBIOIImpl.load(AppPrefsDBIOIImpl.java:165)
    at edu.ku.brc.specify.config.AppPrefsDBIOIImpl.exists(AppPrefsDBIOIImpl.java:106)
    at edu.ku.brc.af.prefs.AppPreferences.load(AppPreferences.java:751)
    at edu.ku.brc.af.prefs.AppPreferences.get(AppPreferences.java:398)
    at edu.ku.brc.af.prefs.AppPreferences.get(AppPreferences.java:384)
    at edu.ku.brc.af.prefs.AppPreferences.getBoolean(AppPreferences.java:494)
    at edu.ku.brc.af.prefs.AppPreferences.getBoolean(AppPreferences.java:511)
    at edu.ku.brc.af.core.db.MySQLBackupService.checkForBackUp(MySQLBackupService.java:1254)
    at edu.ku.brc.specify.Specify.doExit(Specify.java:2257)
    at edu.ku.brc.specify.Specify.doCommand(Specify.java:3096)
    at edu.ku.brc.ui.CommandDispatcher.dispatch(CommandDispatcher.java:122)
    at edu.ku.brc.af.ui.db.DatabaseLoginPanel$17.doLoginContinuing2(DatabaseLoginPanel.java:1401)
    at edu.ku.brc.af.ui.db.DatabaseLoginPanel$17$2.exited(DatabaseLoginPanel.java:1347)
    at com.install4j.runtime.installer.helper.apiimpl.ApplicationLauncherImpl$CommFileWaiter.exited(ApplicationLauncherImpl.java:217)
    at com.install4j.runtime.installer.helper.apiimpl.ApplicationLauncherImpl$CommFileWaiter.run(ApplicationLauncherImpl.java:197)
Caused by: com.mysql.jdbc.exceptions.jdbc4.MySQLSyntaxErrorException: Unknown column 'agent0_.Suffix' in 'field list'
    at sun.reflect.NativeConstructorAccessorImpl.newInstance0(Native Method)
    at sun.reflect.NativeConstructorAccessorImpl.newInstance(NativeConstructorAccessorImpl.java:62)
    at sun.reflect.DelegatingConstructorAccessorImpl.newInstance(DelegatingConstructorAccessorImpl.java:45)
    at java.lang.reflect.Constructor.newInstance(Constructor.java:423)
    at com.mysql.jdbc.Util.handleNewInstance(Util.java:389)
    at com.mysql.jdbc.Util.getInstance(Util.java:372)
    at com.mysql.jdbc.SQLError.createSQLException(SQLError.java:980)
    at com.mysql.jdbc.MysqlIO.checkErrorPacket(MysqlIO.java:3835)
    at com.mysql.jdbc.MysqlIO.checkErrorPacket(MysqlIO.java:3771)
    at com.mysql.jdbc.MysqlIO.sendCommand(MysqlIO.java:2435)
    at com.mysql.jdbc.MysqlIO.sqlQueryDirect(MysqlIO.java:2582)
    at com.mysql.jdbc.ConnectionImpl.execSQL(ConnectionImpl.java:2535)
    at com.mysql.jdbc.PreparedStatement.executeInternal(PreparedStatement.java:1911)
    at com.mysql.jdbc.PreparedStatement.executeQuery(PreparedStatement.java:2034)
    at com.mchange.v2.c3p0.impl.NewProxyPreparedStatement.executeQuery(NewProxyPreparedStatement.java:76)
    at org.hibernate.jdbc.AbstractBatcher.getResultSet(AbstractBatcher.java:186)
    at org.hibernate.loader.Loader.getResultSet(Loader.java:1787)
    at org.hibernate.loader.Loader.doQuery(Loader.java:674)
    at org.hibernate.loader.Loader.doQueryAndInitializeNonLazyCollections(Loader.java:236)
    at org.hibernate.loader.Loader.loadEntity(Loader.java:1860)
    ... 42 more

task_name: 
title: 
id: 434e72f4-4324-f755-197f-a1c3fafb1fcf--16f258346f0
os_name: Windows 10
os_version: 10.0
java_version: 1.8.0_232
java_vendor: Amazon.com Inc.
max_memory: 3817865216
used_memory: 3437390216
user_name: specify
ip: 192.168.2.141
app_version: 6.8.00

KuFishWLabels was used

timo11 commented 4 years ago

Ah! This happened for that database because it hadn't been updated since before agent.suffix was added in 2014.

maxpatiiuk commented 4 years ago

This is acting weird now

After the user cancels the root login process, no exception occurs (good), the user gets an info message the application will now exit, yet instead of that it logs in properly (seemingly skipping over the schema update)

Screen Shot 2020-03-24 at 12 40 32 PM
maxpatiiuk commented 4 years ago

Seems like the same happens if the user presses the Exit button inside the Backup window

timo11 commented 4 years ago

OK. This happens for DBs that do NOT have schema changes to agent. The fix is coming.

timo11 commented 4 years ago

Should be fixed. Needs to be tested on dbs with agent table that already has suffiix and the generic fields we just added.

timo11 commented 4 years ago

and also tested for the conditions that led to #687