[jboss-dev] Change in locking behavior in MainDeployer [WAS: Port conflict in tx manager - cluster-udp-SYNC-0

Ales Justin ales.justin at gmail.com
Thu Feb 19 18:35:26 EST 2009


I must admit this write locks were introduced on a quick intuition. :-(

As this turns out, they definitely need more thought into.
But it should also take into an account  proper "disrupted" boot.

Sent from my iPhone

On Feb 19, 2009, at 23:17, Brian Stansberry  
<brian.stansberry at redhat.com> wrote:

> Ales Justin wrote:
>> I can see what the problem is,
>> just dunno what the proper solution would be.
>> I'll check tomorrow, but any suggestion is welcome.
>
> I don't fully understand the design intent of all this, but I'll  
> engage in some speculating anyway. ;)
>
> 1) Is the reason you changed MainDeployerImpl.process() from a  
> shared lock (lockRead() call) to an exclusive lock (lockWrite()  
> call) because only a single thread at a time can be allowed to call  
> deployers.process()? If so we're stuck.
>
> But the JIRA this change was made to fix[1] says nothing about  
> needing to prevent concurrent calls to deployers.process(...) so I'm  
> hopeful that's not it.
>
> 2) Or is the reason you went from a shared lock to an exclusive lock  
> because of the change in the call pattern to deployers.process 
> (...) ?  i.e.
>
> WAS
>
> deployers.process(deployContexts, undeployContexts);
>
> NOW
>
> deployers.process(null, undeployContexts);
> ...
> processToDeploy();
> ...
> deployers.process(deployContexts, null);
>
> So now you've got two deployers.process() calls with work in between  
> and you want to ensure no other thread jumps in the middle?
>
> If yes, since to get to question 2 we determined in question 1 that  
> deployers.process() calls can be concurrent, is making the two calls  
> atomic necessary? Looking at DeployersImpl.process, all it does is  
> process the undeploy list and then the deploy list. The only thing  
> different with how you're using it now is the work you are doing in  
> processToDeploy() adds a greater time gap between the two steps.
>
> 3) Or, the shift to the exclusive lock was just to protect some of  
> the internal data structures (which I doubt). In that case the  
> solution seems like some more fine-grained locking that isn't  
> exclusively held during the calls to deployers.process().
>
> [1] https://jira.jboss.org/jira/browse/JBDEPLOY-159
>
> -- 
> Brian Stansberry
> Lead, AS Clustering
> JBoss, a division of Red Hat
> brian.stansberry at redhat.com
> _______________________________________________
> jboss-development mailing list
> jboss-development at lists.jboss.org
> https://lists.jboss.org/mailman/listinfo/jboss-development



More information about the jboss-development mailing list