13:01:50 #startmeeting 13:01:50 Meeting started Tue Dec 23 13:01:50 2014 UTC. The chair is alinefm. Information about MeetBot at http://wiki.debian.org/MeetBot. 13:01:50 Useful Commands: #action #agreed #help #info #idea #link #topic. 13:01:50 #meetingname scrum 13:01:50 The meeting name has been set to 'scrum' 13:02:57 #info Agenda 1) Status 2) Kimchi 1.4.1 Plan 3) Open discussion 13:02:58 anything else? 13:04:40 ok... let's get started 13:04:40 #topic Status 13:04:41 #info Please provide your status using the #info command: #info 13:05:11 #royce is enhancing storage volume upload, addressed problem of distingushing duplicate name and sliced volume upload, still have another problem to discuss--Every upload slice has a different task_id 13:05:22 #info vianac worked on bugs #526, #544 13:06:44 #info alinefm updated kimchi pages for 1.4 released and generated distros packages 13:06:52 #info alinefm working on 1.4.1 plan 13:07:28 #info simon send out migration v7 patch 13:09:15 #info wenwang doing related work of Kimchi new UI 13:10:45 thanks all for the update 13:11:01 moving on to 1.4.1 plan 13:11:02 #topic Kimchi 1.4.1 Plan 13:11:08 https://github.com/kimchi-project/kimchi/wiki/Planning-1.4.1 13:11:27 Kimchi 1.4.1 will be released on March 27th 13:11:59 as it is a stabilization release, I expect to have most of the open issues and enhancements closed https://github.com/kimchi-project/kimchi/issues 13:12:09 in addition to any other items we find in the way 13:13:04 I am still creating the ToDo page but it includes what we have already talked in the last scrum meeting related to tests refactoring, UI tests and new UI 13:13:28 wenwang, YuXin, I have created a new branch named "next" to merge the new UI pages 13:13:37 s/pages/patches 13:13:38 ok 13:14:24 thanks alinefm 13:14:54 any question/concern/suggestion? 13:16:05 we are reviewing the new UI desigh and try to figure out re-usabled/common widgets 13:16:29 then those widgets and form elements will be built first 13:16:38 great! 13:16:50 I thought in the same approach 13:17:12 then most UI content will re-using those assets, this is the way to minimize efforts and improve quality 13:17:13 creating those widgets we make sure all them will have the same style around the whole app 13:17:46 once those widget is created, then they will be re-used, then consistent style will be guaranteed 13:18:25 yeap 13:18:53 the new UI design is going to be sent out to mail list 13:19:12 so team, please actively evaluate and have your comments and feedback 13:19:32 sure, thanks YuXin 13:19:38 vianac, royce ^ =) 13:20:07 OK 13:20:13 ok 13:20:56 shall we move on to open discussion? 13:21:07 ACK 13:22:18 #topic Open Discussion 13:22:22 royce, do you want to start? 13:23:47 yes, about each slice with one task id, I'm afraid this will be troublesome for frontend 13:24:36 I don't think it can be a problem as the frontend track each task in running state 13:24:47 also big files will be many slices left in objstore 13:25:00 I suppose one task is created only when the previous one is finished, right? 13:25:16 slice id left in objstore 13:25:40 hmm.. about that we could have a way to clean the old tasks in the objstore 13:25:44 created when previous finished, why? 13:26:39 we are a multi-request server, as far as I understand, we are able to create many tasks 13:26:44 concurrently 13:26:55 agree - but we are writing a file 13:27:29 Ehhhhh...we need file lock, another problem 13:27:32 so I will only accept the second slice of file and the first one was created 13:28:02 vianac, don't you want to share what you have investigated about upload? 13:28:05 nope, we use seek and write, sequence is not important 13:28:47 and how you guarantee the file will not be corrupted? 13:29:18 royce, how are you thinking about the API? 13:29:28 one POST and many of PUT requests? 13:29:52 how did you identify when the file is fully uploaded? 13:29:57 alinefm, I investigated on how other file upload implementations work, and they all upload the file data one chunk at a time 13:29:59 yeah, reasonable about API change 13:30:11 they don't send the whole content at once, as we're doing currently 13:30:57 alinefm, identify full upload is easy 13:31:02 so we need to send the file in different parts, keeping track of the upload current progress (i.e. offset) 13:31:25 royce, how? 13:31:26 chunk size + current size = file size 13:31:42 so we can do something like: POST /storagepools/pool/storagevolumes/, return some ID 13:32:14 then POST /storagepools/pool/storagevolumes/ {id: id, offset: 0, length: 1024, data: } 13:32:31 and repeat the step above a few times until all the data has been sent 13:32:32 I'd say the second request is PUT =) 13:32:41 alinefm, yes, you're right 13:32:43 ACK 13:32:47 we should use PUT then 13:32:52 vianac, how do you know all the data was sent? 13:33:24 {length: chunk_size, file_size:xxx} 13:33:44 we can 1) send a different parameter to flag that we have finished, or 2) the server can find out everything has been uploaded if we send the size in the first request as well 13:34:00 so if we say we're going to send 1000 bytes, and we have sent 1000 bytes, it's finished 13:34:05 I guess I prefer option 2 13:34:37 vianac, royce, I don't think the frontend can know the total size without reading the whole file 13:34:44 alinefm, yes, it can 13:34:54 UI split it 13:35:18 and in formdata, it has the length 13:36:09 http://stackoverflow.com/questions/7497404/get-file-size-before-uploading 13:36:34 great 13:36:50 so I suggest to send the total size in the POST request 13:36:57 OK 13:37:03 POST /storagepools/pool/storagevolumes/ {size: XXX} 13:37:13 and then a sequece of PUT requests 13:37:52 vianac, why the POST request need to return an ID? and why the ID need to be in the PUT request? 13:38:13 alinefm, because we need to keep track of which uploading session we're sending the data 13:38:28 several upload instances may be running at that moment 13:38:38 and...? 13:38:45 is vol_name enough? 13:38:47 we have the as the identifier 13:39:10 alinefm, ok, we can use the name for that 13:40:19 we'd also need a background task to check whether an upload session has been inactive for some time, and clean it up 13:41:10 agree 13:41:12 the last request need to do the clean task id job as for me 13:41:45 royce, vianac is talking when an upload started and not finished 13:41:58 in that case we may have leftovers in the system that must be clean up 13:42:27 so we need to establish a timeout between the POST and PUT requests 13:42:44 if we don't receive the next request in X minutes we need to abort the upload 13:42:49 and clean up the system 13:43:31 You mean clean up the part volume? 13:44:01 yes 13:45:17 we can use udev change maybe 13:46:39 probably 13:46:41 when an upload started create a cleaner at same time 13:46:56 or store in objstore the time of each upload request and check them on a BackgroundTask 13:47:50 Yeah, we can do that too 13:51:05 any other point to discuss related to upload? 13:55:28 alright... 13:55:33 any other topic for today? 13:57:42 royce, vianac, wenwang YuXin ^ 13:57:56 no from me 13:58:47 no 14:02:22 so thanks everyone for joining 14:02:27 I'm considering if file writes need to be protected by the lock, as they write different parts, they seek to different pointers, I suppose they would not corrupt each other 14:03:15 after seeking to a specify position we need to make sure that position is free before writing 14:04:38 seek is to seek the right file position for the chunk, if it is received for the first time, it is ok for writing 14:04:59 how do you know it is the first time receiving the chunk? 14:05:14 every chunk just sent once right? 14:05:16 let's say you already have received a chunk for offset 1024 14:05:45 royce, in a non-malicious world, yes =) 14:06:04 and other person send a chunk for 1030 14:06:19 if you write the content you will create a corrupted file 14:07:11 chunk is splitted by UI, every of them does not share content with others 14:08:26 royce, once the upload process starts (after POST request) everyone is aware about it - it will appears on UI with a progress bar 14:08:48 let's say I am a bad girl and "hnmm... let's corrupt that upload started by royce" 14:09:10 and then I manually send a request "PUT {offset:X, data: Y}" 14:09:25 and then you have a corrupted file and a security issue 14:10:03 it just override my data, even if chunks in order 14:10:41 we are talking about if mis-order concurrently chunks will corrupt the file ,right? 14:11:37 yes and also how guarantee we will not create a corrupted file 14:12:03 if someone else send chunks for the same upload file 14:13:36 if you seek to 1024 and it is not free you should reject the chunk 14:13:52 we can also make sure all the requests is from the same user by checking the request header 14:14:49 if some one also send right offset with wrong data what shall we do then? 14:15:22 this can just be garenteed by something like TCP checksum 14:15:48 on POST request we can get the username from request header and only accept the PUT from the same user 14:17:59 we are over time 14:18:16 royce, please, send any other point you want to discuss to ML 14:18:27 OK, I'll do some test then discuss this 14:18:50 great! 14:19:02 thanks everyone for joining! 14:19:04 Merry Christmas! 14:19:05 #endmeeting