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