08:07:13 #startmeeting multisite 08:07:13 Meeting started Thu Nov 19 08:07:13 2015 UTC. The chair is joehuang. Information about MeetBot at http://wiki.debian.org/MeetBot. 08:07:13 Useful Commands: #action #agreed #help #info #idea #link #topic. 08:07:13 The meeting name has been set to 'multisite' 08:07:22 #info dimitri 08:07:25 #info rollcall 08:07:30 #info joehuang 08:07:37 #info tapio 08:08:14 even if we use KB api + KB engine, the api need to call engine through RPC 08:08:49 yes.. but here in controller 08:08:52 @index.when(method='delete', template='json') def delete(self): context = restcomm.extract_context_from_environ() return self.jd_api.say_hello_world_cast(context, '## delete cast ##') 08:09:10 it is not a rpc call right... 08:09:18 #topic discussion Kingbird BPs and progress 08:09:31 it's cast, async call 08:10:49 cast means the RPC call will return immeditly, don't wait for the result 08:11:24 yes.. but it doesnt look like htat 08:11:24 Hi Ashish, delete is an example for cast 08:11:25 that 08:11:42 yeah.. that cast call if from jdapi => jdservice 08:11:46 for post. put, it's example for RPC call 08:11:56 not from kb api => jdapi 08:12:32 jdapi is the client of the RPC, running in KB api. KB api call the jdapi 08:12:38 this part of code is from controllers/helloworld.py 08:13:12 Correct me If I am wrong 08:13:14 controller/helloworld.py running in the KB api 08:13:28 yes. 08:13:45 then it call the RPC client which provided by the JD 08:14:17 the rpcclient will send rpc message to JD, JD manager will handle the call accordingly 08:14:17 that RPC client == JD API?? 08:14:23 yes 08:14:59 #info Ashish 08:15:29 so there is no direct rpc call to JD from KB API 08:16:18 API calls a client(jdapi) through a normal call then this client(jdapi) will do a rpc call to jdservice. 08:16:40 correct 08:16:44 so rpc calls in inside sub components not across components 08:17:10 oslo.messaging encapsulate this 08:18:45 You don't need to post message directly, 08:18:50 def say_hello_world_call(self, ctxt, payload): return self.client.call(ctxt, 'say_hello_world_call', payload=payload) 08:19:16 Kingbird API is Web Server Gateway Interface (WSGI) applications to receive and process API calls, including keystonemiddleware to do the authentication, parameter check and validation, convert API calls to job rpc message, and then send the job to Kingbird Job Daemon through the queue 08:19:25 this is from the document. 08:20:05 in jdrpcapi.py, client.call is RPC client calling 08:20:07 convert API calls to job rpc message.. Does this mean that KB API convert this? 08:20:14 yes.. seen that.. 08:20:18 yes 08:20:58 joehuang, and this client.call triggers the jdmanager? 08:21:42 yes, the rpc method will trigger in the server jdmanager 08:21:54 yes 08:22:53 so basically jdrpcapi is a relay mechanism to a jdmanager, that contains the actual logic for the rpc calls 08:23:00 after the client.call say_hello_world_call, the jdmanager receive the message, and will call say_hello_world_call(self, ctx, payload) in JDmanager 08:23:03 lie a proxy 08:23:04 no right 08:23:09 It is jwmanager 08:23:14 not jdmanager 08:23:31 jdmanager is again a call to jwapi 08:23:40 that is then rpc call to jwservice/jwmanager 08:23:54 actual login == jwmanager??/ 08:23:57 logic* 08:24:02 "jdmanager is again a call to jwapi" this is an example, to call jwapi immeditaly 08:24:05 the jdmanager then dispatches tasks to jworkers 08:24:21 so it’s a double chain 08:24:35 jdrpcapi is a proxy to jdmanager 08:24:46 for quota, we can split the job in jdmanager, then using rpc to call jwmanager to process small job 08:24:48 and jwrpcapi is a proxy to jwmanager 08:25:33 "jwrpcapi is a proxy to jwmanager" ==> jwrpcapi is a "client" to jwmanager 08:25:48 it's just like map-reduce 08:26:00 split a task to a lot of small task 08:26:02 though it is not clear. 08:26:22 joe, who coordinates those tasks then? 08:26:32 jdmanager 08:26:35 the jdmanager then dispatches tasks to jworkers 08:26:41 yes 08:27:09 this dispatching is not direct though. 08:27:10 yes, becasue these are rpc calls, not casts 08:27:38 for async job, could be cast 08:27:53 yes 08:28:17 I was considering the case when I want to dispatch tasks to workers, and then aggregate the results 08:28:20 so jd we called job daemon 08:28:37 yes, you need to aggregate result 08:28:47 yes.. and if there is any need to exchange info among workers 08:28:50 API is presentation layers 08:28:52 so this would look like 08:29:24 for 1 to n: result+=self.jw_api.do_something_call() 08:29:34 especially aggregate result from a lot of region, different service 08:30:34 no for workers, it should work very simple job, don't need to know each other 08:31:07 indeed we are implementing distributed query system 08:31:20 we are implementing distributed query/synchronization system 08:31:41 it's a little like search engine 08:31:53 hadoop :) 08:31:58 yes 08:31:59 :) 08:32:08 ok, good 08:32:49 so when jd receive a job, create a result tables for the worker to fill, after job finished, jd return the table result to API 08:34:08 so the aggregation will be more easier, but distribute the computing to multiple jobworkers 08:34:11 joehuang, I have a question about test coverage 08:34:18 please 08:34:29 I am also thinking about testing 08:34:37 we will of course add unit test for the quota related part, as we add the code 08:34:47 that's great 08:34:49 what about this service architecture? 08:34:55 do we need to cover that too? 08:35:21 what do you mean service archictecture? you mean JD, JW 08:35:42 there can be multiple JDs each dedicated for specific service. 08:35:45 yes 08:35:54 service wise jobdeamons? 08:36:09 we try to add test for all code we add 08:36:25 ok 08:36:29 that good 08:36:52 you have seen that testing is lack in current commit 08:36:59 but I am working on it 08:39:02 hi, Dimitri, could you open the comment right (edit is not necessary) for your quota spec 08:39:42 I’ve done that yesterday. no? 08:39:55 I openned for editing for everyone who has the link 08:40:26 Ok, I'll try. No need to open the editting right in case of malicious operation 08:40:40 It’s open source ;) 08:41:02 That's fine :) 08:41:21 although you’re right 08:41:38 I’ve just changed the right to commenting only 08:41:54 sometime maybe only wrong operation with no intention 08:42:08 #info https://docs.google.com/document/d/1aYmhfxdlKVhv3j1NGrrfSXnyonfKv12jv6KURdwMMKI/edit?usp=sharing 08:42:14 Thanks 08:43:28 "BP Driver for openstack communication" linked to "openstack client" page, do we need spec? I think even no spec also work for me 08:44:40 will make one 08:44:45 yeah, I guess so 08:44:50 thanks. 08:45:02 #action ashish to make a spec 08:45:47 yes.. will make a short spec for this. 08:45:51 and I also one suggestion to break done the quota part into several BPs and build dependency among them, so that we know the order of implementation 08:46:09 break done -> break down 08:46:10 #action for the openstack client 08:47:32 and easy for patch review 08:48:08 I’ll commit the unit test execution script 08:48:19 this should simplify testing and verification 08:48:24 good 08:48:25 will do it today 08:48:39 ashish, please review the remaining commits by joe 08:48:53 and let’s get on to the db part 08:48:56 yes. will do it today 08:48:59 ok. 08:49:19 #action Dimitri to commit unit test execution script 08:49:46 the last patch is the integration with devstack, will ease the incremental developement 08:51:24 so Dimitri you or Ashish will register a BP for DAL part 08:51:26 Just a suggestion, will have a readme file for each submodule describing how to run/use it 08:51:43 whenever someone's commit 08:52:07 let's look at the fashion of OpenStack 08:52:54 it's a good idea 08:53:27 this will save our time to get onto others code. 08:53:42 doc part? 08:53:55 https://github.com/openstack/kingbird/tree/master/doc/source 08:55:08 yes.. and also just a simple readme inside the directory for a component. 08:55:27 OK. let's try it 08:55:30 Example: tools directory is there. where it is used.. 08:55:39 where => why 08:55:49 #info have a readme file for each submodule describing how to run/use it 08:58:42 ok 08:58:48 shall we close the meeting? 08:58:57 Yes, great to have this meeting. Let's continue communication through mail-list 08:59:18 yes. Same here:) 08:59:18 Thank you all. Hope you have a good day 08:59:26 no scare anymore 08:59:26 bye! 08:59:30 bye 08:59:31 Thank all. 08:59:33 Good bye 08:59:35 #endmeeting