[ https://issues.apache.org/jira/browse/CLOUDSTACK-4133?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=13733793#comment-13733793 ]
Nitin Mehta commented on CLOUDSTACK-4133: ----------------------------------------- Alena - Fair point, that we shouldn't be facing mysql exception. But, I see that this should be a problem across the board in CS right. There must be instances where parallel threads are trying to create the same entry in CS (meaning for the same unique constraints, thus throwing MySQLIntegrityConstraintViolationException). How are we solving it there - say parallel vms trying to create the router for the same account ? How are we taking care of the race conditions ? I did ponder on the approaches you mentioned. The first one is not fool proof and will not work in the race conditions as here (I guess we already do this). The second one will potentially lock the entire template id across CS and is not performant. I was thinking of acquiring global lock on the string combination say like "templateid:"+templateId+"poolId:"+poolId, but I have heard from Koushik that global lock code is buggy. Since we already take the first approach you mentioned, I see that only in corner cases of parallel deployment will we see this exception. But even there its not hurting the functionality and we are handling it gracefully. Do let me know your thinking on this. Since Campo is imminent I say that we should take this up in post 4.2 release. > hitting MySQLIntegrityConstraintViolationException for key > 'i_template_spool_ref__template_id__pool_id' in case of parallel deployment > --------------------------------------------------------------------------------------------------------------------------------------- > > Key: CLOUDSTACK-4133 > URL: https://issues.apache.org/jira/browse/CLOUDSTACK-4133 > Project: CloudStack > Issue Type: Bug > Security Level: Public(Anyone can view this level - this is the > default.) > Components: Management Server > Affects Versions: 4.2.0 > Environment: xenserver advanced zone > Reporter: shweta agarwal > Assignee: Nitin Mehta > Priority: Critical > Fix For: 4.2.0 > > Attachments: management-server.tar.gz > > > Deploying 30 VMs in Parallel on xenserver host > getting following exception ..though not consistently > 2013-08-07 01:06:38,694 DEBUG [db.Transaction.Transaction] > (Job-Executor-103:job-177 = [ 504ce7c1-ec29-4edb-9ef6-073c89f23f21 ]) Rolling > back the transaction: Time = 11934 Name = > -AsyncJobManagerImpl$1.run:494-Executors$RunnableAdapter.call:471-FutureTask$Sync.innerRun:334-FutureTask.run:166-ThreadPoolExecutor.runWorker:1110-ThreadPoolExecutor$Worker.run:603-Thread.run:679; > called by > -Transaction.rollback:896-Transaction.removeUpTo:839-Transaction.close:663-TransactionContextBuilder.interceptException:63-ComponentInstantiationPostProcessor$InterceptorDispatcher.intercept:133-PrimaryDataStoreImpl.create:239-VolumeServiceImpl.createBaseImageAsync:387-VolumeServiceImpl.createVolumeFromTemplateAsync:538-VolumeManagerImpl.recreateVolume:2488-VolumeManagerImpl.prepare:2545-VirtualMachineManagerImpl.advanceStart:934-VirtualMachineManagerImpl.start:624 > 2013-08-07 01:06:39,552 DEBUG [agent.manager.DirectAgentAttache] > (DirectAgent-197:null) Seq 1-122749286: Response Received: > 2013-08-07 01:06:39,553 DEBUG [agent.transport.Request] > (DirectAgent-197:null) Seq 1-122749286: Processing: { Ans: , MgmtId: > 7200344900649, via: 1, Ver: v1, Flags: 10, > [{"com.cloud.agent.api.Answer":{"result":true,"wait":0}}] } > 2013-08-07 01:06:39,557 DEBUG [agent.transport.Request] > (Job-Executor-121:job-195 = [ 23b53290-6961-4913-a5ba-31fdcb453a79 ]) Seq > 1-122749286: Received: { Ans: , MgmtId: 7200344900649, via: 1, Ver: v1, > Flags: 10, { Answer } } > 2013-08-07 01:06:39,559 DEBUG [storage.datastore.PrimaryDataStoreImpl] > (Job-Executor-120:job-194 = [ cac12fea-d3ed-4764-aee5-9e292b555024 ]) Failed > to insert (templateId: 202, poolId: 2) to template_spool_ref > javax.persistence.EntityExistsException: Entity already exists: > at com.cloud.utils.db.GenericDaoBase.persist(GenericDaoBase.java:1346) > at > com.cloud.utils.component.ComponentInstantiationPostProcessor$InterceptorDispatcher.intercept(ComponentInstantiationPostProcessor.java:125) > at > org.apache.cloudstack.storage.datastore.PrimaryDataStoreImpl.create(PrimaryDataStoreImpl.java:239) > at > org.apache.cloudstack.storage.volume.VolumeServiceImpl.createBaseImageAsync(VolumeServiceImpl.java:387) > at > org.apache.cloudstack.storage.volume.VolumeServiceImpl.createVolumeFromTemplateAsync(VolumeServiceImpl.java:538) > at > com.cloud.storage.VolumeManagerImpl.recreateVolume(VolumeManagerImpl.java:2488) > at > com.cloud.storage.VolumeManagerImpl.prepare(VolumeManagerImpl.java:2545) > at > com.cloud.vm.VirtualMachineManagerImpl.advanceStart(VirtualMachineManagerImpl.java:934) > at > com.cloud.vm.VirtualMachineManagerImpl.start(VirtualMachineManagerImpl.java:624) > at > org.apache.cloudstack.engine.cloud.entity.api.VMEntityManagerImpl.deployVirtualMachine(VMEntityManagerImpl.java:227) > at > org.apache.cloudstack.engine.cloud.entity.api.VirtualMachineEntityImpl.deploy(VirtualMachineEntityImpl.java:209) > at > com.cloud.vm.UserVmManagerImpl.startVirtualMachine(UserVmManagerImpl.java:3408) > at > com.cloud.vm.UserVmManagerImpl.startVirtualMachine(UserVmManagerImpl.java:2968) > at > com.cloud.vm.UserVmManagerImpl.startVirtualMachine(UserVmManagerImpl.java:2954) > at > com.cloud.utils.component.ComponentInstantiationPostProcessor$InterceptorDispatcher.intercept(ComponentInstantiationPostProcessor.java:125) > at > org.apache.cloudstack.api.command.user.vm.DeployVMCmd.execute(DeployVMCmd.java:420) > at com.cloud.api.ApiDispatcher.dispatch(ApiDispatcher.java:158) > at > com.cloud.async.AsyncJobManagerImpl$1.run(AsyncJobManagerImpl.java:531) > at > java.util.concurrent.Executors$RunnableAdapter.call(Executors.java:471) > at java.util.concurrent.FutureTask$Sync.innerRun(FutureTask.java:334) > at java.util.concurrent.FutureTask.run(FutureTask.java:166) > at > java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1110) > at > java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:603) > at java.lang.Thread.run(Thread.java:679) > Caused by: > com.mysql.jdbc.exceptions.jdbc4.MySQLIntegrityConstraintViolationException: > Duplicate entry '202-2' for key 'i_template_spool_ref__template_id__pool_id' > at sun.reflect.NativeConstructorAccessorImpl.newInstance0(Native > Method) > at > sun.reflect.NativeConstructorAccessorImpl.newInstance(NativeConstructorAccessorImpl.java:57) > at > sun.reflect.DelegatingConstructorAccessorImpl.newInstance(DelegatingConstructorAccessorImpl.java:45) > at java.lang.reflect.Constructor.newInstance(Constructor.java:532) > > -- This message is automatically generated by JIRA. If you think it was sent incorrectly, please contact your JIRA administrators For more information on JIRA, see: http://www.atlassian.com/software/jira