[PVE-User] Simultaneous API call
admin at extremeshok.com
admin at extremeshok.com
Sat Feb 13 12:55:14 CET 2016
Might be easier to just use the module garden proxmox modules for whmcs. Instead of reinventing the wheel
Sent from my iPhone
> On 13 Feb 2016, at 1:36 PM, Thomas Lamprecht <t.lamprecht at proxmox.com> wrote:
>
> -----BEGIN PGP SIGNED MESSAGE-----
> Hash: SHA256
>
> Hi,
>
> Al 13.02.2016 a 11:38 Mohamed Sadok Ben Jazia ha scritto:
>> Hello, to describe my purpose, i'm supposed to create a commercial
>> plateform for providing IAAS and PAAS using proxmox. For this
>> step, i'm planning to develop a full API for third pary users, the
>> development will be done in PHP as start. The API will contain 3
>> main parts (clustering and managing hosts and nodes, Actions on
>> CT's and VM's, Authorisations handling)
>
> A ReST API to another ReST API, interesting. :)
> Be sure to respect the licence from the (PHP) API binding you're
> using, avoiding legal trouble is always good, I guess.
>
>> The issue i'm facing here happens when i run simultaneous API call
>> to create CT's on the same host because i'm using call-to-nextid()
>> that returns the same id. I think semaphores or mutex are not a
>> good options because once not well implemented, i will have
>> deadlocks which is worst than simple error.
>
> Can you please describe to me what I my proposed implementation can
> result in a deadlock? AFAIK, solutions which are using only one (!)
> lock are deadlock safe per definition, there is no possibility to
> cause a deadlock in this case and if you're using more locks only be
> sure to acquire and release them all (!) in the same order and your
> good to go. You normally only get deadlocks when at least two
> resources (i.e. locks) are wanted and multiple consumers (i.e.
> processes/API callers) are running.
>
> See https://en.wikipedia.org/wiki/Deadlock
>
>> I simply think to implement call-to-nextid() myself and get a list
>> of used id's and add a random number for security but it's not a
>> perfect choice.
>
> That's not "added security", further you also will come into
> collisions with this approach as random is random.
>
>
> I'm hoping you don't take this answer as an insult/attack as I'm quite
> direct, I only want to set a few things straight and help you to
> understand why I proposed such a solution.
>
> I'm thinking also about making a patch which adds another parameter to
> the create Container and Virtual Machine API calls, which results in
> auto selecting a free VMID when creating one and returning that when
> finished.
> This seems as an usable "feature" for other use cases then yours also,
> but no promise yet, we have to look if it fits in our concept.
>
> cheers,
> Thomas
>
>> On 13 February 2016 at 10:07, Thomas Lamprecht
>> <t.lamprecht at proxmox.com <mailto:t.lamprecht at proxmox.com>> wrote:
>>
>> Hi,
>>
>> can you show a (simple) example how you do it? Are you making next
>> id calls from all over the cluster (in parallel)?
>>
>> If you're doing it in serial like:
>>
>> new_vmid = call-to-nextid(); create-ct(new_vmid)
>>
>> you're fine, doing parallel calls you get race conditions and
>> atomicity violations.
>>
>> Solving that could be done in several ways:
>>
>> * Locking from your side (with semaphore, mutex, ...)
>>
>>
>> LOCK(CREATE)
>>
>> new_vmid = call-to-nextid(); create-ct(new_vmid)
>>
>> UNLOCK(CREATE)
>>
>>
>> this is a pit of an overkill though, as you only need to lock until
>> the container config is created in:
>>
>> /etc/pve/nodes/<yournode>/lxc/<neew_vmid>.conf
>>
>> Ther should be also the possibility to force create a CT, AFAIK,
>> then you could do the following:
>>
>> LOCK(CREATE)
>>
>> new_vmid = call-to-nextid();
>>
>> // create the cfg file before calling pct create touch
>> /etc/pve/nodes/<yournode>/lxc/<new_vmid>.conf
>>
>> UNLOCK(CREATE)
>>
>> create-ct(new_vmid, force=true)
>>
>>
>> The locked context here would be magnitudes shorter and thus
>> everything more responsive, BUT I didn't tested that sod it could
>> be that I'm miss a check we do, will quickly test it on Monday.
>>
>> Third way would be to hold a possible free list "bitmap" of VMIDs
>> in your program which you use to determine the next free. This
>> would be synced with the real one from time to time, not that nice
>> but a possibility.
>>
>> Out of interest, in what language do you make this? And what's the
>> goal, if I may ask?
>>
>> cheers, Thomas
>>
>>
>>> On 10.02.2016 10:08, Mohamed Sadok Ben Jazia wrote:
>>> Hello list, I'm creating LXC container using the API on proxmox
>>> 4.1 I use get("/cluster/nextid") to get the next free id to use.
>>> The issue i encountered is when i do simultaneous number of API
>>> calls I get proxmox trying to create containers with the same ID
>>> which
>> gave me
>>> this error
>>>
>>> trying to aquire lock...TASK ERROR: can't lock file
>>> '/run/lock/lxc/pve-config-147.lock' - got timeout
>>>
>>> are there a standard way to deal with this?
>>>
>>>
>>> _______________________________________________ pve-user mailing
>>> list pve-user at pve.proxmox.com <mailto:pve-user at pve.proxmox.com>
>>> http://pve.proxmox.com/cgi-bin/mailman/listinfo/pve-user
>>
>> _______________________________________________ pve-user mailing
>> list pve-user at pve.proxmox.com <mailto:pve-user at pve.proxmox.com>
>> http://pve.proxmox.com/cgi-bin/mailman/listinfo/pve-user
>>
>>
>>
>>
>> _______________________________________________ pve-user mailing
>> list pve-user at pve.proxmox.com
>> http://pve.proxmox.com/cgi-bin/mailman/listinfo/pve-user
> -----BEGIN PGP SIGNATURE-----
> Version: GnuPG v2
>
> iQIcBAEBCAAGBQJWvxUvAAoJEATlfMwh0PH8/oQQANBW5OW1RBOtuBrGaqn1yhsx
> Xlc0aRs063jSLcQlGzMAGMkE1RLtR6TQkObSUBTa5g3H/rmWCXbo1vV9IfPZ4Qmu
> osyqxRBiTO7QwALu4UmZhTmoGruHBOzwQNed9F37jRXO3xKYTgiO6zpjJGaDouci
> tc8AWsawvvSZ9t3YggE3JJwMH+AmSiZTsyqlTCIQ72ojxIIxYX09vKG6OHf/Xes8
> Rx5WPbjXZGs9O/upwlNuPKpOYI0dQr5ldPGHDwBn5XNTwTtcn5KYJLMXgbKH93O4
> OAiEtaom0diVFF/Xef4emjfVGtOF3deesJh+IhcT1dJLnk52zfULFQw3t6UJzrRk
> GACvt+/O5vvJ5yWmnRawcFCpiAA1Yji9KObImx/rC6muPd2Jmzqhq14041lhmR8u
> +w3lKrktRjaHRGCGFI4OKOlBdzbFBteptBfeqGxM1Wz6WEppKzAI5kbg+MClqi3R
> kDluwK7mfKQuZYLnf4Qef2oXJ4Yqi2zkomR8e40xz7sTftf8QDovORVekvakkLxm
> a/WglVhfOWs2UPa1HRUjwnY/dM/pxN+fbnd4rFJmfIWbYWsYjrGG0b5ddeWIL3x2
> Ho0kk6Aik3o7T37syyW52RXJ61A9NyebN2j5jsmZ2khsWysVS/VjN9Uivec8St7a
> dM9W6CLmudGvV8kZvK7Y
> =HC9T
> -----END PGP SIGNATURE-----
> <0x21D0F1FC.asc>
> _______________________________________________
> pve-user mailing list
> pve-user at pve.proxmox.com
> http://pve.proxmox.com/cgi-bin/mailman/listinfo/pve-user
More information about the pve-user
mailing list