Question about node migrations and hooks
by richard.seguin@marisec.ca
Good morning,
I have two questions.
1. Is there a way to make hooks so that they apply to all instances and templates? rather than setting one at a time?
2. I believe I already have the answer to this, however I just want to be sure that there isn't a better way. I have a ovirt node that basically uses NFS for everything (data and ISOs), and it is slow as heck to get an instance to build. I'm using a 100MB switch, I have a feeling that this needs to be upgraded... Software wise though, is there anything I can do to speed up template deployments to that node?
Thanks,
Richard Seguin
10 years, 7 months
supervdsm spams scans for scsi?
by Sven Kieske
Hi,
just found this in supervdsm.log:
MainProcess|storageRefresh::DEBUG::2014-03-19
17:34:57,752::iscsi::390::Storage.Misc.excCmd::(forceScsiScan) '/bin/dd
of=/sys/class/scsi_host/host0/scan' (cwd None)
MainProcess|storageRefresh::DEBUG::2014-03-19
17:34:57,764::iscsi::390::Storage.Misc.excCmd::(forceScsiScan) '/bin/dd
of=/sys/class/scsi_host/host1/scan' (cwd None)
MainProcess|storageRefresh::DEBUG::2014-03-19
17:34:57,766::iscsi::390::Storage.Misc.excCmd::(forceScsiScan) '/bin/dd
of=/sys/class/scsi_host/host2/scan' (cwd None)
MainProcess|storageRefresh::DEBUG::2014-03-19
17:34:57,768::iscsi::390::Storage.Misc.excCmd::(forceScsiScan) '/bin/dd
of=/sys/class/scsi_host/host3/scan' (cwd None)
MainProcess|storageRefresh::DEBUG::2014-03-19
17:34:58,771::iscsi::390::Storage.Misc.excCmd::(forceScsiScan) '/bin/dd
of=/sys/class/scsi_host/host4/scan' (cwd None)
MainProcess|storageRefresh::DEBUG::2014-03-19
17:34:58,774::iscsi::390::Storage.Misc.excCmd::(forceScsiScan) '/bin/dd
of=/sys/class/scsi_host/host5/scan' (cwd None)
MainProcess|storageRefresh::DEBUG::2014-03-19
17:34:58,776::iscsi::390::Storage.Misc.excCmd::(forceScsiScan) '/bin/dd
of=/sys/class/scsi_host/host6/scan' (cwd None)
Is there any reason why this is run on hosts which don't
got any scsi volumes at all?
These messages fill up to 10% of the whole supervdsm.log
vdsm version:
vdsm-4.13.3-3.el6.x86_64
Shouldn't this just be called if I invoke such a method via
webadmin/api ?
--
Mit freundlichen Grüßen / Regards
Sven Kieske
Systemadministrator
Mittwald CM Service GmbH & Co. KG
Königsberger Straße 6
32339 Espelkamp
T: +49-5772-293-100
F: +49-5772-293-333
https://www.mittwald.de
Geschäftsführer: Robert Meyer
St.Nr.: 331/5721/1033, USt-IdNr.: DE814773217, HRA 6640, AG Bad Oeynhausen
Komplementärin: Robert Meyer Verwaltungs GmbH, HRB 13260, AG Bad Oeynhausen
10 years, 7 months
[ANN] oVirt 3.4.1 Release is now available
by Sandro Bonazzola
The oVirt development team is pleased to announce the general
availability of oVirt 3.4.1 as of May 8th 2014. This release
solidifies oVirt as a leading KVM management application and open
source alternative to VMware vSphere.
oVirt is available now for Fedora 19 and Red Hat Enterprise Linux 6.5
(or similar).
This release of oVirt includes numerous bug fixes.
See the release notes [1] for a list of the new features and bugs fixed.
The existing repository ovirt-3.4 has been updated for delivering this
release without the need of enabling any other repository, however since we
introduced package signing you need an additional step in order to get
the public keys installed on your system.
Please refer to release notes [1] for Installation / Upgrade instructions.
For Fedora 19 users, a known issue may cause installation failure
due to recent changes in sos package.
Please refer to release notes [1] known issues for resolving on your system.
A new oVirt Node and oVirt Live ISO will be available [2].
[1] http://www.ovirt.org/OVirt_3.4.1_release_notes
[2] http://resources.ovirt.org/plain/pub/ovirt-3.4/iso/
--
Sandro Bonazzola
Better technology. Faster innovation. Powered by community collaboration.
See how it works at redhat.com
10 years, 7 months
Custom Properties code duplication
by Lior Vernia
Hello,
While adding network custom properties towards oVirt 3.5, I got to take
a good look at the custom properties code in the backend and frontend.
It seems to me like there's a lot of code duplication, and I would like
to suggest the following refactoring:
1. Remove dependencies on Pattern/Matcher and ApacheCommons methods from
*CustomPropertiesUtils.java, to make them compilable with GWT, and move
these utilities to the common package. The usage of the said methods is
minimal and could easily be replaced with String methods, etc.
2. Modify KeyValueModel to delegate to the common utilities instead of
duplicating code, e.g. for validation.
3. Move some validation, which is relevant to all custom properties
(e.g. duplicate keys), from specific utils (e.g. VmPropertiesUtils) up
to the shared CustomPropertiesUtils.
4. Optionally change the implementation of custom properties members in
entities (e.g. VM) from String to Map<String, String>, which would
obviate the need for different conversion methods between String/Map -
(de)serialization would only be required in DB interaction.
The main argument against this would be that the frontend is to be moved
over the REST, and might not be written in Java much longer anyway.
However, to my understanding, there's some time until these changes take
effect. And even if the frontend is to be written in JavaScript, at
least initially the existing frontend code will have to still be used
somehow (e.g. auto-translated to JavaScript). That is to say, this
refactoring might still be beneficial for the not-so-short term.
Before going through with this, I wanted to ask for your thoughts and to
hear any specific objections to the proposed changes.
Yours, Lior.
10 years, 7 months
commons-collections v4.0
by Yevgeny Zaspitsky
Hi All,
I'd like to add the new version (4.0) of Apache commons-collections library to the dependencies of the project (we use 3.1 currently).
The new version uses the generics features of Java 5 so that make the code more type safe. You can find the full list of changes on https://commons.apache.org/proper/commons-collections/release_4_0.html.
The new API is based on the original but it isn't fully compatible with it. So in order to make the migration to the new API easier, the package has been changed to org.apache.commons.collections4. That allows having both version of the library in the classpath at the starting point and move (refactor) towards the new version gradually.
I have couple of questions regarding the new dependency:
1. Is there anything that could prevent adding the new dependency?
2. I did the change (http://gerrit.ovirt.org/26745).
The unit tests that use the new dependency pass locally and in Jenkins environments.
However when I try to run a code that is dependent on the newly added library NoClassDefFoundError being thrown.
Also I can't find commons-collections4 jar under the installation directory. I use "make clean install-dev" command for building.
Please advise.
Best regards,
____________________
Yevgeny Zaspitsky
Senior Software Engineer
Red Hat
10 years, 7 months
Re: [ovirt-devel] commons-collections v4.0
by Yevgeny Zaspitsky
----_com.android.email_1462209507407830
Content-Type: text/plain; charset=utf-8
Content-Transfer-Encoding: base64
T24gdGhlIG90aGVyIGhhbmQsIGNoYW5naW5nIGEgamFyIGluIHRoZSBydW50aW1lIGVudmlyb25t
ZW50IHdpdGhvdXQgY29tcGlsaW5nIGFuZCBydW5uaW5nIHRlc3Qgd2l0aCB0aGUgbmV3IGphciBj
b3VsZCBsZWFkIGFuIGFwcGxpY2F0aW9uIHRvIHN0b3AgZnVuY3Rpb25pbmcgaW4gYSBjdXN0b21l
ciBlbnZpcm9ubWVudC4KQWxzbyBub3QgZXZlcnkgYnVnIGZvdW5kIGluIGEgZGVwZW5kZW5jeSBq
YXIgd291bGQgY2F1c2UgYSBwcm9ibGVtIGluIHRoZSBhcHBsaWNhdGlvbi4gKEFuIGFwcGxpY2F0
aW9uIG1pZ2h0IG5vdCB1c2UgdGhlIHByb2JsZW1hdGljIHBhcnQgb2YgdGhlIGRlcGVuZGVuY3ku
KQpJJ2QgYmV0dGVyIHRydXN0IHRoZSB0ZXN0IHN1aXRlIChhdXRvbWF0aWMgYW5kIG1hbnVhbCkg
dGhhdCB3ZSBydW4gb24gdGhlIGNvbXBpbGVkIGFwcGxpY2F0aW9uIHdpdGggYWxsIHRoZSBkZXBl
bmRlbmNpZXMgdGhhdCB0aGUgZGV2ZWxvcGVycyBjaG9vc2UgYXQgdGhlIGRldmVsb3BtZW50IHRp
bWUgYW5kIHRoZW4gZGVsaXZlciB0aGF0ICh3aXRoIGl0cyBkZXBlbmRlbmNpZXMgYXMgYSBzaW5n
bGUgcGFja2FnZSkgdG8gdGhlIGN1c3RvbWVycy4KRXZlcnkgYnVnIGluIGEgZGVwZW5kZW5jeSBz
aG91bGQgYmUgZXZhbHVhdGVkIHdpdGhpbiB0aGUgZ2l2ZW4gYXBwbGljYXRpb24gc2NvcGUgYW5k
IG9ubHkgaWYgcHJvdmVuIGFzIHRoZSBnaXZlbiBhcHBsaWNhdGlvbiBwcm9ibGVtIG9ubHkgdGhl
biB0aGUgYXBwbGljYXRpb24gc2hvdWxkIGJlIHJlbGVhc2VkLgoKClNlbnQgZnJvbSBTYW1zdW5n
IE1vYmlsZQoKLS0tLS0tLS0gT3JpZ2luYWwgbWVzc2FnZSAtLS0tLS0tLQpGcm9tOiBBbG9uIEJh
ci1MZXYgPGFsb25ibEByZWRoYXQuY29tPiAKRGF0ZTogMDcvMDUvMjAxNCAgMjE6NDEgIChHTVQr
MDI6MDApIApUbzogTWlrZSBLb2xlc25payA8bWtvbGVzbmlAcmVkaGF0LmNvbT4gCkNjOiBZZXZn
ZW55IFphc3BpdHNreSA8eXphc3BpdHNAcmVkaGF0LmNvbT4sZGV2ZWxAb3ZpcnQub3JnIApTdWJq
ZWN0OiBSZTogW292aXJ0LWRldmVsXSBjb21tb25zLWNvbGxlY3Rpb25zIHY0LjAgCiAKCgotLS0t
LSBPcmlnaW5hbCBNZXNzYWdlIC0tLS0tCj4gRnJvbTogIk1pa2UgS29sZXNuaWsiIDxta29sZXNu
aUByZWRoYXQuY29tPgo+IFRvOiAiQWxvbiBCYXItTGV2IiA8YWxvbmJsQHJlZGhhdC5jb20+Cj4g
Q2M6ICJZZXZnZW55IFphc3BpdHNreSIgPHl6YXNwaXRzQHJlZGhhdC5jb20+LCBkZXZlbEBvdmly
dC5vcmcKPiBTZW50OiBXZWRuZXNkYXksIE1heSA3LCAyMDE0IDk6MzQ6MDMgUE0KPiBTdWJqZWN0
OiBSZTogW292aXJ0LWRldmVsXSBjb21tb25zLWNvbGxlY3Rpb25zIHY0LjAKPiAKPiAtLS0tLSBP
cmlnaW5hbCBNZXNzYWdlIC0tLS0tCj4gPiAKPiA+IAo+ID4gLS0tLS0gT3JpZ2luYWwgTWVzc2Fn
ZSAtLS0tLQo+ID4gPiBGcm9tOiAiWWV2Z2VueSBaYXNwaXRza3kiIDx5emFzcGl0c0ByZWRoYXQu
Y29tPgo+ID4gPiBUbzogIkFsb24gQmFyLUxldiIgPGFsb25ibEByZWRoYXQuY29tPgo+ID4gPiBD
YzogZGV2ZWxAb3ZpcnQub3JnCj4gPiA+IFNlbnQ6IFR1ZXNkYXksIEFwcmlsIDIyLCAyMDE0IDEx
OjM5OjExIEFNCj4gPiA+IFN1YmplY3Q6IFJlOiBbb3ZpcnQtZGV2ZWxdIGNvbW1vbnMtY29sbGVj
dGlvbnMgdjQuMAo+ID4gPiAKPiA+ID4gVGhhdCBtZWFucyB0aGF0IHdlIG1hbmFnZSAyIHNlcGFy
YXRlIGVudmlyb25tZW50czoKPiA+ID4gMS4gRGV2ZWxvcG1lbnQgLSByZWxpZXMgb24gcG9tIGZp
bGVzLiBFLmcuIHVuaXQgdGVzdHMgcnVuIHdpdGgKPiA+ID4gY29tbW9ucy1jb2xsZWN0aW9ucyB2
My4xIChhbmQgd2hlbiBJIGFkZCB2NC4wKSBhbmQgc3VjY2VlZC4KPiA+IAo+ID4gZGV2ZW52IHdp
bGwgdXNlIHJ1bnRpbWUgb3B0aW9uLgo+ID4geW91IGFyZSByaWdodCBhYm91dCB0aGUgdW5pdCB0
ZXN0cywgdGhlc2UgcmVsYXlzIG9uIHRoZSBwb21zLgo+IAo+IEkgdXNlIGRldmVudiBhbmQgaXQg
YWx3YXlzIHVzZXMgdGhlIGRldiBvcHRpb24gbm90IHRoZSBydW50aW1lLgo+IFNvIGJhc2ljYWxs
eSBkZXZlbG9wZXJzIGFyZSB1c2luZyB0aGUgcG9tIHNwZWNpZmllZCB2ZXJzaW9ucyBhbmQgbm90
IHdoYXQKPiB1c2VkIGluIHJ1bnRpbWUuCj4gCj4gRXZlbiBtb3JlIHNvLCBpbiBydW50aW1lIGl0
IGhpZ2hseSBkZXBlbmRzIG9uIHdoYXQgT1MgeW91J3JlIHVzaW5nLCBzbwo+IHNvbWVvbmUKPiBk
ZXZlbG9waW5nIG9uIEYxOSBtaWdodCBub3QgYmUgdXNpbmcgc2FtZSB2ZXJzaW9ucyBhcyBhIGRl
dmVsb3BlciBvbiBGMjAgYW5kCj4gYm90aCBhcmUgcHJvYmFibHkgdmVyeSBkaWZmZXJlbnQgdmVy
c2lvbnMgdGhhbiBvbiBSSEVML0NlbnRPUy4KPiBJIHdvbid0IGV2ZW4gbWVudGlvbiBvdGhlciBP
U2BzLgo+IAo+ID4gCj4gPiA+IDIuIFJ1bi10aW1lIC0gcmVsaWVzIG9uIEpCb3NzIG93biBkZXBl
bmRlbmNpZXMgdGhhdCBicmluZwo+ID4gPiBjb21tb25zLWNvbGxlY3Rpb24KPiA+ID4gdjMuMi4x
LXJlZGhhdC0yLgo+ID4gCj4gPiBpbiByaGVsIGNhc2UsIHllcy4KPiA+IAo+ID4gPiBUaGlzIGtp
bmQgb2YgZGlzY3JlcGFuY2llcyBtaWdodCBiZSBmb3VuZCBpbiBvdGhlciBsaWJyYXJpZXMgYXMg
d2UgZG8gbm90Cj4gPiA+IHN5bmNocm9uaXplIG91ciBwb20gZmlsZXMgd2l0aCB0aGUgSkJvc3Mg
Y3VycmVudCB2ZXJzaW9uIGRlcGVuZGVuY2llcy4KPiA+ID4gSU1ITyB0aGF0IGNvdWxkIGxlYWQg
dG8gc29tZSB2ZXJ5IGRpZmZpY3VsdCBidWdzIHRoYXQgd2Ugd29uJ3QgYmUgYWJsZSB0bwo+ID4g
PiBzaW11bGF0ZSBpbiBvdXIgdW5pdCB0ZXN0cy4KPiA+IAo+ID4gY29ycmVjdCwgYnV0IHRoZSBq
YXZhIHdheSB0byBwdWxsIGRlcGVuZGVuY2llcyBhdCB3aWxsIHdpdGhvdXQgYmVpbmcgYWJsZQo+
ID4gdG8KPiA+IGZpeCB6LXN0cmVhbSB1c2luZyBjZW50cmFsIHBhY2thZ2UgbWFuYWdlbWVudCB0
b29scyBpcyBtb3JlIHNldmVyZSB0aGFuCj4gPiB1bml0Cj4gPiB0ZXN0cyBub3Qgd29ya2luZy9u
b3Qgd29ya2luZy4KPiA+IAo+ID4gZm9yIGV4YW1wbGUsIHlvdXIgYXBwbGljYXRpb24gdXNlcyB4
LmphciBhbmQgYWN0dWFsbHkgZGVsaXZlcnMgeC5qYXIuLi4gc28KPiA+IGZyb20gcmVsZWFzZSB0
byBldGVybml0eSBpdCBpcyB5b3VyIHJlc3BvbnNpYmlsaXR5IHRvIHRyYWNrIHguamFyIGZvcgo+
ID4gc2V2ZXJlCj4gPiBzdGFiaWxpdHkgYnVncyBhbmQgc2VjdXJpdHkgYnVncywgYW5kIHJlbGVh
c2UgeW91ciBlbnRpcmUgYXBwbGljYXRpb24gZWFjaAo+ID4gdGltZSBmb3VuZCwgbm93IG11bHRp
cGxlIGl0IHdpdGggdGhlICMgb2YgY29tcG9uZW50cyBhcHBsaWNhdGlvbiBpcyB1c2luZwo+ID4g
YW5kIHNlZSBob3cgbXVjaCBlZmZvcnQgeW91IGhhdmUganVzdCB0byBtYWludGFpbiBzdGFiaWxp
dHkgYW5kIHNlY3VyaXR5IGlmCj4gPiB5b3UgZW1iZWQgM3JkIHBhcnR5IGNvbXBvbmVudHMgd2l0
aG91dCB5b3VyIGFwcGxpY2F0aW9uLgo+IAo+IFllcywgaWYgeW91IHVzZSBwYWNrYWdlIFggdGhl
biB5b3UncmUgdXNpbmcgdGhhdCBzcGVjaWZpYyB2ZXJzaW9uIHdpdGggaXQncwo+IGJlaGF2aW91
ciBhbmQgQVBJLCB0aGlzIGlzIHdoeSBkZXBlbmRlbmNpZXMgYXJlbid0IHVwZGF0ZWQgbGlnaHQg
aGVhZGVkbHkgYnV0Cj4gd2l0aCB0ZXN0aW5nIHRvIHNlZSB0aGF0IG5vdGhpbmcgYnJva2UgKHNp
bmNlIHN0dWZmIGRvZXMgYnJlYWssIGV2ZW4gaW4gbWlub3IKPiB2ZXJzaW9uLCBhcyB3ZSBsZWF2
ZSBpbiBhIG5vdCBzbyBwZXJmZWN0IHdvcmxkKS4KPiAKPiA+IAo+ID4gPiBXaHkgZG8gd2UgYXZv
aWQgInRvIG1haW50YWluIG91ciBvd24gcGFja2FnaW5nIj8gSU1ITyBPdmlydCBvd24KPiA+ID4g
ZGVwZW5kZW5jaWVzCj4gPiA+IGNvdWxkIGJlIHBhY2tlZCBpbiB0aGUgd2FyLCBjYW4ndCB0aGV5
Pwo+ID4gCj4gPiB5ZXMgdGhleSBjb3VsZCwgYnV0IHRoaXMgaXMgbm90IHN1aXRhYmxlIGZvciBl
bnRlcnByaXNlIGdyYWRlCj4gPiBpbXBsZW1lbnRhdGlvbnMsIG1haW5seSBwZXIgd2hhdCBJIGRl
c2NyaWJlZCBhYm92ZS4KPiAKPiBTb3JyeSBidXQgQUZBSUsgZW50ZXJwcmlzZSBncmFkZSBzb2Z0
d2FyZSByZWxlYXNlIGZpeGVzIGZvciB0aGVpciBzb2Z0d2FyZQo+IG9uIGEgdGltZWx5IGJhc2lz
IGFuZCBoYXZlIHByb2Nlc3NlcyBpbiBwbGFjZSB0byBtYW5hZ2UgdXBncmFkZXMgb2YKPiBmdW5j
dGlvbmFsaXR5Lgo+IAo+IFdoYXQgY3VycmVudGx5IGlzIGRvbmUgaXMgcmVseWluZyBvbiBjb3Vy
dGVzeSBvZiBvdGhlciBwZW9wbGUgdG8gcmVsZWFzZSBhCj4gImZpeCIgdGhhdCBhbHJlYWR5IGV4
aXN0cyBhIGxvbmcgdGltZS4KPiBBbmQgb2YgY291cnNlLCBhcyBJIG1lbnRpb25lZCwgdGhlIGFw
cGxpY2F0aW9uIG5lZWRzIHRvIGJlIHRlc3RlZCB3aXRoIHRoZQo+IHVwZGF0ZWQgbGlicmFyeS4K
PiBJTU8gbmVnbGVjdGluZyB0aGlzIGFuZCBsZWF2aW5nIHRoaXMgb3V0IG9mIGJhbmQgZm9yICJl
bnRlcnByaXNlIGdyYWRlIgo+IHNvZnR3YXJlIGlzIG11Y2ggd29yc2UgdGhhbiBhY3R1YWxseSB0
ZXN0aW5nIHRvIHNlZSB0aGF0IGl0IGlzIHdvcmtpbmcgYW5kCj4ganVzdCBsZWF2aW5nIGl0IGFs
bCB0byBjaGFuY2UuCgrigI5XZWxsLCB0YWtlIHRoZSByZWNlbnQgZXhhbXBsZSBvZiBvcGVuc3Ns
IGlzc3VlIHRoYXQgd2FzIGZvdW5kLgpOb3csIGltYWdpbmUgdGhhdCBhbGwgcHJvZHVjdHMgdGhh
dCB1c2Ugb3BlbnNzbCBzaG91bGQgaGF2ZSBiZWVuIHJlLXJlbGVhc2VkLgpJIHRoaW5rIHRoaXMg
aXMgZW5vdWdoIHRvIHVuZGVyc3RhbmQgaG93IHdyb25nIHRoaXMgaXMuCgo+IAo+ID4gCj4gPiBS
ZWdhcmRzLAo+ID4gQWxvbgo+ID4gCj4gPiA+IEJlc3QgcmVnYXJkcywKPiA+ID4gX19fX19fX19f
X19fX19fX19fX18KPiA+ID4gWWV2Z2VueSBaYXNwaXRza3kKPiA+ID4gU2VuaW9yIFNvZnR3YXJl
IEVuZ2luZWVyCj4gPiA+IFJlZCBIYXQgSXNyYWVsCj4gPiA+IAo+ID4gPiAKPiA+ID4gLS0tLS0g
T3JpZ2luYWwgTWVzc2FnZSAtLS0tLQo+ID4gPiBGcm9tOiAiQWxvbiBCYXItTGV2IiA8YWxvbmJs
QHJlZGhhdC5jb20+Cj4gPiA+IFRvOiAiWWV2Z2VueSBaYXNwaXRza3kiIDx5emFzcGl0c0ByZWRo
YXQuY29tPgo+ID4gPiBDYzogZGV2ZWxAb3ZpcnQub3JnCj4gPiA+IFNlbnQ6IFN1bmRheSwgQXBy
aWwgMTMsIDIwMTQgNzoyMjoxOCBQTQo+ID4gPiBTdWJqZWN0OiBSZTogW292aXJ0LWRldmVsXSBj
b21tb25zLWNvbGxlY3Rpb25zIHY0LjAKPiA+ID4gCj4gPiA+IAo+ID4gPiAKPiA+ID4gLS0tLS0g
T3JpZ2luYWwgTWVzc2FnZSAtLS0tLQo+ID4gPiA+IEZyb206ICJZZXZnZW55IFphc3BpdHNreSIg
PHl6YXNwaXRzQHJlZGhhdC5jb20+Cj4gPiA+ID4gVG86IGRldmVsQG92aXJ0Lm9yZwo+ID4gPiA+
IFNlbnQ6IFN1bmRheSwgQXByaWwgMTMsIDIwMTQgNzoxMzoxMCBQTQo+ID4gPiA+IFN1YmplY3Q6
IFtvdmlydC1kZXZlbF0gY29tbW9ucy1jb2xsZWN0aW9ucyB2NC4wCj4gPiA+ID4gCj4gPiA+ID4g
SGkgQWxsLAo+ID4gPiA+IAo+ID4gPiA+IEknZCBsaWtlIHRvIGFkZCB0aGUgbmV3IHZlcnNpb24g
KDQuMCkgb2YgQXBhY2hlIGNvbW1vbnMtY29sbGVjdGlvbnMKPiA+ID4gPiBsaWJyYXJ5Cj4gPiA+
ID4gdG8gdGhlIGRlcGVuZGVuY2llcyBvZiB0aGUgcHJvamVjdCAod2UgdXNlIDMuMSBjdXJyZW50
bHkpLgo+ID4gPiA+IFRoZSBuZXcgdmVyc2lvbiB1c2VzIHRoZSBnZW5lcmljcyBmZWF0dXJlcyBv
ZiBKYXZhIDUgc28gdGhhdCBtYWtlIHRoZQo+ID4gPiA+IGNvZGUKPiA+ID4gPiBtb3JlIHR5cGUg
c2FmZS4gWW91IGNhbiBmaW5kIHRoZSBmdWxsIGxpc3Qgb2YgY2hhbmdlcyBvbgo+ID4gPiA+IGh0
dHBzOi8vY29tbW9ucy5hcGFjaGUub3JnL3Byb3Blci9jb21tb25zLWNvbGxlY3Rpb25zL3JlbGVh
c2VfNF8wLmh0bWwuCj4gPiA+ID4gVGhlIG5ldyBBUEkgaXMgYmFzZWQgb24gdGhlIG9yaWdpbmFs
IGJ1dCBpdCBpc24ndCBmdWxseSBjb21wYXRpYmxlIHdpdGgKPiA+ID4gPiBpdC4KPiA+ID4gPiBT
byBpbiBvcmRlciB0byBtYWtlIHRoZSBtaWdyYXRpb24gdG8gdGhlIG5ldyBBUEkgZWFzaWVyLCB0
aGUgcGFja2FnZQo+ID4gPiA+IGhhcwo+ID4gPiA+IGJlZW4gY2hhbmdlZCB0byBvcmcuYXBhY2hl
LmNvbW1vbnMuY29sbGVjdGlvbnM0LiBUaGF0IGFsbG93cyBoYXZpbmcKPiA+ID4gPiBib3RoCj4g
PiA+ID4gdmVyc2lvbiBvZiB0aGUgbGlicmFyeSBpbiB0aGUgY2xhc3NwYXRoIGF0IHRoZSBzdGFy
dGluZyBwb2ludCBhbmQgbW92ZQo+ID4gPiA+IChyZWZhY3RvcikgdG93YXJkcyB0aGUgbmV3IHZl
cnNpb24gZ3JhZHVhbGx5Lgo+ID4gPiA+IAo+ID4gPiA+IEkgaGF2ZSBjb3VwbGUgb2YgcXVlc3Rp
b25zIHJlZ2FyZGluZyB0aGUgbmV3IGRlcGVuZGVuY3k6Cj4gPiA+ID4gMS4gSXMgdGhlcmUgYW55
dGhpbmcgdGhhdCBjb3VsZCBwcmV2ZW50IGFkZGluZyB0aGUgbmV3IGRlcGVuZGVuY3k/Cj4gPiA+
IAo+ID4gPiBXZSB0cnkgdG8gYXZvaWQgaW50cm9kdWNpbmcgb3VyIG93biBkZXBlbmRlbmNpZXMs
IGluIHRoaXMgY2FzZSB3ZSB1c2UKPiA+ID4gd2hhdGV2ZXIgamJvc3MgcHJvdmlkZXMgd2hpY2gg
aXMgdmVyeSBjb21mb3J0YWJsZSBhcyB3ZSBkbyBub3QgbmVlZCB0bwo+ID4gPiBtYWludGFpbiBv
dXIgb3duIHBhY2thZ2luZy4KPiA+ID4gCj4gPiA+IEN1cnJlbnRseSB0aGUgamJlYXAgZG9lcyBu
b3QgcHJvdmlkZSA0LjAsIGl0IGRvZXMgc3VwcG9ydCAzLjIuMS1yZWRoYXQtMiwKPiA+ID4gc28K
PiA+ID4gYmV0dGVyIHRvIGF2b2lkIHRoaXMgdW50aWwgd2Ugc3dpdGNoIHRvIG1vcmUgcmVjZW50
IHZlcnNpb24gb2YgamJvc3MuCj4gPiA+IAo+ID4gPiBBbHRlcm5hdGl2ZWx5IHdlIGNvdWxkIGVu
am95IHN0YW5kYWxvbmUgcnBtIHdpdGhpbiByaGVsL2NlbnRvcyBpZgo+ID4gPiBhdmFpbGFibGUs
Cj4gPiA+IGhvd2V2ZXIgbm9uIGV4aXN0Lgo+ID4gPiAKPiA+ID4gPiAyLiBJIGRpZCB0aGUgY2hh
bmdlIChodHRwOi8vZ2Vycml0Lm92aXJ0Lm9yZy8yNjc0NSkuCj4gPiA+ID7CoMKgwqAgVGhlIHVu
aXQgdGVzdHMgdGhhdCB1c2UgdGhlIG5ldyBkZXBlbmRlbmN5IHBhc3MgbG9jYWxseSBhbmQgaW4K
PiA+ID4gPsKgwqDCoCBKZW5raW5zCj4gPiA+ID7CoMKgwqAgZW52aXJvbm1lbnRzLgo+ID4gPiA+
wqDCoMKgIEhvd2V2ZXIgd2hlbiBJIHRyeSB0byBydW4gYSBjb2RlIHRoYXQgaXMgZGVwZW5kZW50
IG9uIHRoZSBuZXdseQo+ID4gPiA+wqDCoMKgIGFkZGVkCj4gPiA+ID7CoMKgwqAgbGlicmFyeSBO
b0NsYXNzRGVmRm91bmRFcnJvciBiZWluZyB0aHJvd24uCj4gPiA+ID7CoMKgwqAgQWxzbyBJIGNh
bid0IGZpbmQgY29tbW9ucy1jb2xsZWN0aW9uczQgamFyIHVuZGVyIHRoZSBpbnN0YWxsYXRpb24K
PiA+ID4gPsKgwqDCoCBkaXJlY3RvcnkuIEkgdXNlICJtYWtlIGNsZWFuIGluc3RhbGwtZGV2IiBj
b21tYW5kIGZvciBidWlsZGluZy4KPiA+ID4gPiAKPiA+ID4gPiBQbGVhc2UgYWR2aXNlLgo+ID4g
Cj4gCg==
----_com.android.email_1462209507407830
Content-Type: text/html; charset=utf-8
Content-Transfer-Encoding: base64
PGh0bWw+PGhlYWQ+PG1ldGEgaHR0cC1lcXVpdj0iQ29udGVudC1UeXBlIiBjb250ZW50PSJ0ZXh0
L2h0bWw7IGNoYXJzZXQ9VVRGLTgiPjwvaGVhZD48Ym9keSA+PGRpdj5PbiB0aGUgb3RoZXIgaGFu
ZCwgY2hhbmdpbmcgYSBqYXIgaW4gdGhlIHJ1bnRpbWUgZW52aXJvbm1lbnQgd2l0aG91dCBjb21w
aWxpbmcgYW5kIHJ1bm5pbmcgdGVzdCB3aXRoIHRoZSBuZXcgamFyIGNvdWxkIGxlYWQgYW4gYXBw
bGljYXRpb24gdG8gc3RvcCBmdW5jdGlvbmluZyBpbiBhIGN1c3RvbWVyIGVudmlyb25tZW50Ljwv
ZGl2PjxkaXY+QWxzbyBub3QgZXZlcnkgYnVnIGZvdW5kIGluIGEgZGVwZW5kZW5jeSBqYXIgd291
bGQgY2F1c2UgYSBwcm9ibGVtIGluIHRoZSBhcHBsaWNhdGlvbi4gKEFuIGFwcGxpY2F0aW9uIG1p
Z2h0IG5vdCB1c2UgdGhlIHByb2JsZW1hdGljIHBhcnQgb2YgdGhlIGRlcGVuZGVuY3kuKTwvZGl2
PjxkaXY+SSdkIGJldHRlciB0cnVzdCB0aGUgdGVzdCBzdWl0ZSAoYXV0b21hdGljIGFuZCBtYW51
YWwpIHRoYXQgd2UgcnVuIG9uIHRoZSBjb21waWxlZCBhcHBsaWNhdGlvbiB3aXRoIGFsbCB0aGUg
ZGVwZW5kZW5jaWVzIHRoYXQgdGhlIGRldmVsb3BlcnMgY2hvb3NlIGF0IHRoZSBkZXZlbG9wbWVu
dCB0aW1lIGFuZCB0aGVuIGRlbGl2ZXIgdGhhdCAod2l0aCBpdHMgZGVwZW5kZW5jaWVzIGFzIGEg
c2luZ2xlIHBhY2thZ2UpIHRvIHRoZSBjdXN0b21lcnMuPC9kaXY+PGRpdj5FdmVyeSBidWcgaW4g
YSBkZXBlbmRlbmN5IHNob3VsZCBiZSBldmFsdWF0ZWQgd2l0aGluIHRoZSBnaXZlbiBhcHBsaWNh
dGlvbiBzY29wZSBhbmQgb25seSBpZiBwcm92ZW4gYXMgdGhlIGdpdmVuIGFwcGxpY2F0aW9uIHBy
b2JsZW0gb25seSB0aGVuIHRoZSBhcHBsaWNhdGlvbiBzaG91bGQgYmUgcmVsZWFzZWQuPC9kaXY+
PGRpdj48YnI+PC9kaXY+PGRpdj48YnI+PC9kaXY+PGRpdj48ZGl2IHN0eWxlPSJmb250LXNpemU6
NzUlO2NvbG9yOiM1NzU3NTciPlNlbnQgZnJvbSBTYW1zdW5nIE1vYmlsZTwvZGl2PjwvZGl2Pjxi
cj48YnI+PGJyPi0tLS0tLS0tIE9yaWdpbmFsIG1lc3NhZ2UgLS0tLS0tLS08YnI+RnJvbTogQWxv
biBCYXItTGV2ICZsdDthbG9uYmxAcmVkaGF0LmNvbSZndDsgPGJyPkRhdGU6IDA3LzA1LzIwMTQg
IDIxOjQxICAoR01UKzAyOjAwKSA8YnI+VG86IE1pa2UgS29sZXNuaWsgJmx0O21rb2xlc25pQHJl
ZGhhdC5jb20mZ3Q7IDxicj5DYzogWWV2Z2VueSBaYXNwaXRza3kgJmx0O3l6YXNwaXRzQHJlZGhh
dC5jb20mZ3Q7LGRldmVsQG92aXJ0Lm9yZyA8YnI+U3ViamVjdDogUmU6IFtvdmlydC1kZXZlbF0g
Y29tbW9ucy1jb2xsZWN0aW9ucyB2NC4wIDxicj4gPGJyPjxicj48YnI+PGJyPi0tLS0tIE9yaWdp
bmFsIE1lc3NhZ2UgLS0tLS08YnI+Jmd0OyBGcm9tOiAiTWlrZSBLb2xlc25payIgJmx0O21rb2xl
c25pQHJlZGhhdC5jb20mZ3Q7PGJyPiZndDsgVG86ICJBbG9uIEJhci1MZXYiICZsdDthbG9uYmxA
cmVkaGF0LmNvbSZndDs8YnI+Jmd0OyBDYzogIllldmdlbnkgWmFzcGl0c2t5IiAmbHQ7eXphc3Bp
dHNAcmVkaGF0LmNvbSZndDssIGRldmVsQG92aXJ0Lm9yZzxicj4mZ3Q7IFNlbnQ6IFdlZG5lc2Rh
eSwgTWF5IDcsIDIwMTQgOTozNDowMyBQTTxicj4mZ3Q7IFN1YmplY3Q6IFJlOiBbb3ZpcnQtZGV2
ZWxdIGNvbW1vbnMtY29sbGVjdGlvbnMgdjQuMDxicj4mZ3Q7IDxicj4mZ3Q7IC0tLS0tIE9yaWdp
bmFsIE1lc3NhZ2UgLS0tLS08YnI+Jmd0OyAmZ3Q7IDxicj4mZ3Q7ICZndDsgPGJyPiZndDsgJmd0
OyAtLS0tLSBPcmlnaW5hbCBNZXNzYWdlIC0tLS0tPGJyPiZndDsgJmd0OyAmZ3Q7IEZyb206ICJZ
ZXZnZW55IFphc3BpdHNreSIgJmx0O3l6YXNwaXRzQHJlZGhhdC5jb20mZ3Q7PGJyPiZndDsgJmd0
OyAmZ3Q7IFRvOiAiQWxvbiBCYXItTGV2IiAmbHQ7YWxvbmJsQHJlZGhhdC5jb20mZ3Q7PGJyPiZn
dDsgJmd0OyAmZ3Q7IENjOiBkZXZlbEBvdmlydC5vcmc8YnI+Jmd0OyAmZ3Q7ICZndDsgU2VudDog
VHVlc2RheSwgQXByaWwgMjIsIDIwMTQgMTE6Mzk6MTEgQU08YnI+Jmd0OyAmZ3Q7ICZndDsgU3Vi
amVjdDogUmU6IFtvdmlydC1kZXZlbF0gY29tbW9ucy1jb2xsZWN0aW9ucyB2NC4wPGJyPiZndDsg
Jmd0OyAmZ3Q7IDxicj4mZ3Q7ICZndDsgJmd0OyBUaGF0IG1lYW5zIHRoYXQgd2UgbWFuYWdlIDIg
c2VwYXJhdGUgZW52aXJvbm1lbnRzOjxicj4mZ3Q7ICZndDsgJmd0OyAxLiBEZXZlbG9wbWVudCAt
IHJlbGllcyBvbiBwb20gZmlsZXMuIEUuZy4gdW5pdCB0ZXN0cyBydW4gd2l0aDxicj4mZ3Q7ICZn
dDsgJmd0OyBjb21tb25zLWNvbGxlY3Rpb25zIHYzLjEgKGFuZCB3aGVuIEkgYWRkIHY0LjApIGFu
ZCBzdWNjZWVkLjxicj4mZ3Q7ICZndDsgPGJyPiZndDsgJmd0OyBkZXZlbnYgd2lsbCB1c2UgcnVu
dGltZSBvcHRpb24uPGJyPiZndDsgJmd0OyB5b3UgYXJlIHJpZ2h0IGFib3V0IHRoZSB1bml0IHRl
c3RzLCB0aGVzZSByZWxheXMgb24gdGhlIHBvbXMuPGJyPiZndDsgPGJyPiZndDsgSSB1c2UgZGV2
ZW52IGFuZCBpdCBhbHdheXMgdXNlcyB0aGUgZGV2IG9wdGlvbiBub3QgdGhlIHJ1bnRpbWUuPGJy
PiZndDsgU28gYmFzaWNhbGx5IGRldmVsb3BlcnMgYXJlIHVzaW5nIHRoZSBwb20gc3BlY2lmaWVk
IHZlcnNpb25zIGFuZCBub3Qgd2hhdDxicj4mZ3Q7IHVzZWQgaW4gcnVudGltZS48YnI+Jmd0OyA8
YnI+Jmd0OyBFdmVuIG1vcmUgc28sIGluIHJ1bnRpbWUgaXQgaGlnaGx5IGRlcGVuZHMgb24gd2hh
dCBPUyB5b3UncmUgdXNpbmcsIHNvPGJyPiZndDsgc29tZW9uZTxicj4mZ3Q7IGRldmVsb3Bpbmcg
b24gRjE5IG1pZ2h0IG5vdCBiZSB1c2luZyBzYW1lIHZlcnNpb25zIGFzIGEgZGV2ZWxvcGVyIG9u
IEYyMCBhbmQ8YnI+Jmd0OyBib3RoIGFyZSBwcm9iYWJseSB2ZXJ5IGRpZmZlcmVudCB2ZXJzaW9u
cyB0aGFuIG9uIFJIRUwvQ2VudE9TLjxicj4mZ3Q7IEkgd29uJ3QgZXZlbiBtZW50aW9uIG90aGVy
IE9TYHMuPGJyPiZndDsgPGJyPiZndDsgJmd0OyA8YnI+Jmd0OyAmZ3Q7ICZndDsgMi4gUnVuLXRp
bWUgLSByZWxpZXMgb24gSkJvc3Mgb3duIGRlcGVuZGVuY2llcyB0aGF0IGJyaW5nPGJyPiZndDsg
Jmd0OyAmZ3Q7IGNvbW1vbnMtY29sbGVjdGlvbjxicj4mZ3Q7ICZndDsgJmd0OyB2My4yLjEtcmVk
aGF0LTIuPGJyPiZndDsgJmd0OyA8YnI+Jmd0OyAmZ3Q7IGluIHJoZWwgY2FzZSwgeWVzLjxicj4m
Z3Q7ICZndDsgPGJyPiZndDsgJmd0OyAmZ3Q7IFRoaXMga2luZCBvZiBkaXNjcmVwYW5jaWVzIG1p
Z2h0IGJlIGZvdW5kIGluIG90aGVyIGxpYnJhcmllcyBhcyB3ZSBkbyBub3Q8YnI+Jmd0OyAmZ3Q7
ICZndDsgc3luY2hyb25pemUgb3VyIHBvbSBmaWxlcyB3aXRoIHRoZSBKQm9zcyBjdXJyZW50IHZl
cnNpb24gZGVwZW5kZW5jaWVzLjxicj4mZ3Q7ICZndDsgJmd0OyBJTUhPIHRoYXQgY291bGQgbGVh
ZCB0byBzb21lIHZlcnkgZGlmZmljdWx0IGJ1Z3MgdGhhdCB3ZSB3b24ndCBiZSBhYmxlIHRvPGJy
PiZndDsgJmd0OyAmZ3Q7IHNpbXVsYXRlIGluIG91ciB1bml0IHRlc3RzLjxicj4mZ3Q7ICZndDsg
PGJyPiZndDsgJmd0OyBjb3JyZWN0LCBidXQgdGhlIGphdmEgd2F5IHRvIHB1bGwgZGVwZW5kZW5j
aWVzIGF0IHdpbGwgd2l0aG91dCBiZWluZyBhYmxlPGJyPiZndDsgJmd0OyB0bzxicj4mZ3Q7ICZn
dDsgZml4IHotc3RyZWFtIHVzaW5nIGNlbnRyYWwgcGFja2FnZSBtYW5hZ2VtZW50IHRvb2xzIGlz
IG1vcmUgc2V2ZXJlIHRoYW48YnI+Jmd0OyAmZ3Q7IHVuaXQ8YnI+Jmd0OyAmZ3Q7IHRlc3RzIG5v
dCB3b3JraW5nL25vdCB3b3JraW5nLjxicj4mZ3Q7ICZndDsgPGJyPiZndDsgJmd0OyBmb3IgZXhh
bXBsZSwgeW91ciBhcHBsaWNhdGlvbiB1c2VzIHguamFyIGFuZCBhY3R1YWxseSBkZWxpdmVycyB4
Lmphci4uLiBzbzxicj4mZ3Q7ICZndDsgZnJvbSByZWxlYXNlIHRvIGV0ZXJuaXR5IGl0IGlzIHlv
dXIgcmVzcG9uc2liaWxpdHkgdG8gdHJhY2sgeC5qYXIgZm9yPGJyPiZndDsgJmd0OyBzZXZlcmU8
YnI+Jmd0OyAmZ3Q7IHN0YWJpbGl0eSBidWdzIGFuZCBzZWN1cml0eSBidWdzLCBhbmQgcmVsZWFz
ZSB5b3VyIGVudGlyZSBhcHBsaWNhdGlvbiBlYWNoPGJyPiZndDsgJmd0OyB0aW1lIGZvdW5kLCBu
b3cgbXVsdGlwbGUgaXQgd2l0aCB0aGUgIyBvZiBjb21wb25lbnRzIGFwcGxpY2F0aW9uIGlzIHVz
aW5nPGJyPiZndDsgJmd0OyBhbmQgc2VlIGhvdyBtdWNoIGVmZm9ydCB5b3UgaGF2ZSBqdXN0IHRv
IG1haW50YWluIHN0YWJpbGl0eSBhbmQgc2VjdXJpdHkgaWY8YnI+Jmd0OyAmZ3Q7IHlvdSBlbWJl
ZCAzcmQgcGFydHkgY29tcG9uZW50cyB3aXRob3V0IHlvdXIgYXBwbGljYXRpb24uPGJyPiZndDsg
PGJyPiZndDsgWWVzLCBpZiB5b3UgdXNlIHBhY2thZ2UgWCB0aGVuIHlvdSdyZSB1c2luZyB0aGF0
IHNwZWNpZmljIHZlcnNpb24gd2l0aCBpdCdzPGJyPiZndDsgYmVoYXZpb3VyIGFuZCBBUEksIHRo
aXMgaXMgd2h5IGRlcGVuZGVuY2llcyBhcmVuJ3QgdXBkYXRlZCBsaWdodCBoZWFkZWRseSBidXQ8
YnI+Jmd0OyB3aXRoIHRlc3RpbmcgdG8gc2VlIHRoYXQgbm90aGluZyBicm9rZSAoc2luY2Ugc3R1
ZmYgZG9lcyBicmVhaywgZXZlbiBpbiBtaW5vcjxicj4mZ3Q7IHZlcnNpb24sIGFzIHdlIGxlYXZl
IGluIGEgbm90IHNvIHBlcmZlY3Qgd29ybGQpLjxicj4mZ3Q7IDxicj4mZ3Q7ICZndDsgPGJyPiZn
dDsgJmd0OyAmZ3Q7IFdoeSBkbyB3ZSBhdm9pZCAidG8gbWFpbnRhaW4gb3VyIG93biBwYWNrYWdp
bmciPyBJTUhPIE92aXJ0IG93bjxicj4mZ3Q7ICZndDsgJmd0OyBkZXBlbmRlbmNpZXM8YnI+Jmd0
OyAmZ3Q7ICZndDsgY291bGQgYmUgcGFja2VkIGluIHRoZSB3YXIsIGNhbid0IHRoZXk/PGJyPiZn
dDsgJmd0OyA8YnI+Jmd0OyAmZ3Q7IHllcyB0aGV5IGNvdWxkLCBidXQgdGhpcyBpcyBub3Qgc3Vp
dGFibGUgZm9yIGVudGVycHJpc2UgZ3JhZGU8YnI+Jmd0OyAmZ3Q7IGltcGxlbWVudGF0aW9ucywg
bWFpbmx5IHBlciB3aGF0IEkgZGVzY3JpYmVkIGFib3ZlLjxicj4mZ3Q7IDxicj4mZ3Q7IFNvcnJ5
IGJ1dCBBRkFJSyBlbnRlcnByaXNlIGdyYWRlIHNvZnR3YXJlIHJlbGVhc2UgZml4ZXMgZm9yIHRo
ZWlyIHNvZnR3YXJlPGJyPiZndDsgb24gYSB0aW1lbHkgYmFzaXMgYW5kIGhhdmUgcHJvY2Vzc2Vz
IGluIHBsYWNlIHRvIG1hbmFnZSB1cGdyYWRlcyBvZjxicj4mZ3Q7IGZ1bmN0aW9uYWxpdHkuPGJy
PiZndDsgPGJyPiZndDsgV2hhdCBjdXJyZW50bHkgaXMgZG9uZSBpcyByZWx5aW5nIG9uIGNvdXJ0
ZXN5IG9mIG90aGVyIHBlb3BsZSB0byByZWxlYXNlIGE8YnI+Jmd0OyAiZml4IiB0aGF0IGFscmVh
ZHkgZXhpc3RzIGEgbG9uZyB0aW1lLjxicj4mZ3Q7IEFuZCBvZiBjb3Vyc2UsIGFzIEkgbWVudGlv
bmVkLCB0aGUgYXBwbGljYXRpb24gbmVlZHMgdG8gYmUgdGVzdGVkIHdpdGggdGhlPGJyPiZndDsg
dXBkYXRlZCBsaWJyYXJ5Ljxicj4mZ3Q7IElNTyBuZWdsZWN0aW5nIHRoaXMgYW5kIGxlYXZpbmcg
dGhpcyBvdXQgb2YgYmFuZCBmb3IgImVudGVycHJpc2UgZ3JhZGUiPGJyPiZndDsgc29mdHdhcmUg
aXMgbXVjaCB3b3JzZSB0aGFuIGFjdHVhbGx5IHRlc3RpbmcgdG8gc2VlIHRoYXQgaXQgaXMgd29y
a2luZyBhbmQ8YnI+Jmd0OyBqdXN0IGxlYXZpbmcgaXQgYWxsIHRvIGNoYW5jZS48YnI+PGJyPuKA
jldlbGwsIHRha2UgdGhlIHJlY2VudCBleGFtcGxlIG9mIG9wZW5zc2wgaXNzdWUgdGhhdCB3YXMg
Zm91bmQuPGJyPk5vdywgaW1hZ2luZSB0aGF0IGFsbCBwcm9kdWN0cyB0aGF0IHVzZSBvcGVuc3Ns
IHNob3VsZCBoYXZlIGJlZW4gcmUtcmVsZWFzZWQuPGJyPkkgdGhpbmsgdGhpcyBpcyBlbm91Z2gg
dG8gdW5kZXJzdGFuZCBob3cgd3JvbmcgdGhpcyBpcy48YnI+PGJyPiZndDsgPGJyPiZndDsgJmd0
OyA8YnI+Jmd0OyAmZ3Q7IFJlZ2FyZHMsPGJyPiZndDsgJmd0OyBBbG9uPGJyPiZndDsgJmd0OyA8
YnI+Jmd0OyAmZ3Q7ICZndDsgQmVzdCByZWdhcmRzLDxicj4mZ3Q7ICZndDsgJmd0OyBfX19fX19f
X19fX19fX19fX19fXzxicj4mZ3Q7ICZndDsgJmd0OyBZZXZnZW55IFphc3BpdHNreTxicj4mZ3Q7
ICZndDsgJmd0OyBTZW5pb3IgU29mdHdhcmUgRW5naW5lZXI8YnI+Jmd0OyAmZ3Q7ICZndDsgUmVk
IEhhdCBJc3JhZWw8YnI+Jmd0OyAmZ3Q7ICZndDsgPGJyPiZndDsgJmd0OyAmZ3Q7IDxicj4mZ3Q7
ICZndDsgJmd0OyAtLS0tLSBPcmlnaW5hbCBNZXNzYWdlIC0tLS0tPGJyPiZndDsgJmd0OyAmZ3Q7
IEZyb206ICJBbG9uIEJhci1MZXYiICZsdDthbG9uYmxAcmVkaGF0LmNvbSZndDs8YnI+Jmd0OyAm
Z3Q7ICZndDsgVG86ICJZZXZnZW55IFphc3BpdHNreSIgJmx0O3l6YXNwaXRzQHJlZGhhdC5jb20m
Z3Q7PGJyPiZndDsgJmd0OyAmZ3Q7IENjOiBkZXZlbEBvdmlydC5vcmc8YnI+Jmd0OyAmZ3Q7ICZn
dDsgU2VudDogU3VuZGF5LCBBcHJpbCAxMywgMjAxNCA3OjIyOjE4IFBNPGJyPiZndDsgJmd0OyAm
Z3Q7IFN1YmplY3Q6IFJlOiBbb3ZpcnQtZGV2ZWxdIGNvbW1vbnMtY29sbGVjdGlvbnMgdjQuMDxi
cj4mZ3Q7ICZndDsgJmd0OyA8YnI+Jmd0OyAmZ3Q7ICZndDsgPGJyPiZndDsgJmd0OyAmZ3Q7IDxi
cj4mZ3Q7ICZndDsgJmd0OyAtLS0tLSBPcmlnaW5hbCBNZXNzYWdlIC0tLS0tPGJyPiZndDsgJmd0
OyAmZ3Q7ICZndDsgRnJvbTogIllldmdlbnkgWmFzcGl0c2t5IiAmbHQ7eXphc3BpdHNAcmVkaGF0
LmNvbSZndDs8YnI+Jmd0OyAmZ3Q7ICZndDsgJmd0OyBUbzogZGV2ZWxAb3ZpcnQub3JnPGJyPiZn
dDsgJmd0OyAmZ3Q7ICZndDsgU2VudDogU3VuZGF5LCBBcHJpbCAxMywgMjAxNCA3OjEzOjEwIFBN
PGJyPiZndDsgJmd0OyAmZ3Q7ICZndDsgU3ViamVjdDogW292aXJ0LWRldmVsXSBjb21tb25zLWNv
bGxlY3Rpb25zIHY0LjA8YnI+Jmd0OyAmZ3Q7ICZndDsgJmd0OyA8YnI+Jmd0OyAmZ3Q7ICZndDsg
Jmd0OyBIaSBBbGwsPGJyPiZndDsgJmd0OyAmZ3Q7ICZndDsgPGJyPiZndDsgJmd0OyAmZ3Q7ICZn
dDsgSSdkIGxpa2UgdG8gYWRkIHRoZSBuZXcgdmVyc2lvbiAoNC4wKSBvZiBBcGFjaGUgY29tbW9u
cy1jb2xsZWN0aW9uczxicj4mZ3Q7ICZndDsgJmd0OyAmZ3Q7IGxpYnJhcnk8YnI+Jmd0OyAmZ3Q7
ICZndDsgJmd0OyB0byB0aGUgZGVwZW5kZW5jaWVzIG9mIHRoZSBwcm9qZWN0ICh3ZSB1c2UgMy4x
IGN1cnJlbnRseSkuPGJyPiZndDsgJmd0OyAmZ3Q7ICZndDsgVGhlIG5ldyB2ZXJzaW9uIHVzZXMg
dGhlIGdlbmVyaWNzIGZlYXR1cmVzIG9mIEphdmEgNSBzbyB0aGF0IG1ha2UgdGhlPGJyPiZndDsg
Jmd0OyAmZ3Q7ICZndDsgY29kZTxicj4mZ3Q7ICZndDsgJmd0OyAmZ3Q7IG1vcmUgdHlwZSBzYWZl
LiBZb3UgY2FuIGZpbmQgdGhlIGZ1bGwgbGlzdCBvZiBjaGFuZ2VzIG9uPGJyPiZndDsgJmd0OyAm
Z3Q7ICZndDsgaHR0cHM6Ly9jb21tb25zLmFwYWNoZS5vcmcvcHJvcGVyL2NvbW1vbnMtY29sbGVj
dGlvbnMvcmVsZWFzZV80XzAuaHRtbC48YnI+Jmd0OyAmZ3Q7ICZndDsgJmd0OyBUaGUgbmV3IEFQ
SSBpcyBiYXNlZCBvbiB0aGUgb3JpZ2luYWwgYnV0IGl0IGlzbid0IGZ1bGx5IGNvbXBhdGlibGUg
d2l0aDxicj4mZ3Q7ICZndDsgJmd0OyAmZ3Q7IGl0Ljxicj4mZ3Q7ICZndDsgJmd0OyAmZ3Q7IFNv
IGluIG9yZGVyIHRvIG1ha2UgdGhlIG1pZ3JhdGlvbiB0byB0aGUgbmV3IEFQSSBlYXNpZXIsIHRo
ZSBwYWNrYWdlPGJyPiZndDsgJmd0OyAmZ3Q7ICZndDsgaGFzPGJyPiZndDsgJmd0OyAmZ3Q7ICZn
dDsgYmVlbiBjaGFuZ2VkIHRvIG9yZy5hcGFjaGUuY29tbW9ucy5jb2xsZWN0aW9uczQuIFRoYXQg
YWxsb3dzIGhhdmluZzxicj4mZ3Q7ICZndDsgJmd0OyAmZ3Q7IGJvdGg8YnI+Jmd0OyAmZ3Q7ICZn
dDsgJmd0OyB2ZXJzaW9uIG9mIHRoZSBsaWJyYXJ5IGluIHRoZSBjbGFzc3BhdGggYXQgdGhlIHN0
YXJ0aW5nIHBvaW50IGFuZCBtb3ZlPGJyPiZndDsgJmd0OyAmZ3Q7ICZndDsgKHJlZmFjdG9yKSB0
b3dhcmRzIHRoZSBuZXcgdmVyc2lvbiBncmFkdWFsbHkuPGJyPiZndDsgJmd0OyAmZ3Q7ICZndDsg
PGJyPiZndDsgJmd0OyAmZ3Q7ICZndDsgSSBoYXZlIGNvdXBsZSBvZiBxdWVzdGlvbnMgcmVnYXJk
aW5nIHRoZSBuZXcgZGVwZW5kZW5jeTo8YnI+Jmd0OyAmZ3Q7ICZndDsgJmd0OyAxLiBJcyB0aGVy
ZSBhbnl0aGluZyB0aGF0IGNvdWxkIHByZXZlbnQgYWRkaW5nIHRoZSBuZXcgZGVwZW5kZW5jeT88
YnI+Jmd0OyAmZ3Q7ICZndDsgPGJyPiZndDsgJmd0OyAmZ3Q7IFdlIHRyeSB0byBhdm9pZCBpbnRy
b2R1Y2luZyBvdXIgb3duIGRlcGVuZGVuY2llcywgaW4gdGhpcyBjYXNlIHdlIHVzZTxicj4mZ3Q7
ICZndDsgJmd0OyB3aGF0ZXZlciBqYm9zcyBwcm92aWRlcyB3aGljaCBpcyB2ZXJ5IGNvbWZvcnRh
YmxlIGFzIHdlIGRvIG5vdCBuZWVkIHRvPGJyPiZndDsgJmd0OyAmZ3Q7IG1haW50YWluIG91ciBv
d24gcGFja2FnaW5nLjxicj4mZ3Q7ICZndDsgJmd0OyA8YnI+Jmd0OyAmZ3Q7ICZndDsgQ3VycmVu
dGx5IHRoZSBqYmVhcCBkb2VzIG5vdCBwcm92aWRlIDQuMCwgaXQgZG9lcyBzdXBwb3J0IDMuMi4x
LXJlZGhhdC0yLDxicj4mZ3Q7ICZndDsgJmd0OyBzbzxicj4mZ3Q7ICZndDsgJmd0OyBiZXR0ZXIg
dG8gYXZvaWQgdGhpcyB1bnRpbCB3ZSBzd2l0Y2ggdG8gbW9yZSByZWNlbnQgdmVyc2lvbiBvZiBq
Ym9zcy48YnI+Jmd0OyAmZ3Q7ICZndDsgPGJyPiZndDsgJmd0OyAmZ3Q7IEFsdGVybmF0aXZlbHkg
d2UgY291bGQgZW5qb3kgc3RhbmRhbG9uZSBycG0gd2l0aGluIHJoZWwvY2VudG9zIGlmPGJyPiZn
dDsgJmd0OyAmZ3Q7IGF2YWlsYWJsZSw8YnI+Jmd0OyAmZ3Q7ICZndDsgaG93ZXZlciBub24gZXhp
c3QuPGJyPiZndDsgJmd0OyAmZ3Q7IDxicj4mZ3Q7ICZndDsgJmd0OyAmZ3Q7IDIuIEkgZGlkIHRo
ZSBjaGFuZ2UgKGh0dHA6Ly9nZXJyaXQub3ZpcnQub3JnLzI2NzQ1KS48YnI+Jmd0OyAmZ3Q7ICZn
dDsgJmd0OyZuYnNwOyZuYnNwOyZuYnNwOyBUaGUgdW5pdCB0ZXN0cyB0aGF0IHVzZSB0aGUgbmV3
IGRlcGVuZGVuY3kgcGFzcyBsb2NhbGx5IGFuZCBpbjxicj4mZ3Q7ICZndDsgJmd0OyAmZ3Q7Jm5i
c3A7Jm5ic3A7Jm5ic3A7IEplbmtpbnM8YnI+Jmd0OyAmZ3Q7ICZndDsgJmd0OyZuYnNwOyZuYnNw
OyZuYnNwOyBlbnZpcm9ubWVudHMuPGJyPiZndDsgJmd0OyAmZ3Q7ICZndDsmbmJzcDsmbmJzcDsm
bmJzcDsgSG93ZXZlciB3aGVuIEkgdHJ5IHRvIHJ1biBhIGNvZGUgdGhhdCBpcyBkZXBlbmRlbnQg
b24gdGhlIG5ld2x5PGJyPiZndDsgJmd0OyAmZ3Q7ICZndDsmbmJzcDsmbmJzcDsmbmJzcDsgYWRk
ZWQ8YnI+Jmd0OyAmZ3Q7ICZndDsgJmd0OyZuYnNwOyZuYnNwOyZuYnNwOyBsaWJyYXJ5IE5vQ2xh
c3NEZWZGb3VuZEVycm9yIGJlaW5nIHRocm93bi48YnI+Jmd0OyAmZ3Q7ICZndDsgJmd0OyZuYnNw
OyZuYnNwOyZuYnNwOyBBbHNvIEkgY2FuJ3QgZmluZCBjb21tb25zLWNvbGxlY3Rpb25zNCBqYXIg
dW5kZXIgdGhlIGluc3RhbGxhdGlvbjxicj4mZ3Q7ICZndDsgJmd0OyAmZ3Q7Jm5ic3A7Jm5ic3A7
Jm5ic3A7IGRpcmVjdG9yeS4gSSB1c2UgIm1ha2UgY2xlYW4gaW5zdGFsbC1kZXYiIGNvbW1hbmQg
Zm9yIGJ1aWxkaW5nLjxicj4mZ3Q7ICZndDsgJmd0OyAmZ3Q7IDxicj4mZ3Q7ICZndDsgJmd0OyAm
Z3Q7IFBsZWFzZSBhZHZpc2UuPGJyPiZndDsgJmd0OyA8YnI+Jmd0OyA8YnI+PC9ib2R5Pg==
----_com.android.email_1462209507407830--
10 years, 7 months
[VDSM] [PATCH] Add the missing locked() interface
by Nir Soffer
threading.Lock has a little known locked() method, documented in
https://docs.python.org/2.6/library/thread.html#thread.lock.locked
This method is not very useful, but since pthreading.Lock must be
drop-in replacment for threading.Lock, we must implement it.
This patch adds the missing method, implementing it in the same way
Python implemnts it. Since RLock does not have this method, RLock does
not extend Lock now.
Signed-off-by: Nir Soffer <nsoffer(a)redhat.com>
---
pthreading.py | 18 ++++++++++++++----
tests.py | 7 +++++++
2 files changed, 21 insertions(+), 4 deletions(-)
diff --git a/pthreading.py b/pthreading.py
index 2e9e2d6..f1ea056 100644
--- a/pthreading.py
+++ b/pthreading.py
@@ -51,9 +51,9 @@ import os
import pthread
-class Lock(pthread.Mutex):
+class _Lock(pthread.Mutex):
"""
- Lock class mimics Python native threading.Lock() API on top of
+ _Lock class mimics Python native threading.Lock() API on top of
the POSIX thread mutex synchronization primitive.
"""
def __enter__(self):
@@ -78,9 +78,19 @@ class Lock(pthread.Mutex):
self.unlock()
-class RLock(Lock):
+class Lock(_Lock):
+ def locked(self):
+ # Yes, this is horrible hack, and the same one used by Python
+ # threadmodule.c. But this is part of Python lock interface.
+ if self.acquire(blocking=False):
+ self.release()
+ return False
+ return True
+
+
+class RLock(_Lock):
def __init__(self):
- pthread.Mutex.__init__(self, recursive=True)
+ _Lock.__init__(self, recursive=True)
class Condition(object):
diff --git a/tests.py b/tests.py
index d651288..f4c9746 100644
--- a/tests.py
+++ b/tests.py
@@ -60,6 +60,13 @@ class LockTests(TestCaseBase):
self.assertTrue(lock.acquire())
self.assertTrue(lock.acquire(False))
+ def testLocked(self):
+ lock = pthreading.Lock()
+ self.assertFalse(lock.locked())
+ with lock:
+ self.assertTrue(lock.locked())
+ self.assertFalse(lock.locked())
+
class Flag(object):
def __init__(self):
--
1.8.3.1
10 years, 7 months
just merged the look-and-feel patch -- rebase!
by Greg Sheremeta
Hi,
We just merged the look-and-feel patch [1]. The patch is gigantic and touches most parts of the UI, so please do a rebase immediately if you're doing any kind of UI work.
If you see any UI look/feel bugs (like things out of place, bad alignment, etc.), open a BZ and assign to me.
Thanks!
Greg
[1] http://gerrit.ovirt.org/#/c/24594/
Greg Sheremeta
Red Hat, Inc.
Sr. Software Engineer, RHEV
Cell: 919-807-1086
gshereme(a)redhat.com
10 years, 7 months