From Christopher.Morrissey at netapp.com Thu Dec 20 10:18:03 2012 Content-Type: multipart/mixed; boundary="===============6237614951939780061==" MIME-Version: 1.0 From: Morrissey, Christopher To: devel at ovirt.org Subject: [Engine-devel] FW: Querying for and registering unknown disk images on a storage domain Date: Thu, 20 Dec 2012 15:18:02 +0000 Message-ID: --===============6237614951939780061== Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: quoted-printable --_000_D290AD8432118048947689BA3AE8A9B3094E3FDCSACEXCMBX04PRDh_ Content-Type: text/plain; charset=3D"us-ascii" Content-Transfer-Encoding: quoted-printable Hi All, I've been working on a bit of functionality for the engine that will allow = =3D a user to query a domain for new disk images (GetUnregisteredImagesQuery) f= =3D or which the engine was previously unaware and a separate command to regist= =3D er those images (ImportImageCommand). These commands will be exposed throug= =3D h the REST API. This functionality is needed as we are developing an extension/plugin to oV= =3D irt that will allow a NetApp storage controller to handle cloning the actua= =3D l disks outside of oVirt and need to import them once they are cloned. We'l= =3D l be using other existing APIs to attach the disk to the necessary VM once = =3D the disk is cloned. On the NetApp side, we'll ensure the disk is coalesced = =3D before cloning so as to avoid the issues of registering snapshots. GetUnregisteredImagesQuery will be accessible through the disks resource co= =3D llection on a storage domain. A "disks" resource collection does not yet ex= =3D ist and will need to be added. To access the unregistered images, a paramet= =3D er (maybe "unregistered=3D3Dtrue") would be passed. So the path to "GET" th= e =3D unregistered disk images on a domain would be something like /api/storagedo= =3D mains/f0dbcb33-69d3-4899-9352-8e8a02f01bbd/disks?unregistered=3D3Dtrue. Thi= s =3D will return a list of disk images that can be each used as input to the Imp= =3D ortImageCommand to get them added to oVirt. ImportImageCommand will be accessible through "POST"ing a disk to /api/disk= =3D s?import=3D3Dtrue. The disk will be added to the oVirt DB based on the info= rm=3D ation supplied and afterward would be available to attach to a VM. When querying for unregistered disk images, the GetUnregisteredImagesQuery = =3D command will use the getImagesList() VDSM command. Currently this only repo= =3D rts the GUIDs of all disk images in a domain. I had been using the getVolum= =3D esList() and getVolumeInfo() VDSM commands to fill in the information so th= =3D at valid disk image objects could be registered in oVirt. It seems these tw= =3D o functions are set to be removed since they are too invasive into the inte= =3D rnal VDSM workings. The VDSM team will need to either return more informati= =3D on about each disk as part of the getImagesList() function or add a new fun= =3D ction getImageInfo() that will give the same information for a given image = =3D GUID. Note that much of this work had originally been submitted under patch http:= =3D //gerrit.ovirt.org/#/c/9603/. After several reviews it was found to be lack= =3D ing in its design and was using deprecated APIs that did not yet have repla= =3D cements. I'm reworking the code now to conform to this design and asking fo= =3D r further input from the VDSM, core, and restapi teams to ensure we can get= =3D this done quickly and correctly as it is needed for the 3.2 release. -Chris Chris Morrissey Software Engineer NetApp Inc. 919.476.4428 --_000_D290AD8432118048947689BA3AE8A9B3094E3FDCSACEXCMBX04PRDh_ Content-Type: text/html; charset=3D"us-ascii" Content-Transfer-Encoding: quoted-printable

Hi All,

 

I’ve been working on a bit of functionality = fo=3D r the engine that will allow a user to query a domain for new disk images (= =3D GetUnregisteredImagesQuery) for which the engine was previously unaware and= =3D a separate command to register those images (ImportImageCommand). These commands will be exposed through the REST API.= =3D

 

This functionality is needed as we are developing = an=3D extension/plugin to oVirt that will allow a NetApp storage controller to h= =3D andle cloning the actual disks outside of oVirt and need to import them onc= =3D e they are cloned. We’ll be using other existing APIs to attach the disk to the necessary VM once the disk i= =3D s cloned. On the NetApp side, we’ll ensure the disk is coalesced befo= =3D re cloning so as to avoid the issues of registering snapshots.

 

