com.pega.dsm.dnode.api.DNodeException: Could not perform database dataset operation on System-Locks
Hi All
We carried out in-place upgrade for PRPC 6.3 to 8.5.1. After Platform upgrade, we upgraded customer service by importing the PegaCPM.jar file. After successfully importing PegaCPM.jar, we could navigate to 'Upgrade Applications Schema' and download the scripts.
After running these scripts, we are tried to restart the application server by
1. truncating cache tables
2. clearing down the temp folder.
We are facing below error and server is not starting up. It seems the conclusion cache does not have the updated properties. We have already truncated below tables and would like to understand if we need to cleardown any other table?
Hi All
We carried out in-place upgrade for PRPC 6.3 to 8.5.1. After Platform upgrade, we upgraded customer service by importing the PegaCPM.jar file. After successfully importing PegaCPM.jar, we could navigate to 'Upgrade Applications Schema' and download the scripts.
After running these scripts, we are tried to restart the application server by
1. truncating cache tables
2. clearing down the temp folder.
We are facing below error and server is not starting up. It seems the conclusion cache does not have the updated properties. We have already truncated below tables and would like to understand if we need to cleardown any other table?
truncate table PEGA_RULES.PR_ASSEMBLEDCLASSES; truncate table PEGA_DATA.PR_SYS_QUEUE_FTSINDEXER; truncate table PEGA_RULES.PR_SYS_RULESET_INDEX; truncate table PEGA_DATA.PR_SYS_UPDATESCACHE; truncate table PEGA_RULES.PR_SYS_APP_HIERARCHY_FLAT; truncate table PEGA_DATA.PR_SYS_WORKINDEXER_QUEUE; truncate table PEGA_RULES.PR_SYS_APP_RULESET_INDEX; truncate table PEGA_DATA.PR4_LOG_RULE_USAGE; truncate table PEGA_RULES.PR_SYS_APPCACHE_DEP; truncate table PEGA_DATA.PR4_LOG_RULE_USAGE_DETAILS; truncate table PEGA_RULES.PR_SYS_APPCACHE_ENTRY; truncate table PEGA_RULES.PR4_RULE_SYSGEN; truncate table PEGA_RULES.PR_SYS_APPCACHE_SHORTCUT; truncate table PEGA_DATA.PR_SYS_STATUSDETAILS; truncate table PEGA_RULES.PR_SYS_CACHE_DEP; truncate table PEGA_DATA.PR_SYS_STATUSNODES; truncate table PEGA_RULES.PR_SYS_CACHE_ENTRY; truncate table PEGA_DATA.PR_LOG_REPORTSTATS; truncate table PEGA_RULES.PR_SYS_CACHE_IMPL; truncate table PEGA_DATA.PR_LOG_SYSTEMSTATE; truncate table PEGA_RULES.PR_SYS_CLASS_ANCESTORS; truncate table PEGA_DATA.PR_DAILY_USAGE; truncate table PEGA_RULES.PR_SYS_RULE_IMPL; truncate table PEGA_DATA.PR_HOURLY_USAGE; truncate table PEGA_RULES.PR_SYSGEN_STATIC_CONTENT; truncate table PEGA_RULES.PR_PERF_STATS;
com.pega.pegarules.pub.context.InitializationFailedError: PRNodeImpl init failed
at com.pega.pegarules.session.internal.mgmt.PREnvironment.getThreadAndInitialize(PREnvironment.java:433) ~[prprivate-session.jar:?]
at com.pega.pegarules.session.internal.PRSessionProviderImpl.getThreadAndInitialize(PRSessionProviderImpl.java:2176) ~[prprivate-session.jar:?]
at com.pega.pegarules.session.internal.engineinterface.etier.impl.EngineStartup.initEngine(EngineStartup.java:683) ~[prprivate-session.jar:?]
at com.pega.pegarules.session.internal.engineinterface.etier.impl.EngineImpl._initEngine_privact(EngineImpl.java:180) ~[prprivate-session.jar:?]
at com.pega.pegarules.session.internal.engineinterface.etier.impl.EngineImpl.doStartup(EngineImpl.java:152) ~[prprivate-session.jar:?]
at com.pega.pegarules.session.internal.engineinterface.etier.ejb.EngineBean.doStartup(EngineBean.java:127) ~[prprivate-session.jar:?]
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) ~[?:1.8.0]
at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:90) ~[?:1.8.0]
at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:55) ~[?:1.8.0]
at java.lang.reflect.Method.invoke(Method.java:508) ~[?:1.8.0]
at com.pega.pegarules.internal.bootstrap.PRBootstrap.invokeMethod(PRBootstrap.java:388) ~[prbootstrap.jar:8.5.1-208]
at com.pega.pegarules.internal.bootstrap.PRBootstrap.invokeMethodPropagatingThrowable(PRBootstrap.java:430) ~[prbootstrap.jar:8.5.1-208]
at com.pega.pegarules.boot.internal.extbridge.AppServerBridgeToPega.invokeMethodPropagatingThrowable(AppServerBridgeToPega.java:225) ~[prbootstrap-api.jar:8.5.1-208]
at com.pega.pegarules.boot.internal.extbridge.AppServerBridgeToPega.invokeMethodPropagatingException(AppServerBridgeToPega.java:247) ~[prbootstrap-api.jar:8.5.1-208]
at com.pega.pegarules.internal.etier.ejb.EngineBeanBoot.doStartup(EngineBeanBoot.java:135) ~[prbeans.jar:8.5.1-208]
at com.pega.pegarules.internal.etier.interfaces.EJSLocalStatelessEngineBMT_f2439d86.doStartup(Unknown Source) ~[prbeans.jar:8.5.1-208]
at com.pega.pegarules.web.servlet.WebAppLifeCycleListener._contextInitialized_privact(WebAppLifeCycleListener.java:210) ~[prwebj2ee.jar:?]
at com.pega.pegarules.web.servlet.AbstractLifeCycleListener._contextInitialized_privact(AbstractLifeCycleListener.java:145) ~[prwebj2ee.jar:?]
at com.pega.pegarules.web.servlet.AbstractLifeCycleListener.contextInitialized(AbstractLifeCycleListener.java:76) ~[prwebj2ee.jar:?]
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) ~[?:1.8.0]
at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:90) ~[?:1.8.0]
at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:55) ~[?:1.8.0]
at java.lang.reflect.Method.invoke(Method.java:508) ~[?:1.8.0]
at com.pega.pegarules.internal.bootstrap.PRBootstrap.invokeMethod(PRBootstrap.java:388) ~[prbootstrap.jar:8.5.1-208]
at com.pega.pegarules.internal.bootstrap.PRBootstrap.invokeMethodPropagatingThrowable(PRBootstrap.java:430) ~[prbootstrap.jar:8.5.1-208]
at com.pega.pegarules.boot.internal.extbridge.AppServerBridgeToPega.invokeMethodPropagatingThrowable(AppServerBridgeToPega.java:225) ~[prbootstrap-api.jar:8.5.1-208]
at com.pega.pegarules.boot.internal.extbridge.AppServerBridgeToPega.invokeMethod(AppServerBridgeToPega.java:274) ~[prbootstrap-api.jar:8.5.1-208]
at com.pega.pegarules.internal.web.servlet.WebAppLifeCycleListenerBoot.contextInitialized(WebAppLifeCycleListenerBoot.java:92) ~[prbootstrap-api.jar:8.5.1-208]
at com.ibm.ws.webcontainer.webapp.WebApp.notifyServletContextCreated(WebApp.java:1837) ~[com.ibm.ws.webcontainer.jar:?]
at com.ibm.ws.webcontainer.webapp.WebAppImpl.initialize(WebAppImpl.java:443) ~[com.ibm.ws.webcontainer.jar:?]
at com.ibm.ws.webcontainer.webapp.WebGroupImpl.addWebApplication(WebGroupImpl.java:88) ~[com.ibm.ws.webcontainer.jar:?]
at com.ibm.ws.webcontainer.VirtualHostImpl.addWebApplication(VirtualHostImpl.java:171) ~[com.ibm.ws.webcontainer.jar:?]
at com.ibm.ws.webcontainer.WSWebContainer.addWebApp(WSWebContainer.java:904) ~[com.ibm.ws.webcontainer.jar:?]
at com.ibm.ws.webcontainer.WSWebContainer.addWebApplication(WSWebContainer.java:789) ~[com.ibm.ws.webcontainer.jar:?]
at com.ibm.ws.webcontainer.component.WebContainerImpl.install(WebContainerImpl.java:427) ~[com.ibm.ws.webcontainer.jar:?]
at com.ibm.ws.webcontainer.component.WebContainerImpl.start(WebContainerImpl.java:719) ~[com.ibm.ws.webcontainer.jar:?]
at com.ibm.ws.runtime.component.ApplicationMgrImpl.start(ApplicationMgrImpl.java:1249) ~[com.ibm.ws.runtime.jar:?]
at com.ibm.ws.runtime.component.DeployedApplicationImpl.fireDeployedObjectStart(DeployedApplicationImpl.java:1590) ~[com.ibm.ws.runtime.jar:?]
at com.ibm.ws.runtime.component.DeployedModuleImpl.start(DeployedModuleImpl.java:707) ~[com.ibm.ws.runtime.jar:?]
at com.ibm.ws.runtime.component.DeployedApplicationImpl.start(DeployedApplicationImpl.java:1161) ~[com.ibm.ws.runtime.jar:?]
at com.ibm.ws.runtime.component.ApplicationMgrImpl.startApplication(ApplicationMgrImpl.java:801) ~[com.ibm.ws.runtime.jar:?]
at com.ibm.ws.runtime.component.ApplicationMgrImpl$5.run(ApplicationMgrImpl.java:2325) ~[com.ibm.ws.runtime.jar:?]
at com.ibm.ws.security.auth.ContextManagerImpl.runAs(ContextManagerImpl.java:5446) ~[com.ibm.ws.runtime.jar:?]
at com.ibm.ws.security.auth.ContextManagerImpl.runAsSystem(ContextManagerImpl.java:5662) ~[com.ibm.ws.runtime.jar:?]
at com.ibm.ws.security.core.SecurityContext.runAsSystem(SecurityContext.java:255) ~[com.ibm.ws.runtime.jar:?]
at com.ibm.ws.runtime.component.ApplicationMgrImpl.start(ApplicationMgrImpl.java:2330) ~[com.ibm.ws.runtime.jar:?]
at com.ibm.ws.runtime.component.CompositionUnitMgrImpl.start(CompositionUnitMgrImpl.java:436) ~[com.ibm.ws.runtime.jar:?]
at com.ibm.ws.runtime.component.CompositionUnitImpl.start(CompositionUnitImpl.java:123) ~[com.ibm.ws.runtime.jar:?]
at com.ibm.ws.runtime.component.CompositionUnitMgrImpl.start(CompositionUnitMgrImpl.java:379) ~[com.ibm.ws.runtime.jar:?]
at com.ibm.ws.runtime.component.CompositionUnitMgrImpl.access$500(CompositionUnitMgrImpl.java:127) ~[com.ibm.ws.runtime.jar:?]
at com.ibm.ws.runtime.component.CompositionUnitMgrImpl$CUInitializer.run(CompositionUnitMgrImpl.java:985) ~[com.ibm.ws.runtime.jar:?]
at com.ibm.wsspi.runtime.component.WsComponentImpl$_AsynchInitializer.run(WsComponentImpl.java:524) ~[com.ibm.ws.runtime.jar:?]
at com.ibm.ws.util.ThreadPool$Worker.run(ThreadPool.java:1909) ~[com.ibm.ws.runtime.jar:?]
Caused by: com.pega.pegarules.pub.PRRuntimeError: PRRuntimeError
at com.pega.dsm.dnode.api.prpc.service.ServiceManager.bootstrap(ServiceManager.java:214) ~[d-node.jar:?]
at com.pega.dsm.dnode.api.server.StreamServiceInitializationTask$1.run(StreamServiceInitializationTask.java:80) ~[d-node.jar:?]
at com.pega.dsm.dnode.api.server.StreamServiceInitializationTask$1.run(StreamServiceInitializationTask.java:77) ~[d-node.jar:?]
at com.pega.dsm.dnode.util.PrpcRunnable.execute(PrpcRunnable.java:67) ~[d-node.jar:?]
at com.pega.dsm.dnode.impl.prpc.service.ServiceHelper$2.run(ServiceHelper.java:291) ~[d-node.jar:?]
at com.pega.pegarules.session.internal.PRSessionProviderImpl.performTargetActionWithLock(PRSessionProviderImpl.java:1388) ~[prprivate-session.jar:?]
at com.pega.pegarules.session.internal.PRSessionProviderImpl.doWithRequestorLocked(PRSessionProviderImpl.java:1131) ~[prprivate-session.jar:?]
at com.pega.pegarules.session.internal.PRSessionProviderImpl.doWithRequestorLocked(PRSessionProviderImpl.java:938) ~[prprivate-session.jar:?]
at com.pega.dsm.dnode.impl.prpc.service.ServiceHelper.executeInPrpcContextInternal(ServiceHelper.java:284) ~[d-node.jar:?]
at com.pega.dsm.dnode.impl.prpc.service.ServiceHelper.executeInPrpcContext(ServiceHelper.java:146) ~[d-node.jar:?]
at com.pega.dsm.dnode.api.server.StreamServiceInitializationTask.initStreamServerServiceAndValidate(StreamServiceInitializationTask.java:77) ~[d-node.jar:?]
at com.pega.dsm.dnode.api.server.StreamServiceInitializationTask.runTask(StreamServiceInitializationTask.java:51) ~[d-node.jar:?]
at com.pega.pegarules.session.internal.async.startup.StartupTaskUtil.runTask(StartupTaskUtil.java:89) ~[prprivate-session.jar:?]
at com.pega.pegarules.session.internal.mgmt.PRNodeImpl.initializeSystem(PRNodeImpl.java:1034) ~[prprivate-session.jar:?]
at com.pega.pegarules.session.internal.mgmt.PREnvironment.getThreadAndInitialize(PREnvironment.java:407) ~[prprivate-session.jar:?]
... 52 more
Caused by: com.pega.dsm.dnode.api.DNodeException: Could not perform database dataset operation on System-Locks
at com.pega.dsm.dnode.impl.dataset.database.DatabaseOperationsUtil.lambda$observableForDatabaseOperation$0(DatabaseOperationsUtil.java:78) ~[d-node.jar:?]
at com.pega.dsm.dnode.impl.dataset.database.DatabaseOperationsUtil$$Lambda$257.000000008D1368C0.emit(Unknown Source) ~[?:?]
at com.pega.dsm.dnode.impl.stream.DataObservableImpl$SafeDataSubscriber.subscribe(DataObservableImpl.java:353) ~[d-node.jar:?]
at com.pega.dsm.dnode.impl.stream.DataObservableImpl.subscribe(DataObservableImpl.java:55) ~[d-node.jar:?]
at com.pega.dsm.dnode.impl.stream.DataObservableImpl.await(DataObservableImpl.java:117) ~[d-node.jar:?]
at com.pega.dsm.dnode.impl.stream.DataObservableImpl.await(DataObservableImpl.java:106) ~[d-node.jar:?]
at com.pega.dsm.dnode.util.OperationWithLock.removeAllLocksForNode(OperationWithLock.java:72) ~[d-node.jar:?]
at com.pega.dsm.dnode.api.prpc.service.ServiceManager.removeAllLocksForThisNode(ServiceManager.java:507) ~[d-node.jar:?]
at com.pega.dsm.dnode.api.prpc.service.ServiceManager.bootstrap(ServiceManager.java:205) ~[d-node.jar:?]
at com.pega.dsm.dnode.api.server.StreamServiceInitializationTask$1.run(StreamServiceInitializationTask.java:80) ~[d-node.jar:?]
at com.pega.dsm.dnode.api.server.StreamServiceInitializationTask$1.run(StreamServiceInitializationTask.java:77) ~[d-node.jar:?]
at com.pega.dsm.dnode.util.PrpcRunnable.execute(PrpcRunnable.java:67) ~[d-node.jar:?]
at com.pega.dsm.dnode.impl.prpc.service.ServiceHelper$2.run(ServiceHelper.java:291) ~[d-node.jar:?]
at com.pega.pegarules.session.internal.PRSessionProviderImpl.performTargetActionWithLock(PRSessionProviderImpl.java:1388) ~[prprivate-session.jar:?]
at com.pega.pegarules.session.internal.PRSessionProviderImpl.doWithRequestorLocked(PRSessionProviderImpl.java:1131) ~[prprivate-session.jar:?]
at com.pega.pegarules.session.internal.PRSessionProviderImpl.doWithRequestorLocked(PRSessionProviderImpl.java:938) ~[prprivate-session.jar:?]
at com.pega.dsm.dnode.impl.prpc.service.ServiceHelper.executeInPrpcContextInternal(ServiceHelper.java:284) ~[d-node.jar:?]
at com.pega.dsm.dnode.impl.prpc.service.ServiceHelper.executeInPrpcContext(ServiceHelper.java:146) ~[d-node.jar:?]
at com.pega.dsm.dnode.api.server.StreamServiceInitializationTask.initStreamServerServiceAndValidate(StreamServiceInitializationTask.java:77) ~[d-node.jar:?]
at com.pega.dsm.dnode.api.server.StreamServiceInitializationTask.runTask(StreamServiceInitializationTask.java:51) ~[d-node.jar:?]
at com.pega.pegarules.session.internal.async.startup.StartupTaskUtil.runTask(StartupTaskUtil.java:89) ~[prprivate-session.jar:?]
at com.pega.pegarules.session.internal.mgmt.PRNodeImpl.initializeSystem(PRNodeImpl.java:1034) ~[prprivate-session.jar:?]
at com.pega.pegarules.session.internal.mgmt.PREnvironment.getThreadAndInitialize(PREnvironment.java:407) ~[prprivate-session.jar:?]
... 52 more
Caused by: java.lang.IllegalStateException: No mapping of property pxSystemNode to a database table column. Property-to-column map:Reading table mapping for class [System-Locks]Property name not found in conclusion for column [PXCOMMITDATETIME]. Using raw column name
Property name not found in conclusion for column [PXCREATEDATETIME]. Using raw column name
Property name not found in conclusion for column [PXCREATEOPERATOR]. Using raw column name
Property name not found in conclusion for column [PXCREATEOPNAME]. Using raw column name
Property name not found in conclusion for column [PXCREATESYSTEMID]. Using raw column name
Property name not found in conclusion for column [PXEXPIREDATETIME]. Using raw column name
Property name not found in conclusion for column [PXINSNAME]. Using raw column name
Property name not found in conclusion for column [PXLOCKHANDLE]. Using raw column name
Property name not found in conclusion for column [PXOBJCLASS]. Using raw column name
Property name not found in conclusion for column [PXOWNERID]. Using raw column name
Property name not found in conclusion for column [PXSAVEDATETIME]. Using raw column name
Property name not found in conclusion for column [PXSYSTEMNAME]. Using raw column name
Property name not found in conclusion for column [PXSYSTEMNODE]. Using raw column name
Property name not found in conclusion for column [PXUPDATEDATETIME]. Using raw column name
Property name not found in conclusion for column [PXUPDATEOPERATOR]. Using raw column name
Property name not found in conclusion for column [PXUPDATEOPNAME]. Using raw column name
Property name not found in conclusion for column [PXUPDATESYSTEMID]. Using raw column name
Property name not found in conclusion for column [PXUSERHOST]. Using raw column name
Property name not found in conclusion for column [PYLABEL]. Using raw column name
Property name not found in conclusion for column [PZINSKEY]. Using raw column name
at com.google.common.base.Preconditions.checkState(Preconditions.java:174) ~[guava-19.0.jar:?]
at com.pega.dsm.dnode.impl.dataset.database.FiltersFromLookupKeys.initWithMultipleKeys(FiltersFromLookupKeys.java:143) ~[d-node.jar:?]
at com.pega.dsm.dnode.impl.dataset.database.FiltersFromLookupKeys.<init>(FiltersFromLookupKeys.java:107) ~[d-node.jar:?]
at com.pega.dsm.dnode.impl.dataset.database.FiltersFromLookupKeys.forDBNested(FiltersFromLookupKeys.java:94) ~[d-node.jar:?]
at com.pega.dsm.dnode.util.DatabaseAPIUtils.setWhereConditions(DatabaseAPIUtils.java:125) ~[d-node.jar:?]
at com.pega.dsm.dnode.util.DatabaseAPIUtils.setWhereConditions(DatabaseAPIUtils.java:140) ~[d-node.jar:?]
at com.pega.dsm.dnode.impl.dataset.database.DatabaseDeleteByKeysOperation$1.executeExposedLogic(DatabaseDeleteByKeysOperation.java:113) ~[d-node.jar:?]
at com.pega.dsm.dnode.impl.dataset.database.DatabaseOperationsUtil.lambda$observableForDatabaseOperation$0(DatabaseOperationsUtil.java:73) ~[d-node.jar:?]
at com.pega.dsm.dnode.impl.dataset.database.DatabaseOperationsUtil$$Lambda$257.000000008D1368C0.emit(Unknown Source) ~[?:?]
at com.pega.dsm.dnode.impl.stream.DataObservableImpl$SafeDataSubscriber.subscribe(DataObservableImpl.java:353) ~[d-node.jar:?]
at com.pega.dsm.dnode.impl.stream.DataObservableImpl.subscribe(DataObservableImpl.java:55) ~[d-node.jar:?]
at com.pega.dsm.dnode.impl.stream.DataObservableImpl.await(DataObservableImpl.java:117) ~[d-node.jar:?]
at com.pega.dsm.dnode.impl.stream.DataObservableImpl.await(DataObservableImpl.java:106) ~[d-node.jar:?]
at com.pega.dsm.dnode.util.OperationWithLock.removeAllLocksForNode(OperationWithLock.java:72) ~[d-node.jar:?]
at com.pega.dsm.dnode.api.prpc.service.ServiceManager.removeAllLocksForThisNode(ServiceManager.java:507) ~[d-node.jar:?]
at com.pega.dsm.dnode.api.prpc.service.ServiceManager.bootstrap(ServiceManager.java:205) ~[d-node.jar:?]
at com.pega.dsm.dnode.api.server.StreamServiceInitializationTask$1.run(StreamServiceInitializationTask.java:80) ~[d-node.jar:?]
at com.pega.dsm.dnode.api.server.StreamServiceInitializationTask$1.run(StreamServiceInitializationTask.java:77) ~[d-node.jar:?]
at com.pega.dsm.dnode.util.PrpcRunnable.execute(PrpcRunnable.java:67) ~[d-node.jar:?]
at com.pega.dsm.dnode.impl.prpc.service.ServiceHelper$2.run(ServiceHelper.java:291) ~[d-node.jar:?]
at com.pega.pegarules.session.internal.PRSessionProviderImpl.performTargetActionWithLock(PRSessionProviderImpl.java:1388) ~[prprivate-session.jar:?]
at com.pega.pegarules.session.internal.PRSessionProviderImpl.doWithRequestorLocked(PRSessionProviderImpl.java:1131) ~[prprivate-session.jar:?]
at com.pega.pegarules.session.internal.PRSessionProviderImpl.doWithRequestorLocked(PRSessionProviderImpl.java:938) ~[prprivate-session.jar:?]
at com.pega.dsm.dnode.impl.prpc.service.ServiceHelper.executeInPrpcContextInternal(ServiceHelper.java:284) ~[d-node.jar:?]
at com.pega.dsm.dnode.impl.prpc.service.ServiceHelper.executeInPrpcContext(ServiceHelper.java:146) ~[d-node.jar:?]
at com.pega.dsm.dnode.api.server.StreamServiceInitializationTask.initStreamServerServiceAndValidate(StreamServiceInitializationTask.java:77) ~[d-node.jar:?]
at com.pega.dsm.dnode.api.server.StreamServiceInitializationTask.runTask(StreamServiceInitializationTask.java:51) ~[d-node.jar:?]
at com.pega.pegarules.session.internal.async.startup.StartupTaskUtil.runTask(StartupTaskUtil.java:89) ~[prprivate-session.jar:?]
at com.pega.pegarules.session.internal.mgmt.PRNodeImpl.initializeSystem(PRNodeImpl.java:1034) ~[prprivate-session.jar:?]
at com.pega.pegarules.session.internal.mgmt.PREnvironment.getThreadAndInitialize(PREnvironment.java:407) ~[prprivate-session.jar:?]
***Edited by Moderator Marissa to update Platform Capability tags****