[vbox-dev] deleteConfig in VirtualBox 4.3.x
Klaus Espenlaub
klaus.espenlaub at oracle.com
Thu Mar 6 14:31:27 UTC 2014
On 06.03.2014 14:55, john alexander sanabria ordonez wrote:
> well, what could I say... your answer do not solve the problem.
All I can say is that I've seen working Java code which deletes VMs,
based on this sample. The language should play no role (unless there is
a bug), it's all the same API behind it, whether it's used by C++ (e.g.
VBoxManage) or anything else.
Let's approach it from a different angle - can you provide VBoxSVC.log
(location is platform dependent, usually in the .VirtualBox subdirectory
of the home directory) for a case where you just produced the hang? If
you make sure that no VirtualBox related activities (no GUI, ...) are
running before your test it'd avoid unrelated log messages.
Klaus
>
>
> On 6 March 2014 05:35, Klaus Espenlaub <klaus.espenlaub at oracle.com
> <mailto:klaus.espenlaub at oracle.com>> wrote:
>
> John,
>
> please stay on the mailing list. This is a public service, if you
> want personal support I have to ask for your Oracle customer
> support identifier...
>
>
> On 05.03.2014 20:16, john alexander sanabria ordonez wrote:
>> Hi Klaus,
>>
>> I read the documentation but (from my experience) it does not
>> behave as I was expecting. For instance, I do understand that the
>> deleteConfig method does not reach the 100 percent if there is an
>> error but why the library does not throw an exception informing
>> about it. In addition, why if the previous method (delete) works
>> with no errors this time "deleteConfig" will generate any error?
> The asynchronous part of the deletion might fail (and that's
> exactly the same as in older versions, just the method name has
> been changed), and your code will simply hang as it doesn't
> properly check for completion. Failed async operations usually
> will never reach 100% - why should they, they failed before.
>
> These failures will NOT cause exceptions from the progress object
> method calls, you have to check for them explicitly. It's been
> always like that, and there's lots of sample code out there which
> shows how to do this properly.
>
>> About the wait, this is the actual code
>>
>> out << "To delete "
>> mediums.each {
>> out << it.name <http://it.name> + " "
>> }
>> def iprogress = machine.delete(mediums)
>> out << "\nDeleting "
>> while (iprogress.percent != 100) {
> Do not check for 100%, check if iprogress.getCompletion returns
> non-zero (dunno if the true/false stuff makes it all the way to
> Groovy).
>> out << "."
>> out.flush()
>> Thread.sleep(500)
> Again, you're ignoring that you should wait using the method from
> the progress object, iprogress.waitForCompletion(500) as this
> gives the API middleware the opportunity to run its event queues
> and so on.
>
> PLEASE have a look at the Java sample (TestVBox.java), it contains
> many useful code sequences which are verified to be sensible (not
> that all of them go into extreme error checking, but at least do
> the bare minimum necessary to avoid hangs).
>
> Klaus
>
>> }
>> John,
>>
>>
>>
>> On 4 March 2014 13:55, Klaus Espenlaub
>> <klaus.espenlaub at oracle.com <mailto:klaus.espenlaub at oracle.com>>
>> wrote:
>>
>> Hi,
>>
>> On 04.03.2014 14:44, john alexander sanabria ordonez wrote:
>> > Hi,
>> >
>> > I wrote a Groovy script to use the Java binding to manage
>> virtual
>> > machines through the VirtualBox web service interface. My
>> script worked
>> > well in VirtualBox 4.2.x but when I updated to version 4.3
>> I noted that
>> > my unregistervm procedure does not work. First, the
>> IMachine.delete
>> > method was not available and it was changed by
>> IMachine.deleteConfig
>> > which basically works similarly to the delete method. I
>> made the
>> > corresponding modifications however it does not delete the
>> mediums
>> > returned by the IMachine.unregister method.
>>
>> This is documented in the SDK reference, for the API changes
>> in 4.3.
>> >
>> > My unregistervm methods looks similar to this
>> >
>> > def mediums =
>> machine.unregister(CleanupMode.DetachAllReturnHardDisksOnly)
>> > def iprogress = machine.deleteConfig(mediums)
>> > while (iprogress.percent < 100) {
>> > out << "."
>> > }
>> >
>> > and it never ends because the iprogress.percent never
>> reaches 100.
>> >
>> > What I am doing wrong? Thanks for your help.
>>
>> The percentage will never reach 100 if there is any error.
>> You should be
>> adding more flexible progress checking (there should be
>> enough working
>> samples out there, including the Java sample code). What you
>> have is
>> asking for hangs. Also, you should at least have some wait for
>> completion (if you prefer with very low timeout), as
>> otherwise you're
>> simply burning CPU cycles.
>>
>> Klaus
>>
>> >
>> > John,
>> >
>>
-------------- next part --------------
An HTML attachment was scrubbed...
URL: http://www.virtualbox.org/pipermail/vbox-dev/attachments/20140306/3c453512/attachment.html
More information about the vbox-dev
mailing list