Hi Daniel,
Many thanks!!
I will test openebula_drive patch and give you feedback soon.
BTW, our production OpenNebula instance is in 3.2 now, so, maybe the occ_client patch will have no much effect for our instance....


Best regards,
Felix Lee ~

On 06/29/2012 04:19 PM, Daniel Molina wrote:
Hi Felix

On 25 June 2012 05:29, Felix Lee <[email protected]> wrote:
Dear All,
I am new with deltacloud, for integration requirement, we are evaluating
deltacloud solution.
Here, I don't know if anybody ever reported this issue, however, recently, I
noticed deltacloud is in poor performance with our open nebula instance.
Usually, our opennebula always runs over 500 VM instances, and while we use
deltacloud to query instances, it will take pretty long time to get all
results.


Here are some examples:

With "deltacloudc instances" command:

real    20m19.293s
user    0m7.842s
sys     0m0.681s


With curl to deltacloud rest api "/api/instances":
real    4m35.891s
user    0m0.002s
sys     0m0.005s

With curl to opennebula OCCI interface "/compute" directly via the same
host:
real    0m1.249s
user    0m0.001s
sys     0m0.006s


In OpenNebula 3.2 when you retrieve the pool of instances through OCCI
no extended information is included, hence you have to do one more
request per instance to retrieve this information. In OpenNebula 3.4 a
verbose option was included for OCCI pools. You can use GET
/compute?verbose=true instead of GET /compute and the pool will
contain extended information for each element.

I have included a diff with the changes that would be required to
support this param in the deltacloud driver, but I didn't test it.
This should fix your performance issues.

Also using Nokogiri instead of REXML should improve the driver performance.

Hope this helps


diff --git a/server/lib/deltacloud/drivers/opennebula/occi_client.rb
b/server/lib/deltacloud/drivers/op
index 8688995..7d71962 100644
--- a/server/lib/deltacloud/drivers/opennebula/occi_client.rb
+++ b/server/lib/deltacloud/drivers/opennebula/occi_client.rb
@@ -83,8 +83,8 @@ module OCCIClient
      ######################################################################
      # Retieves the pool of Virtual Machines
      ######################################################################
-    def get_vms
-      get('/compute')
+    def get_vms(verbose=false)
+      get('/compute', verbose)
      end

      ######################################################################
@@ -196,8 +196,8 @@ module OCCIClient
      ######################################################################
      # Retieves the pool of Images owned by the user
      ######################################################################
-    def get_images
-      get('/storage')
+    def get_images(verbose=false)
+      get('/storage', verbose)
      end


@@ -275,10 +275,16 @@ module OCCIClient

      private

-    def get(path)
+    def get(path, verbose=false)
        url = URI.parse(@endpoint+path)
+
+      params = []
+      params << "verbose=true" if verbose
+      params << "#{url.query}" if url.query
+
        path = url.path
-      path << "?#{url.query}" if url.query
+      path << "?#{params.join('&')}"
+
        req = Net::HTTP::Get.new(path)

        do_request(url, req)
diff --git a/server/lib/deltacloud/drivers/opennebula/opennebula_driver.rb
b/server/lib/deltacloud/driv
index cc1f13e..7d2385f 100644
--- a/server/lib/deltacloud/drivers/opennebula/opennebula_driver.rb
+++ b/server/lib/deltacloud/drivers/opennebula/opennebula_driver.rb
@@ -84,13 +84,11 @@ class OpennebulaDriver < Deltacloud::BaseDriver
    def images(credentials, opts=nil)
      occi_client = new_client(credentials)

-    xml = treat_response(occi_client.get_images)
+    xml = treat_response(occi_client.get_images(true))

      # TBD Add extended info in the pool
      images = REXML::Document.new(xml).root.elements.map do |d|
-      im_id = d.attributes['href'].split("/").last
-      storage = treat_response(occi_client.get_image(im_id))
-      convert_image(storage, credentials)
+      convert_image(d, credentials)
      end
    end

@@ -156,13 +154,11 @@ class OpennebulaDriver < Deltacloud::BaseDriver
    def instances(credentials, opts=nil)
      occi_client = new_client(credentials)

-    xml = treat_response(occi_client.get_vms)
+    xml = treat_response(occi_client.get_vms(true))

      # TBD Add extended info in the pool
      instances = REXML::Document.new(xml).root.elements.map do |d|
-      vm_id = d.attributes['href'].split("/").last
-      computexml = treat_response(occi_client.get_vm(vm_id))
-      convert_instance(computexml, credentials)
+      convert_instance(d, credentials)
      end

      instances = filter_on( instances, :state, opts )


--
Felix Lee                               Academia Sinica Grid & Cloud.
Tel: +886-2-27898308
Office: Room P111, Institute of Physics, 128 Academia Road, Section 2, Nankang, Taipei 115, Taiwan


Reply via email to