Friday, 2017-02-03

*** catintheroof has joined #openstack-mistral00:04
*** Ephur has quit IRC00:10
*** catintheroof has quit IRC00:30
*** rbrady-afk has quit IRC00:42
*** jaosorior has quit IRC00:46
*** Kevin_Zheng has joined #openstack-mistral01:32
*** rbrady-afk has joined #openstack-mistral01:54
*** gongysh has joined #openstack-mistral02:11
*** ist has quit IRC02:13
*** Kevin_Zheng has quit IRC03:37
rakhmerovddeja: awesome job!04:41
rakhmerovthanks04:41
*** sharatss has joined #openstack-mistral04:43
openstackgerritMerged openstack/mistral-dashboard master: Update reno for stable/ocata  https://review.openstack.org/42849205:20
*** sharatss has quit IRC05:31
*** sharatss has joined #openstack-mistral05:49
*** sharat has joined #openstack-mistral05:49
openstackgerritMerged openstack/python-mistralclient master: Read project_id and project_name in env  https://review.openstack.org/40964705:55
openstackgerritRenat Akhmerov proposed openstack/mistral master: WIP: Refactor Mistral RPC serialization  https://review.openstack.org/42859106:18
*** sharat has quit IRC06:27
*** sharatss has quit IRC06:27
*** sharat has joined #openstack-mistral06:28
*** sharatss has joined #openstack-mistral06:29
*** Kevin_Zheng has joined #openstack-mistral06:33
openstackgerritMerged openstack/mistral master: Update reno for stable/ocata  https://review.openstack.org/42848906:38
*** sharatss has quit IRC07:02
openstackgerritRenat Akhmerov proposed openstack/mistral master: Refactor RPC serialization: remove JsonPayloadSerializer class  https://review.openstack.org/42859107:19
*** sharatss has joined #openstack-mistral07:58
ddejarakhmerov: no problem08:02
rakhmerovddeja: how did you find the reason of this?08:03
gongyshkong, hi08:08
gongyshwho knows where to find the arch doc for mistral?08:09
gongyshI want to know how the mistral scales08:09
ddejarakhmerov: I can tell you in a next hour, I've just started a meeting ;)08:10
rakhmerovok08:10
rakhmerovgongysh: http://docs.openstack.org/developer/mistral/ is the official source08:10
rakhmerovand https://wiki.openstack.org/wiki/Mistral - but this is a little bit obsolete08:11
rakhmerovgongysh: you can also ask here, some tiny technical details may not be in the docs08:11
rakhmerovand we keep working on docs actively08:12
*** sharatss has quit IRC08:26
*** jpich has joined #openstack-mistral08:32
*** FL1SK has quit IRC08:32
openstackgerritJeremy Liu proposed openstack/python-mistralclient master: Add project_id and project_name options  https://review.openstack.org/42864008:38
*** shardy has joined #openstack-mistral08:54
ddejarakhmerov: ok, I'm free09:00
ddejaSo, basically I've started to dug through the traceback from https://bugs.launchpad.net/mistral/+bug/165981909:02
openstackLaunchpad bug 1659819 in Mistral "Tox mysql and postgres gates are failing" [High,Fix released] - Assigned to Dawid Deja (dawid-deja-0)09:02
ddejaand realised that a lot of paths has '.venv' in them instead of '.tox'09:04
ddejamoreover, I've run the tests on my devstack VM09:04
ddejaand they passed09:04
ddejabut they did run in the .tox direcotry, not the virtualenv09:04
ddejaso I've started to compare what packages are used on both my local env and on virtualmachine09:05
ddejaand realised that it is really messed up09:05
ddejaso I started to compare what is a difference in launching tests beetwen regular tox and mysql tox09:06
ddejaand found out we are using run_test.sh09:06
ddejaAfter I understand how this script works09:06
ddejaI have a though 'hm, it seems like we are making venv inside the venv, let's try to use no-venv flag' and it worked09:07
openstackgerritJeremy Liu proposed openstack/python-mistralclient master: Add project_id and project_name options  https://review.openstack.org/42864009:14
*** chlong has quit IRC09:38
rakhmerovddeja: ok, go ti10:07
rakhmerovgot it10:07
rakhmerovthanks10:07
ddejarakhmerov: no problem :)10:10
rakhmerovddeja: I have a question about serialization in RPC10:10
rakhmerovI saw you added KombuSerializer10:10
rakhmerovwhich uses jsonutils.to_primitive() to serialize an object and jsonutils.loads() to deserialize it10:11
rakhmerovhow does it work when you use it for a custom class?10:12
rakhmerovserialization is more or less clear, it'll just represent it as a dict etc.10:12
rakhmerovbut will it restore the same object when it deserializes it?10:12
rakhmerovseems like it won't10:12
rakhmerovso, in fact, our serialization doesn't work with any custom types really10:14
rakhmerovI'm talking about both o.m and kombu10:14
rakhmerovI just wanna fix a number of things in serialization and trying to understand how it works10:15
*** gongysh has quit IRC10:19
ddejarakhmerov: I need to look on a code...10:36
*** FL1SK has joined #openstack-mistral10:36
rakhmerovddeja: I think I found the answer10:36
rakhmerovexperimenting now..10:37
ddejarakhmerov: OK10:38
rakhmerovit's just looking weird10:38
rakhmerovserialization happens via jsonutils.to_primitive()10:38
rakhmerovbut deserialization via json.loads()10:38
rakhmerovI don't mean to say it's your fault, it's rather a question to folks who created oslo_serialization10:39
rakhmerovno symmetry10:39
ddejawell, it is not json.loads() but jsonutils.loads10:41
ddejawhich is the same, but we are using consistent library after all10:41
rakhmerovooh, yes, sorry10:41
rakhmerovoverlooked it10:41
ddejabut yes, it is werid10:42
rakhmerovddeja: ok, the main thing is that it doesn't work for objects :)10:42
ddejarakhmerov: yes, you need to serialize them to dict/json10:43
rakhmerovjsonutils.to_primitive() simply converts an object into a dict10:43
ddejayes10:43
rakhmerovwhich doesn't leave any info about how to instantiate it10:44
rakhmerovwhat class to use10:44
rakhmerovhm... ok10:44
ddejawe can use OVO for this10:44
rakhmerovdoes it allow something like this?10:44
rakhmerovnot too much familiar with it10:44
rakhmerovknow the general idea though10:45
ddejawhat OVO does it simply converts the object to dict on the sender side10:45
ddejaand on the receiver side it re-creates the object from dict10:45
rakhmerovok, how does it know what class to instantiate on the receiver side?10:45
rakhmerovis it solved somehow?10:46
rakhmerovwhat if we want to pass different types?10:46
rakhmerovI'll look at OVO more closely10:47
rakhmerovbasically what I'd like to do is to create some sort of polymorphic serializer10:47
rakhmerovwhich also inserts some additional key into a object representation10:48
rakhmerovwhich should help deserialize the object correctly10:48
rakhmerovthat should be simple even w/o OVO10:48
ddejaOVO simply passes the class name throught the RPC10:48
rakhmerovyes, ok10:49
rakhmerovbtw, ddeja, one more question10:49
ddeja?10:49
rakhmerovdoes o.m allow to work with binary data?10:50
ddejawhat do you mean?10:50
ddejaby 'binary data'?10:50
rakhmerovok, sec, I'll explain10:50
rakhmerovwhat I'd like to do is compress the data on the sender side and decompress it on the receiver side10:50
rakhmerovusing gzip or bz210:51
rakhmerovof course, MQ itself supports it10:51
ddejaok, it is doable10:51
rakhmerovso that we don't need to compress on our own10:51
ddejawe just needs to convert it to string10:51
ddejarabbitMQ supports it?10:51
rakhmerovwait a sec10:51
rakhmerovyeah, I believe I've seen this option in a message properties somewhere10:52
rakhmerovyou just tell it "compress the data with gzip" and it does it10:52
rakhmerovwhat I'm thinking though is that o.m is a wrapper10:53
rakhmerovwhich again hides lots of stuff available in Rabbit for example10:53
rakhmerovand I didn't find anything in o.m to do this automatically except kombu_compression property (something like this)10:53
rakhmerovwhich is deprecated10:53
ddejarakhmerov: hm, ok10:54
rakhmerovso, I thought we could just do it on our own using zlib10:54
ddejaso yes, there may be some options that are hidden by o.m10:54
rakhmerovbut zlib generates bytes10:54
ddejawe can always convert it to string10:54
rakhmerovso I wonder if it makes any difference for o.m if we pass a byte string10:55
rakhmerovyeah10:55
rakhmerov(just thinking loudly)10:55
rakhmerovok10:55
ddeja byte string should be OK10:55
rakhmerovI'll try10:55
rakhmerovthe thing is that compression is not so heavy in terms of CPU10:55
rakhmerovbut RPC itself is very heavy10:56
rakhmerovit could make a big difference if we use compression10:56
rakhmerovddeja: do you think sounds reasonable? Or may be I'm missing something10:57
ddejarakhmerov: I'm not sure11:12
rakhmerov:) ok11:12
ddejawe should experiment to confirm it11:12
rakhmerovyes, I'll do it11:12
ddejabut in some cases it may be resonable11:13
rakhmerovI'm looking at OVO11:13
rakhmerovyes11:13
ddejabut IMO RPC is not this bad11:13
ddejaI've even created a project in which i was sending screen from my pc to my mobile11:13
ddejaover RPC11:13
rakhmerovso?11:14
rakhmerovyou mean RabbitMQ? :)11:14
ddejayes11:14
rakhmerov:))11:14
ddejaand it was working fine11:14
ddejaaround 15-20 FPS11:14
rakhmerovok, what I found recently is:11:14
rakhmerov0. I used dict with 20000 entries as a data sent over RPC11:15
rakhmerov1. RPC call with o.m takes ~0.7 sec11:15
rakhmerov2. Building a string representation for this dict takes ~0.03 sec11:16
rakhmerovthat's why I'm saying that RPC itself takes much more than in-memory manipulations with data of this size11:16
ddejaok I see11:16
rakhmerovand that's why I'm saying that hopefully our kombu RPC works faster11:17
rakhmerovok, anyway, seems like OVO is a good fit for doing serialization in flexibly11:17
rakhmerovwill try to use it11:17
ddejarakhmerov: but how many times faster is to send this string instead of dict?11:18
rakhmerovand experiment11:18
ddejabecouse buliding string from dict is fast, but we still have to send it11:18
rakhmerovyes, it doesn't matter actually11:18
rakhmerovit will convert into a string anyway11:18
rakhmerovI mentioned building a string because this shows that data conversion itself is fast11:19
ddejaOK, I see11:19
rakhmerovthe most heavy part is behind the scenes11:19
rakhmerovin socket/rabbit/socket11:19
ddejarabbitmq is slow, since it had it guaratnees11:19
rakhmerovyes11:19
rakhmerovthat's one of the reasons11:20
rakhmerovtoo11:20
rakhmerovbut if I do it with small dicts RPC takes under 0.05 sec11:20
rakhmerovon my machine11:20
rakhmerovso size of the data matters much11:21
*** thrash|g0ne is now known as thrash11:22
ddejayes, after all it is all splitted to chunks11:22
rakhmerovbtw, one interesting thing is that DB queries with the same amount of date take under 0.04 sec11:22
rakhmerov:)11:22
rakhmerovI mean with dicts with 20000 entries11:22
rakhmerovso RPC is the slowest part in the whole system11:22
ddejawith DB we only have server-client communicate11:22
rakhmerovyes, true11:22
rakhmerovof course11:22
ddejawith RPC we have sender->broker->client->broker->sender11:22
rakhmerovyep11:23
ddejafor call11:23
ddejaand, if we have durable queue, broker needs to store the message on disk11:23
rakhmerovwhich leads me to one more interesting thought: we don't need to use RPC in many cases :)11:23
rakhmerovyes11:23
ddejawell, we need to somehow communicate beetwen services...11:23
rakhmerov:)11:24
*** gongysh has joined #openstack-mistral11:24
rakhmerovI mean that maybe it doesn't always make sense to use executors11:24
rakhmerovin our architecture11:24
ddejathat would be huuuge11:24
rakhmerovI looked at some other workflow engines, i.e. Camunda (BPMN based stuff) doesn't seem to have such a concept11:25
rakhmerovthey just have engine that scales11:25
rakhmerovthat's it11:25
ddejabut we can potientialy have a system with one engine thread11:25
rakhmerovthey have a concept of worker but it's a completely different thing11:25
ddejaand a lot of workers threads11:25
ddejaand only have rpc beetwen API-Engine11:25
rakhmerovyes11:25
rakhmerovwell, in Python this may be tricky because of its threading system11:26
rakhmerovremember what I told about using blocking external calls and eventlet green threads11:26
rakhmerovbut this is something to think about11:26
ddejaok, so we can have different process but on the same machine11:27
ddejaor different processes11:27
ddejaand use linux pipes for communication11:28
rakhmerovyeah11:28
rakhmerovwe could probably use something like multiprocessing lib11:28
ddejabut this would be really huge change11:28
rakhmerovsomething that our API server does11:28
rakhmerovit spawns multiple processes via oslo.service11:29
ddejayes11:29
rakhmerovyes, it is a huge change11:29
rakhmerovagree11:29
ddejaand there is a question - how many of customers (if any?) uses standalone executors11:29
rakhmerovbut think about this: seems like for many many Mistral actions the RPC overhead is much bigger than runtime of those actions11:29
ddejastandalone - only executor on a server11:29
rakhmerovddeja: according to my knowledge, not many at this point11:30
rakhmerovof course, if we decide to make this change it needs to be configurable11:30
ddejarakhmerov: if so, then we can potentially change the architecture11:30
rakhmerovbecause executors still have a number of pros11:30
rakhmerovlike: you can run them on machines w/o access to DB etc.11:31
rakhmerovyeah11:31
rakhmerovthe thing is that I saw numbers and it made me think in this direction11:31
rakhmerovpreviously I didn't have these numbers11:32
ddejaor11:32
ddejawe can let the executors to have access to the DB11:32
rakhmerovddeja: it all actually comes from some of the performance requirements we have internally at Nokia11:32
rakhmerovthat's why I'm digging this again11:32
ddejaand only use RPC for control11:32
rakhmerovhm... I don't know. It's a separate discussion11:33
ddejathe we will be only sending small amount of data11:33
rakhmerovthere were users who had a string requirement not to allow executors to have DB access11:33
ddejalike 'execute_action: 12345677'11:33
rakhmerovI think it's a good topic for the PTG11:33
ddejarakhmerov: oh11:33
* ddeja wish to be there...11:34
rakhmerovfor example, StackStorm had this requirement, we can discuss it again with Winson11:34
ddejayeah11:34
rakhmerovddeja: any chance to use Travel Support Program? :)11:34
ddejaI think it's too late11:35
rakhmerovok11:35
rakhmerovddeja: ok, thanks for discussing it with me. I needed to discuss it with someone, I needed to speak out11:35
ddejarakhmerov: no problem, that was a pleasure11:36
rakhmerov:)11:36
rakhmerovsame to me11:36
*** jkilpatr has quit IRC11:38
*** jkilpatr has joined #openstack-mistral11:57
*** gongysh has quit IRC12:03
*** jkilpatr has quit IRC12:04
*** jkilpatr has joined #openstack-mistral12:17
*** catintheroof has joined #openstack-mistral12:20
*** catintheroof has quit IRC12:20
*** catintheroof has joined #openstack-mistral12:21
*** bobh has joined #openstack-mistral13:19
*** dprince has joined #openstack-mistral13:23
*** bobh has quit IRC13:29
*** shardy is now known as shardy_mtg13:34
*** sharatss has joined #openstack-mistral13:39
*** jpich has quit IRC13:55
*** rbrady-afk is now known as mock-hates-me14:04
*** mock-hates-me is now known as rbrady14:11
*** shardy_mtg is now known as shardy14:11
*** sharatss has quit IRC14:23
*** jtomasek has quit IRC14:25
*** jtomasek has joined #openstack-mistral14:26
*** thrash is now known as thrash|biab14:54
*** sharatss has joined #openstack-mistral14:55
*** chlong has joined #openstack-mistral15:23
*** jaosorior has joined #openstack-mistral15:40
*** tuan_ has joined #openstack-mistral15:43
tuan_hi guys15:44
tuan_now what tool openstack foundation use for generating docs15:45
tuan_sphinx or swagger?15:45
*** thrash|biab is now known as thrash16:17
d0ugaltuan_: sphinx16:26
d0ugalI don't know what swagger is :)16:26
*** mgershen has joined #openstack-mistral16:26
d0ugalMaybe it is also used in places?16:26
tuan_d0ugal: oh, here you are16:27
tuan_:D16:27
tuan_thanks16:27
*** mgershen has quit IRC16:27
d0ugalnp16:27
* d0ugal wont be here for long16:27
tuan_i saw some links they are talking about usung swagger for api docs16:27
d0ugalInteresting, maybe I am out of touch16:28
d0ugalbut so far, I have only used Sphinx in OpenStack.16:28
tuan_ahha, thank you16:29
tuan_we just now have to redesign our API16:29
d0ugalWe do?16:29
tuan_oh sorry16:29
tuan_Nokia16:29
tuan_:D16:29
d0ugaloh :)16:29
tuan_btw, thanks again and have a nice weekend16:30
tuan_:)16:30
d0ugalnp16:30
tuan_and if you have time16:30
tuan_could you please review my patch16:30
d0ugalLink?16:30
tuan_https://review.openstack.org/#/c/424621/16:30
d0ugalLooking now16:30
*** chlong has quit IRC16:36
*** chlong has joined #openstack-mistral16:52
*** d0ugal is now known as d0ugal|skiing16:54
*** tuan_ has quit IRC17:08
*** chlong has quit IRC17:16
*** jkilpatr_ has joined #openstack-mistral17:31
*** jkilpatr has quit IRC17:32
*** sharat has quit IRC17:37
*** shardy has quit IRC17:38
*** dprince has quit IRC17:50
*** vgnbkr has quit IRC17:56
*** bobh has joined #openstack-mistral17:57
*** vgnbkr has joined #openstack-mistral17:57
*** Ephur has joined #openstack-mistral18:17
*** dprince has joined #openstack-mistral18:20
*** bobh has quit IRC18:33
*** chlong has joined #openstack-mistral18:38
*** chlong has quit IRC19:11
*** jkilpatr_ has quit IRC19:18
*** jkilpatr has joined #openstack-mistral19:20
*** chlong has joined #openstack-mistral19:21
*** chlong has quit IRC19:27
*** bobh has joined #openstack-mistral19:30
*** chlong has joined #openstack-mistral19:40
*** bobh has quit IRC20:36
*** bobh has joined #openstack-mistral20:51
*** catintheroof has quit IRC21:11
*** chlong has quit IRC21:44
*** dprince has quit IRC22:24
*** chlong has joined #openstack-mistral22:42
*** jkilpatr has quit IRC22:51
*** jaosorior has quit IRC22:52
*** jkilpatr has joined #openstack-mistral23:25
*** Ephur has quit IRC23:36
*** bobh has quit IRC23:42
*** Ephur has joined #openstack-mistral23:43
*** rbrady has quit IRC23:57

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