I think just catching/handling the exception here will give you exactly
what you want.  It doesn't eliminate the race but it mitigates any negative
impacts.  Maybe change your logic to first "get_account", then based on
results you can do the create or not
On Dec 22, 2013 5:25 PM, "Mike Tutkowski" <mike.tutkow...@solidfire.com>
wrote:

> Yeah, if it were just a single management server, I could use
> "synchronized", but since it's not I was curious how we handle this
> situation.
>
> Perhaps your recommendation in regards to using a database table is the way
> to go here. Do you know of any code in CloudStack that performs this kind
> of action that I could use as a template?
>
> I actually looked into this SolidFire API more and - in this case - account
> name must be unique in the SAN, so it's a non-issue (I thought like volumes
> that account names could be reused and you would identify the one you want
> based on its unique ID only). Technically it's not really a non-issue,
> though. For example, two threads could try to create the same account at
> the same time, but one would get an exception (duplicate account name).
> That's OK, though. I could re-write the logic to catch the exception and
> look for the account again (if the account is there, you're OK; else, there
> really is a problem).
>
> CloudStack doesn't need to know about SolidFire accounts, though (just my
> plug-in does). SolidFire has this kind of division in our SAN to support
> APIs that query for statistics based on a tenant's particular account.
>
>
> On Sun, Dec 22, 2013 at 2:40 PM, Marcus Sorensen <shadow...@gmail.com
> >wrote:
>
> > As far as I'm aware, most of this sort of thing is managed by the state
> > machines on the resources themselves, combined with the transactional
> > database to move between states it keeps the management servers in sync.
> >
> > I'm not sure the problem is specific to having multiple mgmt servers.
> You'd
> > have the same race with a single mgmt server, but having one makes it
> > easier to solve (e.g. via synchronize block).
> >
> > There are probably many different ways to tackle this. My immediate
> thought
> > is that cloudstack needs to know about your external accounts if its to
> be
> > expected to handle them. But I imagine you could also use any old
> database
> > transaction to do what you want, maybe have your own accounts table you
> can
> > lock.
> >
> > Another option is simply to make the action idempotent. Why does creating
> > the same account twice result in two accounts? Can that be fixed?
> > On Dec 22, 2013 1:25 PM, "Mike Tutkowski" <mike.tutkow...@solidfire.com>
> > wrote:
> >
> > > Hi,
> > >
> > > I was wondering how we control access to shared resources that are
> being
> > > utilized by different management servers at the same time.
> > >
> > > For example:
> > >
> > > When a user attaches a volume (that's based on the SolidFire plug-in)
> to
> > a
> > > VM, my plug-in looks at the CloudStack account that is requesting the
> > > operation. If this CloudStack account does not have a corresponding
> > account
> > > on the SolidFire SAN, I must create one (there is a 1:1 mapping between
> > > CloudStack and SolidFire accounts).
> > >
> > > How can I protect against a situation where my plug-in is running in
> > > multiple management servers and performing this kind of operation at
> the
> > > same time (in other words, I don't want both instances of the plug-in
> to
> > > see no SolidFire account and then they each end up creating one, which
> > > breaks the 1:1 mapping between a CloudStack account and a SolidFire
> > > account)?
> > >
> > > Thanks!
> > >
> > > --
> > > *Mike Tutkowski*
> > > *Senior CloudStack Developer, SolidFire Inc.*
> > > e: mike.tutkow...@solidfire.com
> > > o: 303.746.7302
> > > Advancing the way the world uses the
> > > cloud<http://solidfire.com/solution/overview/?video=play>
> > > *™*
> > >
> >
>
>
>
> --
> *Mike Tutkowski*
> *Senior CloudStack Developer, SolidFire Inc.*
> e: mike.tutkow...@solidfire.com
> o: 303.746.7302
> Advancing the way the world uses the
> cloud<http://solidfire.com/solution/overview/?video=play>
> *™*
>

Reply via email to