GetUnregisteredImagesQuery will be accessible thro= ug=3D h the disks resource collection on a storage domain. A “disks” = =3D resource collection does not yet exist and will need to be added. To access= =3D the unregistered images, a parameter (maybe “unregistered=3D3Dtrue&#= 82=3D 21;) would be passed. So the path to “GET” the unregistered disk im= =3D ages on a domain would be something like /api/storagedomains/f0dbcb33-69d3-= =3D 4899-9352-8e8a02f01bbd/disks?unregistered=3D3Dtrue. This will return a list= o=3D f disk images that can be each used as input to the ImportImageCommand to get them added to oVirt.

 

ImportImageCommand will be accessible through R= 20=3D ;POST”ing a disk to /api/disks?import=3D3Dtrue. The disk will be adde= d =3D to the oVirt DB based on the information supplied and afterward would be av= =3D ailable to attach to a VM.

 

When querying for unregistered disk images, the Ge= tU=3D nregisteredImagesQuery command will use the getImagesList() VDSM command. C= =3D urrently this only reports the GUIDs of all disk images in a domain. I had = =3D been using the getVolumesList() and getVolumeInfo() VDSM commands to fill in the information so that valid dis= =3D k image objects could be registered in oVirt. It seems these two functions = =3D are set to be removed since they are too invasive into the internal VDSM wo= =3D rkings. The VDSM team will need to either return more information about each disk as part of the getImages= =3D List() function or add a new function getImageInfo() that will give the sam= =3D e information for a given image GUID.

 

Note that much of this work had originally been su= bm=3D itted under patch http://gerrit.ovirt.org/#/c= /9=3D 603/. After several reviews it was found to be lacking in its design an= =3D d was using deprecated APIs that did not yet have replacements. I’m r= =3D eworking the code now to conform to this design and asking for further input from the VDSM, core, and restapi teams= =3D to ensure we can get this done quickly and correctly as it is needed for t= =3D he 3.2 release.

 

-Chris

 

Chris Morrissey

Software Engineer

NetApp Inc.

919.476.4428

 

--_000_D290AD8432118048947689BA3AE8A9B3094E3FDCSACEXCMBX04PRDh_-- --===============6237614951939780061== Content-Type: multipart/alternative MIME-Version: 1.0 Content-Transfer-Encoding: base64 Content-Disposition: attachment; filename="attachment.bin" LS1fMDAwX0QyOTBBRDg0MzIxMTgwNDg5NDc2ODlCQTNBRThBOUIzMDk0RTNGRENTQUNFWENNQlgw NFBSRGhfCkNvbnRlbnQtVHlwZTogdGV4dC9wbGFpbjsgY2hhcnNldD0idXMtYXNjaWkiCkNvbnRl bnQtVHJhbnNmZXItRW5jb2Rpbmc6IHF1b3RlZC1wcmludGFibGUKCkhpIEFsbCwKCkkndmUgYmVl biB3b3JraW5nIG9uIGEgYml0IG9mIGZ1bmN0aW9uYWxpdHkgZm9yIHRoZSBlbmdpbmUgdGhhdCB3 aWxsIGFsbG93ID0KYSB1c2VyIHRvIHF1ZXJ5IGEgZG9tYWluIGZvciBuZXcgZGlzayBpbWFnZXMg KEdldFVucmVnaXN0ZXJlZEltYWdlc1F1ZXJ5KSBmPQpvciB3aGljaCB0aGUgZW5naW5lIHdhcyBw cmV2aW91c2x5IHVuYXdhcmUgYW5kIGEgc2VwYXJhdGUgY29tbWFuZCB0byByZWdpc3Q9CmVyIHRo b3NlIGltYWdlcyAoSW1wb3J0SW1hZ2VDb21tYW5kKS4gVGhlc2UgY29tbWFuZHMgd2lsbCBiZSBl eHBvc2VkIHRocm91Zz0KaCB0aGUgUkVTVCBBUEkuCgpUaGlzIGZ1bmN0aW9uYWxpdHkgaXMgbmVl ZGVkIGFzIHdlIGFyZSBkZXZlbG9waW5nIGFuIGV4dGVuc2lvbi9wbHVnaW4gdG8gb1Y9CmlydCB0 aGF0IHdpbGwgYWxsb3cgYSBOZXRBcHAgc3RvcmFnZSBjb250cm9sbGVyIHRvIGhhbmRsZSBjbG9u aW5nIHRoZSBhY3R1YT0KbCBkaXNrcyBvdXRzaWRlIG9mIG9WaXJ0IGFuZCBuZWVkIHRvIGltcG9y dCB0aGVtIG9uY2UgdGhleSBhcmUgY2xvbmVkLiBXZSdsPQpsIGJlIHVzaW5nIG90aGVyIGV4aXN0 aW5nIEFQSXMgdG8gYXR0YWNoIHRoZSBkaXNrIHRvIHRoZSBuZWNlc3NhcnkgVk0gb25jZSA9CnRo ZSBkaXNrIGlzIGNsb25lZC4gT24gdGhlIE5ldEFwcCBzaWRlLCB3ZSdsbCBlbnN1cmUgdGhlIGRp c2sgaXMgY29hbGVzY2VkID0KYmVmb3JlIGNsb25pbmcgc28gYXMgdG8gYXZvaWQgdGhlIGlzc3Vl cyBvZiByZWdpc3RlcmluZyBzbmFwc2hvdHMuCgpHZXRVbnJlZ2lzdGVyZWRJbWFnZXNRdWVyeSB3 aWxsIGJlIGFjY2Vzc2libGUgdGhyb3VnaCB0aGUgZGlza3MgcmVzb3VyY2UgY289CmxsZWN0aW9u IG9uIGEgc3RvcmFnZSBkb21haW4uIEEgImRpc2tzIiByZXNvdXJjZSBjb2xsZWN0aW9uIGRvZXMg bm90IHlldCBleD0KaXN0IGFuZCB3aWxsIG5lZWQgdG8gYmUgYWRkZWQuIFRvIGFjY2VzcyB0aGUg dW5yZWdpc3RlcmVkIGltYWdlcywgYSBwYXJhbWV0PQplciAobWF5YmUgInVucmVnaXN0ZXJlZD0z RHRydWUiKSB3b3VsZCBiZSBwYXNzZWQuIFNvIHRoZSBwYXRoIHRvICJHRVQiIHRoZSA9CnVucmVn aXN0ZXJlZCBkaXNrIGltYWdlcyBvbiBhIGRvbWFpbiB3b3VsZCBiZSBzb21ldGhpbmcgbGlrZSAv YXBpL3N0b3JhZ2Vkbz0KbWFpbnMvZjBkYmNiMzMtNjlkMy00ODk5LTkzNTItOGU4YTAyZjAxYmJk L2Rpc2tzP3VucmVnaXN0ZXJlZD0zRHRydWUuIFRoaXMgPQp3aWxsIHJldHVybiBhIGxpc3Qgb2Yg ZGlzayBpbWFnZXMgdGhhdCBjYW4gYmUgZWFjaCB1c2VkIGFzIGlucHV0IHRvIHRoZSBJbXA9Cm9y dEltYWdlQ29tbWFuZCB0byBnZXQgdGhlbSBhZGRlZCB0byBvVmlydC4KCkltcG9ydEltYWdlQ29t bWFuZCB3aWxsIGJlIGFjY2Vzc2libGUgdGhyb3VnaCAiUE9TVCJpbmcgYSBkaXNrIHRvIC9hcGkv ZGlzaz0Kcz9pbXBvcnQ9M0R0cnVlLiBUaGUgZGlzayB3aWxsIGJlIGFkZGVkIHRvIHRoZSBvVmly dCBEQiBiYXNlZCBvbiB0aGUgaW5mb3JtPQphdGlvbiBzdXBwbGllZCBhbmQgYWZ0ZXJ3YXJkIHdv dWxkIGJlIGF2YWlsYWJsZSB0byBhdHRhY2ggdG8gYSBWTS4KCldoZW4gcXVlcnlpbmcgZm9yIHVu cmVnaXN0ZXJlZCBkaXNrIGltYWdlcywgdGhlIEdldFVucmVnaXN0ZXJlZEltYWdlc1F1ZXJ5ID0K Y29tbWFuZCB3aWxsIHVzZSB0aGUgZ2V0SW1hZ2VzTGlzdCgpIFZEU00gY29tbWFuZC4gQ3VycmVu dGx5IHRoaXMgb25seSByZXBvPQpydHMgdGhlIEdVSURzIG9mIGFsbCBkaXNrIGltYWdlcyBpbiBh IGRvbWFpbi4gSSBoYWQgYmVlbiB1c2luZyB0aGUgZ2V0Vm9sdW09CmVzTGlzdCgpIGFuZCBnZXRW b2x1bWVJbmZvKCkgVkRTTSBjb21tYW5kcyB0byBmaWxsIGluIHRoZSBpbmZvcm1hdGlvbiBzbyB0 aD0KYXQgdmFsaWQgZGlzayBpbWFnZSBvYmplY3RzIGNvdWxkIGJlIHJlZ2lzdGVyZWQgaW4gb1Zp cnQuIEl0IHNlZW1zIHRoZXNlIHR3PQpvIGZ1bmN0aW9ucyBhcmUgc2V0IHRvIGJlIHJlbW92ZWQg c2luY2UgdGhleSBhcmUgdG9vIGludmFzaXZlIGludG8gdGhlIGludGU9CnJuYWwgVkRTTSB3b3Jr aW5ncy4gVGhlIFZEU00gdGVhbSB3aWxsIG5lZWQgdG8gZWl0aGVyIHJldHVybiBtb3JlIGluZm9y bWF0aT0Kb24gYWJvdXQgZWFjaCBkaXNrIGFzIHBhcnQgb2YgdGhlIGdldEltYWdlc0xpc3QoKSBm dW5jdGlvbiBvciBhZGQgYSBuZXcgZnVuPQpjdGlvbiBnZXRJbWFnZUluZm8oKSB0aGF0IHdpbGwg Z2l2ZSB0aGUgc2FtZSBpbmZvcm1hdGlvbiBmb3IgYSBnaXZlbiBpbWFnZSA9CkdVSUQuCgpOb3Rl IHRoYXQgbXVjaCBvZiB0aGlzIHdvcmsgaGFkIG9yaWdpbmFsbHkgYmVlbiBzdWJtaXR0ZWQgdW5k ZXIgcGF0Y2ggaHR0cDo9Ci8vZ2Vycml0Lm92aXJ0Lm9yZy8jL2MvOTYwMy8uIEFmdGVyIHNldmVy YWwgcmV2aWV3cyBpdCB3YXMgZm91bmQgdG8gYmUgbGFjaz0KaW5nIGluIGl0cyBkZXNpZ24gYW5k IHdhcyB1c2luZyBkZXByZWNhdGVkIEFQSXMgdGhhdCBkaWQgbm90IHlldCBoYXZlIHJlcGxhPQpj ZW1lbnRzLiBJJ20gcmV3b3JraW5nIHRoZSBjb2RlIG5vdyB0byBjb25mb3JtIHRvIHRoaXMgZGVz aWduIGFuZCBhc2tpbmcgZm89CnIgZnVydGhlciBpbnB1dCBmcm9tIHRoZSBWRFNNLCBjb3JlLCBh bmQgcmVzdGFwaSB0ZWFtcyB0byBlbnN1cmUgd2UgY2FuIGdldD0KIHRoaXMgZG9uZSBxdWlja2x5 IGFuZCBjb3JyZWN0bHkgYXMgaXQgaXMgbmVlZGVkIGZvciB0aGUgMy4yIHJlbGVhc2UuCgotQ2hy aXMKCkNocmlzIE1vcnJpc3NleQpTb2Z0d2FyZSBFbmdpbmVlcgpOZXRBcHAgSW5jLgo5MTkuNDc2 LjQ0MjgKCgotLV8wMDBfRDI5MEFEODQzMjExODA0ODk0NzY4OUJBM0FFOEE5QjMwOTRFM0ZEQ1NB Q0VYQ01CWDA0UFJEaF8KQ29udGVudC1UeXBlOiB0ZXh0L2h0bWw7IGNoYXJzZXQ9InVzLWFzY2lp IgpDb250ZW50LVRyYW5zZmVyLUVuY29kaW5nOiBxdW90ZWQtcHJpbnRhYmxlCgo8aHRtbCB4bWxu czp2PTNEInVybjpzY2hlbWFzLW1pY3Jvc29mdC1jb206dm1sIiB4bWxuczpvPTNEInVybjpzY2hl bWFzLW1pY3I9Cm9zb2Z0LWNvbTpvZmZpY2U6b2ZmaWNlIiB4bWxuczp3PTNEInVybjpzY2hlbWFz LW1pY3Jvc29mdC1jb206b2ZmaWNlOndvcmQiID0KeG1sbnM6bT0zRCJodHRwOi8vc2NoZW1hcy5t aWNyb3NvZnQuY29tL29mZmljZS8yMDA0LzEyL29tbWwiIHhtbG5zPTNEImh0dHA6PQovL3d3dy53 My5vcmcvVFIvUkVDLWh0bWw0MCI+CjxoZWFkPgo8bWV0YSBodHRwLWVxdWl2PTNEIkNvbnRlbnQt VHlwZSIgY29udGVudD0zRCJ0ZXh0L2h0bWw7IGNoYXJzZXQ9M0R1cy1hc2NpaSI9Cj4KPG1ldGEg bmFtZT0zRCJHZW5lcmF0b3IiIGNvbnRlbnQ9M0QiTWljcm9zb2Z0IFdvcmQgMTQgKGZpbHRlcmVk IG1lZGl1bSkiPgo8c3R5bGU+PCEtLQovKiBGb250IERlZmluaXRpb25zICovCkBmb250LWZhY2UK CXtmb250LWZhbWlseTpDYWxpYnJpOwoJcGFub3NlLTE6MiAxNSA1IDIgMiAyIDQgMyAyIDQ7fQov KiBTdHlsZSBEZWZpbml0aW9ucyAqLwpwLk1zb05vcm1hbCwgbGkuTXNvTm9ybWFsLCBkaXYuTXNv Tm9ybWFsCgl7bWFyZ2luOjBpbjsKCW1hcmdpbi1ib3R0b206LjAwMDFwdDsKCWZvbnQtc2l6ZTox MS4wcHQ7Cglmb250LWZhbWlseToiQ2FsaWJyaSIsInNhbnMtc2VyaWYiO30KYTpsaW5rLCBzcGFu Lk1zb0h5cGVybGluawoJe21zby1zdHlsZS1wcmlvcml0eTo5OTsKCWNvbG9yOmJsdWU7Cgl0ZXh0 LWRlY29yYXRpb246dW5kZXJsaW5lO30KYTp2aXNpdGVkLCBzcGFuLk1zb0h5cGVybGlua0ZvbGxv d2VkCgl7bXNvLXN0eWxlLXByaW9yaXR5Ojk5OwoJY29sb3I6cHVycGxlOwoJdGV4dC1kZWNvcmF0 aW9uOnVuZGVybGluZTt9CnNwYW4uRW1haWxTdHlsZTE3Cgl7bXNvLXN0eWxlLXR5cGU6cGVyc29u YWw7Cglmb250LWZhbWlseToiQ2FsaWJyaSIsInNhbnMtc2VyaWYiOwoJY29sb3I6d2luZG93dGV4 dDt9CnNwYW4uRW1haWxTdHlsZTE4Cgl7bXNvLXN0eWxlLXR5cGU6cGVyc29uYWw7Cglmb250LWZh bWlseToiQ2FsaWJyaSIsInNhbnMtc2VyaWYiOwoJY29sb3I6IzFGNDk3RDt9CnNwYW4uRW1haWxT dHlsZTE5Cgl7bXNvLXN0eWxlLXR5cGU6cGVyc29uYWwtcmVwbHk7Cglmb250LWZhbWlseToiQ2Fs aWJyaSIsInNhbnMtc2VyaWYiOwoJY29sb3I6IzFGNDk3RDt9Ci5Nc29DaHBEZWZhdWx0Cgl7bXNv LXN0eWxlLXR5cGU6ZXhwb3J0LW9ubHk7Cglmb250LXNpemU6MTAuMHB0O30KQHBhZ2UgV29yZFNl Y3Rpb24xCgl7c2l6ZTo4LjVpbiAxMS4waW47CgltYXJnaW46MS4waW4gMS4waW4gMS4waW4gMS4w aW47fQpkaXYuV29yZFNlY3Rpb24xCgl7cGFnZTpXb3JkU2VjdGlvbjE7fQotLT48L3N0eWxlPjwh LS1baWYgZ3RlIG1zbyA5XT48eG1sPgo8bzpzaGFwZWRlZmF1bHRzIHY6ZXh0PTNEImVkaXQiIHNw aWRtYXg9M0QiMTAyNiIgLz4KPC94bWw+PCFbZW5kaWZdLS0+PCEtLVtpZiBndGUgbXNvIDldPjx4 bWw+CjxvOnNoYXBlbGF5b3V0IHY6ZXh0PTNEImVkaXQiPgo8bzppZG1hcCB2OmV4dD0zRCJlZGl0 IiBkYXRhPTNEIjEiIC8+CjwvbzpzaGFwZWxheW91dD48L3htbD48IVtlbmRpZl0tLT4KPC9oZWFk Pgo8Ym9keSBsYW5nPTNEIkVOLVVTIiBsaW5rPTNEImJsdWUiIHZsaW5rPTNEInB1cnBsZSI+Cjxk aXYgY2xhc3M9M0QiV29yZFNlY3Rpb24xIj4KPHAgY2xhc3M9M0QiTXNvTm9ybWFsIj5IaSBBbGws PG86cD48L286cD48L3A+CjxwIGNsYXNzPTNEIk1zb05vcm1hbCI+PG86cD4mbmJzcDs8L286cD48 L3A+CjxwIGNsYXNzPTNEIk1zb05vcm1hbCI+SSYjODIxNzt2ZSBiZWVuIHdvcmtpbmcgb24gYSBi aXQgb2YgZnVuY3Rpb25hbGl0eSBmbz0KciB0aGUgZW5naW5lIHRoYXQgd2lsbCBhbGxvdyBhIHVz ZXIgdG8gcXVlcnkgYSBkb21haW4gZm9yIG5ldyBkaXNrIGltYWdlcyAoPQpHZXRVbnJlZ2lzdGVy ZWRJbWFnZXNRdWVyeSkgZm9yIHdoaWNoIHRoZSBlbmdpbmUgd2FzIHByZXZpb3VzbHkgdW5hd2Fy ZSBhbmQ9CiBhIHNlcGFyYXRlIGNvbW1hbmQgdG8gcmVnaXN0ZXIgdGhvc2UgaW1hZ2VzCiAoSW1w b3J0SW1hZ2VDb21tYW5kKS4gVGhlc2UgY29tbWFuZHMgd2lsbCBiZSBleHBvc2VkIHRocm91Z2gg dGhlIFJFU1QgQVBJLj0KPG86cD48L286cD48L3A+CjxwIGNsYXNzPTNEIk1zb05vcm1hbCI+PG86 cD4mbmJzcDs8L286cD48L3A+CjxwIGNsYXNzPTNEIk1zb05vcm1hbCI+VGhpcyBmdW5jdGlvbmFs aXR5IGlzIG5lZWRlZCBhcyB3ZSBhcmUgZGV2ZWxvcGluZyBhbj0KIGV4dGVuc2lvbi9wbHVnaW4g dG8gb1ZpcnQgdGhhdCB3aWxsIGFsbG93IGEgTmV0QXBwIHN0b3JhZ2UgY29udHJvbGxlciB0byBo PQphbmRsZSBjbG9uaW5nIHRoZSBhY3R1YWwgZGlza3Mgb3V0c2lkZSBvZiBvVmlydCBhbmQgbmVl ZCB0byBpbXBvcnQgdGhlbSBvbmM9CmUgdGhleSBhcmUgY2xvbmVkLiBXZSYjODIxNztsbCBiZSB1 c2luZwogb3RoZXIgZXhpc3RpbmcgQVBJcyB0byBhdHRhY2ggdGhlIGRpc2sgdG8gdGhlIG5lY2Vz c2FyeSBWTSBvbmNlIHRoZSBkaXNrIGk9CnMgY2xvbmVkLiBPbiB0aGUgTmV0QXBwIHNpZGUsIHdl JiM4MjE3O2xsIGVuc3VyZSB0aGUgZGlzayBpcyBjb2FsZXNjZWQgYmVmbz0KcmUgY2xvbmluZyBz byBhcyB0byBhdm9pZCB0aGUgaXNzdWVzIG9mIHJlZ2lzdGVyaW5nIHNuYXBzaG90cy48bzpwPjwv bzpwPjwvPQpwPgo8cCBjbGFzcz0zRCJNc29Ob3JtYWwiPjxvOnA+Jm5ic3A7PC9vOnA+PC9wPgo8 cCBjbGFzcz0zRCJNc29Ob3JtYWwiPkdldFVucmVnaXN0ZXJlZEltYWdlc1F1ZXJ5IHdpbGwgYmUg YWNjZXNzaWJsZSB0aHJvdWc9CmggdGhlIGRpc2tzIHJlc291cmNlIGNvbGxlY3Rpb24gb24gYSBz dG9yYWdlIGRvbWFpbi4gQSAmIzgyMjA7ZGlza3MmIzgyMjE7ID0KcmVzb3VyY2UgY29sbGVjdGlv biBkb2VzIG5vdCB5ZXQgZXhpc3QgYW5kIHdpbGwgbmVlZCB0byBiZSBhZGRlZC4gVG8gYWNjZXNz PQogdGhlIHVucmVnaXN0ZXJlZCBpbWFnZXMsIGEgcGFyYW1ldGVyIChtYXliZSAmIzgyMjA7dW5y ZWdpc3RlcmVkPTNEdHJ1ZSYjODI9CjIxOykKIHdvdWxkIGJlIHBhc3NlZC4gU28gdGhlIHBhdGgg dG8gJiM4MjIwO0dFVCYjODIyMTsgdGhlIHVucmVnaXN0ZXJlZCBkaXNrIGltPQphZ2VzIG9uIGEg ZG9tYWluIHdvdWxkIGJlIHNvbWV0aGluZyBsaWtlIC9hcGkvc3RvcmFnZWRvbWFpbnMvZjBkYmNi MzMtNjlkMy09CjQ4OTktOTM1Mi04ZThhMDJmMDFiYmQvZGlza3M/dW5yZWdpc3RlcmVkPTNEdHJ1 ZS4gVGhpcyB3aWxsIHJldHVybiBhIGxpc3Qgbz0KZiBkaXNrIGltYWdlcyB0aGF0IGNhbiBiZSBl YWNoIHVzZWQgYXMgaW5wdXQgdG8KIHRoZSBJbXBvcnRJbWFnZUNvbW1hbmQgdG8gZ2V0IHRoZW0g YWRkZWQgdG8gb1ZpcnQuPG86cD48L286cD48L3A+CjxwIGNsYXNzPTNEIk1zb05vcm1hbCI+PG86 cD4mbmJzcDs8L286cD48L3A+CjxwIGNsYXNzPTNEIk1zb05vcm1hbCI+SW1wb3J0SW1hZ2VDb21t YW5kIHdpbGwgYmUgYWNjZXNzaWJsZSB0aHJvdWdoICYjODIyMD0KO1BPU1QmIzgyMjE7aW5nIGEg ZGlzayB0byAvYXBpL2Rpc2tzP2ltcG9ydD0zRHRydWUuIFRoZSBkaXNrIHdpbGwgYmUgYWRkZWQg PQp0byB0aGUgb1ZpcnQgREIgYmFzZWQgb24gdGhlIGluZm9ybWF0aW9uIHN1cHBsaWVkIGFuZCBh ZnRlcndhcmQgd291bGQgYmUgYXY9CmFpbGFibGUgdG8gYXR0YWNoIHRvIGEgVk0uPG86cD48L286 cD48L3A+CjxwIGNsYXNzPTNEIk1zb05vcm1hbCI+PG86cD4mbmJzcDs8L286cD48L3A+CjxwIGNs YXNzPTNEIk1zb05vcm1hbCI+V2hlbiBxdWVyeWluZyBmb3IgdW5yZWdpc3RlcmVkIGRpc2sgaW1h Z2VzLCB0aGUgR2V0VT0KbnJlZ2lzdGVyZWRJbWFnZXNRdWVyeSBjb21tYW5kIHdpbGwgdXNlIHRo ZSBnZXRJbWFnZXNMaXN0KCkgVkRTTSBjb21tYW5kLiBDPQp1cnJlbnRseSB0aGlzIG9ubHkgcmVw b3J0cyB0aGUgR1VJRHMgb2YgYWxsIGRpc2sgaW1hZ2VzIGluIGEgZG9tYWluLiBJIGhhZCA9CmJl ZW4gdXNpbmcgdGhlIGdldFZvbHVtZXNMaXN0KCkgYW5kCiBnZXRWb2x1bWVJbmZvKCkgVkRTTSBj b21tYW5kcyB0byBmaWxsIGluIHRoZSBpbmZvcm1hdGlvbiBzbyB0aGF0IHZhbGlkIGRpcz0KayBp bWFnZSBvYmplY3RzIGNvdWxkIGJlIHJlZ2lzdGVyZWQgaW4gb1ZpcnQuIEl0IHNlZW1zIHRoZXNl IHR3byBmdW5jdGlvbnMgPQphcmUgc2V0IHRvIGJlIHJlbW92ZWQgc2luY2UgdGhleSBhcmUgdG9v IGludmFzaXZlIGludG8gdGhlIGludGVybmFsIFZEU00gd289CnJraW5ncy4gVGhlIFZEU00gdGVh bSB3aWxsIG5lZWQKIHRvIGVpdGhlciByZXR1cm4gbW9yZSBpbmZvcm1hdGlvbiBhYm91dCBlYWNo IGRpc2sgYXMgcGFydCBvZiB0aGUgZ2V0SW1hZ2VzPQpMaXN0KCkgZnVuY3Rpb24gb3IgYWRkIGEg bmV3IGZ1bmN0aW9uIGdldEltYWdlSW5mbygpIHRoYXQgd2lsbCBnaXZlIHRoZSBzYW09CmUgaW5m b3JtYXRpb24gZm9yIGEgZ2l2ZW4gaW1hZ2UgR1VJRC48bzpwPjwvbzpwPjwvcD4KPHAgY2xhc3M9 M0QiTXNvTm9ybWFsIj48bzpwPiZuYnNwOzwvbzpwPjwvcD4KPHAgY2xhc3M9M0QiTXNvTm9ybWFs Ij5Ob3RlIHRoYXQgbXVjaCBvZiB0aGlzIHdvcmsgaGFkIG9yaWdpbmFsbHkgYmVlbiBzdWJtPQpp dHRlZCB1bmRlciBwYXRjaAo8YSBocmVmPTNEImh0dHA6Ly9nZXJyaXQub3ZpcnQub3JnLyMvYy85 NjAzLyI+aHR0cDovL2dlcnJpdC5vdmlydC5vcmcvIy9jLzk9CjYwMy88L2E+LiBBZnRlciBzZXZl cmFsIHJldmlld3MgaXQgd2FzIGZvdW5kIHRvIGJlIGxhY2tpbmcgaW4gaXRzIGRlc2lnbiBhbj0K ZCB3YXMgdXNpbmcgZGVwcmVjYXRlZCBBUElzIHRoYXQgZGlkIG5vdCB5ZXQgaGF2ZSByZXBsYWNl bWVudHMuIEkmIzgyMTc7bSByPQpld29ya2luZyB0aGUgY29kZSBub3cgdG8gY29uZm9ybSB0byB0 aGlzCiBkZXNpZ24gYW5kIGFza2luZyBmb3IgZnVydGhlciBpbnB1dCBmcm9tIHRoZSBWRFNNLCBj b3JlLCBhbmQgcmVzdGFwaSB0ZWFtcz0KIHRvIGVuc3VyZSB3ZSBjYW4gZ2V0IHRoaXMgZG9uZSBx dWlja2x5IGFuZCBjb3JyZWN0bHkgYXMgaXQgaXMgbmVlZGVkIGZvciB0PQpoZSAzLjIgcmVsZWFz ZS48bzpwPjwvbzpwPjwvcD4KPHAgY2xhc3M9M0QiTXNvTm9ybWFsIj48bzpwPiZuYnNwOzwvbzpw PjwvcD4KPHAgY2xhc3M9M0QiTXNvTm9ybWFsIj4tQ2hyaXM8bzpwPjwvbzpwPjwvcD4KPHAgY2xh c3M9M0QiTXNvTm9ybWFsIj48bzpwPiZuYnNwOzwvbzpwPjwvcD4KPHAgY2xhc3M9M0QiTXNvTm9y bWFsIj48Yj5DaHJpcyBNb3JyaXNzZXk8bzpwPjwvbzpwPjwvYj48L3A+CjxwIGNsYXNzPTNEIk1z b05vcm1hbCI+U29mdHdhcmUgRW5naW5lZXI8bzpwPjwvbzpwPjwvcD4KPHAgY2xhc3M9M0QiTXNv Tm9ybWFsIj5OZXRBcHAgSW5jLjxvOnA+PC9vOnA+PC9wPgo8cCBjbGFzcz0zRCJNc29Ob3JtYWwi PjkxOS40NzYuNDQyODxvOnA+PC9vOnA+PC9wPgo8cCBjbGFzcz0zRCJNc29Ob3JtYWwiPjxvOnA+ Jm5ic3A7PC9vOnA+PC9wPgo8L2Rpdj4KPC9ib2R5Pgo8L2h0bWw+CgotLV8wMDBfRDI5MEFEODQz MjExODA0ODk0NzY4OUJBM0FFOEE5QjMwOTRFM0ZEQ1NBQ0VYQ01CWDA0UFJEaF8tLQo= --===============6237614951939780061==-- From shuming at linux.vnet.ibm.com Sun Dec 23 09:00:35 2012 Content-Type: multipart/mixed; boundary="===============6650840428356324525==" MIME-Version: 1.0 From: Shu Ming To: devel at ovirt.org Subject: Re: [Engine-devel] FW: Querying for and registering unknown disk images on a storage domain Date: Sun, 23 Dec 2012 22:00:10 +0800 Message-ID: <50D70E6A.9060407@linux.vnet.ibm.com> In-Reply-To: D290AD8432118048947689BA3AE8A9B3094E3FDC@SACEXCMBX04-PRD.hq.netapp.com --===============6650840428356324525== Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: quoted-printable This is a multi-part message in MIME format. --------------050809030206070109060801 Content-Type: text/plain; charset=3DISO-8859-1; format=3Dflowed Content-Transfer-Encoding: 7bit 2012-12-20 23:18, Morrissey, Christopher: > > Hi All, > > I've been working on a bit of functionality for the engine that will = > allow a user to query a domain for new disk images = > (GetUnregisteredImagesQuery) for which the engine was previously = > unaware and a separate command to register those images = > (ImportImageCommand). These commands will be exposed through the REST API. > > This functionality is needed as we are developing an extension/plugin = > to oVirt that will allow a NetApp storage controller to handle cloning = > the actual disks outside of oVirt and need to import them once they = > are cloned. We'll be using other existing APIs to attach the disk to = > the necessary VM once the disk is cloned. On the NetApp side, we'll = > ensure the disk is coalesced before cloning so as to avoid the issues = > of registering snapshots. > I am just curious about how the third party tool like NetApp to make = sure the disk of a running VM coalesced before cloning? By an agent in = the VM to flush file-system cache out to the disk? > GetUnregisteredImagesQuery will be accessible through the disks = > resource collection on a storage domain. A "disks" resource collection = > does not yet exist and will need to be added. To access the = > unregistered images, a parameter (maybe "unregistered=3Dtrue") would be = > passed. So the path to "GET" the unregistered disk images on a domain = > would be something like = > /api/storagedomains/f0dbcb33-69d3-4899-9352-8e8a02f01bbd/disks?unregister= ed=3Dtrue. = > This will return a list of disk images that can be each used as input = > to the ImportImageCommand to get them added to oVirt. > > ImportImageCommand will be accessible through "POST"ing a disk to = > /api/disks?import=3Dtrue. The disk will be added to the oVirt DB based = > on the information supplied and afterward would be available to attach = > to a VM. > > When querying for unregistered disk images, the = > GetUnregisteredImagesQuery command will use the getImagesList() VDSM = > command. Currently this only reports the GUIDs of all disk images in a = > domain. I had been using the getVolumesList() and getVolumeInfo() VDSM = > commands to fill in the information so that valid disk image objects = > could be registered in oVirt. It seems these two functions are set to = > be removed since they are too invasive into the internal VDSM = > workings. The VDSM team will need to either return more information = > about each disk as part of the getImagesList() function or add a new = > function getImageInfo() that will give the same information for a = > given image GUID. > Here is the project proposal for floating disk in oVirt. I think = unregistered images are also floating disks. http://www.ovirt.org/Features/DetailedFloatingDisk > Note that much of this work had originally been submitted under patch = > http://gerrit.ovirt.org/#/c/9603/. After several reviews it was found = > to be lacking in its design and was using deprecated APIs that did not = > yet have replacements. I'm reworking the code now to conform to this = > design and asking for further input from the VDSM, core, and restapi = > teams to ensure we can get this done quickly and correctly as it is = > needed for the 3.2 release. > > -Chris > > *Chris Morrissey* > > Software Engineer > > NetApp Inc. > > 919.476.4428 > > > > _______________________________________________ > Engine-devel mailing list > Engine-devel(a)ovirt.org > http://lists.ovirt.org/mailman/listinfo/engine-devel -- = --- ?? Shu Ming Open Virtualization Engineerning; CSTL, IBM Corp. Tel: 86-10-82451626 Tieline: 9051626 E-mail: shuming(a)cn.ibm.com or shumi= ng(a)linux.vnet.ibm.com Address: 3/F Ring Building, ZhongGuanCun Software Park, Haidian District, B= eijing 100193, PRC --------------050809030206070109060801 Content-Type: text/html; charset=3DISO-8859-1 Content-Transfer-Encoding: 7bit
2012-12-20 23:18, Morrissey, Christopher:

Hi All,

 

I’ve been working on a bit of function= ality for the engine that will allow a user to query a domain for new disk images (GetUnregisteredImagesQuery) for which the engine was previously unaware and a separate command to register those images (ImportImageCommand). These commands will be exposed through the REST API.

 

This functionality is needed as we are developing an extension/plugin to oVirt that will allow a NetApp storage controller to handle cloning the actual disks outside of oVirt and need to import them once they are cloned. We’ll be using other existing APIs to attach the disk to the necessary VM once the disk is cloned. On the NetApp side, we’ll ensure the disk is coalesced before cloning so as to avoid the issues of registering snapshots.

 I am just curious about how the third party tool like NetApp to make sure the disk of a running VM coalesced before cloning? By an agent in the VM to flush file-system cache out to the disk?

 

GetUnregisteredImagesQuery will be accessible through the disks resource collection on a storage domain. A “disks” resource collection does not yet ex= ist and will need to be added. To access the unregistered images, a parameter (maybe “unregistered=3Dtrue”) would be pass= ed. So the path to “GET” the unregistered disk images on a domai= n would be something like /api/storagedomains/f0dbcb33-69d3-4899-9352-8e8a02f01bbd/disks?un= registered=3Dtrue. This will return a list of disk images that can be each used as input to the ImportImageCommand to get them added to oVirt.

 

ImportImageCommand will be accessible through “POST”ing a disk to /api/disks?import=3Dtrue.= The disk will be added to the oVirt DB based on the information supplied and afterward would be available to attach to a VM.=

 

When querying for unregistered disk images, the GetUnregisteredImagesQuery command will use the getImagesList() VDSM command. Currently this only reports the GUIDs of all disk images in a domain. I had been using the getVolumesList() and getVolumeInfo() VDSM commands to fill in the information so that valid disk image objects could be registered in oVirt. It seems these two functions are set to be removed since they are too invasive into the internal VDSM workings. The VDSM team will need to either return more information about each disk as part of the getImagesList() function or add a new function getImageInfo() that will give the same information for a given image GUID.


Here is the project proposal for floating disk in oVirt.  I think unregistered images are also floating disks.
http://www.ovirt.org/Features/DetailedFloatingDisk<= /a>

 

Note that much of this work had originally been submitted under patch http://gerrit.ovirt.= org/#/c/9603/. After several reviews it was found to be lacking in its design and was using deprecated APIs that did not yet have replacements. I’m reworking the code now to conform to this design and asking for further input from the VDSM, core, and restapi teams to ensure we can get this done quickly and correctly as it is needed for the 3.2 release.

 

-Chris

 

Chris Morrissey

Software Engineer

NetApp Inc.

919.476.4428

 



_______________________________________________
Engine-devel mailing list
Engine-devel(a)ovirt.org
http://lists.ovirt.org/mailman/listinfo/engine-devel<=
/a>


-- =

---
舒明 Shu Ming
Open Virtualization Engineerning; CSTL, IBM Corp.
Tel: 86-10-82451626  Tieline: 9051626 E-mail: shuming(a)cn.ibm.com or <=
a class=3D"moz-txt-link-abbreviated" href=3D"mailto:shuming(a)linux.vnet.ib=
m.com">shuming(a)linux.vnet.ibm.com
Address: 3/F Ring Building, ZhongGuanCun Software Park, Haidian District, B=
eijing 100193, PRC
--------------050809030206070109060801-- --===============6650840428356324525== Content-Type: multipart/alternative MIME-Version: 1.0 Content-Transfer-Encoding: base64 Content-Disposition: attachment; filename="attachment.bin" VGhpcyBpcyBhIG11bHRpLXBhcnQgbWVzc2FnZSBpbiBNSU1FIGZvcm1hdC4KLS0tLS0tLS0tLS0t LS0wNTA4MDkwMzAyMDYwNzAxMDkwNjA4MDEKQ29udGVudC1UeXBlOiB0ZXh0L3BsYWluOyBjaGFy c2V0PUlTTy04ODU5LTE7IGZvcm1hdD1mbG93ZWQKQ29udGVudC1UcmFuc2Zlci1FbmNvZGluZzog N2JpdAoKMjAxMi0xMi0yMCAyMzoxOCwgTW9ycmlzc2V5LCBDaHJpc3RvcGhlcjoKPgo+IEhpIEFs bCwKPgo+IEkndmUgYmVlbiB3b3JraW5nIG9uIGEgYml0IG9mIGZ1bmN0aW9uYWxpdHkgZm9yIHRo ZSBlbmdpbmUgdGhhdCB3aWxsIAo+IGFsbG93IGEgdXNlciB0byBxdWVyeSBhIGRvbWFpbiBmb3Ig bmV3IGRpc2sgaW1hZ2VzIAo+IChHZXRVbnJlZ2lzdGVyZWRJbWFnZXNRdWVyeSkgZm9yIHdoaWNo IHRoZSBlbmdpbmUgd2FzIHByZXZpb3VzbHkgCj4gdW5hd2FyZSBhbmQgYSBzZXBhcmF0ZSBjb21t YW5kIHRvIHJlZ2lzdGVyIHRob3NlIGltYWdlcyAKPiAoSW1wb3J0SW1hZ2VDb21tYW5kKS4gVGhl c2UgY29tbWFuZHMgd2lsbCBiZSBleHBvc2VkIHRocm91Z2ggdGhlIFJFU1QgQVBJLgo+Cj4gVGhp cyBmdW5jdGlvbmFsaXR5IGlzIG5lZWRlZCBhcyB3ZSBhcmUgZGV2ZWxvcGluZyBhbiBleHRlbnNp b24vcGx1Z2luIAo+IHRvIG9WaXJ0IHRoYXQgd2lsbCBhbGxvdyBhIE5ldEFwcCBzdG9yYWdlIGNv bnRyb2xsZXIgdG8gaGFuZGxlIGNsb25pbmcgCj4gdGhlIGFjdHVhbCBkaXNrcyBvdXRzaWRlIG9m IG9WaXJ0IGFuZCBuZWVkIHRvIGltcG9ydCB0aGVtIG9uY2UgdGhleSAKPiBhcmUgY2xvbmVkLiBX ZSdsbCBiZSB1c2luZyBvdGhlciBleGlzdGluZyBBUElzIHRvIGF0dGFjaCB0aGUgZGlzayB0byAK PiB0aGUgbmVjZXNzYXJ5IFZNIG9uY2UgdGhlIGRpc2sgaXMgY2xvbmVkLiBPbiB0aGUgTmV0QXBw IHNpZGUsIHdlJ2xsIAo+IGVuc3VyZSB0aGUgZGlzayBpcyBjb2FsZXNjZWQgYmVmb3JlIGNsb25p bmcgc28gYXMgdG8gYXZvaWQgdGhlIGlzc3VlcyAKPiBvZiByZWdpc3RlcmluZyBzbmFwc2hvdHMu Cj4KICBJIGFtIGp1c3QgY3VyaW91cyBhYm91dCBob3cgdGhlIHRoaXJkIHBhcnR5IHRvb2wgbGlr ZSBOZXRBcHAgdG8gbWFrZSAKc3VyZSB0aGUgZGlzayBvZiBhIHJ1bm5pbmcgVk0gY29hbGVzY2Vk IGJlZm9yZSBjbG9uaW5nPyBCeSBhbiBhZ2VudCBpbiAKdGhlIFZNIHRvIGZsdXNoIGZpbGUtc3lz dGVtIGNhY2hlIG91dCB0byB0aGUgZGlzaz8KCj4gR2V0VW5yZWdpc3RlcmVkSW1hZ2VzUXVlcnkg d2lsbCBiZSBhY2Nlc3NpYmxlIHRocm91Z2ggdGhlIGRpc2tzIAo+IHJlc291cmNlIGNvbGxlY3Rp b24gb24gYSBzdG9yYWdlIGRvbWFpbi4gQSAiZGlza3MiIHJlc291cmNlIGNvbGxlY3Rpb24gCj4g ZG9lcyBub3QgeWV0IGV4aXN0IGFuZCB3aWxsIG5lZWQgdG8gYmUgYWRkZWQuIFRvIGFjY2VzcyB0 aGUgCj4gdW5yZWdpc3RlcmVkIGltYWdlcywgYSBwYXJhbWV0ZXIgKG1heWJlICJ1bnJlZ2lzdGVy ZWQ9dHJ1ZSIpIHdvdWxkIGJlIAo+IHBhc3NlZC4gU28gdGhlIHBhdGggdG8gIkdFVCIgdGhlIHVu cmVnaXN0ZXJlZCBkaXNrIGltYWdlcyBvbiBhIGRvbWFpbiAKPiB3b3VsZCBiZSBzb21ldGhpbmcg bGlrZSAKPiAvYXBpL3N0b3JhZ2Vkb21haW5zL2YwZGJjYjMzLTY5ZDMtNDg5OS05MzUyLThlOGEw MmYwMWJiZC9kaXNrcz91bnJlZ2lzdGVyZWQ9dHJ1ZS4gCj4gVGhpcyB3aWxsIHJldHVybiBhIGxp c3Qgb2YgZGlzayBpbWFnZXMgdGhhdCBjYW4gYmUgZWFjaCB1c2VkIGFzIGlucHV0IAo+IHRvIHRo ZSBJbXBvcnRJbWFnZUNvbW1hbmQgdG8gZ2V0IHRoZW0gYWRkZWQgdG8gb1ZpcnQuCj4KPiBJbXBv cnRJbWFnZUNvbW1hbmQgd2lsbCBiZSBhY2Nlc3NpYmxlIHRocm91Z2ggIlBPU1QiaW5nIGEgZGlz ayB0byAKPiAvYXBpL2Rpc2tzP2ltcG9ydD10cnVlLiBUaGUgZGlzayB3aWxsIGJlIGFkZGVkIHRv IHRoZSBvVmlydCBEQiBiYXNlZCAKPiBvbiB0aGUgaW5mb3JtYXRpb24gc3VwcGxpZWQgYW5kIGFm dGVyd2FyZCB3b3VsZCBiZSBhdmFpbGFibGUgdG8gYXR0YWNoIAo+IHRvIGEgVk0uCj4KPiBXaGVu IHF1ZXJ5aW5nIGZvciB1bnJlZ2lzdGVyZWQgZGlzayBpbWFnZXMsIHRoZSAKPiBHZXRVbnJlZ2lz dGVyZWRJbWFnZXNRdWVyeSBjb21tYW5kIHdpbGwgdXNlIHRoZSBnZXRJbWFnZXNMaXN0KCkgVkRT TSAKPiBjb21tYW5kLiBDdXJyZW50bHkgdGhpcyBvbmx5IHJlcG9ydHMgdGhlIEdVSURzIG9mIGFs bCBkaXNrIGltYWdlcyBpbiBhIAo+IGRvbWFpbi4gSSBoYWQgYmVlbiB1c2luZyB0aGUgZ2V0Vm9s dW1lc0xpc3QoKSBhbmQgZ2V0Vm9sdW1lSW5mbygpIFZEU00gCj4gY29tbWFuZHMgdG8gZmlsbCBp biB0aGUgaW5mb3JtYXRpb24gc28gdGhhdCB2YWxpZCBkaXNrIGltYWdlIG9iamVjdHMgCj4gY291 bGQgYmUgcmVnaXN0ZXJlZCBpbiBvVmlydC4gSXQgc2VlbXMgdGhlc2UgdHdvIGZ1bmN0aW9ucyBh cmUgc2V0IHRvIAo+IGJlIHJlbW92ZWQgc2luY2UgdGhleSBhcmUgdG9vIGludmFzaXZlIGludG8g dGhlIGludGVybmFsIFZEU00gCj4gd29ya2luZ3MuIFRoZSBWRFNNIHRlYW0gd2lsbCBuZWVkIHRv IGVpdGhlciByZXR1cm4gbW9yZSBpbmZvcm1hdGlvbiAKPiBhYm91dCBlYWNoIGRpc2sgYXMgcGFy dCBvZiB0aGUgZ2V0SW1hZ2VzTGlzdCgpIGZ1bmN0aW9uIG9yIGFkZCBhIG5ldyAKPiBmdW5jdGlv biBnZXRJbWFnZUluZm8oKSB0aGF0IHdpbGwgZ2l2ZSB0aGUgc2FtZSBpbmZvcm1hdGlvbiBmb3Ig YSAKPiBnaXZlbiBpbWFnZSBHVUlELgo+CgpIZXJlIGlzIHRoZSBwcm9qZWN0IHByb3Bvc2FsIGZv ciBmbG9hdGluZyBkaXNrIGluIG9WaXJ0LiAgSSB0aGluayAKdW5yZWdpc3RlcmVkIGltYWdlcyBh cmUgYWxzbyBmbG9hdGluZyBkaXNrcy4KaHR0cDovL3d3dy5vdmlydC5vcmcvRmVhdHVyZXMvRGV0 YWlsZWRGbG9hdGluZ0Rpc2sKCj4gTm90ZSB0aGF0IG11Y2ggb2YgdGhpcyB3b3JrIGhhZCBvcmln aW5hbGx5IGJlZW4gc3VibWl0dGVkIHVuZGVyIHBhdGNoIAo+IGh0dHA6Ly9nZXJyaXQub3ZpcnQu b3JnLyMvYy85NjAzLy4gQWZ0ZXIgc2V2ZXJhbCByZXZpZXdzIGl0IHdhcyBmb3VuZCAKPiB0byBi ZSBsYWNraW5nIGluIGl0cyBkZXNpZ24gYW5kIHdhcyB1c2luZyBkZXByZWNhdGVkIEFQSXMgdGhh dCBkaWQgbm90IAo+IHlldCBoYXZlIHJlcGxhY2VtZW50cy4gSSdtIHJld29ya2luZyB0aGUgY29k ZSBub3cgdG8gY29uZm9ybSB0byB0aGlzIAo+IGRlc2lnbiBhbmQgYXNraW5nIGZvciBmdXJ0aGVy IGlucHV0IGZyb20gdGhlIFZEU00sIGNvcmUsIGFuZCByZXN0YXBpIAo+IHRlYW1zIHRvIGVuc3Vy ZSB3ZSBjYW4gZ2V0IHRoaXMgZG9uZSBxdWlja2x5IGFuZCBjb3JyZWN0bHkgYXMgaXQgaXMgCj4g bmVlZGVkIGZvciB0aGUgMy4yIHJlbGVhc2UuCj4KPiAtQ2hyaXMKPgo+ICpDaHJpcyBNb3JyaXNz ZXkqCj4KPiBTb2Z0d2FyZSBFbmdpbmVlcgo+Cj4gTmV0QXBwIEluYy4KPgo+IDkxOS40NzYuNDQy OAo+Cj4KPgo+IF9fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19f Cj4gRW5naW5lLWRldmVsIG1haWxpbmcgbGlzdAo+IEVuZ2luZS1kZXZlbEBvdmlydC5vcmcKPiBo dHRwOi8vbGlzdHMub3ZpcnQub3JnL21haWxtYW4vbGlzdGluZm8vZW5naW5lLWRldmVsCgoKLS0g Ci0tLQo/PyBTaHUgTWluZwpPcGVuIFZpcnR1YWxpemF0aW9uIEVuZ2luZWVybmluZzsgQ1NUTCwg SUJNIENvcnAuClRlbDogODYtMTAtODI0NTE2MjYgIFRpZWxpbmU6IDkwNTE2MjYgRS1tYWlsOiBz aHVtaW5nQGNuLmlibS5jb20gb3Igc2h1bWluZ0BsaW51eC52bmV0LmlibS5jb20KQWRkcmVzczog My9GIFJpbmcgQnVpbGRpbmcsIFpob25nR3VhbkN1biBTb2Z0d2FyZSBQYXJrLCBIYWlkaWFuIERp c3RyaWN0LCBCZWlqaW5nIDEwMDE5MywgUFJDCgoKLS0tLS0tLS0tLS0tLS0wNTA4MDkwMzAyMDYw NzAxMDkwNjA4MDEKQ29udGVudC1UeXBlOiB0ZXh0L2h0bWw7IGNoYXJzZXQ9SVNPLTg4NTktMQpD b250ZW50LVRyYW5zZmVyLUVuY29kaW5nOiA3Yml0Cgo8aHRtbD4KICA8aGVhZD4KICAgIDxtZXRh IGNvbnRlbnQ9InRleHQvaHRtbDsgY2hhcnNldD1JU08tODg1OS0xIgogICAgICBodHRwLWVxdWl2 PSJDb250ZW50LVR5cGUiPgogIDwvaGVhZD4KICA8Ym9keSB0ZXh0PSIjMDAwMDAwIiBiZ2NvbG9y PSIjRkZGRkZGIj4KICAgIDxkaXYgY2xhc3M9Im1vei1jaXRlLXByZWZpeCI+MjAxMi0xMi0yMCAy MzoxOCwgTW9ycmlzc2V5LAogICAgICBDaHJpc3RvcGhlcjo8YnI+CiAgICA8L2Rpdj4KICAgIDxi bG9ja3F1b3RlCmNpdGU9Im1pZDpEMjkwQUQ4NDMyMTE4MDQ4OTQ3Njg5QkEzQUU4QTlCMzA5NEUz RkRDQFNBQ0VYQ01CWDA0LVBSRC5ocS5uZXRhcHAuY29tIgogICAgICB0eXBlPSJjaXRlIj4KICAg ICAgPG1ldGEgaHR0cC1lcXVpdj0iQ29udGVudC1UeXBlIiBjb250ZW50PSJ0ZXh0L2h0bWw7CiAg ICAgICAgY2hhcnNldD1JU08tODg1OS0xIj4KICAgICAgPG1ldGEgbmFtZT0iR2VuZXJhdG9yIiBj b250ZW50PSJNaWNyb3NvZnQgV29yZCAxNCAoZmlsdGVyZWQKICAgICAgICBtZWRpdW0pIj4KICAg ICAgPHN0eWxlPjwhLS0KLyogRm9udCBEZWZpbml0aW9ucyAqLwpAZm9udC1mYWNlCgl7Zm9udC1m YW1pbHk6Q2FsaWJyaTsKCXBhbm9zZS0xOjIgMTUgNSAyIDIgMiA0IDMgMiA0O30KLyogU3R5bGUg RGVmaW5pdGlvbnMgKi8KcC5Nc29Ob3JtYWwsIGxpLk1zb05vcm1hbCwgZGl2Lk1zb05vcm1hbAoJ e21hcmdpbjowaW47CgltYXJnaW4tYm90dG9tOi4wMDAxcHQ7Cglmb250LXNpemU6MTEuMHB0OwoJ Zm9udC1mYW1pbHk6IkNhbGlicmkiLCJzYW5zLXNlcmlmIjt9CmE6bGluaywgc3Bhbi5Nc29IeXBl cmxpbmsKCXttc28tc3R5bGUtcHJpb3JpdHk6OTk7Cgljb2xvcjpibHVlOwoJdGV4dC1kZWNvcmF0 aW9uOnVuZGVybGluZTt9CmE6dmlzaXRlZCwgc3Bhbi5Nc29IeXBlcmxpbmtGb2xsb3dlZAoJe21z by1zdHlsZS1wcmlvcml0eTo5OTsKCWNvbG9yOnB1cnBsZTsKCXRleHQtZGVjb3JhdGlvbjp1bmRl cmxpbmU7fQpzcGFuLkVtYWlsU3R5bGUxNwoJe21zby1zdHlsZS10eXBlOnBlcnNvbmFsOwoJZm9u dC1mYW1pbHk6IkNhbGlicmkiLCJzYW5zLXNlcmlmIjsKCWNvbG9yOndpbmRvd3RleHQ7fQpzcGFu LkVtYWlsU3R5bGUxOAoJe21zby1zdHlsZS10eXBlOnBlcnNvbmFsOwoJZm9udC1mYW1pbHk6IkNh bGlicmkiLCJzYW5zLXNlcmlmIjsKCWNvbG9yOiMxRjQ5N0Q7fQpzcGFuLkVtYWlsU3R5bGUxOQoJ e21zby1zdHlsZS10eXBlOnBlcnNvbmFsLXJlcGx5OwoJZm9udC1mYW1pbHk6IkNhbGlicmkiLCJz YW5zLXNlcmlmIjsKCWNvbG9yOiMxRjQ5N0Q7fQouTXNvQ2hwRGVmYXVsdAoJe21zby1zdHlsZS10 eXBlOmV4cG9ydC1vbmx5OwoJZm9udC1zaXplOjEwLjBwdDt9CkBwYWdlIFdvcmRTZWN0aW9uMQoJ e3NpemU6OC41aW4gMTEuMGluOwoJbWFyZ2luOjEuMGluIDEuMGluIDEuMGluIDEuMGluO30KZGl2 LldvcmRTZWN0aW9uMQoJe3BhZ2U6V29yZFNlY3Rpb24xO30KLS0+PC9zdHlsZT48IS0tW2lmIGd0 ZSBtc28gOV0+PHhtbD4KPG86c2hhcGVkZWZhdWx0cyB2OmV4dD0iZWRpdCIgc3BpZG1heD0iMTAy NiIgLz4KPC94bWw+PCFbZW5kaWZdLS0+PCEtLVtpZiBndGUgbXNvIDldPjx4bWw+CjxvOnNoYXBl bGF5b3V0IHY6ZXh0PSJlZGl0Ij4KPG86aWRtYXAgdjpleHQ9ImVkaXQiIGRhdGE9IjEiIC8+Cjwv bzpzaGFwZWxheW91dD48L3htbD48IVtlbmRpZl0tLT4KICAgICAgPGRpdiBjbGFzcz0iV29yZFNl Y3Rpb24xIj4KICAgICAgICA8cCBjbGFzcz0iTXNvTm9ybWFsIj5IaSBBbGwsPG86cD48L286cD48 L3A+CiAgICAgICAgPHAgY2xhc3M9Ik1zb05vcm1hbCI+PG86cD4mbmJzcDs8L286cD48L3A+CiAg ICAgICAgPHAgY2xhc3M9Ik1zb05vcm1hbCI+SSYjODIxNzt2ZSBiZWVuIHdvcmtpbmcgb24gYSBi aXQgb2YgZnVuY3Rpb25hbGl0eQogICAgICAgICAgZm9yIHRoZSBlbmdpbmUgdGhhdCB3aWxsIGFs bG93IGEgdXNlciB0byBxdWVyeSBhIGRvbWFpbiBmb3IKICAgICAgICAgIG5ldyBkaXNrIGltYWdl cyAoR2V0VW5yZWdpc3RlcmVkSW1hZ2VzUXVlcnkpIGZvciB3aGljaCB0aGUKICAgICAgICAgIGVu Z2luZSB3YXMgcHJldmlvdXNseSB1bmF3YXJlIGFuZCBhIHNlcGFyYXRlIGNvbW1hbmQgdG8KICAg ICAgICAgIHJlZ2lzdGVyIHRob3NlIGltYWdlcyAoSW1wb3J0SW1hZ2VDb21tYW5kKS4gVGhlc2Ug Y29tbWFuZHMKICAgICAgICAgIHdpbGwgYmUgZXhwb3NlZCB0aHJvdWdoIHRoZSBSRVNUIEFQSS48 bzpwPjwvbzpwPjwvcD4KICAgICAgICA8cCBjbGFzcz0iTXNvTm9ybWFsIj48bzpwPiZuYnNwOzwv bzpwPjwvcD4KICAgICAgICA8cCBjbGFzcz0iTXNvTm9ybWFsIj5UaGlzIGZ1bmN0aW9uYWxpdHkg aXMgbmVlZGVkIGFzIHdlIGFyZQogICAgICAgICAgZGV2ZWxvcGluZyBhbiBleHRlbnNpb24vcGx1 Z2luIHRvIG9WaXJ0IHRoYXQgd2lsbCBhbGxvdyBhCiAgICAgICAgICBOZXRBcHAgc3RvcmFnZSBj b250cm9sbGVyIHRvIGhhbmRsZSBjbG9uaW5nIHRoZSBhY3R1YWwgZGlza3MKICAgICAgICAgIG91 dHNpZGUgb2Ygb1ZpcnQgYW5kIG5lZWQgdG8gaW1wb3J0IHRoZW0gb25jZSB0aGV5IGFyZSBjbG9u ZWQuCiAgICAgICAgICBXZSYjODIxNztsbCBiZSB1c2luZyBvdGhlciBleGlzdGluZyBBUElzIHRv IGF0dGFjaCB0aGUgZGlzayB0byB0aGUKICAgICAgICAgIG5lY2Vzc2FyeSBWTSBvbmNlIHRoZSBk aXNrIGlzIGNsb25lZC4gT24gdGhlIE5ldEFwcCBzaWRlLAogICAgICAgICAgd2UmIzgyMTc7bGwg ZW5zdXJlIHRoZSBkaXNrIGlzIGNvYWxlc2NlZCBiZWZvcmUgY2xvbmluZyBzbyBhcyB0bwogICAg ICAgICAgYXZvaWQgdGhlIGlzc3VlcyBvZiByZWdpc3RlcmluZyBzbmFwc2hvdHMuPC9wPgogICAg ICA8L2Rpdj4KICAgIDwvYmxvY2txdW90ZT4KICAgICZuYnNwO0kgYW0ganVzdCBjdXJpb3VzIGFi b3V0IGhvdyB0aGUgdGhpcmQgcGFydHkgdG9vbCBsaWtlIE5ldEFwcCB0bwogICAgbWFrZSBzdXJl IHRoZSBkaXNrIG9mIGEgcnVubmluZyBWTSBjb2FsZXNjZWQgYmVmb3JlIGNsb25pbmc/IEJ5IGFu CiAgICBhZ2VudCBpbiB0aGUgVk0gdG8gZmx1c2ggZmlsZS1zeXN0ZW0gY2FjaGUgb3V0IHRvIHRo ZSBkaXNrPzxicj4KICAgIDxicj4KICAgIDxibG9ja3F1b3RlCmNpdGU9Im1pZDpEMjkwQUQ4NDMy MTE4MDQ4OTQ3Njg5QkEzQUU4QTlCMzA5NEUzRkRDQFNBQ0VYQ01CWDA0LVBSRC5ocS5uZXRhcHAu Y29tIgogICAgICB0eXBlPSJjaXRlIj4KICAgICAgPGRpdiBjbGFzcz0iV29yZFNlY3Rpb24xIj4K ICAgICAgICA8cCBjbGFzcz0iTXNvTm9ybWFsIj48bzpwPjwvbzpwPjwvcD4KICAgICAgICA8cCBj bGFzcz0iTXNvTm9ybWFsIj48bzpwPiZuYnNwOzwvbzpwPjwvcD4KICAgICAgICA8cCBjbGFzcz0i TXNvTm9ybWFsIj5HZXRVbnJlZ2lzdGVyZWRJbWFnZXNRdWVyeSB3aWxsIGJlCiAgICAgICAgICBh Y2Nlc3NpYmxlIHRocm91Z2ggdGhlIGRpc2tzIHJlc291cmNlIGNvbGxlY3Rpb24gb24gYSBzdG9y YWdlCiAgICAgICAgICBkb21haW4uIEEgJiM4MjIwO2Rpc2tzJiM4MjIxOyByZXNvdXJjZSBjb2xs ZWN0aW9uIGRvZXMgbm90IHlldCBleGlzdCBhbmQKICAgICAgICAgIHdpbGwgbmVlZCB0byBiZSBh ZGRlZC4gVG8gYWNjZXNzIHRoZSB1bnJlZ2lzdGVyZWQgaW1hZ2VzLCBhCiAgICAgICAgICBwYXJh bWV0ZXIgKG1heWJlICYjODIyMDt1bnJlZ2lzdGVyZWQ9dHJ1ZSYjODIyMTspIHdvdWxkIGJlIHBh c3NlZC4gU28gdGhlCiAgICAgICAgICBwYXRoIHRvICYjODIyMDtHRVQmIzgyMjE7IHRoZSB1bnJl Z2lzdGVyZWQgZGlzayBpbWFnZXMgb24gYSBkb21haW4gd291bGQKICAgICAgICAgIGJlIHNvbWV0 aGluZyBsaWtlCiAgICAgICAgICAvYXBpL3N0b3JhZ2Vkb21haW5zL2YwZGJjYjMzLTY5ZDMtNDg5 OS05MzUyLThlOGEwMmYwMWJiZC9kaXNrcz91bnJlZ2lzdGVyZWQ9dHJ1ZS4KICAgICAgICAgIFRo aXMgd2lsbCByZXR1cm4gYSBsaXN0IG9mIGRpc2sgaW1hZ2VzIHRoYXQgY2FuIGJlIGVhY2ggdXNl ZAogICAgICAgICAgYXMgaW5wdXQgdG8gdGhlIEltcG9ydEltYWdlQ29tbWFuZCB0byBnZXQgdGhl bSBhZGRlZCB0byBvVmlydC48bzpwPjwvbzpwPjwvcD4KICAgICAgICA8cCBjbGFzcz0iTXNvTm9y bWFsIj48bzpwPiZuYnNwOzwvbzpwPjwvcD4KICAgICAgICA8cCBjbGFzcz0iTXNvTm9ybWFsIj5J bXBvcnRJbWFnZUNvbW1hbmQgd2lsbCBiZSBhY2Nlc3NpYmxlCiAgICAgICAgICB0aHJvdWdoICYj ODIyMDtQT1NUJiM4MjIxO2luZyBhIGRpc2sgdG8gL2FwaS9kaXNrcz9pbXBvcnQ9dHJ1ZS4gVGhl IGRpc2sKICAgICAgICAgIHdpbGwgYmUgYWRkZWQgdG8gdGhlIG9WaXJ0IERCIGJhc2VkIG9uIHRo ZSBpbmZvcm1hdGlvbgogICAgICAgICAgc3VwcGxpZWQgYW5kIGFmdGVyd2FyZCB3b3VsZCBiZSBh dmFpbGFibGUgdG8gYXR0YWNoIHRvIGEgVk0uPG86cD48L286cD48L3A+CiAgICAgICAgPHAgY2xh c3M9Ik1zb05vcm1hbCI+PG86cD4mbmJzcDs8L286cD48L3A+CiAgICAgICAgPHAgY2xhc3M9Ik1z b05vcm1hbCI+V2hlbiBxdWVyeWluZyBmb3IgdW5yZWdpc3RlcmVkIGRpc2sgaW1hZ2VzLAogICAg ICAgICAgdGhlIEdldFVucmVnaXN0ZXJlZEltYWdlc1F1ZXJ5IGNvbW1hbmQgd2lsbCB1c2UgdGhl CiAgICAgICAgICBnZXRJbWFnZXNMaXN0KCkgVkRTTSBjb21tYW5kLiBDdXJyZW50bHkgdGhpcyBv bmx5IHJlcG9ydHMgdGhlCiAgICAgICAgICBHVUlEcyBvZiBhbGwgZGlzayBpbWFnZXMgaW4gYSBk b21haW4uIEkgaGFkIGJlZW4gdXNpbmcgdGhlCiAgICAgICAgICBnZXRWb2x1bWVzTGlzdCgpIGFu ZCBnZXRWb2x1bWVJbmZvKCkgVkRTTSBjb21tYW5kcyB0byBmaWxsIGluCiAgICAgICAgICB0aGUg aW5mb3JtYXRpb24gc28gdGhhdCB2YWxpZCBkaXNrIGltYWdlIG9iamVjdHMgY291bGQgYmUKICAg ICAgICAgIHJlZ2lzdGVyZWQgaW4gb1ZpcnQuIEl0IHNlZW1zIHRoZXNlIHR3byBmdW5jdGlvbnMg YXJlIHNldCB0bwogICAgICAgICAgYmUgcmVtb3ZlZCBzaW5jZSB0aGV5IGFyZSB0b28gaW52YXNp dmUgaW50byB0aGUgaW50ZXJuYWwgVkRTTQogICAgICAgICAgd29ya2luZ3MuIFRoZSBWRFNNIHRl YW0gd2lsbCBuZWVkIHRvIGVpdGhlciByZXR1cm4gbW9yZQogICAgICAgICAgaW5mb3JtYXRpb24g YWJvdXQgZWFjaCBkaXNrIGFzIHBhcnQgb2YgdGhlIGdldEltYWdlc0xpc3QoKQogICAgICAgICAg ZnVuY3Rpb24gb3IgYWRkIGEgbmV3IGZ1bmN0aW9uIGdldEltYWdlSW5mbygpIHRoYXQgd2lsbCBn aXZlCiAgICAgICAgICB0aGUgc2FtZSBpbmZvcm1hdGlvbiBmb3IgYSBnaXZlbiBpbWFnZSBHVUlE LjwvcD4KICAgICAgPC9kaXY+CiAgICA8L2Jsb2NrcXVvdGU+CiAgICA8YnI+CiAgICBIZXJlIGlz IHRoZSBwcm9qZWN0IHByb3Bvc2FsIGZvciBmbG9hdGluZyBkaXNrIGluIG9WaXJ0LiZuYnNwOyBJ IHRoaW5rCiAgICB1bnJlZ2lzdGVyZWQgaW1hZ2VzIGFyZSBhbHNvIGZsb2F0aW5nIGRpc2tzLjxi cj4KICAgIDxhIGNsYXNzPSJtb3otdHh0LWxpbmstZnJlZXRleHQiIGhyZWY9Imh0dHA6Ly93d3cu b3ZpcnQub3JnL0ZlYXR1cmVzL0RldGFpbGVkRmxvYXRpbmdEaXNrIj5odHRwOi8vd3d3Lm92aXJ0 Lm9yZy9GZWF0dXJlcy9EZXRhaWxlZEZsb2F0aW5nRGlzazwvYT48YnI+CiAgICA8YnI+CiAgICA8 YmxvY2txdW90ZQpjaXRlPSJtaWQ6RDI5MEFEODQzMjExODA0ODk0NzY4OUJBM0FFOEE5QjMwOTRF M0ZEQ0BTQUNFWENNQlgwNC1QUkQuaHEubmV0YXBwLmNvbSIKICAgICAgdHlwZT0iY2l0ZSI+CiAg ICAgIDxkaXYgY2xhc3M9IldvcmRTZWN0aW9uMSI+CiAgICAgICAgPHAgY2xhc3M9Ik1zb05vcm1h bCI+PG86cD48L286cD48L3A+CiAgICAgICAgPHAgY2xhc3M9Ik1zb05vcm1hbCI+PG86cD4mbmJz cDs8L286cD48L3A+CiAgICAgICAgPHAgY2xhc3M9Ik1zb05vcm1hbCI+Tm90ZSB0aGF0IG11Y2gg b2YgdGhpcyB3b3JrIGhhZCBvcmlnaW5hbGx5CiAgICAgICAgICBiZWVuIHN1Ym1pdHRlZCB1bmRl ciBwYXRjaAogICAgICAgICAgPGEgbW96LWRvLW5vdC1zZW5kPSJ0cnVlIgogICAgICAgICAgICBo cmVmPSJodHRwOi8vZ2Vycml0Lm92aXJ0Lm9yZy8jL2MvOTYwMy8iPmh0dHA6Ly9nZXJyaXQub3Zp cnQub3JnLyMvYy85NjAzLzwvYT4uCiAgICAgICAgICBBZnRlciBzZXZlcmFsIHJldmlld3MgaXQg d2FzIGZvdW5kIHRvIGJlIGxhY2tpbmcgaW4gaXRzIGRlc2lnbgogICAgICAgICAgYW5kIHdhcyB1 c2luZyBkZXByZWNhdGVkIEFQSXMgdGhhdCBkaWQgbm90IHlldCBoYXZlCiAgICAgICAgICByZXBs YWNlbWVudHMuIEkmIzgyMTc7bSByZXdvcmtpbmcgdGhlIGNvZGUgbm93IHRvIGNvbmZvcm0gdG8g dGhpcwogICAgICAgICAgZGVzaWduIGFuZCBhc2tpbmcgZm9yIGZ1cnRoZXIgaW5wdXQgZnJvbSB0 aGUgVkRTTSwgY29yZSwgYW5kCiAgICAgICAgICByZXN0YXBpIHRlYW1zIHRvIGVuc3VyZSB3ZSBj YW4gZ2V0IHRoaXMgZG9uZSBxdWlja2x5IGFuZAogICAgICAgICAgY29ycmVjdGx5IGFzIGl0IGlz IG5lZWRlZCBmb3IgdGhlIDMuMiByZWxlYXNlLjxvOnA+PC9vOnA+PC9wPgogICAgICAgIDxwIGNs YXNzPSJNc29Ob3JtYWwiPjxvOnA+Jm5ic3A7PC9vOnA+PC9wPgogICAgICAgIDxwIGNsYXNzPSJN c29Ob3JtYWwiPi1DaHJpczxvOnA+PC9vOnA+PC9wPgogICAgICAgIDxwIGNsYXNzPSJNc29Ob3Jt YWwiPjxvOnA+Jm5ic3A7PC9vOnA+PC9wPgogICAgICAgIDxwIGNsYXNzPSJNc29Ob3JtYWwiPjxi PkNocmlzIE1vcnJpc3NleTxvOnA+PC9vOnA+PC9iPjwvcD4KICAgICAgICA8cCBjbGFzcz0iTXNv Tm9ybWFsIj5Tb2Z0d2FyZSBFbmdpbmVlcjxvOnA+PC9vOnA+PC9wPgogICAgICAgIDxwIGNsYXNz PSJNc29Ob3JtYWwiPk5ldEFwcCBJbmMuPG86cD48L286cD48L3A+CiAgICAgICAgPHAgY2xhc3M9 Ik1zb05vcm1hbCI+OTE5LjQ3Ni40NDI4PG86cD48L286cD48L3A+CiAgICAgICAgPHAgY2xhc3M9 Ik1zb05vcm1hbCI+PG86cD4mbmJzcDs8L286cD48L3A+CiAgICAgIDwvZGl2PgogICAgICA8YnI+ CiAgICAgIDxmaWVsZHNldCBjbGFzcz0ibWltZUF0dGFjaG1lbnRIZWFkZXIiPjwvZmllbGRzZXQ+ CiAgICAgIDxicj4KICAgICAgPHByZSB3cmFwPSIiPl9fX19fX19fX19fX19fX19fX19fX19fX19f X19fX19fX19fX19fX19fX19fX19fCkVuZ2luZS1kZXZlbCBtYWlsaW5nIGxpc3QKPGEgY2xhc3M9 Im1vei10eHQtbGluay1hYmJyZXZpYXRlZCIgaHJlZj0ibWFpbHRvOkVuZ2luZS1kZXZlbEBvdmly dC5vcmciPkVuZ2luZS1kZXZlbEBvdmlydC5vcmc8L2E+CjxhIGNsYXNzPSJtb3otdHh0LWxpbmst ZnJlZXRleHQiIGhyZWY9Imh0dHA6Ly9saXN0cy5vdmlydC5vcmcvbWFpbG1hbi9saXN0aW5mby9l bmdpbmUtZGV2ZWwiPmh0dHA6Ly9saXN0cy5vdmlydC5vcmcvbWFpbG1hbi9saXN0aW5mby9lbmdp bmUtZGV2ZWw8L2E+CjwvcHJlPgogICAgPC9ibG9ja3F1b3RlPgogICAgPGJyPgogICAgPGJyPgog ICAgPHByZSBjbGFzcz0ibW96LXNpZ25hdHVyZSIgY29scz0iNzIiPi0tIAotLS0KJiMzMzI5ODsm IzI2MTI2OyBTaHUgTWluZwpPcGVuIFZpcnR1YWxpemF0aW9uIEVuZ2luZWVybmluZzsgQ1NUTCwg SUJNIENvcnAuClRlbDogODYtMTAtODI0NTE2MjYgIFRpZWxpbmU6IDkwNTE2MjYgRS1tYWlsOiA8 YSBjbGFzcz0ibW96LXR4dC1saW5rLWFiYnJldmlhdGVkIiBocmVmPSJtYWlsdG86c2h1bWluZ0Bj bi5pYm0uY29tIj5zaHVtaW5nQGNuLmlibS5jb208L2E+IG9yIDxhIGNsYXNzPSJtb3otdHh0LWxp bmstYWJicmV2aWF0ZWQiIGhyZWY9Im1haWx0bzpzaHVtaW5nQGxpbnV4LnZuZXQuaWJtLmNvbSI+ c2h1bWluZ0BsaW51eC52bmV0LmlibS5jb208L2E+CkFkZHJlc3M6IDMvRiBSaW5nIEJ1aWxkaW5n LCBaaG9uZ0d1YW5DdW4gU29mdHdhcmUgUGFyaywgSGFpZGlhbiBEaXN0cmljdCwgQmVpamluZyAx MDAxOTMsIFBSQzwvcHJlPgogIDwvYm9keT4KPC9odG1sPgoKLS0tLS0tLS0tLS0tLS0wNTA4MDkw MzAyMDYwNzAxMDkwNjA4MDEtLQoK --===============6650840428356324525==-- From iheim at redhat.com Sun Dec 23 11:57:51 2012 Content-Type: multipart/mixed; boundary="===============5705578233684147151==" MIME-Version: 1.0 From: Itamar Heim To: devel at ovirt.org Subject: Re: [Engine-devel] [vdsm] FW: Querying for and registering unknown disk images on a storage domain Date: Sun, 23 Dec 2012 18:57:52 +0200 Message-ID: <50D73810.80605@redhat.com> In-Reply-To: 50D70E6A.9060407@linux.vnet.ibm.com --===============5705578233684147151== Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: quoted-printable On 12/23/2012 04:00 PM, Shu Ming wrote: > 2012-12-20 23:18, Morrissey, Christopher: >> >> Hi All, >> >> I=E2=80=99ve been working on a bit of functionality for the engine that = will >> allow a user to query a domain for new disk images >> (GetUnregisteredImagesQuery) for which the engine was previously >> unaware and a separate command to register those images >> (ImportImageCommand). These commands will be exposed through the REST AP= I. >> >> This functionality is needed as we are developing an extension/plugin >> to oVirt that will allow a NetApp storage controller to handle cloning >> the actual disks outside of oVirt and need to import them once they >> are cloned. We=E2=80=99ll be using other existing APIs to attach the dis= k to >> the necessary VM once the disk is cloned. On the NetApp side, we=E2=80= =99ll >> ensure the disk is coalesced before cloning so as to avoid the issues >> of registering snapshots. >> > I am just curious about how the third party tool like NetApp to make > sure the disk of a running VM coalesced before cloning? By an agent in > the VM to flush file-system cache out to the disk? I'd expect either a livesnapshot before, or doing this on a VM which is = down. > >> GetUnregisteredImagesQuery will be accessible through the disks >> resource collection on a storage domain. A =E2=80=9Cdisks=E2=80=9D resou= rce collection >> does not yet exist and will need to be added. To access the >> unregistered images, a parameter (maybe =E2=80=9Cunregistered=3Dtrue=E2= =80=9D) would be >> passed. So the path to =E2=80=9CGET=E2=80=9D the unregistered disk image= s on a domain >> would be something like >> /api/storagedomains/f0dbcb33-69d3-4899-9352-8e8a02f01bbd/disks?unregiste= red=3Dtrue. >> This will return a list of disk images that can be each used as input >> to the ImportImageCommand to get them added to oVirt. >> >> ImportImageCommand will be accessible through =E2=80=9CPOST=E2=80=9Ding = a disk to >> /api/disks?import=3Dtrue. The disk will be added to the oVirt DB based >> on the information supplied and afterward would be available to attach >> to a VM. >> >> When querying for unregistered disk images, the >> GetUnregisteredImagesQuery command will use the getImagesList() VDSM >> command. Currently this only reports the GUIDs of all disk images in a >> domain. I had been using the getVolumesList() and getVolumeInfo() VDSM >> commands to fill in the information so that valid disk image objects >> could be registered in oVirt. It seems these two functions are set to >> be removed since they are too invasive into the internal VDSM >> workings. The VDSM team will need to either return more information >> about each disk as part of the getImagesList() function or add a new >> function getImageInfo() that will give the same information for a >> given image GUID. >> > > Here is the project proposal for floating disk in oVirt. I think > unregistered images are also floating disks. > http://www.ovirt.org/Features/DetailedFloatingDisk floating disks are disks the engine is aware of, but not associated to = any VM. the scan domain feature is to add "orphan" disks - disks on the storage = the engine isn't aware of to begin with. --===============5705578233684147151==-- From Christopher.Morrissey at netapp.com Wed Jan 2 16:44:10 2013 Content-Type: multipart/mixed; boundary="===============5090199601077611955==" MIME-Version: 1.0 From: Morrissey, Christopher To: devel at ovirt.org Subject: Re: [Engine-devel] [vdsm] FW: Querying for and registering unknown disk images on a storage domain Date: Wed, 02 Jan 2013 21:44:07 +0000 Message-ID: In-Reply-To: 50D73810.80605@redhat.com --===============5090199601077611955== Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: quoted-printable -Chris > -----Original Message----- > From: Itamar Heim [mailto:iheim(a)redhat.com] > Sent: Sunday, December 23, 2012 11:58 AM > To: Shu Ming > Cc: Morrissey, Christopher; engine-devel(a)ovirt.org; vdsm- > devel(a)lists.fedorahosted.org > Subject: Re: [vdsm] [Engine-devel] FW: Querying for and registering > unknown disk images on a storage domain > = > On 12/23/2012 04:00 PM, Shu Ming wrote: > > 2012-12-20 23:18, Morrissey, Christopher: > >> > >> Hi All, > >> > >> I=E2=80=99ve been working on a bit of functionality for the engine tha= t will > >> allow a user to query a domain for new disk images > >> (GetUnregisteredImagesQuery) for which the engine was previously > >> unaware and a separate command to register those images > >> (ImportImageCommand). These commands will be exposed through the > REST API. > >> > >> This functionality is needed as we are developing an extension/plugin > >> to oVirt that will allow a NetApp storage controller to handle > >> cloning the actual disks outside of oVirt and need to import them > >> once they are cloned. We=E2=80=99ll be using other existing APIs to at= tach > >> the disk to the necessary VM once the disk is cloned. On the NetApp > >> side, we=E2=80=99ll ensure the disk is coalesced before cloning so as = to > >> avoid the issues of registering snapshots. > >> > > I am just curious about how the third party tool like NetApp to make > > sure the disk of a running VM coalesced before cloning? By an agent in > > the VM to flush file-system cache out to the disk? > = > I'd expect either a livesnapshot before, or doing this on a VM which is d= own. > Yes, we were planning on only allowing this type of operation on a VM which= has been stopped and if it is not a template, we would create a template i= n the background which would ensure the disk is coalesced. All of this bein= g done through the REST API which from what I can tell is currently possibl= e. = > > > >> GetUnregisteredImagesQuery will be accessible through the disks > >> resource collection on a storage domain. A =E2=80=9Cdisks=E2=80=9D res= ource > >> collection does not yet exist and will need to be added. To access > >> the unregistered images, a parameter (maybe =E2=80=9Cunregistered=3Dtr= ue=E2=80=9D) > >> would be passed. So the path to =E2=80=9CGET=E2=80=9D the unregistered= disk images on > >> a domain would be something like > >> /api/storagedomains/f0dbcb33-69d3-4899-9352- > 8e8a02f01bbd/disks?unregistered=3Dtrue. > >> This will return a list of disk images that can be each used as input > >> to the ImportImageCommand to get them added to oVirt. > >> > >> ImportImageCommand will be accessible through =E2=80=9CPOST=E2=80=9Din= g a disk to > >> /api/disks?import=3Dtrue. The disk will be added to the oVirt DB based > >> on the information supplied and afterward would be available to > >> attach to a VM. > >> > >> When querying for unregistered disk images, the > >> GetUnregisteredImagesQuery command will use the getImagesList() > VDSM > >> command. Currently this only reports the GUIDs of all disk images in > >> a domain. I had been using the getVolumesList() and getVolumeInfo() > >> VDSM commands to fill in the information so that valid disk image > >> objects could be registered in oVirt. It seems these two functions > >> are set to be removed since they are too invasive into the internal > >> VDSM workings. The VDSM team will need to either return more > >> information about each disk as part of the getImagesList() function > >> or add a new function getImageInfo() that will give the same > >> information for a given image GUID. > >> > > > > Here is the project proposal for floating disk in oVirt. I think > > unregistered images are also floating disks. > > http://www.ovirt.org/Features/DetailedFloatingDisk > = > floating disks are disks the engine is aware of, but not associated to an= y VM. > the scan domain feature is to add "orphan" disks - disks on the storage t= he > engine isn't aware of to begin with. --===============5090199601077611955==--