<div dir="ltr">Hi All,<div><br></div><div>At present, the implemention of swift interface for creating object in sheepdog is:</div><div><br></div><div>1. lock container</div><div>2. check whether the onode with same object name is exists.</div>
<div>3. unlock container</div><div>4. upload object</div><div>5. create onode</div><div><br></div><div>this sequence have a problem: if two clients uploading same objects concurrently, it will create two</div><div>objects with same names in container.To avoid duplicated names, we must put "create onode"</div>
<div>operation in container lock regions.</div><div><br></div><div>Therefore we need to change the processes of creating object to:</div><div><br></div><div>1. lock container</div><div>2. check whether the onode is exists.</div>
<div>3. allocate data space for object, and create onode, then write it done</div><div>4. unlock container</div><div>5. upload object</div><div><br></div><div>this routine will avoid uploading duplicated objects.</div><div>
<br></div><div>There is an exception on the new routine: if the client halt the uploading progress, we will have a</div><div>"uploading uncompleted" onode.</div><div>I think this problem is easy to solve: we can add code for onode to identify its status.</div>
<div>A new onode will be set to "INIT", and after uploading completed, the onode will be set to  "COMPLETED".</div><div>So, when users try to use swift interface to GET a "uncompleted" object, sheep will find out the onode is</div>
<div>"INIT" which means "not completed", so sheep will return "partial content"for http request, and user could</div><div>DELETE the object and upload it again.</div><div><div><br></div><div>
<br></div><div>Is there any suggestion for this new design ?</div><div><br></div>-- <br>--<br>Best Regard<br>Robin Dong
</div></div>