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/slingevent:eventadmin/2013/5/17/16/39/com.adobe.cq.collection.update.job_826cd21a-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]

Reply via email to