sitewhere icon indicating copy to clipboard operation
sitewhere copied to clipboard

Error when creating same Instance multiple times

Open jorgevillaverde-sitewhere opened this issue 5 years ago • 1 comments

When creating a SiteWhere 3.0 Instance, then removing it and creating the same instance again, asset-management microservice fails with:

Hibernate: select rdbassetty0_.id as id1_0_, rdbassetty0_.created_by as created_2_0_, rdbassetty0_.created_date as created_3_0_, rdbassetty0_.token as token4_0_, rdbassetty0_.updated_by as updated_5_0_, rdbassetty0_.updated_date as updated_6_0_, rdbassetty0_.background_color as backgrou7_0_, rdbassetty0_.border_color as border_c8_0_, rdbassetty0_.foreground_color as foregrou9_0_, rdbassetty0_.icon as icon10_0_, rdbassetty0_.image_url as image_u11_0_, rdbassetty0_.asset_category as asset_c12_0_, rdbassetty0_.description as descrip13_0_, rdbassetty0_.name as name14_0_ from assetmanagement.asset_types rdbassetty0_ where rdbassetty0_.token=?
Hibernate: select metadata0_.asset_type_id as asset_ty1_1_0_, metadata0_.prop_value as prop_val2_1_0_, metadata0_.prop_key as prop_key3_0_ from assetmanagement.asset_types_metadata metadata0_ where metadata0_.asset_type_id in (select rdbassetty0_.id from assetmanagement.asset_types rdbassetty0_ where rdbassetty0_.token=?)
2020-06-23 18:15:32,256 ERROR [com.sit.mic.mul.TenantEngineBootstrapper] (pool-26-thread-1) Unable to start asynchronous component.: com.sitewhere.spi.SiteWhereException: Tenant engine bootstrap failed due to error executing dataset script.
at com.sitewhere.microservice.multitenant.TenantEngineBootstrapper.runInitializer(TenantEngineBootstrapper.java:166)
at com.sitewhere.microservice.multitenant.TenantEngineBootstrapper.bootstrapTenantEngine(TenantEngineBootstrapper.java:133)
at com.sitewhere.microservice.multitenant.TenantEngineBootstrapper.bootstrap(TenantEngineBootstrapper.java:97)
at com.sitewhere.microservice.multitenant.TenantEngineBootstrapper$1.execute(TenantEngineBootstrapper.java:58)
at com.sitewhere.microservice.lifecycle.CompositeLifecycleStep.execute(CompositeLifecycleStep.java:75)
at com.sitewhere.microservice.multitenant.TenantEngineBootstrapper.asyncStart(TenantEngineBootstrapper.java:63)
at com.sitewhere.microservice.lifecycle.AsyncStartLifecycleComponent$Waiter.run(AsyncStartLifecycleComponent.java:82)
at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1149)
at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:624)
at java.lang.Thread.run(Thread.java:748)
Caused by: org.graalvm.polyglot.PolyglotException: Expected one result but found multiple.
at com.sitewhere.rdb.RdbEntityManagerProvider.findOne(RdbEntityManagerProvider.java:260)
at com.sitewhere.asset.persistence.rdb.RdbAssetManagement.getAssetTypeByToken(RdbAssetManagement.java:210)
at com.sitewhere.asset.persistence.rdb.RdbAssetManagement.createAsset(RdbAssetManagement.java:54)
at com.sitewhere.microservice.api.asset.AssetManagementRequestBuilder.persist(AssetManagementRequestBuilder.java:41)
at <js>.:program(Unnamed:94)
at org.graalvm.polyglot.Context.eval(Context.java:371)
at com.sitewhere.microservice.scripting.ScriptingUtils.run(ScriptingUtils.java:30)
at com.sitewhere.microservice.multitenant.TenantEngineBootstrapper.runInitializer(TenantEngineBootstrapper.java:159)
... 9 more```

This looks like a case where the asset data had already been populated and the database was still there after instance deletion. The tenant bootstrapped status was not set since it was a fresh installation, so it attempted to bootstrap again. We'll need to properly handle cases where the database is already there. Not sure if that belongs in the bootstrap processing or in the bootstrap script itself.

derekadams avatar Jun 23 '20 22:06 derekadams