Tuesday, 2018-09-25

*** dpawlik has joined #openstack-cinder00:00
*** dpawlik has quit IRC00:04
*** zigo has quit IRC00:05
*** zigo has joined #openstack-cinder00:09
*** mriedem_away has quit IRC00:10
*** mvkr has quit IRC00:27
*** lixiaoy1 has joined #openstack-cinder00:29
*** brinzhang has joined #openstack-cinder00:31
*** icey has quit IRC00:36
*** mvkr has joined #openstack-cinder00:38
*** LiangFang has joined #openstack-cinder00:42
*** icey has joined #openstack-cinder01:02
openstackgerritVipin Balachandran proposed openstack/cinder master: VMware: Implement retype  https://review.openstack.org/60494801:05
*** erlon has quit IRC01:21
*** zhaochao has joined #openstack-cinder01:22
*** swamireddy has joined #openstack-cinder01:31
*** swamireddy has joined #openstack-cinder01:31
openstackgerritSam Morrison proposed openstack/cinder master: Include availability-zone of a pool in get-pools API request  https://review.openstack.org/59986601:35
*** mmethot has quit IRC01:41
*** Dinesh_Bhor has joined #openstack-cinder01:41
*** Bhujay has joined #openstack-cinder02:29
*** dave-mccowan has quit IRC02:29
*** Bhujay has quit IRC02:30
*** Bhujay has joined #openstack-cinder02:30
*** sapd1_ has quit IRC02:37
*** sapd1 has joined #openstack-cinder02:39
*** psachin has joined #openstack-cinder02:43
*** hoangcx has quit IRC02:45
*** hoangcx has joined #openstack-cinder02:45
*** imacdonn has quit IRC02:50
*** dave-mccowan has joined #openstack-cinder02:50
*** imacdonn has joined #openstack-cinder02:50
openstackgerritMerged openstack/cinder master: api-ref: mark name as optional in volume create API  https://review.openstack.org/60480303:32
openstackgerritMerged openstack/cinder stable/pike: VMware: Improve scalability of querying volumes  https://review.openstack.org/60440803:33
*** Bhujay has quit IRC03:41
openstackgerritiain MacDonnell proposed openstack/os-brick master: Don't give up on iscsiadm -m session  https://review.openstack.org/60496103:42
*** Dinesh_Bhor has joined #openstack-cinder03:49
LiangFangDoes any export know how to enable python3 for cinder? I mean if the environment only have python3 installed, how to run cinder? thanks.03:50
*** dpawlik has joined #openstack-cinder04:00
*** hoangcx has quit IRC04:01
*** Dinesh_Bhor has quit IRC04:01
*** hoangcx has joined #openstack-cinder04:01
*** dpawlik has quit IRC04:05
*** vivsoni has quit IRC04:08
*** vivsoni has joined #openstack-cinder04:18
*** rcernin has quit IRC04:24
*** e0ne has joined #openstack-cinder04:28
*** Dinesh_Bhor has joined #openstack-cinder04:34
*** Bhujay has joined #openstack-cinder04:37
*** rcernin has joined #openstack-cinder04:37
*** vivsoni has quit IRC04:48
*** e0ne has quit IRC04:51
*** vivsoni has joined #openstack-cinder04:58
*** Dinesh_Bhor has quit IRC05:00
openstackgerritVivek Soni proposed openstack/cinder stable/rocky: 3PAR: Update Storage Driver docs  https://review.openstack.org/60344805:03
*** Dinesh_Bhor has joined #openstack-cinder05:08
*** e0ne has joined #openstack-cinder05:09
*** e0ne has quit IRC05:10
*** rcernin_ has joined #openstack-cinder05:17
*** lbragstad has quit IRC05:18
*** rcernin has quit IRC05:19
*** lbragstad has joined #openstack-cinder05:22
*** lbragstad has left #openstack-cinder05:23
*** vivsoni has quit IRC05:33
*** pcaruana has joined #openstack-cinder05:41
*** vivsoni has joined #openstack-cinder05:44
*** vivsoni has quit IRC05:49
*** vivsoni has joined #openstack-cinder05:49
*** belmoreira has joined #openstack-cinder05:59
*** Bhujay has quit IRC06:00
*** Bhujay has joined #openstack-cinder06:14
*** Bhujay has quit IRC06:15
*** Bhujay has joined #openstack-cinder06:16
*** dpawlik has joined #openstack-cinder06:21
openstackgerritLisaLi proposed openstack/cinder-specs master: Driver reinitialization after failure  https://review.openstack.org/59950506:21
*** brinzh has joined #openstack-cinder06:29
*** Bhujay has quit IRC06:32
*** brinzhang has quit IRC06:32
*** Bhujay has joined #openstack-cinder06:33
*** Luzi has joined #openstack-cinder06:53
*** lpetrut has joined #openstack-cinder06:54
*** lpetrut has quit IRC06:56
*** lpetrut has joined #openstack-cinder06:56
*** strigazi has joined #openstack-cinder06:56
*** rcernin_ has quit IRC07:05
*** icey has quit IRC07:05
*** Dinesh_Bhor has quit IRC07:07
*** Dinesh_Bhor has joined #openstack-cinder07:36
*** psachin has quit IRC07:41
*** alexchadin has joined #openstack-cinder07:42
*** psachin has joined #openstack-cinder07:49
*** e0ne has joined #openstack-cinder07:52
*** e0ne has quit IRC07:53
*** Dinesh_Bhor has quit IRC08:28
*** jiaopengju has quit IRC08:42
*** jiaopengju has joined #openstack-cinder08:42
*** Dinesh_Bhor has joined #openstack-cinder08:53
*** lixiaoy1 has quit IRC08:53
*** lixiaoy1 has joined #openstack-cinder08:54
openstackgerritMerged openstack/cinder master: Add policy granularity to the encryption API  https://review.openstack.org/57156308:55
*** e0ne has joined #openstack-cinder08:59
*** lixiaoy1 has quit IRC09:02
*** dpawlik has quit IRC09:05
*** dpawlik has joined #openstack-cinder09:06
*** zhubx007 has joined #openstack-cinder09:06
*** zhubx007 has quit IRC09:07
*** alexchadin has quit IRC09:12
*** alexchadin has joined #openstack-cinder09:16
*** Emine has joined #openstack-cinder09:18
*** vivsoni has quit IRC09:22
*** jackyzhu has joined #openstack-cinder09:25
*** jackyzhu has quit IRC09:29
*** vivsoni has joined #openstack-cinder09:32
openstackgerritsuguangfeng proposed openstack/cinder master: Fix create volume error  https://review.openstack.org/60502009:35
*** viveksoni has joined #openstack-cinder09:57
*** moshele has joined #openstack-cinder10:02
*** viveksoni has quit IRC10:09
*** e0ne has quit IRC10:12
*** luizbag has joined #openstack-cinder10:14
*** LiangFang has quit IRC10:22
*** Bhujay has quit IRC10:31
*** Bhujay has joined #openstack-cinder10:32
*** rcernin_ has joined #openstack-cinder10:43
*** rcernin_ has quit IRC10:52
*** alexchadin has quit IRC10:52
*** Dinesh_Bhor has quit IRC10:56
*** e0ne has joined #openstack-cinder10:58
*** erlon has joined #openstack-cinder11:00
*** ganso has joined #openstack-cinder11:03
*** pcaruana has quit IRC11:15
*** e0ne_ has joined #openstack-cinder11:22
*** e0ne has quit IRC11:25
*** raghavendrat has joined #openstack-cinder11:25
*** moshele has quit IRC11:27
*** brinzh has quit IRC11:29
*** moshele has joined #openstack-cinder11:33
tobias-urdinsmcginnis: sorry for ping, are you here?11:55
*** alexchadin has joined #openstack-cinder11:56
tobias-urdinhaving a issue with rocky, horizon uses cinderclient that calls the cinder v3 api with these requests11:57
tobias-urdinbut cinder responds with 400 bad request HTTP exception thrown: Invalid filters status are found in query options.11:57
tobias-urdinis this a bug or is the status field query option removed? or maybe cinder api has started enforcing query options and cinderclient was not updated?11:58
tobias-urdinsame for this call /v3/<project>/volumes/detail?bootable=1&status=available12:00
tobias-urdinHTTP exception thrown: Invalid filters bootable,status are found in query options.12:00
*** psachin has quit IRC12:07
tobias-urdinjungleboyj: sorry for ping, want to verify if this is intentional or a regression, a kind of big one if it is12:12
openstackgerritShay Halsband proposed openstack/cinder stable/queens: XtremIO: support multiattach  https://review.openstack.org/60505112:17
tobias-urdinfound it, probably a packaging issue /etc/cinder/resource_filters.json is not there12:18
tobias-urdinsorry for the noice12:18
*** raghavendrat has quit IRC12:19
*** tpsilva has joined #openstack-cinder12:24
*** vivsoni has quit IRC12:26
*** Bhujay has quit IRC12:31
*** Bhujay has joined #openstack-cinder12:32
*** Bhujay has quit IRC12:33
*** Bhujay has joined #openstack-cinder12:33
*** lpetrut has quit IRC12:33
*** alexchadin has quit IRC12:36
*** lpetrut has joined #openstack-cinder12:36
*** alexchadin has joined #openstack-cinder12:37
*** alexchadin has quit IRC12:37
*** alexchadin has joined #openstack-cinder12:37
*** alexchadin has quit IRC12:38
*** alexchadin has joined #openstack-cinder12:38
*** alexchadin has quit IRC12:38
*** alexchadin has joined #openstack-cinder12:39
*** alexchadin has quit IRC12:39
*** amoralej has joined #openstack-cinder12:47
*** alexchadin has joined #openstack-cinder12:49
*** alexchadin has quit IRC12:54
*** lbragstad has joined #openstack-cinder12:59
*** belmoreira has quit IRC13:05
*** lbragstad has quit IRC13:09
*** alexchadin has joined #openstack-cinder13:16
*** icey has joined #openstack-cinder13:28
*** dustins has joined #openstack-cinder13:28
*** belmoreira has joined #openstack-cinder13:29
luizbagsmcginnis, jungleboyj could we get some reviews on this: https://review.openstack.org/#/c/599720, please?13:30
*** jdillaman has quit IRC13:34
*** jdillaman has joined #openstack-cinder13:38
sayalilunkadhi! can anyone help me understand what the provider_location in the cinder volume db is supposed to be?13:48
openstackgerritTiago Pasqualini da Silva proposed openstack/cinder stable/queens: Fix IPv6 for Cinder NetApp ONTAP drivers  https://review.openstack.org/60508214:04
*** alexchadin has quit IRC14:07
openstackgerritMaciej Szwed proposed openstack/cinder master: Adding SPDK NVMe-oF target driver  https://review.openstack.org/57275914:08
openstackgerritMaciej Szwed proposed openstack/cinder master: Adding SPDK volume driver  https://review.openstack.org/56422914:08
*** e0ne_ has quit IRC14:10
*** e0ne has joined #openstack-cinder14:10
*** alexchadin has joined #openstack-cinder14:12
*** LiangFang has joined #openstack-cinder14:13
*** alexchadin has quit IRC14:17
*** alexchadin has joined #openstack-cinder14:19
*** mriedem has joined #openstack-cinder14:26
*** Luzi has quit IRC14:33
*** lixiaoy1 has joined #openstack-cinder14:33
*** moshele has quit IRC14:35
*** vivsoni has joined #openstack-cinder14:42
*** yikun has quit IRC14:47
*** dpawlik has quit IRC14:52
*** zhaochao has quit IRC14:55
*** dpawlik has joined #openstack-cinder14:57
*** alexchadin has quit IRC14:57
LiangFang@smcginnis regarding https://review.openstack.org/#/c/602571/, I added some comments, would you mind to give a review again?:)15:00
*** Bhujay has quit IRC15:03
*** david-lyle has quit IRC15:04
*** lpetrut has quit IRC15:04
*** dklyle has joined #openstack-cinder15:05
*** dave-mccowan has quit IRC15:14
*** sapd1_ has joined #openstack-cinder15:19
*** dpawlik has quit IRC15:25
*** LiangFang has quit IRC15:26
*** e0ne has quit IRC15:37
smcginnissayalilunkad: provider_location is up to each driver what they want to use it for.15:38
smcginnissayalilunkad: Some use it to store an internal storage device identifier, some stuff other useful information in there, some don't use it at all.15:38
smcginnisReally up to the driver maintainer if they want to use it and what they want to use it for,15:38
*** sapd1_ has quit IRC15:42
sayalilunkadsmcginnis: oh ok, thanks!15:44
imacdonngeguileo: you around?15:45
geguileobarely  XD15:45
imacdonngeguileo: :) Wonder if you saw my updates on https://review.openstack.org/#/c/604961/ ?15:46
imacdonner I mean https://bugs.launchpad.net/nova/+bug/173219915:46
openstackLaunchpad bug 1732199 in OpenStack Compute (nova) "test_extend_attached_volume fails with Unexpected compute_extend_volume result 'Error'" [Medium,Confirmed]15:46
geguileono, I didn't look at the bug today15:47
imacdonnThe short version is that os-brick is looking at the stderr of 'iscsiadm -m session' and deciding that it failed, when it actually only produced some warning-type text ... the exit status was 0 ... and this happens when another session is being established at the same time15:48
imacdonnmy assertion is that it should rely on the exit status, log the warning as a warning, and move on15:49
*** dustins has quit IRC15:49
geguileoimacdonn: were is the other connection being stablished? on the same service?15:49
imacdonnbut I don't know if there's some case where stderr, with an otherwise acceptable exit status, is bad15:49
imacdonngeguileo: no, it was from cinder-backup, at least in the case of the failure case in the bug15:50
mriedemimacdonn: ack, read your updates on the bug report, thanks for digging into that15:50
geguileothe problem is that os-brick is not using file locks15:51
mriedemso cinder-backup is running some periodic task or something? and that's why we hit this intermittently in the gate?15:51
imacdonnI assume it's just another test that tempest is running in parallel15:51
geguileocinder-backup should not have any periodic task afaik15:51
geguileoyup, that could be the case, os-brick should be using file locks15:51
geguileoand iirc it did in the past15:51
geguileoI don't know who removed them, or if I am imagining us using file locks in os-brick15:52
*** belmoreira has quit IRC15:52
mriedem2018-09-24 10:56:00.195771 | controller | {2} tempest.api.volume.test_volumes_backup.VolumesBackupsV39Test.test_update_backup [40.188674s] ... ok15:53
mriedem2018-09-24 10:55:33.251780 | controller | {1} tempest.api.volume.test_volumes_extend.VolumesExtendAttachedTest.test_extend_attached_volume [25.490844s] ... FAILED15:53
mriedemthere was a backup test running around the same time as the failed in-use extend test15:53
imacdonnit was probably the next backup test after that15:53
geguileoI'm looking at why we don't have file locks15:54
imacdonnoh no, that's right15:54
mriedemah here15:54
mriedem2018-09-24 10:54:56.689173 | controller | {2} tempest.api.volume.admin.test_volumes_backup.VolumesBackupsAdminTest.test_volume_backup_reset_status [42.044665s] ... ok15:54
mriedem2018-09-24 10:55:33.251780 | controller | {1} tempest.api.volume.test_volumes_extend.VolumesExtendAttachedTest.test_extend_attached_volume [25.490844s] ... FAILED15:54
imacdonnfailure was at 10:55:2615:54
mriedemsure, anyway, there was a backup test before and after the failure in the extend attached volume test15:54
imacdonngeguileo: didn't you (or someone) rework a lot of that code to allow it to work concurrently? the stuff around the manual rescan, etc.15:57
geguileoimacdonn: I reworked it so that it would be more robust and didn't fail all the time15:57
geguileoimacdonn: I was going to work on the concurrency on this release15:58
imacdonnah ok15:58
geguileoand the problem is that we cannot have Nova and Cinder running on the same nova15:58
geguileoand we need to use file locks in os-brick15:58
geguileo"on the same node"15:58
geguileonot on the same nova15:59
imacdonnwouldn't this be an issue if two nova threads tried to do iscsiadm things in parallel too?15:59
geguileowe have locks15:59
geguileothe problem is that they are just locks within the process16:00
*** lixiaoy1 has quit IRC16:00
imacdonn@synchronized('extend_volume') .... ok16:01
geguileommmmmm, that could still be a problem16:02
geguileobecause the locks we have are for connect/disconnect16:02
geguileobut extend uses a different one16:02
imacdonnoh, yeah, I went to check for that, and misread it ... I need more coffee16:03
imacdonnso yeah, that is a problem .. seems the lock should be higher-level .. like "this thing involves fiddling with the iscsi initiator"16:04
imacdonnalthough ... the extend case only needs to "read" an existing session16:05
imacdonnso if it can be made that the other tasks don't break that........16:05
geguileobut I'm still not sure why that command is puking... I only knew that iscsi concurrent connect/disconnect "may" run into errors16:05
imacdonnit's not actually failing .. it's just noting, on stderr, that there's an incomplete session that it can't get the info for16:06
imacdonn(is my interpretation)16:06
*** pcaruana has joined #openstack-cinder16:07
imacdonndo you know why os-brick is not just using the exit status?16:07
*** Emine has quit IRC16:12
*** dklyle has quit IRC16:40
*** dklyle has joined #openstack-cinder16:44
geguileoimacdonn: well, if it's not an error and the warning is going to stdout, then the parsing of that output will fail17:04
geguileoimacdonn: and we need that information for that code to work iirc17:04
imacdonngeguileo: parsing of what output ?17:04
geguileoimacdonn: the iscsiadm -m session command17:04
imacdonngeguileo: the output you want to parse goes to stdout, not stderr17:04
geguileoimacdonn: and is that warning going to stderr?17:05
imacdonngeguileo: yes17:05
jungleboyjtobias-urdin:  Thanks for the update.  Sorry I didn't respond earlier.17:05
geguileoimacdonn: then I don't know what it was checking to fail...  But in other cases were that same error has happened we were not getting status 017:06
geguileothough this could be a different case17:06
imacdonngeguileo: it does the usual check_exit_code thing .. 0, 21, 255 and something else are considered OK17:06
imacdonncheck_exit_code=[0, 1, 21, 255])17:07
geguileoOh, I think that was a 21 status code iirc17:07
imacdonn    ISCSI_ERR_NO_OBJS_FOUND - no records/targets/sessions/portals found to execute operation on.17:07
imacdonnthis is more troubling, though: 1 = ISCSI_ERR - generic error code.17:08
imacdonngeguileo: not sure why exit code 1 is considered acceptable here https://github.com/openstack/os-brick/blob/master/os_brick/initiator/connectors/iscsi.py#L1093-L109417:10
geguileoimacdonn: that, I don't know  :-(17:24
geguileoprobably it's before my time on OpenStack17:24
imacdonngeguileo: yeah, I suspect that a lot of this is due to the way iscsi behaved years ago17:25
imacdonngeguileo: think I'm going to revise my suggested fix to remove [1] from that check_exit_code list17:29
openstackgerritiain MacDonnell proposed openstack/os-brick master: 'iscsiadm -m session' failure handling  https://review.openstack.org/60496117:32
*** luizbag has quit IRC17:35
*** luizbag has joined #openstack-cinder17:39
*** amoralej is now known as amoralej|off17:52
openstackgerritRaunak Kumar proposed openstack/cinder master: nimble storage: retype support  https://review.openstack.org/60516618:19
openstackgerritRaunak Kumar proposed openstack/cinder master: nimble storage: retype support  https://review.openstack.org/60149218:23
openstackgerritRaunak Kumar proposed openstack/cinder master: nimble storage: retype support  https://review.openstack.org/60149218:26
openstackgerritRaunak Kumar proposed openstack/cinder master: nimble storage: retype support  https://review.openstack.org/60149218:28
openstackgerritMerged openstack/cinder stable/rocky: 3PAR: Update Storage Driver docs  https://review.openstack.org/60344818:30
openstackgerritRaunak Kumar proposed openstack/cinder master: nimble storage: retype support  https://review.openstack.org/60149218:37
*** dustins has joined #openstack-cinder18:48
openstackgerritRajat Dhasmana proposed openstack/cinder master: Fix multiattach set to false after retype  https://review.openstack.org/60404018:52
*** gouthamr has quit IRC18:52
*** gouthamr has joined #openstack-cinder19:12
openstackgerritChuck Short proposed openstack/cinder master: Remove unecessary pass  https://review.openstack.org/60517319:12
*** e0ne has joined #openstack-cinder19:41
*** erlon has quit IRC19:43
*** _alastor_ has joined #openstack-cinder19:50
*** dustins has quit IRC19:56
*** dustins has joined #openstack-cinder19:57
*** gouthamr_ has joined #openstack-cinder20:05
*** e0ne has quit IRC20:05
*** e0ne has joined #openstack-cinder20:19
*** luizbag has quit IRC20:24
*** gouthamr has quit IRC20:38
*** gouthamr_ is now known as gouthamr20:39
*** pcaruana has quit IRC20:43
*** e0ne has quit IRC20:43
*** dustins has quit IRC21:14
openstackgerritMerged openstack/cinder stable/rocky: VMAX Driver - Initiator retrieval short hostname fix  https://review.openstack.org/60159521:23
openstackgerritJon Bernard proposed openstack/cinder master: RBD: add support for multiattach  https://review.openstack.org/59582721:25
openstackgerritMerged openstack/cinder stable/rocky: LVM: Disable multiattach for LIO iSCSI target  https://review.openstack.org/59649321:27
mriedemis it possible to delete a volume type if there are volumes / snapshots that are using that type?21:34
smcginnismriedem: No, it shouldn't be.21:37
mriedemquestion came up on the nova change to support passing a volume type during bfv,21:37
mriedemif nova should store the volume type name or id,21:37
mriedembecause if the volume type is deleted and recreated with the same name, the id would change and we could potentially fail to look it up later,21:38
mriedemhaving said that, i don't know that we have any need to look it up later21:38
*** gnufied has quit IRC21:39
*** gnufied has joined #openstack-cinder21:39
smcginnisYeah, as long as that boot volume is there, ID should be safe.21:40
mriedemthis is the case that nova creates the volume using the type21:41
smcginnisBut not sure you would need it later unless doing a full rebuild.21:41
mriedemif we get that rebuild api in cinder, rebuilding a volume-backed server shouldn't require creating a new root volume21:41
mriedemb/c that's one of the complications with doing it that way, plus quota, etc etc21:41
mriedemlooking at DB API volume_type_destroy it looks like if there are any volumes, group_volume_type_mapping or consistencygroups that reference the volume type you get a 40021:42
mriedemcuriously snapshots aren't in that check21:43
mriedembut the snapshots table has a volume_type_id column21:43
mriedemis that a bug?21:43
smcginnisThere would still need to be one volume if there are snapshots, so I think that is safe.21:43
mriedemhow about encryption?21:44
mriedemmy guess is you might get a referential constraint if you try to delete a volume type that has related encryption records21:45
mriedemoh, well,21:45
smcginnisThat might be the same kind of situation as a snapshot, but not sure.21:45
mriedemmaybe not until archive21:45
smcginnisHmm, but maybe with backups...21:45
mriedemdeleting the volume type just flips the deleted flag21:45
mriedemso the encryption records would still reference the deleted type21:45
mriedemarchive would fail though21:46
mriedemi don't have a devstack handy to test that out though21:46
mriedemmelwitt: re your earlier question about nova-consoleauth in the install guide, i don't know what the best way to call that out in the install docs as it being deprecated besides just putting a note in the section of the install guide(s) that says nova-consoleauth is deprecated; i don't know what all upgrade stuff needs to happen for that so people can stop installing it. on fresh installs i'd think it wouldn't be needed any21:51
mriedem, but that's why i routed the bug to you.21:51
mriedemif you actually have to run the service in rocky then it shouldn't really be deprecated21:51
mriedemmelwitt: crap wrong channel21:55
imacdonnsmcginnis: if you're back, this could use a review - not urgent, though: https://review.openstack.org/60423022:05
imacdonnsmcginnis: also would like to get this one finished, but I assume you don't want to +2 your own code :) https://review.openstack.org/59395522:06
*** mriedem has quit IRC22:10
*** sorrison has joined #openstack-cinder22:20
*** mvkr has quit IRC22:22
*** ganso has quit IRC22:29
*** mvkr has joined #openstack-cinder22:35
smcginnisimacdonn: I'm at a conference this week, so I'm kind of in and out whenever I get some down time.22:36
imacdonnsmcginnis: ack22:37
*** dklyle has quit IRC22:48
*** tpsilva has quit IRC22:52
openstackgerritRaunak Kumar proposed openstack/cinder master: nimble storage: retype support  https://review.openstack.org/60149222:53
*** rcernin has joined #openstack-cinder23:07
*** dave-mccowan has joined #openstack-cinder23:20
*** hoangcx has quit IRC23:22
*** hoangcx has joined #openstack-cinder23:23
*** erlon has joined #openstack-cinder23:27

Generated by irclog2html.py 2.15.3 by Marius Gedminas - find it at mg.pov.lt!