Great, just checked the code - and we explicitly forbid keys with a slash - which makes sense as this would address a child resource, or any other resource in the tree.
Carsten 2013/5/17 Amit.. Gupta. <[email protected]> > Yeah, the key is okie, it was just a side effect of some logic, I didn't > intend to put it there. I can fix that > > -Amit > > -----Original Message----- > From: Carsten Ziegeler [mailto:[email protected]] > Sent: 17 May 2013 17:27 > To: [email protected] > Subject: Re: JcrResourceProvider.create/JobMangerImpl.writeJob can cause > inconsistent behavior > > Hi, > > good catch, I think JcrResourceProvider should remove the node if setting > properties fails. > > But /a/b/c/a.txt shouldn't be an invalid key - this should be encoded. > > Regards > Carsten > > > 2013/5/17 Amit.. Gupta. <[email protected]> > > > Hi Devs, > > > > I have been debugging an issue with sling jobs and finally found that > > current implementation JobMangerImpl.writeJob can cause inconsistent > > behaviour (root cause is JcrResourceProvider.create) > > > > Issue that led to this: > > I observed that sometime all of my event properties were not being > > written to the job node. Though the job node was being created. But > > ultimately JobManager would error out giving following messages: > > 17.05.2013 16:41:57.578 *WARN* [Apache Sling Job Background Loader] > > org.apache.sling.event.impl.jobs.JobManagerImpl Discarding job - job > > topic is missing : > > /var/eventing/jobs/assigned/826cd21a-6a8f-48cb-b112-768b421af572/sling > > event:eventadmin/2013/5/17/16/39/com.adobe.cq.collection.update.job_82 > > 6cd21a-6a8f-48cb-b112-768b421af572_2 > > Sometime, my job handler would be called, but event won't have enough > > properties that I sent to jobManager. > > Problem: > > There was an issue in my code that was adding a property to the event, > > which had invalid key i.e. /a/b/c/a.txt and JcrResourceProvider can > > not persist it. Hence the issue. This is fine, I can correct it. > > > > But the main problem is that this persistence error was never reported > > in error logs, and job got persisted event though > > JcrResourceProvider.create threw a PersistenceException. But the job > > was created with fewer properties with what I intended. This resulted > > in sometime, my JobHandler being called, but not getting enough > properties. > > > > With the debugging, I found that JobManagerImpl.writeJob can cause > > some inconsistent behaviour due to the way, > > ResourceUtil.getOrCreateResource and JcrResourceProvider.create. > > > > In this case following happened: > > JcrResourceProvider.create threw PE while persisting the property, but > > the node was already by this time. > > ResourceUtil.getOrCreateResource caught the PE, but checked for the > > existence of resource and hence ignored it. > > > > Now, above implementation is wrong, either JcrResourceProvider should > > ensure that operation is atomic. Or ResourceUtil.getOrCreateResource > > should be changed revert changes in case of exception. > > > > WDYT? > > > > Thanks, > > Amit > > > > > > > -- > Carsten Ziegeler > [email protected] > -- Carsten Ziegeler [email protected]
