)]}'
{"doc/source/admin_guide.rst":[{"author":{"_account_id":9625,"name":"Thiago da Silva","email":"thiagodasilva@gmail.com","username":"thiago"},"change_message_id":"3cd2aa2c49b18005565396b62d4dec84dc2aa59a","unresolved":false,"context_lines":[{"line_number":9,"context_line":"\u003cTODO:  should we repeat all the non-under-the-hood info here or"},{"line_number":10,"context_line":"just put a link to it or ?  I think something should be in this"},{"line_number":11,"context_line":"admin guide for sure \u003e"},{"line_number":12,"context_line":""},{"line_number":13,"context_line":"------------------"},{"line_number":14,"context_line":"Managing the Rings"},{"line_number":15,"context_line":"------------------"}],"source_content_type":"text/x-rst","patch_set":10,"id":"AAAAW3%2F%2FawY%3D","line":12,"updated":"2014-04-14 18:03:00.000000000","message":"From looking at the other sections of this document, I think this should contain more of a HOW-TO for admins. Then a link can be provided just like in the rings section: \"For more information see :doc:`overview_policies`","commit_id":"f417e756ecdb023af8aff0ca026a974b72ec2dde"},{"author":{"_account_id":7479,"name":"paul luse","email":"paul.e.luse@intel.com","username":"peluse"},"change_message_id":"7cb7768e6c9cddf35f180b1cb79dc4a6e9e9a773","unresolved":false,"context_lines":[{"line_number":9,"context_line":"\u003cTODO:  should we repeat all the non-under-the-hood info here or"},{"line_number":10,"context_line":"just put a link to it or ?  I think something should be in this"},{"line_number":11,"context_line":"admin guide for sure \u003e"},{"line_number":12,"context_line":""},{"line_number":13,"context_line":"------------------"},{"line_number":14,"context_line":"Managing the Rings"},{"line_number":15,"context_line":"------------------"}],"source_content_type":"text/x-rst","patch_set":10,"id":"AAAAXH%2F%2F5Ko%3D","line":12,"in_reply_to":"AAAAW3%2F%2FYdE%3D","updated":"2014-04-16 16:46:31.000000000","message":"Done","commit_id":"f417e756ecdb023af8aff0ca026a974b72ec2dde"},{"author":{"_account_id":7479,"name":"paul luse","email":"paul.e.luse@intel.com","username":"peluse"},"change_message_id":"27dfe2b2048f3cf7bd06053b4f0e5f09d9f14176","unresolved":false,"context_lines":[{"line_number":9,"context_line":"\u003cTODO:  should we repeat all the non-under-the-hood info here or"},{"line_number":10,"context_line":"just put a link to it or ?  I think something should be in this"},{"line_number":11,"context_line":"admin guide for sure \u003e"},{"line_number":12,"context_line":""},{"line_number":13,"context_line":"------------------"},{"line_number":14,"context_line":"Managing the Rings"},{"line_number":15,"context_line":"------------------"}],"source_content_type":"text/x-rst","patch_set":10,"id":"AAAAW3%2F%2FYdE%3D","line":12,"in_reply_to":"AAAAW3%2F%2FawY%3D","updated":"2014-04-15 00:53:45.000000000","message":"yeah, that makes sense.  I think a large chunk of the content is in place now so its a bit easier to see what should go where.  Will spend some time on it tomorrow and knock out some of the doc TODOs.  Thanks!","commit_id":"f417e756ecdb023af8aff0ca026a974b72ec2dde"},{"author":{"_account_id":8542,"name":"Prashanth Pai","email":"ppai@redhat.com","username":"pai"},"change_message_id":"dd7ef76caafbfe918c3083332cbfd2b2831aa019","unresolved":false,"context_lines":[{"line_number":7,"context_line":"-------------------------"},{"line_number":8,"context_line":""},{"line_number":9,"context_line":"Defining your Storage Policies is very easy to do with Swift.  It is important"},{"line_number":10,"context_line":"though that the administrator understand the concepts behind Storage Policies"},{"line_number":11,"context_line":"before actually creating and using them in order to get the most benefit out"},{"line_number":12,"context_line":"of the feature and, more importantly, to avoid having to make unnecessary changes"},{"line_number":13,"context_line":"once a set of policies have been deployed to a cluster."}],"source_content_type":"text/x-rst","patch_set":12,"id":"AAAAXH%2F%2FYh8%3D","line":10,"updated":"2014-04-22 09:18:06.000000000","message":"can remove \"though\" here","commit_id":"7ebc2a91b0d1df3ff6ae148797f77d3da12de844"},{"author":{"_account_id":7479,"name":"paul luse","email":"paul.e.luse@intel.com","username":"peluse"},"change_message_id":"ce3add0ce215ca465ea4f06de0a8da47f5e0c264","unresolved":false,"context_lines":[{"line_number":7,"context_line":"-------------------------"},{"line_number":8,"context_line":""},{"line_number":9,"context_line":"Defining your Storage Policies is very easy to do with Swift.  It is important"},{"line_number":10,"context_line":"though that the administrator understand the concepts behind Storage Policies"},{"line_number":11,"context_line":"before actually creating and using them in order to get the most benefit out"},{"line_number":12,"context_line":"of the feature and, more importantly, to avoid having to make unnecessary changes"},{"line_number":13,"context_line":"once a set of policies have been deployed to a cluster."}],"source_content_type":"text/x-rst","patch_set":12,"id":"AAAAXH%2F%2FVaE%3D","line":10,"in_reply_to":"AAAAXH%2F%2FYh8%3D","updated":"2014-04-22 13:21:21.000000000","message":"Done","commit_id":"7ebc2a91b0d1df3ff6ae148797f77d3da12de844"}],"doc/source/overview_architecture.rst":[{"author":{"_account_id":9625,"name":"Thiago da Silva","email":"thiagodasilva@gmail.com","username":"thiago"},"change_message_id":"9cf56dc0b69ae52a4262a4a5117b12a4644b4449","unresolved":false,"context_lines":[{"line_number":62,"context_line":"an important concept in understanding Swift architecture.  Storage Policies"},{"line_number":63,"context_line":"allow the deployer to create multiple object rings thus allowing for some"},{"line_number":64,"context_line":"level of segmenting the cluster for various purposes.  Policies allow for a"},{"line_number":65,"context_line":"single cluster to provide multiple level of protection (2x vs 3x replication"},{"line_number":66,"context_line":"for example) or to carve out SSDs to create a performance tier.  Policies"},{"line_number":67,"context_line":"apply on a per container basis allowing for minimal application awareness; once"},{"line_number":68,"context_line":"a container has been created with a specific policy, all objects stored in it"}],"source_content_type":"text/x-rst","patch_set":7,"id":"AAAAW3%2F%2FuNQ%3D","line":65,"updated":"2014-04-10 21:43:31.000000000","message":"*levels","commit_id":"fcf35993c4fca4b01f4483e1504b7247c379146e"},{"author":{"_account_id":7479,"name":"paul luse","email":"paul.e.luse@intel.com","username":"peluse"},"change_message_id":"07d6989af5ce8a6e2eba1e4b4edef4e6a233575c","unresolved":false,"context_lines":[{"line_number":62,"context_line":"an important concept in understanding Swift architecture.  Storage Policies"},{"line_number":63,"context_line":"allow the deployer to create multiple object rings thus allowing for some"},{"line_number":64,"context_line":"level of segmenting the cluster for various purposes.  Policies allow for a"},{"line_number":65,"context_line":"single cluster to provide multiple level of protection (2x vs 3x replication"},{"line_number":66,"context_line":"for example) or to carve out SSDs to create a performance tier.  Policies"},{"line_number":67,"context_line":"apply on a per container basis allowing for minimal application awareness; once"},{"line_number":68,"context_line":"a container has been created with a specific policy, all objects stored in it"}],"source_content_type":"text/x-rst","patch_set":7,"id":"AAAAW3%2F%2Ftps%3D","line":65,"in_reply_to":"AAAAW3%2F%2FuNQ%3D","updated":"2014-04-10 23:05:40.000000000","message":"Done","commit_id":"fcf35993c4fca4b01f4483e1504b7247c379146e"},{"author":{"_account_id":9625,"name":"Thiago da Silva","email":"thiagodasilva@gmail.com","username":"thiago"},"change_message_id":"cddf4b921c1188e941091dfbf7c04e3c6f95cdf5","unresolved":false,"context_lines":[{"line_number":57,"context_line":"----------------"},{"line_number":58,"context_line":"Storage Policies"},{"line_number":59,"context_line":"----------------"},{"line_number":60,"context_line":""},{"line_number":61,"context_line":"Storage Policies are not implemented as a separate code module but are"},{"line_number":62,"context_line":"an important concept in understanding Swift architecture.  Storage Policies"},{"line_number":63,"context_line":"allow the deployer to create multiple object rings thus allowing for some"}],"source_content_type":"text/x-rst","patch_set":9,"id":"AAAAW3%2F%2FmgY%3D","line":60,"updated":"2014-04-11 21:02:55.000000000","message":"This paragraph starts with how Storage Policies was implemented rather than what it is. I\u0027d suggest a bit of a rewrite:\n\"Storage Policies allow for some level of segmenting the cluster for various purposes through the creation of multiple object rings. Storage Policies are not implemented as a separate code module but are an important concept in understanding Swift architecture. Policies allow for a single cluster to provide...","commit_id":"65446913cc0a0872d2ef9d58f84caf17c7aadc30"},{"author":{"_account_id":7479,"name":"paul luse","email":"paul.e.luse@intel.com","username":"peluse"},"change_message_id":"80c1648d12595e2482c44b8a5611064e83997d56","unresolved":false,"context_lines":[{"line_number":57,"context_line":"----------------"},{"line_number":58,"context_line":"Storage Policies"},{"line_number":59,"context_line":"----------------"},{"line_number":60,"context_line":""},{"line_number":61,"context_line":"Storage Policies are not implemented as a separate code module but are"},{"line_number":62,"context_line":"an important concept in understanding Swift architecture.  Storage Policies"},{"line_number":63,"context_line":"allow the deployer to create multiple object rings thus allowing for some"}],"source_content_type":"text/x-rst","patch_set":9,"id":"AAAAW3%2F%2Flek%3D","line":60,"in_reply_to":"AAAAW3%2F%2FmgY%3D","updated":"2014-04-12 00:04:28.000000000","message":"I like it!  thanks","commit_id":"65446913cc0a0872d2ef9d58f84caf17c7aadc30"},{"author":{"_account_id":8542,"name":"Prashanth Pai","email":"ppai@redhat.com","username":"pai"},"change_message_id":"dd7ef76caafbfe918c3083332cbfd2b2831aa019","unresolved":false,"context_lines":[{"line_number":61,"context_line":"Storage Policies allow for some level of segmenting the cluster for various"},{"line_number":62,"context_line":"purposes through the creation of multiple object rings. Storage Policies are"},{"line_number":63,"context_line":"not implemented as a separate code module but are an important concept in"},{"line_number":64,"context_line":"understanding Swift architecture. Policies allow for a single cluster to provide"},{"line_number":65,"context_line":"provide multiple levels of protection (2x vs 3x replication for example) or"},{"line_number":66,"context_line":"to carve out SSDs to create a performance tier.  Policies apply on a per"},{"line_number":67,"context_line":"container basis allowing for minimal application awareness; once a container"}],"source_content_type":"text/x-rst","patch_set":12,"id":"AAAAXH%2F%2FYg8%3D","line":64,"updated":"2014-04-22 09:18:06.000000000","message":"\"provide provide\"","commit_id":"7ebc2a91b0d1df3ff6ae148797f77d3da12de844"},{"author":{"_account_id":7479,"name":"paul luse","email":"paul.e.luse@intel.com","username":"peluse"},"change_message_id":"ce3add0ce215ca465ea4f06de0a8da47f5e0c264","unresolved":false,"context_lines":[{"line_number":61,"context_line":"Storage Policies allow for some level of segmenting the cluster for various"},{"line_number":62,"context_line":"purposes through the creation of multiple object rings. Storage Policies are"},{"line_number":63,"context_line":"not implemented as a separate code module but are an important concept in"},{"line_number":64,"context_line":"understanding Swift architecture. Policies allow for a single cluster to provide"},{"line_number":65,"context_line":"provide multiple levels of protection (2x vs 3x replication for example) or"},{"line_number":66,"context_line":"to carve out SSDs to create a performance tier.  Policies apply on a per"},{"line_number":67,"context_line":"container basis allowing for minimal application awareness; once a container"}],"source_content_type":"text/x-rst","patch_set":12,"id":"AAAAXH%2F%2FVZI%3D","line":64,"in_reply_to":"AAAAXH%2F%2FYg8%3D","updated":"2014-04-22 13:21:21.000000000","message":"Done","commit_id":"7ebc2a91b0d1df3ff6ae148797f77d3da12de844"},{"author":{"_account_id":7847,"name":"Alistair Coles","email":"alistairncoles@gmail.com","username":"acoles"},"change_message_id":"1f4330beab79dc2a991c99b5db0d1a8ddab8f1eb","unresolved":false,"context_lines":[{"line_number":67,"context_line":"container basis allowing for minimal application awareness; once a container"},{"line_number":68,"context_line":"has been created with a specific policy, all objects stored in it"},{"line_number":69,"context_line":"will be done so in accordance with that policy."},{"line_number":70,"context_line":""},{"line_number":71,"context_line":"-------------"},{"line_number":72,"context_line":"Object Server"},{"line_number":73,"context_line":"-------------"}],"source_content_type":"text/x-rst","patch_set":13,"id":"7adec928_2b88c51e","line":70,"updated":"2014-05-16 11:09:08.000000000","message":"It would be helpful to duplicate this last sentence \u0027Policies apply on a ...\u0027 in the first paragraph of the Storage Policies page","commit_id":"126ca8da784d87b1f5c0be934d81feef724bfd7e"},{"author":{"_account_id":7479,"name":"paul luse","email":"paul.e.luse@intel.com","username":"peluse"},"change_message_id":"fb622d4e912d2389e8cd4e9c5eb7a009985e0f0f","unresolved":false,"context_lines":[{"line_number":67,"context_line":"container basis allowing for minimal application awareness; once a container"},{"line_number":68,"context_line":"has been created with a specific policy, all objects stored in it"},{"line_number":69,"context_line":"will be done so in accordance with that policy."},{"line_number":70,"context_line":""},{"line_number":71,"context_line":"-------------"},{"line_number":72,"context_line":"Object Server"},{"line_number":73,"context_line":"-------------"}],"source_content_type":"text/x-rst","patch_set":13,"id":"7adec928_20758563","line":70,"in_reply_to":"7adec928_2b88c51e","updated":"2014-05-19 15:15:26.000000000","message":"Done","commit_id":"126ca8da784d87b1f5c0be934d81feef724bfd7e"}],"doc/source/overview_policies.rst":[{"author":{"_account_id":1179,"name":"Clay Gerrard","email":"clay.gerrard@gmail.com","username":"clay-gerrard"},"change_message_id":"6798f99796538cd3491e1b9fc849a60cddeb81cc","unresolved":false,"context_lines":[{"line_number":3,"context_line":"From: Luse, Paul E\r"},{"line_number":4,"context_line":"Sent: Wednesday, April 9, 2014 1:49 PM\r"},{"line_number":5,"context_line":"To: Luse, Paul E\r"},{"line_number":6,"context_line":"Subject: RE: policies\r"},{"line_number":7,"context_line":"\r"},{"line_number":8,"context_line":"\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\r"},{"line_number":9,"context_line":"Storage Policies\r"}],"source_content_type":"text/x-rst","patch_set":5,"id":"AAAAW3%2F%2F2p8%3D","line":6,"updated":"2014-04-09 23:00:53.000000000","message":"Does this stay here?","commit_id":"8d0d5a4b962b909f167b8410e7bca30272042c70"},{"author":{"_account_id":7479,"name":"paul luse","email":"paul.e.luse@intel.com","username":"peluse"},"change_message_id":"6f40ba1c892a09a14a31c14cb0966ea24395eae5","unresolved":false,"context_lines":[{"line_number":3,"context_line":"From: Luse, Paul E\r"},{"line_number":4,"context_line":"Sent: Wednesday, April 9, 2014 1:49 PM\r"},{"line_number":5,"context_line":"To: Luse, Paul E\r"},{"line_number":6,"context_line":"Subject: RE: policies\r"},{"line_number":7,"context_line":"\r"},{"line_number":8,"context_line":"\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\r"},{"line_number":9,"context_line":"Storage Policies\r"}],"source_content_type":"text/x-rst","patch_set":5,"id":"AAAAW3%2F%2FuoQ%3D","line":6,"in_reply_to":"AAAAW3%2F%2F2p8%3D","updated":"2014-04-10 20:12:34.000000000","message":"Done","commit_id":"8d0d5a4b962b909f167b8410e7bca30272042c70"},{"author":{"_account_id":1179,"name":"Clay Gerrard","email":"clay.gerrard@gmail.com","username":"clay-gerrard"},"change_message_id":"6798f99796538cd3491e1b9fc849a60cddeb81cc","unresolved":false,"context_lines":[{"line_number":9,"context_line":"Storage Policies\r"},{"line_number":10,"context_line":"\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\r"},{"line_number":11,"context_line":"\r"},{"line_number":12,"context_line":"As described earlier, the rings determine where data should reside in the\r"},{"line_number":13,"context_line":"cluster. There is a separate ring for account databases, container databases,\r"},{"line_number":14,"context_line":"and there is also one object ring per storage policy.  Each object ring behaves\r"},{"line_number":15,"context_line":"exactly the same way and is maintained in the same manner - the only difference\r"}],"source_content_type":"text/x-rst","patch_set":5,"id":"AAAAW3%2F%2F2pw%3D","line":12,"updated":"2014-04-09 23:00:53.000000000","message":"Either use a ref: link or just describe it again, the audience may not be reading these in order.","commit_id":"8d0d5a4b962b909f167b8410e7bca30272042c70"},{"author":{"_account_id":7479,"name":"paul luse","email":"paul.e.luse@intel.com","username":"peluse"},"change_message_id":"6f40ba1c892a09a14a31c14cb0966ea24395eae5","unresolved":false,"context_lines":[{"line_number":9,"context_line":"Storage Policies\r"},{"line_number":10,"context_line":"\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\r"},{"line_number":11,"context_line":"\r"},{"line_number":12,"context_line":"As described earlier, the rings determine where data should reside in the\r"},{"line_number":13,"context_line":"cluster. There is a separate ring for account databases, container databases,\r"},{"line_number":14,"context_line":"and there is also one object ring per storage policy.  Each object ring behaves\r"},{"line_number":15,"context_line":"exactly the same way and is maintained in the same manner - the only difference\r"}],"source_content_type":"text/x-rst","patch_set":5,"id":"AAAAW3%2F%2FunE%3D","line":12,"in_reply_to":"AAAAW3%2F%2F2pw%3D","updated":"2014-04-10 20:12:34.000000000","message":"added a TODO here as I don\u0027t know how to do that :)","commit_id":"8d0d5a4b962b909f167b8410e7bca30272042c70"},{"author":{"_account_id":1179,"name":"Clay Gerrard","email":"clay.gerrard@gmail.com","username":"clay-gerrard"},"change_message_id":"6798f99796538cd3491e1b9fc849a60cddeb81cc","unresolved":false,"context_lines":[{"line_number":29,"context_line":"\r"},{"line_number":30,"context_line":"NOTE:  Today, choosing a different storage policy allows the use of different object rings,\r"},{"line_number":31,"context_line":"but future policies (such as Erasure Coding) will also change how the functional code\r"},{"line_number":32,"context_line":"behaves when processing a request.\r"},{"line_number":33,"context_line":"\r"},{"line_number":34,"context_line":"--------------------\r"},{"line_number":35,"context_line":"Default versus “Policy 0”\r"}],"source_content_type":"text/x-rst","patch_set":5,"id":"AAAAW3%2F%2F2oM%3D","line":32,"updated":"2014-04-09 23:00:53.000000000","message":"At some level today you may also use storage policies to choose a different set of storage servers with a different DiskFile (e.g. Kinetic, Gluster).  I think highlighting that \"different functional storage\" is good, calling out EC as future work is also good.","commit_id":"8d0d5a4b962b909f167b8410e7bca30272042c70"},{"author":{"_account_id":7479,"name":"paul luse","email":"paul.e.luse@intel.com","username":"peluse"},"change_message_id":"6f40ba1c892a09a14a31c14cb0966ea24395eae5","unresolved":false,"context_lines":[{"line_number":29,"context_line":"\r"},{"line_number":30,"context_line":"NOTE:  Today, choosing a different storage policy allows the use of different object rings,\r"},{"line_number":31,"context_line":"but future policies (such as Erasure Coding) will also change how the functional code\r"},{"line_number":32,"context_line":"behaves when processing a request.\r"},{"line_number":33,"context_line":"\r"},{"line_number":34,"context_line":"--------------------\r"},{"line_number":35,"context_line":"Default versus “Policy 0”\r"}],"source_content_type":"text/x-rst","patch_set":5,"id":"AAAAW3%2F%2Fum8%3D","line":32,"in_reply_to":"AAAAW3%2F%2F2oM%3D","updated":"2014-04-10 20:12:34.000000000","message":"Done","commit_id":"8d0d5a4b962b909f167b8410e7bca30272042c70"},{"author":{"_account_id":1179,"name":"Clay Gerrard","email":"clay.gerrard@gmail.com","username":"clay-gerrard"},"change_message_id":"6798f99796538cd3491e1b9fc849a60cddeb81cc","unresolved":false,"context_lines":[{"line_number":39,"context_line":"Concept which is not the same as “the default”.  As you will see when we begin to\r"},{"line_number":40,"context_line":"configure policies, each policy has both a name (human friendly, configurable) as well\r"},{"line_number":41,"context_line":"as an index (or simply policy number). Swift reserves index 0 to map to the object ring\r"},{"line_number":42,"context_line":"that’s present in all installations, /etc/swift/object.ring.gz.  You can name this ring\r"},{"line_number":43,"context_line":"anything you like, and if no name Is given it will report itself as “Policy_0”, however\r"},{"line_number":44,"context_line":"you cannot change the index or the meaning.  We’ll see more how it’s used in a moment.\r"},{"line_number":45,"context_line":"\r"}],"source_content_type":"text/x-rst","patch_set":5,"id":"AAAAW3%2F%2F2n8%3D","line":42,"updated":"2014-04-09 23:00:53.000000000","message":"You can\u0027t change the name of the rings right?  object.ring.gz, object-1.ring.gz, etc. - that\u0027s hard coded?  You can just choose the name.","commit_id":"8d0d5a4b962b909f167b8410e7bca30272042c70"},{"author":{"_account_id":7479,"name":"paul luse","email":"paul.e.luse@intel.com","username":"peluse"},"change_message_id":"6f40ba1c892a09a14a31c14cb0966ea24395eae5","unresolved":false,"context_lines":[{"line_number":39,"context_line":"Concept which is not the same as “the default”.  As you will see when we begin to\r"},{"line_number":40,"context_line":"configure policies, each policy has both a name (human friendly, configurable) as well\r"},{"line_number":41,"context_line":"as an index (or simply policy number). Swift reserves index 0 to map to the object ring\r"},{"line_number":42,"context_line":"that’s present in all installations, /etc/swift/object.ring.gz.  You can name this ring\r"},{"line_number":43,"context_line":"anything you like, and if no name Is given it will report itself as “Policy_0”, however\r"},{"line_number":44,"context_line":"you cannot change the index or the meaning.  We’ll see more how it’s used in a moment.\r"},{"line_number":45,"context_line":"\r"}],"source_content_type":"text/x-rst","patch_set":5,"id":"AAAAW3%2F%2Fulg%3D","line":42,"in_reply_to":"AAAAW3%2F%2F2VI%3D","updated":"2014-04-10 20:12:34.000000000","message":"Done","commit_id":"8d0d5a4b962b909f167b8410e7bca30272042c70"},{"author":{"_account_id":7479,"name":"paul luse","email":"paul.e.luse@intel.com","username":"peluse"},"change_message_id":"84b3b09376982ebc9bc4035f569178827a12e401","unresolved":false,"context_lines":[{"line_number":39,"context_line":"Concept which is not the same as “the default”.  As you will see when we begin to\r"},{"line_number":40,"context_line":"configure policies, each policy has both a name (human friendly, configurable) as well\r"},{"line_number":41,"context_line":"as an index (or simply policy number). Swift reserves index 0 to map to the object ring\r"},{"line_number":42,"context_line":"that’s present in all installations, /etc/swift/object.ring.gz.  You can name this ring\r"},{"line_number":43,"context_line":"anything you like, and if no name Is given it will report itself as “Policy_0”, however\r"},{"line_number":44,"context_line":"you cannot change the index or the meaning.  We’ll see more how it’s used in a moment.\r"},{"line_number":45,"context_line":"\r"}],"source_content_type":"text/x-rst","patch_set":5,"id":"AAAAW3%2F%2F2VI%3D","line":42,"in_reply_to":"AAAAW3%2F%2F2n8%3D","updated":"2014-04-09 23:50:34.000000000","message":"yup, will clarify.  I mean the name of the policy but typed ring","commit_id":"8d0d5a4b962b909f167b8410e7bca30272042c70"},{"author":{"_account_id":1179,"name":"Clay Gerrard","email":"clay.gerrard@gmail.com","username":"clay-gerrard"},"change_message_id":"6798f99796538cd3491e1b9fc849a60cddeb81cc","unresolved":false,"context_lines":[{"line_number":40,"context_line":"configure policies, each policy has both a name (human friendly, configurable) as well\r"},{"line_number":41,"context_line":"as an index (or simply policy number). Swift reserves index 0 to map to the object ring\r"},{"line_number":42,"context_line":"that’s present in all installations, /etc/swift/object.ring.gz.  You can name this ring\r"},{"line_number":43,"context_line":"anything you like, and if no name Is given it will report itself as “Policy_0”, however\r"},{"line_number":44,"context_line":"you cannot change the index or the meaning.  We’ll see more how it’s used in a moment.\r"},{"line_number":45,"context_line":"\r"},{"line_number":46,"context_line":"Another important concept is “the default” policy which can be any policy in the\r"}],"source_content_type":"text/x-rst","patch_set":5,"id":"AAAAW3%2F%2F2nY%3D","line":43,"updated":"2014-04-09 23:00:53.000000000","message":"I wish we had a better story for cluster\u0027s that are only running the legacy policy.  The name \"Policy_0\" while configurable is sorta silly, I wouldn\u0027t mind if some places that normally expose the name of the storage policy had a branch when policy.is_legacy to simple not say that name.  Where as if you were to *define* a policy with index 0 and give it a name is_legacy would be false.","commit_id":"8d0d5a4b962b909f167b8410e7bca30272042c70"},{"author":{"_account_id":7479,"name":"paul luse","email":"paul.e.luse@intel.com","username":"peluse"},"change_message_id":"84b3b09376982ebc9bc4035f569178827a12e401","unresolved":false,"context_lines":[{"line_number":40,"context_line":"configure policies, each policy has both a name (human friendly, configurable) as well\r"},{"line_number":41,"context_line":"as an index (or simply policy number). Swift reserves index 0 to map to the object ring\r"},{"line_number":42,"context_line":"that’s present in all installations, /etc/swift/object.ring.gz.  You can name this ring\r"},{"line_number":43,"context_line":"anything you like, and if no name Is given it will report itself as “Policy_0”, however\r"},{"line_number":44,"context_line":"you cannot change the index or the meaning.  We’ll see more how it’s used in a moment.\r"},{"line_number":45,"context_line":"\r"},{"line_number":46,"context_line":"Another important concept is “the default” policy which can be any policy in the\r"}],"source_content_type":"text/x-rst","patch_set":5,"id":"AAAAW3%2F%2F2Uw%3D","line":43,"in_reply_to":"AAAAW3%2F%2F2nY%3D","updated":"2014-04-09 23:50:34.000000000","message":"yeah, easy enough.  The only place its really relevant is in the acct HEAD.  I\u0027ll throw a todo up (small test tweaking too of course)","commit_id":"8d0d5a4b962b909f167b8410e7bca30272042c70"},{"author":{"_account_id":1179,"name":"Clay Gerrard","email":"clay.gerrard@gmail.com","username":"clay-gerrard"},"change_message_id":"6798f99796538cd3491e1b9fc849a60cddeb81cc","unresolved":false,"context_lines":[{"line_number":41,"context_line":"as an index (or simply policy number). Swift reserves index 0 to map to the object ring\r"},{"line_number":42,"context_line":"that’s present in all installations, /etc/swift/object.ring.gz.  You can name this ring\r"},{"line_number":43,"context_line":"anything you like, and if no name Is given it will report itself as “Policy_0”, however\r"},{"line_number":44,"context_line":"you cannot change the index or the meaning.  We’ll see more how it’s used in a moment.\r"},{"line_number":45,"context_line":"\r"},{"line_number":46,"context_line":"Another important concept is “the default” policy which can be any policy in the\r"},{"line_number":47,"context_line":"cluster.  We differentiate default from Policy_0 because it may be the case that a\r"}],"source_content_type":"text/x-rst","patch_set":5,"id":"AAAAW3%2F%2F2nQ%3D","line":44,"updated":"2014-04-09 23:00:53.000000000","message":"But you can on new clusters right?  If you wanted the policy with index 0 to be EC you could just configure that when you first bring up your cluster and you\u0027re all set!","commit_id":"8d0d5a4b962b909f167b8410e7bca30272042c70"},{"author":{"_account_id":7479,"name":"paul luse","email":"paul.e.luse@intel.com","username":"peluse"},"change_message_id":"6f40ba1c892a09a14a31c14cb0966ea24395eae5","unresolved":false,"context_lines":[{"line_number":41,"context_line":"as an index (or simply policy number). Swift reserves index 0 to map to the object ring\r"},{"line_number":42,"context_line":"that’s present in all installations, /etc/swift/object.ring.gz.  You can name this ring\r"},{"line_number":43,"context_line":"anything you like, and if no name Is given it will report itself as “Policy_0”, however\r"},{"line_number":44,"context_line":"you cannot change the index or the meaning.  We’ll see more how it’s used in a moment.\r"},{"line_number":45,"context_line":"\r"},{"line_number":46,"context_line":"Another important concept is “the default” policy which can be any policy in the\r"},{"line_number":47,"context_line":"cluster.  We differentiate default from Policy_0 because it may be the case that a\r"}],"source_content_type":"text/x-rst","patch_set":5,"id":"AAAAW3%2F%2Fufc%3D","line":44,"in_reply_to":"AAAAW3%2F%2F2T8%3D","updated":"2014-04-10 20:12:34.000000000","message":"Done","commit_id":"8d0d5a4b962b909f167b8410e7bca30272042c70"},{"author":{"_account_id":7479,"name":"paul luse","email":"paul.e.luse@intel.com","username":"peluse"},"change_message_id":"84b3b09376982ebc9bc4035f569178827a12e401","unresolved":false,"context_lines":[{"line_number":41,"context_line":"as an index (or simply policy number). Swift reserves index 0 to map to the object ring\r"},{"line_number":42,"context_line":"that’s present in all installations, /etc/swift/object.ring.gz.  You can name this ring\r"},{"line_number":43,"context_line":"anything you like, and if no name Is given it will report itself as “Policy_0”, however\r"},{"line_number":44,"context_line":"you cannot change the index or the meaning.  We’ll see more how it’s used in a moment.\r"},{"line_number":45,"context_line":"\r"},{"line_number":46,"context_line":"Another important concept is “the default” policy which can be any policy in the\r"},{"line_number":47,"context_line":"cluster.  We differentiate default from Policy_0 because it may be the case that a\r"}],"source_content_type":"text/x-rst","patch_set":5,"id":"AAAAW3%2F%2F2T8%3D","line":44,"in_reply_to":"AAAAW3%2F%2F2nQ%3D","updated":"2014-04-09 23:50:34.000000000","message":"Yeah, that should work.  I\u0027ll change how this is worded on next update","commit_id":"8d0d5a4b962b909f167b8410e7bca30272042c70"},{"author":{"_account_id":1179,"name":"Clay Gerrard","email":"clay.gerrard@gmail.com","username":"clay-gerrard"},"change_message_id":"6798f99796538cd3491e1b9fc849a60cddeb81cc","unresolved":false,"context_lines":[{"line_number":59,"context_line":"\r"},{"line_number":60,"context_line":"* Note that with the Storage Policy based code, it’s not possible to create a\r"},{"line_number":61,"context_line":"container that doesn’t have a policy.  If nothing is provided, Swift will still select\r"},{"line_number":62,"context_line":"the default and assign it to the container.\r"},{"line_number":63,"context_line":"\r"},{"line_number":64,"context_line":"-----------------------\r"},{"line_number":65,"context_line":"Containers and Policies\r"}],"source_content_type":"text/x-rst","patch_set":5,"id":"AAAAW3%2F%2F2m0%3D","line":62,"updated":"2014-04-09 23:00:53.000000000","message":"And containers created before the storage policy code was introduced are implicitly the legacy policy \"Policy_0\".","commit_id":"8d0d5a4b962b909f167b8410e7bca30272042c70"},{"author":{"_account_id":7479,"name":"paul luse","email":"paul.e.luse@intel.com","username":"peluse"},"change_message_id":"6f40ba1c892a09a14a31c14cb0966ea24395eae5","unresolved":false,"context_lines":[{"line_number":59,"context_line":"\r"},{"line_number":60,"context_line":"* Note that with the Storage Policy based code, it’s not possible to create a\r"},{"line_number":61,"context_line":"container that doesn’t have a policy.  If nothing is provided, Swift will still select\r"},{"line_number":62,"context_line":"the default and assign it to the container.\r"},{"line_number":63,"context_line":"\r"},{"line_number":64,"context_line":"-----------------------\r"},{"line_number":65,"context_line":"Containers and Policies\r"}],"source_content_type":"text/x-rst","patch_set":5,"id":"AAAAW3%2F%2FueQ%3D","line":62,"in_reply_to":"AAAAW3%2F%2F2m0%3D","updated":"2014-04-10 20:12:34.000000000","message":"Done","commit_id":"8d0d5a4b962b909f167b8410e7bca30272042c70"},{"author":{"_account_id":7479,"name":"paul luse","email":"paul.e.luse@intel.com","username":"peluse"},"change_message_id":"84b3b09376982ebc9bc4035f569178827a12e401","unresolved":false,"context_lines":[{"line_number":59,"context_line":"\r"},{"line_number":60,"context_line":"* Note that with the Storage Policy based code, it’s not possible to create a\r"},{"line_number":61,"context_line":"container that doesn’t have a policy.  If nothing is provided, Swift will still select\r"},{"line_number":62,"context_line":"the default and assign it to the container.\r"},{"line_number":63,"context_line":"\r"},{"line_number":64,"context_line":"-----------------------\r"},{"line_number":65,"context_line":"Containers and Policies\r"}],"source_content_type":"text/x-rst","patch_set":5,"id":"AAAAW3%2F%2F2Tw%3D","line":62,"in_reply_to":"AAAAW3%2F%2F2m0%3D","updated":"2014-04-09 23:50:34.000000000","message":"yup, will make that clear too","commit_id":"8d0d5a4b962b909f167b8410e7bca30272042c70"},{"author":{"_account_id":1179,"name":"Clay Gerrard","email":"clay.gerrard@gmail.com","username":"clay-gerrard"},"change_message_id":"6798f99796538cd3491e1b9fc849a60cddeb81cc","unresolved":false,"context_lines":[{"line_number":75,"context_line":"policy name.  If nothing is specified, the default policy is used (and if no default was\r"},{"line_number":76,"context_line":"specified, Policy_0 is considered the default).\r"},{"line_number":77,"context_line":"\r"},{"line_number":78,"context_line":"Once a policy index is put into a container database,  it can never be changed.  The\r"},{"line_number":79,"context_line":"implications on data placement/movement for large datasets would make this a task\r"},{"line_number":80,"context_line":"best left for applications to decide if/where/when. Therefore, if a container has an\r"},{"line_number":81,"context_line":"existing policy of, for example 3x replication, and one wanted to migrate that data to\r"}],"source_content_type":"text/x-rst","patch_set":5,"id":"AAAAW3%2F%2F2ms%3D","line":78,"updated":"2014-04-09 23:00:53.000000000","message":"\"databse,  it\" - two spaces.","commit_id":"8d0d5a4b962b909f167b8410e7bca30272042c70"},{"author":{"_account_id":7479,"name":"paul luse","email":"paul.e.luse@intel.com","username":"peluse"},"change_message_id":"84b3b09376982ebc9bc4035f569178827a12e401","unresolved":false,"context_lines":[{"line_number":75,"context_line":"policy name.  If nothing is specified, the default policy is used (and if no default was\r"},{"line_number":76,"context_line":"specified, Policy_0 is considered the default).\r"},{"line_number":77,"context_line":"\r"},{"line_number":78,"context_line":"Once a policy index is put into a container database,  it can never be changed.  The\r"},{"line_number":79,"context_line":"implications on data placement/movement for large datasets would make this a task\r"},{"line_number":80,"context_line":"best left for applications to decide if/where/when. Therefore, if a container has an\r"},{"line_number":81,"context_line":"existing policy of, for example 3x replication, and one wanted to migrate that data to\r"}],"source_content_type":"text/x-rst","patch_set":5,"id":"AAAAW3%2F%2F2Ts%3D","line":78,"in_reply_to":"AAAAW3%2F%2F2ms%3D","updated":"2014-04-09 23:50:34.000000000","message":"Done","commit_id":"8d0d5a4b962b909f167b8410e7bca30272042c70"},{"author":{"_account_id":1179,"name":"Clay Gerrard","email":"clay.gerrard@gmail.com","username":"clay-gerrard"},"change_message_id":"6798f99796538cd3491e1b9fc849a60cddeb81cc","unresolved":false,"context_lines":[{"line_number":79,"context_line":"implications on data placement/movement for large datasets would make this a task\r"},{"line_number":80,"context_line":"best left for applications to decide if/where/when. Therefore, if a container has an\r"},{"line_number":81,"context_line":"existing policy of, for example 3x replication, and one wanted to migrate that data to\r"},{"line_number":82,"context_line":"a different policy, let’s say Erasure Code when its available, the application would\r"},{"line_number":83,"context_line":"create another container specifying the Erasure Code policy name and then simply\r"},{"line_number":84,"context_line":"move the data from one container to the other.\r"},{"line_number":85,"context_line":"\r"}],"source_content_type":"text/x-rst","patch_set":5,"id":"AAAAW3%2F%2F2mg%3D","line":82,"updated":"2014-04-09 23:00:53.000000000","message":"reduced redundancy would perhaps be a better concrete example","commit_id":"8d0d5a4b962b909f167b8410e7bca30272042c70"},{"author":{"_account_id":7479,"name":"paul luse","email":"paul.e.luse@intel.com","username":"peluse"},"change_message_id":"6f40ba1c892a09a14a31c14cb0966ea24395eae5","unresolved":false,"context_lines":[{"line_number":79,"context_line":"implications on data placement/movement for large datasets would make this a task\r"},{"line_number":80,"context_line":"best left for applications to decide if/where/when. Therefore, if a container has an\r"},{"line_number":81,"context_line":"existing policy of, for example 3x replication, and one wanted to migrate that data to\r"},{"line_number":82,"context_line":"a different policy, let’s say Erasure Code when its available, the application would\r"},{"line_number":83,"context_line":"create another container specifying the Erasure Code policy name and then simply\r"},{"line_number":84,"context_line":"move the data from one container to the other.\r"},{"line_number":85,"context_line":"\r"}],"source_content_type":"text/x-rst","patch_set":5,"id":"AAAAW3%2F%2Fudk%3D","line":82,"in_reply_to":"AAAAW3%2F%2F2Tc%3D","updated":"2014-04-10 20:12:34.000000000","message":"will keep it as is unless you feel strongly about it","commit_id":"8d0d5a4b962b909f167b8410e7bca30272042c70"},{"author":{"_account_id":7479,"name":"paul luse","email":"paul.e.luse@intel.com","username":"peluse"},"change_message_id":"84b3b09376982ebc9bc4035f569178827a12e401","unresolved":false,"context_lines":[{"line_number":79,"context_line":"implications on data placement/movement for large datasets would make this a task\r"},{"line_number":80,"context_line":"best left for applications to decide if/where/when. Therefore, if a container has an\r"},{"line_number":81,"context_line":"existing policy of, for example 3x replication, and one wanted to migrate that data to\r"},{"line_number":82,"context_line":"a different policy, let’s say Erasure Code when its available, the application would\r"},{"line_number":83,"context_line":"create another container specifying the Erasure Code policy name and then simply\r"},{"line_number":84,"context_line":"move the data from one container to the other.\r"},{"line_number":85,"context_line":"\r"}],"source_content_type":"text/x-rst","patch_set":5,"id":"AAAAW3%2F%2F2Tc%3D","line":82,"in_reply_to":"AAAAW3%2F%2F2mg%3D","updated":"2014-04-09 23:50:34.000000000","message":"sure, I was just trying to avoid confusion with what you can do today by changing the repl level (which is still not the same as that would apply to the whole cluster but that\u0027s why I went the EC route)","commit_id":"8d0d5a4b962b909f167b8410e7bca30272042c70"},{"author":{"_account_id":1179,"name":"Clay Gerrard","email":"clay.gerrard@gmail.com","username":"clay-gerrard"},"change_message_id":"6798f99796538cd3491e1b9fc849a60cddeb81cc","unresolved":false,"context_lines":[{"line_number":108,"context_line":"/objects ? maps to objects associated with Policy_0\r"},{"line_number":109,"context_line":"/objects-N ? maps to storage policy index #N\r"},{"line_number":110,"context_line":"/async_pending ? maps to async pending update for Policy_0\r"},{"line_number":111,"context_line":"/async_pending ? maps to async pending update for storage policy index #N\r"},{"line_number":112,"context_line":"\r"},{"line_number":113,"context_line":"Note that these directory names are actually “owned” by the specific diskfile\r"},{"line_number":114,"context_line":"Implementation, the names shown above are used by the default diskfile.\r"}],"source_content_type":"text/x-rst","patch_set":5,"id":"AAAAW3%2F%2F2mE%3D","line":111,"updated":"2014-04-09 23:00:53.000000000","message":"there\u0027s a -N missing here yes?","commit_id":"8d0d5a4b962b909f167b8410e7bca30272042c70"},{"author":{"_account_id":7479,"name":"paul luse","email":"paul.e.luse@intel.com","username":"peluse"},"change_message_id":"84b3b09376982ebc9bc4035f569178827a12e401","unresolved":false,"context_lines":[{"line_number":108,"context_line":"/objects ? maps to objects associated with Policy_0\r"},{"line_number":109,"context_line":"/objects-N ? maps to storage policy index #N\r"},{"line_number":110,"context_line":"/async_pending ? maps to async pending update for Policy_0\r"},{"line_number":111,"context_line":"/async_pending ? maps to async pending update for storage policy index #N\r"},{"line_number":112,"context_line":"\r"},{"line_number":113,"context_line":"Note that these directory names are actually “owned” by the specific diskfile\r"},{"line_number":114,"context_line":"Implementation, the names shown above are used by the default diskfile.\r"}],"source_content_type":"text/x-rst","patch_set":5,"id":"AAAAW3%2F%2F2TY%3D","line":111,"in_reply_to":"AAAAW3%2F%2F2mE%3D","updated":"2014-04-09 23:50:34.000000000","message":"indeed there is","commit_id":"8d0d5a4b962b909f167b8410e7bca30272042c70"},{"author":{"_account_id":1179,"name":"Clay Gerrard","email":"clay.gerrard@gmail.com","username":"clay-gerrard"},"change_message_id":"6798f99796538cd3491e1b9fc849a60cddeb81cc","unresolved":false,"context_lines":[{"line_number":151,"context_line":"file:\r"},{"line_number":152,"context_line":"\r"},{"line_number":153,"context_line":"            - If Policy_0 is not declared or no policies defined, Swift will create one\r"},{"line_number":154,"context_line":"            - The policy index must be integer\r"},{"line_number":155,"context_line":"            - If no policy is declared as the default, Policy_9 is set as the default\r"},{"line_number":156,"context_line":"            - Policy indexes must be unique\r"},{"line_number":157,"context_line":"            - Policy names are required\r"}],"source_content_type":"text/x-rst","patch_set":5,"id":"AAAAW3%2F%2F2lg%3D","line":154,"updated":"2014-04-09 23:00:53.000000000","message":"non-negative?  don\u0027t know if the validator actually enforces this...","commit_id":"8d0d5a4b962b909f167b8410e7bca30272042c70"},{"author":{"_account_id":7479,"name":"paul luse","email":"paul.e.luse@intel.com","username":"peluse"},"change_message_id":"84b3b09376982ebc9bc4035f569178827a12e401","unresolved":false,"context_lines":[{"line_number":151,"context_line":"file:\r"},{"line_number":152,"context_line":"\r"},{"line_number":153,"context_line":"            - If Policy_0 is not declared or no policies defined, Swift will create one\r"},{"line_number":154,"context_line":"            - The policy index must be integer\r"},{"line_number":155,"context_line":"            - If no policy is declared as the default, Policy_9 is set as the default\r"},{"line_number":156,"context_line":"            - Policy indexes must be unique\r"},{"line_number":157,"context_line":"            - Policy names are required\r"}],"source_content_type":"text/x-rst","patch_set":5,"id":"AAAAW3%2F%2F2Sw%3D","line":154,"in_reply_to":"AAAAW3%2F%2F2lg%3D","updated":"2014-04-09 23:50:34.000000000","message":"yup, it does","commit_id":"8d0d5a4b962b909f167b8410e7bca30272042c70"},{"author":{"_account_id":1179,"name":"Clay Gerrard","email":"clay.gerrard@gmail.com","username":"clay-gerrard"},"change_message_id":"6798f99796538cd3491e1b9fc849a60cddeb81cc","unresolved":false,"context_lines":[{"line_number":152,"context_line":"\r"},{"line_number":153,"context_line":"            - If Policy_0 is not declared or no policies defined, Swift will create one\r"},{"line_number":154,"context_line":"            - The policy index must be integer\r"},{"line_number":155,"context_line":"            - If no policy is declared as the default, Policy_9 is set as the default\r"},{"line_number":156,"context_line":"            - Policy indexes must be unique\r"},{"line_number":157,"context_line":"            - Policy names are required\r"},{"line_number":158,"context_line":"            - Policy names must be unique\r"}],"source_content_type":"text/x-rst","patch_set":5,"id":"AAAAW3%2F%2F2lc%3D","line":155,"updated":"2014-04-09 23:00:53.000000000","message":"Policy_9 - typo?","commit_id":"8d0d5a4b962b909f167b8410e7bca30272042c70"},{"author":{"_account_id":7479,"name":"paul luse","email":"paul.e.luse@intel.com","username":"peluse"},"change_message_id":"6f40ba1c892a09a14a31c14cb0966ea24395eae5","unresolved":false,"context_lines":[{"line_number":152,"context_line":"\r"},{"line_number":153,"context_line":"            - If Policy_0 is not declared or no policies defined, Swift will create one\r"},{"line_number":154,"context_line":"            - The policy index must be integer\r"},{"line_number":155,"context_line":"            - If no policy is declared as the default, Policy_9 is set as the default\r"},{"line_number":156,"context_line":"            - Policy indexes must be unique\r"},{"line_number":157,"context_line":"            - Policy names are required\r"},{"line_number":158,"context_line":"            - Policy names must be unique\r"}],"source_content_type":"text/x-rst","patch_set":5,"id":"AAAAW3%2F%2FudA%3D","line":155,"in_reply_to":"AAAAW3%2F%2F2Ss%3D","updated":"2014-04-10 20:12:34.000000000","message":"Done","commit_id":"8d0d5a4b962b909f167b8410e7bca30272042c70"},{"author":{"_account_id":7479,"name":"paul luse","email":"paul.e.luse@intel.com","username":"peluse"},"change_message_id":"84b3b09376982ebc9bc4035f569178827a12e401","unresolved":false,"context_lines":[{"line_number":152,"context_line":"\r"},{"line_number":153,"context_line":"            - If Policy_0 is not declared or no policies defined, Swift will create one\r"},{"line_number":154,"context_line":"            - The policy index must be integer\r"},{"line_number":155,"context_line":"            - If no policy is declared as the default, Policy_9 is set as the default\r"},{"line_number":156,"context_line":"            - Policy indexes must be unique\r"},{"line_number":157,"context_line":"            - Policy names are required\r"},{"line_number":158,"context_line":"            - Policy names must be unique\r"}],"source_content_type":"text/x-rst","patch_set":5,"id":"AAAAW3%2F%2F2Ss%3D","line":155,"in_reply_to":"AAAAW3%2F%2F2lc%3D","updated":"2014-04-09 23:50:34.000000000","message":"oh, you haven\u0027t heard about the new secret policy_9?","commit_id":"8d0d5a4b962b909f167b8410e7bca30272042c70"},{"author":{"_account_id":2649,"name":"Zhang Hua","email":"zhuadl@cn.ibm.com","username":"zhang-hare"},"change_message_id":"960895aa40de60ffe770e7528da4aa79c9635eef","unresolved":false,"context_lines":[{"line_number":249,"context_line":"are now members of the StoragePolicy() class and are actually not\r"},{"line_number":250,"context_line":"instantiated until needed for the first time.  Any caller anywhere\r"},{"line_number":251,"context_line":"in the code base that needs to access and object ring must use\r"},{"line_number":252,"context_line":"the POLICIES global singleton  to access the get_object_ring() function\r"},{"line_number":253,"context_line":"and provide the policy index.  The global is instantiated when Swift\r"},{"line_number":254,"context_line":"starts and provides a means to patch policies for the test code.\r"},{"line_number":255,"context_line":"\r"}],"source_content_type":"text/x-rst","patch_set":5,"id":"AAAAW3%2F%2FzVQ%3D","line":252,"updated":"2014-04-10 10:25:52.000000000","message":"two space?","commit_id":"8d0d5a4b962b909f167b8410e7bca30272042c70"},{"author":{"_account_id":7479,"name":"paul luse","email":"paul.e.luse@intel.com","username":"peluse"},"change_message_id":"6f40ba1c892a09a14a31c14cb0966ea24395eae5","unresolved":false,"context_lines":[{"line_number":249,"context_line":"are now members of the StoragePolicy() class and are actually not\r"},{"line_number":250,"context_line":"instantiated until needed for the first time.  Any caller anywhere\r"},{"line_number":251,"context_line":"in the code base that needs to access and object ring must use\r"},{"line_number":252,"context_line":"the POLICIES global singleton  to access the get_object_ring() function\r"},{"line_number":253,"context_line":"and provide the policy index.  The global is instantiated when Swift\r"},{"line_number":254,"context_line":"starts and provides a means to patch policies for the test code.\r"},{"line_number":255,"context_line":"\r"}],"source_content_type":"text/x-rst","patch_set":5,"id":"AAAAW3%2F%2Fw1E%3D","line":252,"in_reply_to":"AAAAW3%2F%2FzVQ%3D","updated":"2014-04-10 20:12:34.000000000","message":"Done","commit_id":"8d0d5a4b962b909f167b8410e7bca30272042c70"},{"author":{"_account_id":2649,"name":"Zhang Hua","email":"zhuadl@cn.ibm.com","username":"zhang-hare"},"change_message_id":"960895aa40de60ffe770e7528da4aa79c9635eef","unresolved":false,"context_lines":[{"line_number":276,"context_line":"does so via first getting the policy index from the cached container info, except\r"},{"line_number":277,"context_line":"for the case of creating a container of course where it gets the policy index\r"},{"line_number":278,"context_line":"via lookup of the provided policy name using the POLICIES global.  Once the\r"},{"line_number":279,"context_line":"proxy has determined the policy index, it can use the get_obejct_ring() method\r"},{"line_number":280,"context_line":"described earlier to gain access to the correct ring.  It then has the responsibility\r"},{"line_number":281,"context_line":"of passing the index information, not the policy name, on to the back-end servers\r"},{"line_number":282,"context_line":"via a new header “X-Storage-Policy-Index”.   Going the other way, the proxy also\r"}],"source_content_type":"text/x-rst","patch_set":5,"id":"AAAAW3%2F%2FzTk%3D","line":279,"updated":"2014-04-10 10:25:52.000000000","message":"get_object_ring()?","commit_id":"8d0d5a4b962b909f167b8410e7bca30272042c70"},{"author":{"_account_id":7479,"name":"paul luse","email":"paul.e.luse@intel.com","username":"peluse"},"change_message_id":"6f40ba1c892a09a14a31c14cb0966ea24395eae5","unresolved":false,"context_lines":[{"line_number":276,"context_line":"does so via first getting the policy index from the cached container info, except\r"},{"line_number":277,"context_line":"for the case of creating a container of course where it gets the policy index\r"},{"line_number":278,"context_line":"via lookup of the provided policy name using the POLICIES global.  Once the\r"},{"line_number":279,"context_line":"proxy has determined the policy index, it can use the get_obejct_ring() method\r"},{"line_number":280,"context_line":"described earlier to gain access to the correct ring.  It then has the responsibility\r"},{"line_number":281,"context_line":"of passing the index information, not the policy name, on to the back-end servers\r"},{"line_number":282,"context_line":"via a new header “X-Storage-Policy-Index”.   Going the other way, the proxy also\r"}],"source_content_type":"text/x-rst","patch_set":5,"id":"AAAAW3%2F%2Fw1A%3D","line":279,"in_reply_to":"AAAAW3%2F%2FzTk%3D","updated":"2014-04-10 20:12:34.000000000","message":"Done","commit_id":"8d0d5a4b962b909f167b8410e7bca30272042c70"},{"author":{"_account_id":1179,"name":"Clay Gerrard","email":"clay.gerrard@gmail.com","username":"clay-gerrard"},"change_message_id":"6798f99796538cd3491e1b9fc849a60cddeb81cc","unresolved":false,"context_lines":[{"line_number":279,"context_line":"proxy has determined the policy index, it can use the get_obejct_ring() method\r"},{"line_number":280,"context_line":"described earlier to gain access to the correct ring.  It then has the responsibility\r"},{"line_number":281,"context_line":"of passing the index information, not the policy name, on to the back-end servers\r"},{"line_number":282,"context_line":"via a new header “X-Storage-Policy-Index”.   Going the other way, the proxy also\r"},{"line_number":283,"context_line":"strips the index out of headers that go back to clients and make sure they only\r"},{"line_number":284,"context_line":"see the friendly policy names.\r"},{"line_number":285,"context_line":"\r"}],"source_content_type":"text/x-rst","patch_set":5,"id":"AAAAW3%2F%2F2kU%3D","line":282,"updated":"2014-04-09 23:00:53.000000000","message":"won\u0027t be so new next year when sp is all old news ;)","commit_id":"8d0d5a4b962b909f167b8410e7bca30272042c70"},{"author":{"_account_id":7479,"name":"paul luse","email":"paul.e.luse@intel.com","username":"peluse"},"change_message_id":"6f40ba1c892a09a14a31c14cb0966ea24395eae5","unresolved":false,"context_lines":[{"line_number":279,"context_line":"proxy has determined the policy index, it can use the get_obejct_ring() method\r"},{"line_number":280,"context_line":"described earlier to gain access to the correct ring.  It then has the responsibility\r"},{"line_number":281,"context_line":"of passing the index information, not the policy name, on to the back-end servers\r"},{"line_number":282,"context_line":"via a new header “X-Storage-Policy-Index”.   Going the other way, the proxy also\r"},{"line_number":283,"context_line":"strips the index out of headers that go back to clients and make sure they only\r"},{"line_number":284,"context_line":"see the friendly policy names.\r"},{"line_number":285,"context_line":"\r"}],"source_content_type":"text/x-rst","patch_set":5,"id":"AAAAW3%2F%2FucE%3D","line":282,"in_reply_to":"AAAAW3%2F%2F2SY%3D","updated":"2014-04-10 20:12:34.000000000","message":"Done","commit_id":"8d0d5a4b962b909f167b8410e7bca30272042c70"},{"author":{"_account_id":7479,"name":"paul luse","email":"paul.e.luse@intel.com","username":"peluse"},"change_message_id":"84b3b09376982ebc9bc4035f569178827a12e401","unresolved":false,"context_lines":[{"line_number":279,"context_line":"proxy has determined the policy index, it can use the get_obejct_ring() method\r"},{"line_number":280,"context_line":"described earlier to gain access to the correct ring.  It then has the responsibility\r"},{"line_number":281,"context_line":"of passing the index information, not the policy name, on to the back-end servers\r"},{"line_number":282,"context_line":"via a new header “X-Storage-Policy-Index”.   Going the other way, the proxy also\r"},{"line_number":283,"context_line":"strips the index out of headers that go back to clients and make sure they only\r"},{"line_number":284,"context_line":"see the friendly policy names.\r"},{"line_number":285,"context_line":"\r"}],"source_content_type":"text/x-rst","patch_set":5,"id":"AAAAW3%2F%2F2SY%3D","line":282,"in_reply_to":"AAAAW3%2F%2F2kU%3D","updated":"2014-04-09 23:50:34.000000000","message":"yeah, I tried to not talk about changes and newness so much so that this would have some legs but once on a rolls I strayed from that here and there.  Will clean it up, thanks","commit_id":"8d0d5a4b962b909f167b8410e7bca30272042c70"},{"author":{"_account_id":1179,"name":"Clay Gerrard","email":"clay.gerrard@gmail.com","username":"clay-gerrard"},"change_message_id":"6798f99796538cd3491e1b9fc849a60cddeb81cc","unresolved":false,"context_lines":[{"line_number":286,"context_line":"* Object Server\r"},{"line_number":287,"context_line":"\r"},{"line_number":288,"context_line":"It may not seem like the object server would be too involved with Policies and\r"},{"line_number":289,"context_line":"If you thought that you’d be correct.  However, because of how back-end\r"},{"line_number":290,"context_line":"directory structures are setup for policies, as described earlier, the object server\r"},{"line_number":291,"context_line":"modules do play a role.  When the object server gets a diskfile, it passes in the\r"},{"line_number":292,"context_line":"policy index and leaves the actual directory naming/structure mechanisms to\r"}],"source_content_type":"text/x-rst","patch_set":5,"id":"AAAAW3%2F%2F2j8%3D","line":289,"updated":"2014-04-09 23:00:53.000000000","message":"If should be if","commit_id":"8d0d5a4b962b909f167b8410e7bca30272042c70"},{"author":{"_account_id":7479,"name":"paul luse","email":"paul.e.luse@intel.com","username":"peluse"},"change_message_id":"84b3b09376982ebc9bc4035f569178827a12e401","unresolved":false,"context_lines":[{"line_number":286,"context_line":"* Object Server\r"},{"line_number":287,"context_line":"\r"},{"line_number":288,"context_line":"It may not seem like the object server would be too involved with Policies and\r"},{"line_number":289,"context_line":"If you thought that you’d be correct.  However, because of how back-end\r"},{"line_number":290,"context_line":"directory structures are setup for policies, as described earlier, the object server\r"},{"line_number":291,"context_line":"modules do play a role.  When the object server gets a diskfile, it passes in the\r"},{"line_number":292,"context_line":"policy index and leaves the actual directory naming/structure mechanisms to\r"}],"source_content_type":"text/x-rst","patch_set":5,"id":"AAAAW3%2F%2F2SQ%3D","line":289,"in_reply_to":"AAAAW3%2F%2F2j8%3D","updated":"2014-04-09 23:50:34.000000000","message":"Done","commit_id":"8d0d5a4b962b909f167b8410e7bca30272042c70"},{"author":{"_account_id":2649,"name":"Zhang Hua","email":"zhuadl@cn.ibm.com","username":"zhang-hare"},"change_message_id":"960895aa40de60ffe770e7528da4aa79c9635eef","unresolved":false,"context_lines":[{"line_number":312,"context_line":"structure owned by diskfile requires the policy index parameter so for ssync\r"},{"line_number":313,"context_line":"being policy aware really means passing the policy index along.\r"},{"line_number":314,"context_line":"\r"},{"line_number":315,"context_line":"For Diskfile itself, being policy aware is all about managing the back-end\r"},{"line_number":316,"context_line":"structure using the provided policy index.  In other words, callers who get\r"},{"line_number":317,"context_line":"a diskfile instance provide a policy index and Diskfile’s job is to keep data\r"},{"line_number":318,"context_line":"separated via this index (however it chooses) such that policies can share\r"}],"source_content_type":"text/x-rst","patch_set":5,"id":"AAAAW3%2F%2FzP8%3D","line":315,"updated":"2014-04-10 10:25:52.000000000","message":"use diskfile instead of Diskfile in this paragraph as before?","commit_id":"8d0d5a4b962b909f167b8410e7bca30272042c70"},{"author":{"_account_id":7479,"name":"paul luse","email":"paul.e.luse@intel.com","username":"peluse"},"change_message_id":"6f40ba1c892a09a14a31c14cb0966ea24395eae5","unresolved":false,"context_lines":[{"line_number":312,"context_line":"structure owned by diskfile requires the policy index parameter so for ssync\r"},{"line_number":313,"context_line":"being policy aware really means passing the policy index along.\r"},{"line_number":314,"context_line":"\r"},{"line_number":315,"context_line":"For Diskfile itself, being policy aware is all about managing the back-end\r"},{"line_number":316,"context_line":"structure using the provided policy index.  In other words, callers who get\r"},{"line_number":317,"context_line":"a diskfile instance provide a policy index and Diskfile’s job is to keep data\r"},{"line_number":318,"context_line":"separated via this index (however it chooses) such that policies can share\r"}],"source_content_type":"text/x-rst","patch_set":5,"id":"AAAAW3%2F%2Fw00%3D","line":315,"in_reply_to":"AAAAW3%2F%2FzP8%3D","updated":"2014-04-10 20:12:34.000000000","message":"Done","commit_id":"8d0d5a4b962b909f167b8410e7bca30272042c70"},{"author":{"_account_id":1179,"name":"Clay Gerrard","email":"clay.gerrard@gmail.com","username":"clay-gerrard"},"change_message_id":"6798f99796538cd3491e1b9fc849a60cddeb81cc","unresolved":false,"context_lines":[{"line_number":318,"context_line":"separated via this index (however it chooses) such that policies can share\r"},{"line_number":319,"context_line":"the same media/nodes if desired.  The included implementation of Diskfile\r"},{"line_number":320,"context_line":"lays out the directory structure described earlier but that’s owned within\r"},{"line_number":321,"context_line":"diskfile; external modules have no virility into that detail.  A common\r"},{"line_number":322,"context_line":"function is provided to map various directory names and/or strings\r"},{"line_number":323,"context_line":"based on their policy index – for example diskfile deines get_data_dir()\r"},{"line_number":324,"context_line":"which builds off of a generic get_policy_string() to consistently build\r"}],"source_content_type":"text/x-rst","patch_set":5,"id":"AAAAW3%2F%2F2iY%3D","line":321,"updated":"2014-04-09 23:00:53.000000000","message":"i had to look up virility, but I still don\u0027t understand this sentence except for context clues.","commit_id":"8d0d5a4b962b909f167b8410e7bca30272042c70"},{"author":{"_account_id":7479,"name":"paul luse","email":"paul.e.luse@intel.com","username":"peluse"},"change_message_id":"6f40ba1c892a09a14a31c14cb0966ea24395eae5","unresolved":false,"context_lines":[{"line_number":318,"context_line":"separated via this index (however it chooses) such that policies can share\r"},{"line_number":319,"context_line":"the same media/nodes if desired.  The included implementation of Diskfile\r"},{"line_number":320,"context_line":"lays out the directory structure described earlier but that’s owned within\r"},{"line_number":321,"context_line":"diskfile; external modules have no virility into that detail.  A common\r"},{"line_number":322,"context_line":"function is provided to map various directory names and/or strings\r"},{"line_number":323,"context_line":"based on their policy index – for example diskfile deines get_data_dir()\r"},{"line_number":324,"context_line":"which builds off of a generic get_policy_string() to consistently build\r"}],"source_content_type":"text/x-rst","patch_set":5,"id":"AAAAW3%2F%2FubQ%3D","line":321,"in_reply_to":"AAAAW3%2F%2F2SM%3D","updated":"2014-04-10 20:12:34.000000000","message":"Done","commit_id":"8d0d5a4b962b909f167b8410e7bca30272042c70"},{"author":{"_account_id":7479,"name":"paul luse","email":"paul.e.luse@intel.com","username":"peluse"},"change_message_id":"84b3b09376982ebc9bc4035f569178827a12e401","unresolved":false,"context_lines":[{"line_number":318,"context_line":"separated via this index (however it chooses) such that policies can share\r"},{"line_number":319,"context_line":"the same media/nodes if desired.  The included implementation of Diskfile\r"},{"line_number":320,"context_line":"lays out the directory structure described earlier but that’s owned within\r"},{"line_number":321,"context_line":"diskfile; external modules have no virility into that detail.  A common\r"},{"line_number":322,"context_line":"function is provided to map various directory names and/or strings\r"},{"line_number":323,"context_line":"based on their policy index – for example diskfile deines get_data_dir()\r"},{"line_number":324,"context_line":"which builds off of a generic get_policy_string() to consistently build\r"}],"source_content_type":"text/x-rst","patch_set":5,"id":"AAAAW3%2F%2F2SM%3D","line":321,"in_reply_to":"AAAAW3%2F%2F2iY%3D","updated":"2014-04-09 23:50:34.000000000","message":"oops, visibility","commit_id":"8d0d5a4b962b909f167b8410e7bca30272042c70"},{"author":{"_account_id":9625,"name":"Thiago da Silva","email":"thiagodasilva@gmail.com","username":"thiago"},"change_message_id":"9cf56dc0b69ae52a4262a4a5117b12a4644b4449","unresolved":false,"context_lines":[{"line_number":39,"context_line":"configure policies, each policy has both a name (human friendly, configurable) as well\r"},{"line_number":40,"context_line":"as an index (or simply policy number). Swift reserves index 0 to map to the object ring\r"},{"line_number":41,"context_line":"that’s present in all installations, /etc/swift/object.ring.gz.  You can name this policy\r"},{"line_number":42,"context_line":"anything you like, and if no name Is given it will report itself as “Policy_0”, however\r"},{"line_number":43,"context_line":"you cannot change the index (there must always be a policy with index 0 but you\r"},{"line_number":44,"context_line":"could change the type for a cluster created a version that supports Storage Policies).\r"},{"line_number":45,"context_line":"We’ll see more how it’s used in a moment.\r"}],"source_content_type":"text/x-rst","patch_set":7,"id":"AAAAW3%2F%2FuF8%3D","line":42,"updated":"2014-04-10 21:43:31.000000000","message":"is given","commit_id":"fcf35993c4fca4b01f4483e1504b7247c379146e"},{"author":{"_account_id":7479,"name":"paul luse","email":"paul.e.luse@intel.com","username":"peluse"},"change_message_id":"07d6989af5ce8a6e2eba1e4b4edef4e6a233575c","unresolved":false,"context_lines":[{"line_number":39,"context_line":"configure policies, each policy has both a name (human friendly, configurable) as well\r"},{"line_number":40,"context_line":"as an index (or simply policy number). Swift reserves index 0 to map to the object ring\r"},{"line_number":41,"context_line":"that’s present in all installations, /etc/swift/object.ring.gz.  You can name this policy\r"},{"line_number":42,"context_line":"anything you like, and if no name Is given it will report itself as “Policy_0”, however\r"},{"line_number":43,"context_line":"you cannot change the index (there must always be a policy with index 0 but you\r"},{"line_number":44,"context_line":"could change the type for a cluster created a version that supports Storage Policies).\r"},{"line_number":45,"context_line":"We’ll see more how it’s used in a moment.\r"}],"source_content_type":"text/x-rst","patch_set":7,"id":"AAAAW3%2F%2Ftpg%3D","line":42,"in_reply_to":"AAAAW3%2F%2FuF8%3D","updated":"2014-04-10 23:05:40.000000000","message":"Done","commit_id":"fcf35993c4fca4b01f4483e1504b7247c379146e"},{"author":{"_account_id":9625,"name":"Thiago da Silva","email":"thiagodasilva@gmail.com","username":"thiago"},"change_message_id":"9cf56dc0b69ae52a4262a4a5117b12a4644b4449","unresolved":false,"context_lines":[{"line_number":40,"context_line":"as an index (or simply policy number). Swift reserves index 0 to map to the object ring\r"},{"line_number":41,"context_line":"that’s present in all installations, /etc/swift/object.ring.gz.  You can name this policy\r"},{"line_number":42,"context_line":"anything you like, and if no name Is given it will report itself as “Policy_0”, however\r"},{"line_number":43,"context_line":"you cannot change the index (there must always be a policy with index 0 but you\r"},{"line_number":44,"context_line":"could change the type for a cluster created a version that supports Storage Policies).\r"},{"line_number":45,"context_line":"We’ll see more how it’s used in a moment.\r"},{"line_number":46,"context_line":"\r"}],"source_content_type":"text/x-rst","patch_set":7,"id":"AAAAW3%2F%2FuF4%3D","line":43,"updated":"2014-04-10 21:43:31.000000000","message":"index 0, but","commit_id":"fcf35993c4fca4b01f4483e1504b7247c379146e"},{"author":{"_account_id":7479,"name":"paul luse","email":"paul.e.luse@intel.com","username":"peluse"},"change_message_id":"07d6989af5ce8a6e2eba1e4b4edef4e6a233575c","unresolved":false,"context_lines":[{"line_number":40,"context_line":"as an index (or simply policy number). Swift reserves index 0 to map to the object ring\r"},{"line_number":41,"context_line":"that’s present in all installations, /etc/swift/object.ring.gz.  You can name this policy\r"},{"line_number":42,"context_line":"anything you like, and if no name Is given it will report itself as “Policy_0”, however\r"},{"line_number":43,"context_line":"you cannot change the index (there must always be a policy with index 0 but you\r"},{"line_number":44,"context_line":"could change the type for a cluster created a version that supports Storage Policies).\r"},{"line_number":45,"context_line":"We’ll see more how it’s used in a moment.\r"},{"line_number":46,"context_line":"\r"}],"source_content_type":"text/x-rst","patch_set":7,"id":"AAAAW3%2F%2FtpQ%3D","line":43,"in_reply_to":"AAAAW3%2F%2FuF4%3D","updated":"2014-04-10 23:05:40.000000000","message":"Done","commit_id":"fcf35993c4fca4b01f4483e1504b7247c379146e"},{"author":{"_account_id":9625,"name":"Thiago da Silva","email":"thiagodasilva@gmail.com","username":"thiago"},"change_message_id":"9cf56dc0b69ae52a4262a4a5117b12a4644b4449","unresolved":false,"context_lines":[{"line_number":41,"context_line":"that’s present in all installations, /etc/swift/object.ring.gz.  You can name this policy\r"},{"line_number":42,"context_line":"anything you like, and if no name Is given it will report itself as “Policy_0”, however\r"},{"line_number":43,"context_line":"you cannot change the index (there must always be a policy with index 0 but you\r"},{"line_number":44,"context_line":"could change the type for a cluster created a version that supports Storage Policies).\r"},{"line_number":45,"context_line":"We’ll see more how it’s used in a moment.\r"},{"line_number":46,"context_line":"\r"},{"line_number":47,"context_line":"Another important concept is “the default” policy which can be any policy in the\r"}],"source_content_type":"text/x-rst","patch_set":7,"id":"AAAAW3%2F%2FuF0%3D","line":44,"updated":"2014-04-10 21:43:31.000000000","message":"I don\u0027t understand this sentence","commit_id":"fcf35993c4fca4b01f4483e1504b7247c379146e"},{"author":{"_account_id":7479,"name":"paul luse","email":"paul.e.luse@intel.com","username":"peluse"},"change_message_id":"07d6989af5ce8a6e2eba1e4b4edef4e6a233575c","unresolved":false,"context_lines":[{"line_number":41,"context_line":"that’s present in all installations, /etc/swift/object.ring.gz.  You can name this policy\r"},{"line_number":42,"context_line":"anything you like, and if no name Is given it will report itself as “Policy_0”, however\r"},{"line_number":43,"context_line":"you cannot change the index (there must always be a policy with index 0 but you\r"},{"line_number":44,"context_line":"could change the type for a cluster created a version that supports Storage Policies).\r"},{"line_number":45,"context_line":"We’ll see more how it’s used in a moment.\r"},{"line_number":46,"context_line":"\r"},{"line_number":47,"context_line":"Another important concept is “the default” policy which can be any policy in the\r"}],"source_content_type":"text/x-rst","patch_set":7,"id":"AAAAW3%2F%2FtoQ%3D","line":44,"in_reply_to":"AAAAW3%2F%2FuF0%3D","updated":"2014-04-10 23:05:40.000000000","message":"thanks, I think I\u0027ll just delete it for now because what I\u0027m trying to say is that if you don\u0027t have any installed base, you can choose something other than replication for policy 0 however that\u0027s not possible right now anyway since EC isn\u0027t here yet so no real reason to mention it right now","commit_id":"fcf35993c4fca4b01f4483e1504b7247c379146e"},{"author":{"_account_id":9625,"name":"Thiago da Silva","email":"thiagodasilva@gmail.com","username":"thiago"},"change_message_id":"9cf56dc0b69ae52a4262a4a5117b12a4644b4449","unresolved":false,"context_lines":[{"line_number":44,"context_line":"could change the type for a cluster created a version that supports Storage Policies).\r"},{"line_number":45,"context_line":"We’ll see more how it’s used in a moment.\r"},{"line_number":46,"context_line":"\r"},{"line_number":47,"context_line":"Another important concept is “the default” policy which can be any policy in the\r"},{"line_number":48,"context_line":"cluster.  We differentiate default from Policy_0 because it may be the case that a\r"},{"line_number":49,"context_line":"particular installation wants to use something other than object.ring.gz as the default.\r"},{"line_number":50,"context_line":"This is extremely important for accessing pre-Storage Policy containers as one could\r"}],"source_content_type":"text/x-rst","patch_set":7,"id":"AAAAW3%2F%2FuFk%3D","line":47,"updated":"2014-04-10 21:43:31.000000000","message":"the \"default\"","commit_id":"fcf35993c4fca4b01f4483e1504b7247c379146e"},{"author":{"_account_id":7479,"name":"paul luse","email":"paul.e.luse@intel.com","username":"peluse"},"change_message_id":"07d6989af5ce8a6e2eba1e4b4edef4e6a233575c","unresolved":false,"context_lines":[{"line_number":44,"context_line":"could change the type for a cluster created a version that supports Storage Policies).\r"},{"line_number":45,"context_line":"We’ll see more how it’s used in a moment.\r"},{"line_number":46,"context_line":"\r"},{"line_number":47,"context_line":"Another important concept is “the default” policy which can be any policy in the\r"},{"line_number":48,"context_line":"cluster.  We differentiate default from Policy_0 because it may be the case that a\r"},{"line_number":49,"context_line":"particular installation wants to use something other than object.ring.gz as the default.\r"},{"line_number":50,"context_line":"This is extremely important for accessing pre-Storage Policy containers as one could\r"}],"source_content_type":"text/x-rst","patch_set":7,"id":"AAAAW3%2F%2FtoE%3D","line":47,"in_reply_to":"AAAAW3%2F%2FuFk%3D","updated":"2014-04-10 23:05:40.000000000","message":"Done","commit_id":"fcf35993c4fca4b01f4483e1504b7247c379146e"},{"author":{"_account_id":9625,"name":"Thiago da Silva","email":"thiagodasilva@gmail.com","username":"thiago"},"change_message_id":"9cf56dc0b69ae52a4262a4a5117b12a4644b4449","unresolved":false,"context_lines":[{"line_number":45,"context_line":"We’ll see more how it’s used in a moment.\r"},{"line_number":46,"context_line":"\r"},{"line_number":47,"context_line":"Another important concept is “the default” policy which can be any policy in the\r"},{"line_number":48,"context_line":"cluster.  We differentiate default from Policy_0 because it may be the case that a\r"},{"line_number":49,"context_line":"particular installation wants to use something other than object.ring.gz as the default.\r"},{"line_number":50,"context_line":"This is extremely important for accessing pre-Storage Policy containers as one could\r"},{"line_number":51,"context_line":"have a cluster with a non-0 default specified; when performing a GET operation,\r"}],"source_content_type":"text/x-rst","patch_set":7,"id":"AAAAW3%2F%2FuEc%3D","line":48,"updated":"2014-04-10 21:43:31.000000000","message":"Does it make sense to explain first what \"default\" mean in this context, before differentiating from Policy_0? \n\nSuggestion:\n\"The default policy is the policy that is automatically chosen when a container creation request is sent without a storage policy being specified.\"","commit_id":"fcf35993c4fca4b01f4483e1504b7247c379146e"},{"author":{"_account_id":7479,"name":"paul luse","email":"paul.e.luse@intel.com","username":"peluse"},"change_message_id":"07d6989af5ce8a6e2eba1e4b4edef4e6a233575c","unresolved":false,"context_lines":[{"line_number":45,"context_line":"We’ll see more how it’s used in a moment.\r"},{"line_number":46,"context_line":"\r"},{"line_number":47,"context_line":"Another important concept is “the default” policy which can be any policy in the\r"},{"line_number":48,"context_line":"cluster.  We differentiate default from Policy_0 because it may be the case that a\r"},{"line_number":49,"context_line":"particular installation wants to use something other than object.ring.gz as the default.\r"},{"line_number":50,"context_line":"This is extremely important for accessing pre-Storage Policy containers as one could\r"},{"line_number":51,"context_line":"have a cluster with a non-0 default specified; when performing a GET operation,\r"}],"source_content_type":"text/x-rst","patch_set":7,"id":"AAAAW3%2F%2Ftm0%3D","line":48,"in_reply_to":"AAAAW3%2F%2FuEc%3D","updated":"2014-04-10 23:05:40.000000000","message":"Thanks, I like the suggestion!  I reworded more of this paragraph as well to flow better I think (I hope)","commit_id":"fcf35993c4fca4b01f4483e1504b7247c379146e"},{"author":{"_account_id":9625,"name":"Thiago da Silva","email":"thiagodasilva@gmail.com","username":"thiago"},"change_message_id":"9cf56dc0b69ae52a4262a4a5117b12a4644b4449","unresolved":false,"context_lines":[{"line_number":81,"context_line":"implications on data placement/movement for large datasets would make this a task\r"},{"line_number":82,"context_line":"best left for applications to decide if/where/when. Therefore, if a container has an\r"},{"line_number":83,"context_line":"existing policy of, for example 3x replication, and one wanted to migrate that data to\r"},{"line_number":84,"context_line":"a different policy, let’s say Erasure Code when its available, the application would\r"},{"line_number":85,"context_line":"create another container specifying the Erasure Code policy name and then simply\r"},{"line_number":86,"context_line":"move the data from one container to the other.\r"},{"line_number":87,"context_line":"\r"}],"source_content_type":"text/x-rst","patch_set":7,"id":"AAAAW3%2F%2FuDY%3D","line":84,"updated":"2014-04-10 21:43:31.000000000","message":"(when it\u0027s available)","commit_id":"fcf35993c4fca4b01f4483e1504b7247c379146e"},{"author":{"_account_id":7479,"name":"paul luse","email":"paul.e.luse@intel.com","username":"peluse"},"change_message_id":"07d6989af5ce8a6e2eba1e4b4edef4e6a233575c","unresolved":false,"context_lines":[{"line_number":81,"context_line":"implications on data placement/movement for large datasets would make this a task\r"},{"line_number":82,"context_line":"best left for applications to decide if/where/when. Therefore, if a container has an\r"},{"line_number":83,"context_line":"existing policy of, for example 3x replication, and one wanted to migrate that data to\r"},{"line_number":84,"context_line":"a different policy, let’s say Erasure Code when its available, the application would\r"},{"line_number":85,"context_line":"create another container specifying the Erasure Code policy name and then simply\r"},{"line_number":86,"context_line":"move the data from one container to the other.\r"},{"line_number":87,"context_line":"\r"}],"source_content_type":"text/x-rst","patch_set":7,"id":"AAAAW3%2F%2Ftmw%3D","line":84,"in_reply_to":"AAAAW3%2F%2FuDY%3D","updated":"2014-04-10 23:05:40.000000000","message":"Done","commit_id":"fcf35993c4fca4b01f4483e1504b7247c379146e"},{"author":{"_account_id":9625,"name":"Thiago da Silva","email":"thiagodasilva@gmail.com","username":"thiago"},"change_message_id":"9cf56dc0b69ae52a4262a4a5117b12a4644b4449","unresolved":false,"context_lines":[{"line_number":92,"context_line":"The notion of associating a ring with a container introduces an interesting scenario:\r"},{"line_number":93,"context_line":"What would happen if 2 containers of the same name were created with different\r"},{"line_number":94,"context_line":"Storage Policies on either side of a network outage at the same time?  Furthermore,\r"},{"line_number":95,"context_line":"what would happen if objects were places in those containers, a whole bunch of them,\r"},{"line_number":96,"context_line":"and then later the network outage was restored?  Well, without special care it would\r"},{"line_number":97,"context_line":"be a big problem as an application could end up using the wrong ring to try and find\r"},{"line_number":98,"context_line":"an object.  Luckily there is a solution for this problem, a daemon covered in more\r"}],"source_content_type":"text/x-rst","patch_set":7,"id":"AAAAW3%2F%2FuDE%3D","line":95,"updated":"2014-04-10 21:43:31.000000000","message":"placed?","commit_id":"fcf35993c4fca4b01f4483e1504b7247c379146e"},{"author":{"_account_id":7479,"name":"paul luse","email":"paul.e.luse@intel.com","username":"peluse"},"change_message_id":"07d6989af5ce8a6e2eba1e4b4edef4e6a233575c","unresolved":false,"context_lines":[{"line_number":92,"context_line":"The notion of associating a ring with a container introduces an interesting scenario:\r"},{"line_number":93,"context_line":"What would happen if 2 containers of the same name were created with different\r"},{"line_number":94,"context_line":"Storage Policies on either side of a network outage at the same time?  Furthermore,\r"},{"line_number":95,"context_line":"what would happen if objects were places in those containers, a whole bunch of them,\r"},{"line_number":96,"context_line":"and then later the network outage was restored?  Well, without special care it would\r"},{"line_number":97,"context_line":"be a big problem as an application could end up using the wrong ring to try and find\r"},{"line_number":98,"context_line":"an object.  Luckily there is a solution for this problem, a daemon covered in more\r"}],"source_content_type":"text/x-rst","patch_set":7,"id":"AAAAW3%2F%2Ftmo%3D","line":95,"in_reply_to":"AAAAW3%2F%2FuDE%3D","updated":"2014-04-10 23:05:40.000000000","message":"Done","commit_id":"fcf35993c4fca4b01f4483e1504b7247c379146e"},{"author":{"_account_id":9625,"name":"Thiago da Silva","email":"thiagodasilva@gmail.com","username":"thiago"},"change_message_id":"9cf56dc0b69ae52a4262a4a5117b12a4644b4449","unresolved":false,"context_lines":[{"line_number":120,"context_line":"--------------------\r"},{"line_number":121,"context_line":"Configuring Policies\r"},{"line_number":122,"context_line":"--------------------\r"},{"line_number":123,"context_line":"Policies are configured in swift.conf and its important that the deployer have a solid\r"},{"line_number":124,"context_line":"understanding of the semantics for configuring policies.  Note that it’s critical that\r"},{"line_number":125,"context_line":"swift.conf, as before, is copied to all nodes after any modifications.  Also recall that\r"},{"line_number":126,"context_line":"a policy must have a corresponding ring file, so configuring a policy is more than\r"}],"source_content_type":"text/x-rst","patch_set":7,"id":"AAAAW3%2F%2FuCk%3D","line":123,"updated":"2014-04-10 21:43:31.000000000","message":"it is","commit_id":"fcf35993c4fca4b01f4483e1504b7247c379146e"},{"author":{"_account_id":7479,"name":"paul luse","email":"paul.e.luse@intel.com","username":"peluse"},"change_message_id":"07d6989af5ce8a6e2eba1e4b4edef4e6a233575c","unresolved":false,"context_lines":[{"line_number":120,"context_line":"--------------------\r"},{"line_number":121,"context_line":"Configuring Policies\r"},{"line_number":122,"context_line":"--------------------\r"},{"line_number":123,"context_line":"Policies are configured in swift.conf and its important that the deployer have a solid\r"},{"line_number":124,"context_line":"understanding of the semantics for configuring policies.  Note that it’s critical that\r"},{"line_number":125,"context_line":"swift.conf, as before, is copied to all nodes after any modifications.  Also recall that\r"},{"line_number":126,"context_line":"a policy must have a corresponding ring file, so configuring a policy is more than\r"}],"source_content_type":"text/x-rst","patch_set":7,"id":"AAAAW3%2F%2Ftmk%3D","line":123,"in_reply_to":"AAAAW3%2F%2FuCk%3D","updated":"2014-04-10 23:05:40.000000000","message":"Done","commit_id":"fcf35993c4fca4b01f4483e1504b7247c379146e"},{"author":{"_account_id":9625,"name":"Thiago da Silva","email":"thiagodasilva@gmail.com","username":"thiago"},"change_message_id":"9cf56dc0b69ae52a4262a4a5117b12a4644b4449","unresolved":false,"context_lines":[{"line_number":121,"context_line":"Configuring Policies\r"},{"line_number":122,"context_line":"--------------------\r"},{"line_number":123,"context_line":"Policies are configured in swift.conf and its important that the deployer have a solid\r"},{"line_number":124,"context_line":"understanding of the semantics for configuring policies.  Note that it’s critical that\r"},{"line_number":125,"context_line":"swift.conf, as before, is copied to all nodes after any modifications.  Also recall that\r"},{"line_number":126,"context_line":"a policy must have a corresponding ring file, so configuring a policy is more than\r"},{"line_number":127,"context_line":"just editing a file.  It involves careful planning to determine which devices should be\r"}],"source_content_type":"text/x-rst","patch_set":7,"id":"AAAAW3%2F%2FuCY%3D","line":124,"updated":"2014-04-10 21:43:31.000000000","message":"remove: Note that\nIt is critical that swift.conf...","commit_id":"fcf35993c4fca4b01f4483e1504b7247c379146e"},{"author":{"_account_id":7479,"name":"paul luse","email":"paul.e.luse@intel.com","username":"peluse"},"change_message_id":"07d6989af5ce8a6e2eba1e4b4edef4e6a233575c","unresolved":false,"context_lines":[{"line_number":121,"context_line":"Configuring Policies\r"},{"line_number":122,"context_line":"--------------------\r"},{"line_number":123,"context_line":"Policies are configured in swift.conf and its important that the deployer have a solid\r"},{"line_number":124,"context_line":"understanding of the semantics for configuring policies.  Note that it’s critical that\r"},{"line_number":125,"context_line":"swift.conf, as before, is copied to all nodes after any modifications.  Also recall that\r"},{"line_number":126,"context_line":"a policy must have a corresponding ring file, so configuring a policy is more than\r"},{"line_number":127,"context_line":"just editing a file.  It involves careful planning to determine which devices should be\r"}],"source_content_type":"text/x-rst","patch_set":7,"id":"AAAAW3%2F%2FtmQ%3D","line":124,"in_reply_to":"AAAAW3%2F%2FuCY%3D","updated":"2014-04-10 23:05:40.000000000","message":"Done","commit_id":"fcf35993c4fca4b01f4483e1504b7247c379146e"},{"author":{"_account_id":9625,"name":"Thiago da Silva","email":"thiagodasilva@gmail.com","username":"thiago"},"change_message_id":"9cf56dc0b69ae52a4262a4a5117b12a4644b4449","unresolved":false,"context_lines":[{"line_number":122,"context_line":"--------------------\r"},{"line_number":123,"context_line":"Policies are configured in swift.conf and its important that the deployer have a solid\r"},{"line_number":124,"context_line":"understanding of the semantics for configuring policies.  Note that it’s critical that\r"},{"line_number":125,"context_line":"swift.conf, as before, is copied to all nodes after any modifications.  Also recall that\r"},{"line_number":126,"context_line":"a policy must have a corresponding ring file, so configuring a policy is more than\r"},{"line_number":127,"context_line":"just editing a file.  It involves careful planning to determine which devices should be\r"},{"line_number":128,"context_line":"assigned to which policy, followed by ring creation and then editing of swift.conf.\r"}],"source_content_type":"text/x-rst","patch_set":7,"id":"AAAAW3%2F%2FuCQ%3D","line":125,"updated":"2014-04-10 21:43:31.000000000","message":"before what?","commit_id":"fcf35993c4fca4b01f4483e1504b7247c379146e"},{"author":{"_account_id":7479,"name":"paul luse","email":"paul.e.luse@intel.com","username":"peluse"},"change_message_id":"07d6989af5ce8a6e2eba1e4b4edef4e6a233575c","unresolved":false,"context_lines":[{"line_number":122,"context_line":"--------------------\r"},{"line_number":123,"context_line":"Policies are configured in swift.conf and its important that the deployer have a solid\r"},{"line_number":124,"context_line":"understanding of the semantics for configuring policies.  Note that it’s critical that\r"},{"line_number":125,"context_line":"swift.conf, as before, is copied to all nodes after any modifications.  Also recall that\r"},{"line_number":126,"context_line":"a policy must have a corresponding ring file, so configuring a policy is more than\r"},{"line_number":127,"context_line":"just editing a file.  It involves careful planning to determine which devices should be\r"},{"line_number":128,"context_line":"assigned to which policy, followed by ring creation and then editing of swift.conf.\r"}],"source_content_type":"text/x-rst","patch_set":7,"id":"AAAAW3%2F%2Ftlo%3D","line":125,"in_reply_to":"AAAAW3%2F%2FuCQ%3D","updated":"2014-04-10 23:05:40.000000000","message":"I think the value (or lack thereof) of this sentence is clear :)  I just removed it.  Was trying to say that you still need to copy swift.conf to all nodes but that\u0027s probably super obvious so isn\u0027t needed here.  Can always add it back in more clearly if someone isn\u0027t sure","commit_id":"fcf35993c4fca4b01f4483e1504b7247c379146e"},{"author":{"_account_id":9625,"name":"Thiago da Silva","email":"thiagodasilva@gmail.com","username":"thiago"},"change_message_id":"9cf56dc0b69ae52a4262a4a5117b12a4644b4449","unresolved":false,"context_lines":[{"line_number":162,"context_line":"            - Policy names must be unique\r"},{"line_number":163,"context_line":"            - No more than 1 policy can be declared default\r"},{"line_number":164,"context_line":"            - Only supported types are allowed\r"},{"line_number":165,"context_line":"            - If no type is provided, \u0027replication\u0027 is the default\r"},{"line_number":166,"context_line":"\r"},{"line_number":167,"context_line":"There will be additional parameters for policies as new features are added\r"},{"line_number":168,"context_line":"(e.g., Erasure Code), but for now only a section name/index and name\r"}],"source_content_type":"text/x-rst","patch_set":7,"id":"AAAAW3%2F%2FuBQ%3D","line":165,"updated":"2014-04-10 21:43:31.000000000","message":"type?? it was not specified in the example above","commit_id":"fcf35993c4fca4b01f4483e1504b7247c379146e"},{"author":{"_account_id":7479,"name":"paul luse","email":"paul.e.luse@intel.com","username":"peluse"},"change_message_id":"07d6989af5ce8a6e2eba1e4b4edef4e6a233575c","unresolved":false,"context_lines":[{"line_number":162,"context_line":"            - Policy names must be unique\r"},{"line_number":163,"context_line":"            - No more than 1 policy can be declared default\r"},{"line_number":164,"context_line":"            - Only supported types are allowed\r"},{"line_number":165,"context_line":"            - If no type is provided, \u0027replication\u0027 is the default\r"},{"line_number":166,"context_line":"\r"},{"line_number":167,"context_line":"There will be additional parameters for policies as new features are added\r"},{"line_number":168,"context_line":"(e.g., Erasure Code), but for now only a section name/index and name\r"}],"source_content_type":"text/x-rst","patch_set":7,"id":"AAAAW3%2F%2FtlA%3D","line":165,"in_reply_to":"AAAAW3%2F%2FuBQ%3D","updated":"2014-04-10 23:05:40.000000000","message":"ahh good catch.  Its in the code now but there are no other types beyond replication so it doesn\u0027t need to be specified and probably doesn\u0027t even need to be brought up until we introduce EC","commit_id":"fcf35993c4fca4b01f4483e1504b7247c379146e"},{"author":{"_account_id":9625,"name":"Thiago da Silva","email":"thiagodasilva@gmail.com","username":"thiago"},"change_message_id":"9cf56dc0b69ae52a4262a4a5117b12a4644b4449","unresolved":false,"context_lines":[{"line_number":185,"context_line":"\u003cTODO:  update this section/tie it in with SAIO section when updated\u003e\r"},{"line_number":186,"context_line":"\r"},{"line_number":187,"context_line":"Note that the same drives can indeed be used for multiple policies and the\r"},{"line_number":188,"context_line":"details of how that’s managed on disk will be covered in a later section, its\r"},{"line_number":189,"context_line":"important to understand the implications of such a configuration before\r"},{"line_number":190,"context_line":"setting one up.  Make sure it’s really what you want to do, in many cases it\r"},{"line_number":191,"context_line":"will be but in others maybe not.\r"}],"source_content_type":"text/x-rst","patch_set":7,"id":"AAAAW3%2F%2FuAI%3D","line":188,"updated":"2014-04-10 21:43:31.000000000","message":"it\u0027s","commit_id":"fcf35993c4fca4b01f4483e1504b7247c379146e"},{"author":{"_account_id":7479,"name":"paul luse","email":"paul.e.luse@intel.com","username":"peluse"},"change_message_id":"07d6989af5ce8a6e2eba1e4b4edef4e6a233575c","unresolved":false,"context_lines":[{"line_number":185,"context_line":"\u003cTODO:  update this section/tie it in with SAIO section when updated\u003e\r"},{"line_number":186,"context_line":"\r"},{"line_number":187,"context_line":"Note that the same drives can indeed be used for multiple policies and the\r"},{"line_number":188,"context_line":"details of how that’s managed on disk will be covered in a later section, its\r"},{"line_number":189,"context_line":"important to understand the implications of such a configuration before\r"},{"line_number":190,"context_line":"setting one up.  Make sure it’s really what you want to do, in many cases it\r"},{"line_number":191,"context_line":"will be but in others maybe not.\r"}],"source_content_type":"text/x-rst","patch_set":7,"id":"AAAAW3%2F%2Ftk8%3D","line":188,"in_reply_to":"AAAAW3%2F%2FuAI%3D","updated":"2014-04-10 23:05:40.000000000","message":"Done","commit_id":"fcf35993c4fca4b01f4483e1504b7247c379146e"},{"author":{"_account_id":9625,"name":"Thiago da Silva","email":"thiagodasilva@gmail.com","username":"thiago"},"change_message_id":"9cf56dc0b69ae52a4262a4a5117b12a4644b4449","unresolved":false,"context_lines":[{"line_number":276,"context_line":"be overridden by test code via init parameter.  With policies, however, there is\r"},{"line_number":277,"context_line":"no init parameter and the Application class instead depends on the POLICIES\r"},{"line_number":278,"context_line":"global singleton to retrieve the ring which is instantiated the first time its\r"},{"line_number":279,"context_line":"needed.  So, instead of a object ring member of the Application class, there is is\r"},{"line_number":280,"context_line":"an accessor function, get_object_ring(), that gets the ring from POLICIES.\r"},{"line_number":281,"context_line":"\r"},{"line_number":282,"context_line":"In general, when any module running on the proxy requires an object ring, it\r"}],"source_content_type":"text/x-rst","patch_set":7,"id":"AAAAW3%2F%2Ft9g%3D","line":279,"updated":"2014-04-10 21:43:31.000000000","message":"is is","commit_id":"fcf35993c4fca4b01f4483e1504b7247c379146e"},{"author":{"_account_id":7479,"name":"paul luse","email":"paul.e.luse@intel.com","username":"peluse"},"change_message_id":"07d6989af5ce8a6e2eba1e4b4edef4e6a233575c","unresolved":false,"context_lines":[{"line_number":276,"context_line":"be overridden by test code via init parameter.  With policies, however, there is\r"},{"line_number":277,"context_line":"no init parameter and the Application class instead depends on the POLICIES\r"},{"line_number":278,"context_line":"global singleton to retrieve the ring which is instantiated the first time its\r"},{"line_number":279,"context_line":"needed.  So, instead of a object ring member of the Application class, there is is\r"},{"line_number":280,"context_line":"an accessor function, get_object_ring(), that gets the ring from POLICIES.\r"},{"line_number":281,"context_line":"\r"},{"line_number":282,"context_line":"In general, when any module running on the proxy requires an object ring, it\r"}],"source_content_type":"text/x-rst","patch_set":7,"id":"AAAAW3%2F%2Ftkw%3D","line":279,"in_reply_to":"AAAAW3%2F%2Ft9g%3D","updated":"2014-04-10 23:05:40.000000000","message":"Done","commit_id":"fcf35993c4fca4b01f4483e1504b7247c379146e"},{"author":{"_account_id":9625,"name":"Thiago da Silva","email":"thiagodasilva@gmail.com","username":"thiago"},"change_message_id":"9cf56dc0b69ae52a4262a4a5117b12a4644b4449","unresolved":false,"context_lines":[{"line_number":281,"context_line":"\r"},{"line_number":282,"context_line":"In general, when any module running on the proxy requires an object ring, it\r"},{"line_number":283,"context_line":"does so via first getting the policy index from the cached container info, except\r"},{"line_number":284,"context_line":"for the case of creating a container of course where it gets the policy index\r"},{"line_number":285,"context_line":"via lookup of the provided policy name using the POLICIES global.  Once the\r"},{"line_number":286,"context_line":"proxy has determined the policy index, it can use the get_object_ring() method\r"},{"line_number":287,"context_line":"described earlier to gain access to the correct ring.  It then has the responsibility\r"}],"source_content_type":"text/x-rst","patch_set":7,"id":"AAAAW3%2F%2Ft9M%3D","line":284,"updated":"2014-04-10 21:43:31.000000000","message":"very long sentence, hard to understand, maybe move the \"except\" part for later","commit_id":"fcf35993c4fca4b01f4483e1504b7247c379146e"},{"author":{"_account_id":7479,"name":"paul luse","email":"paul.e.luse@intel.com","username":"peluse"},"change_message_id":"07d6989af5ce8a6e2eba1e4b4edef4e6a233575c","unresolved":false,"context_lines":[{"line_number":281,"context_line":"\r"},{"line_number":282,"context_line":"In general, when any module running on the proxy requires an object ring, it\r"},{"line_number":283,"context_line":"does so via first getting the policy index from the cached container info, except\r"},{"line_number":284,"context_line":"for the case of creating a container of course where it gets the policy index\r"},{"line_number":285,"context_line":"via lookup of the provided policy name using the POLICIES global.  Once the\r"},{"line_number":286,"context_line":"proxy has determined the policy index, it can use the get_object_ring() method\r"},{"line_number":287,"context_line":"described earlier to gain access to the correct ring.  It then has the responsibility\r"}],"source_content_type":"text/x-rst","patch_set":7,"id":"AAAAW3%2F%2FtkA%3D","line":284,"in_reply_to":"AAAAW3%2F%2Ft9M%3D","updated":"2014-04-10 23:05:40.000000000","message":"thanks good suggestion.","commit_id":"fcf35993c4fca4b01f4483e1504b7247c379146e"},{"author":{"_account_id":9625,"name":"Thiago da Silva","email":"thiagodasilva@gmail.com","username":"thiago"},"change_message_id":"9cf56dc0b69ae52a4262a4a5117b12a4644b4449","unresolved":false,"context_lines":[{"line_number":337,"context_line":"responsible for handling the assignment of a policy to a container and the\r"},{"line_number":338,"context_line":"prevention of bad things like changing policies or picking the wrong policy\r"},{"line_number":339,"context_line":"to use when nothing is specified (recall earlier discussion on Policy_0 versus\r"},{"line_number":340,"context_line":"default).  It’s not large or completed code, but very important.\r"},{"line_number":341,"context_line":"\r"},{"line_number":342,"context_line":"The container updater is policy aware however its job is very simple, to\r"},{"line_number":343,"context_line":"pass the policy index along to the account server via a request header.\r"}],"source_content_type":"text/x-rst","patch_set":7,"id":"AAAAW3%2F%2Ft7g%3D","line":340,"updated":"2014-04-10 21:43:31.000000000","message":"Last sentence is confusing. It\u0027s not completed code????","commit_id":"fcf35993c4fca4b01f4483e1504b7247c379146e"},{"author":{"_account_id":7479,"name":"paul luse","email":"paul.e.luse@intel.com","username":"peluse"},"change_message_id":"07d6989af5ce8a6e2eba1e4b4edef4e6a233575c","unresolved":false,"context_lines":[{"line_number":337,"context_line":"responsible for handling the assignment of a policy to a container and the\r"},{"line_number":338,"context_line":"prevention of bad things like changing policies or picking the wrong policy\r"},{"line_number":339,"context_line":"to use when nothing is specified (recall earlier discussion on Policy_0 versus\r"},{"line_number":340,"context_line":"default).  It’s not large or completed code, but very important.\r"},{"line_number":341,"context_line":"\r"},{"line_number":342,"context_line":"The container updater is policy aware however its job is very simple, to\r"},{"line_number":343,"context_line":"pass the policy index along to the account server via a request header.\r"}],"source_content_type":"text/x-rst","patch_set":7,"id":"AAAAW3%2F%2Ftj8%3D","line":340,"in_reply_to":"AAAAW3%2F%2Ft7g%3D","updated":"2014-04-10 23:05:40.000000000","message":"man o man - that was meant to be \u0027complicated\u0027.  Not sure how it got corrected to completed :)  Its a crappy sentence anyway so I\u0027ll just kill it.","commit_id":"fcf35993c4fca4b01f4483e1504b7247c379146e"},{"author":{"_account_id":9625,"name":"Thiago da Silva","email":"thiagodasilva@gmail.com","username":"thiago"},"change_message_id":"9cf56dc0b69ae52a4262a4a5117b12a4644b4449","unresolved":false,"context_lines":[{"line_number":339,"context_line":"to use when nothing is specified (recall earlier discussion on Policy_0 versus\r"},{"line_number":340,"context_line":"default).  It’s not large or completed code, but very important.\r"},{"line_number":341,"context_line":"\r"},{"line_number":342,"context_line":"The container updater is policy aware however its job is very simple, to\r"},{"line_number":343,"context_line":"pass the policy index along to the account server via a request header.\r"},{"line_number":344,"context_line":"\r"},{"line_number":345,"context_line":"The container backend is responsible for both altering existing DB schema\r"}],"source_content_type":"text/x-rst","patch_set":7,"id":"AAAAW3%2F%2Ft7U%3D","line":342,"updated":"2014-04-10 21:43:31.000000000","message":"aware,","commit_id":"fcf35993c4fca4b01f4483e1504b7247c379146e"},{"author":{"_account_id":7479,"name":"paul luse","email":"paul.e.luse@intel.com","username":"peluse"},"change_message_id":"07d6989af5ce8a6e2eba1e4b4edef4e6a233575c","unresolved":false,"context_lines":[{"line_number":339,"context_line":"to use when nothing is specified (recall earlier discussion on Policy_0 versus\r"},{"line_number":340,"context_line":"default).  It’s not large or completed code, but very important.\r"},{"line_number":341,"context_line":"\r"},{"line_number":342,"context_line":"The container updater is policy aware however its job is very simple, to\r"},{"line_number":343,"context_line":"pass the policy index along to the account server via a request header.\r"},{"line_number":344,"context_line":"\r"},{"line_number":345,"context_line":"The container backend is responsible for both altering existing DB schema\r"}],"source_content_type":"text/x-rst","patch_set":7,"id":"AAAAW3%2F%2FtjM%3D","line":342,"in_reply_to":"AAAAW3%2F%2Ft7U%3D","updated":"2014-04-10 23:05:40.000000000","message":"Done","commit_id":"fcf35993c4fca4b01f4483e1504b7247c379146e"},{"author":{"_account_id":9625,"name":"Thiago da Silva","email":"thiagodasilva@gmail.com","username":"thiago"},"change_message_id":"9cf56dc0b69ae52a4262a4a5117b12a4644b4449","unresolved":false,"context_lines":[{"line_number":343,"context_line":"pass the policy index along to the account server via a request header.\r"},{"line_number":344,"context_line":"\r"},{"line_number":345,"context_line":"The container backend is responsible for both altering existing DB schema\r"},{"line_number":346,"context_line":"as well as assuring new DBs are create with the storage policy index as a\r"},{"line_number":347,"context_line":"new column in the container_stat table.  The policy index is stored here\r"},{"line_number":348,"context_line":"for use in reporting information about the container as well as managing\r"},{"line_number":349,"context_line":"split-brain scenario induced discrepancies between containers and their\r"}],"source_content_type":"text/x-rst","patch_set":7,"id":"AAAAW3%2F%2Ft7Q%3D","line":346,"updated":"2014-04-10 21:43:31.000000000","message":"created","commit_id":"fcf35993c4fca4b01f4483e1504b7247c379146e"},{"author":{"_account_id":7479,"name":"paul luse","email":"paul.e.luse@intel.com","username":"peluse"},"change_message_id":"07d6989af5ce8a6e2eba1e4b4edef4e6a233575c","unresolved":false,"context_lines":[{"line_number":343,"context_line":"pass the policy index along to the account server via a request header.\r"},{"line_number":344,"context_line":"\r"},{"line_number":345,"context_line":"The container backend is responsible for both altering existing DB schema\r"},{"line_number":346,"context_line":"as well as assuring new DBs are create with the storage policy index as a\r"},{"line_number":347,"context_line":"new column in the container_stat table.  The policy index is stored here\r"},{"line_number":348,"context_line":"for use in reporting information about the container as well as managing\r"},{"line_number":349,"context_line":"split-brain scenario induced discrepancies between containers and their\r"}],"source_content_type":"text/x-rst","patch_set":7,"id":"AAAAW3%2F%2FtjI%3D","line":346,"in_reply_to":"AAAAW3%2F%2Ft7Q%3D","updated":"2014-04-10 23:05:40.000000000","message":"Done","commit_id":"fcf35993c4fca4b01f4483e1504b7247c379146e"},{"author":{"_account_id":9625,"name":"Thiago da Silva","email":"thiagodasilva@gmail.com","username":"thiago"},"change_message_id":"9cf56dc0b69ae52a4262a4a5117b12a4644b4449","unresolved":false,"context_lines":[{"line_number":357,"context_line":"* Account Server\r"},{"line_number":358,"context_line":"\r"},{"line_number":359,"context_line":"The account server’s role in Storage Policies is really limited to reporting.\r"},{"line_number":360,"context_line":"When a HEAD request is made on an account, example provided earlier,\r"},{"line_number":361,"context_line":"the account server is provided with the storage policy index and builds\r"},{"line_number":362,"context_line":"the object_count and byte_count information for the client on a per\r"},{"line_number":363,"context_line":"policy basis.\r"}],"source_content_type":"text/x-rst","patch_set":7,"id":"AAAAW3%2F%2Ft60%3D","line":360,"updated":"2014-04-10 21:43:31.000000000","message":"(see example provided earlier)","commit_id":"fcf35993c4fca4b01f4483e1504b7247c379146e"},{"author":{"_account_id":7479,"name":"paul luse","email":"paul.e.luse@intel.com","username":"peluse"},"change_message_id":"07d6989af5ce8a6e2eba1e4b4edef4e6a233575c","unresolved":false,"context_lines":[{"line_number":357,"context_line":"* Account Server\r"},{"line_number":358,"context_line":"\r"},{"line_number":359,"context_line":"The account server’s role in Storage Policies is really limited to reporting.\r"},{"line_number":360,"context_line":"When a HEAD request is made on an account, example provided earlier,\r"},{"line_number":361,"context_line":"the account server is provided with the storage policy index and builds\r"},{"line_number":362,"context_line":"the object_count and byte_count information for the client on a per\r"},{"line_number":363,"context_line":"policy basis.\r"}],"source_content_type":"text/x-rst","patch_set":7,"id":"AAAAW3%2F%2Ftis%3D","line":360,"in_reply_to":"AAAAW3%2F%2Ft60%3D","updated":"2014-04-10 23:05:40.000000000","message":"Done","commit_id":"fcf35993c4fca4b01f4483e1504b7247c379146e"},{"author":{"_account_id":9625,"name":"Thiago da Silva","email":"thiagodasilva@gmail.com","username":"thiago"},"change_message_id":"9cf56dc0b69ae52a4262a4a5117b12a4644b4449","unresolved":false,"context_lines":[{"line_number":366,"context_line":"changes.  A policy specific table, policy_stats, maintains information on\r"},{"line_number":367,"context_line":"a per policy basis (one row per policy) in the same manner in which\r"},{"line_number":368,"context_line":"the account_stat table does.  The account_stat table still serves the same\r"},{"line_number":369,"context_line":"purpose and is not replaced by poloicy_stats, it holds the total cluster\r"},{"line_number":370,"context_line":"stats whereas policy_stat just has the break downs.  The backend is\r"},{"line_number":371,"context_line":"also responsible for migrating pre-storage-policy containers by altering\r"},{"line_number":372,"context_line":"the DB schema and populating the policy_stat table for Policy_0 with\r"}],"source_content_type":"text/x-rst","patch_set":7,"id":"AAAAW3%2F%2Ft6o%3D","line":369,"updated":"2014-04-10 21:43:31.000000000","message":"policy_stats","commit_id":"fcf35993c4fca4b01f4483e1504b7247c379146e"},{"author":{"_account_id":7479,"name":"paul luse","email":"paul.e.luse@intel.com","username":"peluse"},"change_message_id":"07d6989af5ce8a6e2eba1e4b4edef4e6a233575c","unresolved":false,"context_lines":[{"line_number":366,"context_line":"changes.  A policy specific table, policy_stats, maintains information on\r"},{"line_number":367,"context_line":"a per policy basis (one row per policy) in the same manner in which\r"},{"line_number":368,"context_line":"the account_stat table does.  The account_stat table still serves the same\r"},{"line_number":369,"context_line":"purpose and is not replaced by poloicy_stats, it holds the total cluster\r"},{"line_number":370,"context_line":"stats whereas policy_stat just has the break downs.  The backend is\r"},{"line_number":371,"context_line":"also responsible for migrating pre-storage-policy containers by altering\r"},{"line_number":372,"context_line":"the DB schema and populating the policy_stat table for Policy_0 with\r"}],"source_content_type":"text/x-rst","patch_set":7,"id":"AAAAW3%2F%2FtiU%3D","line":369,"in_reply_to":"AAAAW3%2F%2Ft6o%3D","updated":"2014-04-10 23:05:40.000000000","message":"Done","commit_id":"fcf35993c4fca4b01f4483e1504b7247c379146e"},{"author":{"_account_id":5189,"name":"Yuan Zhou","email":"dunk007@gmail.com","username":"yuan-zhou"},"change_message_id":"77831dce0bd034d7c7fc5e3d1b4908548ea6e3a2","unresolved":false,"context_lines":[{"line_number":184,"context_line":"important to understand the implications of such a configuration before\r"},{"line_number":185,"context_line":"setting one up.  Make sure it’s really what you want to do, in many cases it\r"},{"line_number":186,"context_line":"will be but in others maybe not.\r"},{"line_number":187,"context_line":"\r"},{"line_number":188,"context_line":"--------------\r"},{"line_number":189,"context_line":"Using Policies\r"},{"line_number":190,"context_line":"--------------\r"}],"source_content_type":"text/x-rst","patch_set":8,"id":"AAAAW3%2F%2Fsdg%3D","line":187,"updated":"2014-04-11 04:04:41.000000000","message":"I think we also need to mention the scenarios on changing the storage policy after it\u0027s deployed.\n - changing the name is allowed\n - changing the default policy is allowed\n - changing the policy-index is not allowed\n - changing the EC-Ratio (future) is not allowed \n\nIf you need to deploy some new policy you\u0027ll need to use a new index. \netc...","commit_id":"fea4747ce7d7b035676e451c667fc073cb5e909c"},{"author":{"_account_id":7479,"name":"paul luse","email":"paul.e.luse@intel.com","username":"peluse"},"change_message_id":"f2616bb4f582bf91d0797a5915a577ad3547a5b4","unresolved":false,"context_lines":[{"line_number":184,"context_line":"important to understand the implications of such a configuration before\r"},{"line_number":185,"context_line":"setting one up.  Make sure it’s really what you want to do, in many cases it\r"},{"line_number":186,"context_line":"will be but in others maybe not.\r"},{"line_number":187,"context_line":"\r"},{"line_number":188,"context_line":"--------------\r"},{"line_number":189,"context_line":"Using Policies\r"},{"line_number":190,"context_line":"--------------\r"}],"source_content_type":"text/x-rst","patch_set":8,"id":"AAAAW3%2F%2Fpqk%3D","line":187,"in_reply_to":"AAAAW3%2F%2Fsdg%3D","updated":"2014-04-11 12:28:22.000000000","message":"Good call.  Will hold off on EC details though until we merge the EC stuff but not being able to delete is also a restriction that needs to be mentioned","commit_id":"fea4747ce7d7b035676e451c667fc073cb5e909c"},{"author":{"_account_id":9625,"name":"Thiago da Silva","email":"thiagodasilva@gmail.com","username":"thiago"},"change_message_id":"cddf4b921c1188e941091dfbf7c04e3c6f95cdf5","unresolved":false,"context_lines":[{"line_number":1,"context_line":"\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\r"},{"line_number":2,"context_line":"Storage Policies\r"},{"line_number":3,"context_line":"\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\r"},{"line_number":4,"context_line":"\r"},{"line_number":5,"context_line":"As described in :doc:`overview_ring`, Swift uses modified hashing rings to\r"},{"line_number":6,"context_line":"determine where data should reside in the cluster. There is a separate ring\r"},{"line_number":7,"context_line":"for account databases, container databases, and there is also one object\r"}],"source_content_type":"text/x-rst","patch_set":9,"id":"AAAAW3%2F%2FmgA%3D","line":4,"updated":"2014-04-11 21:02:55.000000000","message":"Again here, since this is the main overview document, I\u0027d start with a statement of what Storage policies actually is...","commit_id":"65446913cc0a0872d2ef9d58f84caf17c7aadc30"},{"author":{"_account_id":7479,"name":"paul luse","email":"paul.e.luse@intel.com","username":"peluse"},"change_message_id":"80c1648d12595e2482c44b8a5611064e83997d56","unresolved":false,"context_lines":[{"line_number":1,"context_line":"\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\r"},{"line_number":2,"context_line":"Storage Policies\r"},{"line_number":3,"context_line":"\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\r"},{"line_number":4,"context_line":"\r"},{"line_number":5,"context_line":"As described in :doc:`overview_ring`, Swift uses modified hashing rings to\r"},{"line_number":6,"context_line":"determine where data should reside in the cluster. There is a separate ring\r"},{"line_number":7,"context_line":"for account databases, container databases, and there is also one object\r"}],"source_content_type":"text/x-rst","patch_set":9,"id":"AAAAW3%2F%2FleM%3D","line":4,"in_reply_to":"AAAAW3%2F%2FmgA%3D","updated":"2014-04-12 00:04:28.000000000","message":"Agree, will actually take the same text from the overview section and pate in the first two sentences here.","commit_id":"65446913cc0a0872d2ef9d58f84caf17c7aadc30"},{"author":{"_account_id":9625,"name":"Thiago da Silva","email":"thiagodasilva@gmail.com","username":"thiago"},"change_message_id":"cddf4b921c1188e941091dfbf7c04e3c6f95cdf5","unresolved":false,"context_lines":[{"line_number":17,"context_line":"respective rings.\r"},{"line_number":18,"context_line":"\r"},{"line_number":19,"context_line":"- Performance:  Just as SSDs can be used as the exclusive members of an account or\r"},{"line_number":20,"context_line":"database ring, an SSDD-only object ring can be created as well and used to\r"},{"line_number":21,"context_line":"implement a performance policy.\r"},{"line_number":22,"context_line":"\r"},{"line_number":23,"context_line":"- Collecting nodes into group:  A few examples here would be to assure data is\r"}],"source_content_type":"text/x-rst","patch_set":9,"id":"AAAAW3%2F%2FmfM%3D","line":20,"updated":"2014-04-11 21:02:55.000000000","message":"SSDD","commit_id":"65446913cc0a0872d2ef9d58f84caf17c7aadc30"},{"author":{"_account_id":7479,"name":"paul luse","email":"paul.e.luse@intel.com","username":"peluse"},"change_message_id":"80c1648d12595e2482c44b8a5611064e83997d56","unresolved":false,"context_lines":[{"line_number":17,"context_line":"respective rings.\r"},{"line_number":18,"context_line":"\r"},{"line_number":19,"context_line":"- Performance:  Just as SSDs can be used as the exclusive members of an account or\r"},{"line_number":20,"context_line":"database ring, an SSDD-only object ring can be created as well and used to\r"},{"line_number":21,"context_line":"implement a performance policy.\r"},{"line_number":22,"context_line":"\r"},{"line_number":23,"context_line":"- Collecting nodes into group:  A few examples here would be to assure data is\r"}],"source_content_type":"text/x-rst","patch_set":9,"id":"AAAAW3%2F%2FleA%3D","line":20,"in_reply_to":"AAAAW3%2F%2FmfM%3D","updated":"2014-04-12 00:04:28.000000000","message":"Done","commit_id":"65446913cc0a0872d2ef9d58f84caf17c7aadc30"},{"author":{"_account_id":9625,"name":"Thiago da Silva","email":"thiagodasilva@gmail.com","username":"thiago"},"change_message_id":"cddf4b921c1188e941091dfbf7c04e3c6f95cdf5","unresolved":false,"context_lines":[{"line_number":28,"context_line":"\r"},{"line_number":29,"context_line":"NOTE:  Today, choosing a different storage policy allows the use of different object rings,\r"},{"line_number":30,"context_line":"but future policies (such as Erasure Coding) will also change how the functional code\r"},{"line_number":31,"context_line":"behaves when processing a request.\r"},{"line_number":32,"context_line":"\r"},{"line_number":33,"context_line":"--------------------\r"},{"line_number":34,"context_line":"Default versus “Policy 0”\r"}],"source_content_type":"text/x-rst","patch_set":9,"id":"AAAAW3%2F%2Fmew%3D","line":31,"updated":"2014-04-11 21:02:55.000000000","message":"this Note seems a bit \"vague\", not 100% what is being said here..","commit_id":"65446913cc0a0872d2ef9d58f84caf17c7aadc30"},{"author":{"_account_id":7479,"name":"paul luse","email":"paul.e.luse@intel.com","username":"peluse"},"change_message_id":"80c1648d12595e2482c44b8a5611064e83997d56","unresolved":false,"context_lines":[{"line_number":28,"context_line":"\r"},{"line_number":29,"context_line":"NOTE:  Today, choosing a different storage policy allows the use of different object rings,\r"},{"line_number":30,"context_line":"but future policies (such as Erasure Coding) will also change how the functional code\r"},{"line_number":31,"context_line":"behaves when processing a request.\r"},{"line_number":32,"context_line":"\r"},{"line_number":33,"context_line":"--------------------\r"},{"line_number":34,"context_line":"Default versus “Policy 0”\r"}],"source_content_type":"text/x-rst","patch_set":9,"id":"AAAAW3%2F%2FlZc%3D","line":31,"in_reply_to":"AAAAW3%2F%2Fmew%3D","updated":"2014-04-12 00:04:28.000000000","message":"will think on this a bit, already hit \u0027git review\u0027 (missed this one initially)","commit_id":"65446913cc0a0872d2ef9d58f84caf17c7aadc30"},{"author":{"_account_id":9625,"name":"Thiago da Silva","email":"thiagodasilva@gmail.com","username":"thiago"},"change_message_id":"cddf4b921c1188e941091dfbf7c04e3c6f95cdf5","unresolved":false,"context_lines":[{"line_number":35,"context_line":"--------------------\r"},{"line_number":36,"context_line":"Storage Policies is a versatile feature intended to support both new and pre-existing\r"},{"line_number":37,"context_line":"Clusters with the same level of flexibility.  For that reason, we introduce the “Policy 0”\r"},{"line_number":38,"context_line":"Concept which is not the same as the \"default”.  As you will see when we begin to\r"},{"line_number":39,"context_line":"configure policies, each policy has both a name (human friendly, configurable) as well\r"},{"line_number":40,"context_line":"as an index (or simply policy number). Swift reserves index 0 to map to the object ring\r"},{"line_number":41,"context_line":"that’s present in all installations, /etc/swift/object.ring.gz.  You can name this policy\r"}],"source_content_type":"text/x-rst","patch_set":9,"id":"AAAAW3%2F%2Fmek%3D","line":38,"updated":"2014-04-11 21:02:55.000000000","message":"... as the \"default\" policy.","commit_id":"65446913cc0a0872d2ef9d58f84caf17c7aadc30"},{"author":{"_account_id":7479,"name":"paul luse","email":"paul.e.luse@intel.com","username":"peluse"},"change_message_id":"80c1648d12595e2482c44b8a5611064e83997d56","unresolved":false,"context_lines":[{"line_number":35,"context_line":"--------------------\r"},{"line_number":36,"context_line":"Storage Policies is a versatile feature intended to support both new and pre-existing\r"},{"line_number":37,"context_line":"Clusters with the same level of flexibility.  For that reason, we introduce the “Policy 0”\r"},{"line_number":38,"context_line":"Concept which is not the same as the \"default”.  As you will see when we begin to\r"},{"line_number":39,"context_line":"configure policies, each policy has both a name (human friendly, configurable) as well\r"},{"line_number":40,"context_line":"as an index (or simply policy number). Swift reserves index 0 to map to the object ring\r"},{"line_number":41,"context_line":"that’s present in all installations, /etc/swift/object.ring.gz.  You can name this policy\r"}],"source_content_type":"text/x-rst","patch_set":9,"id":"AAAAW3%2F%2Flds%3D","line":38,"in_reply_to":"AAAAW3%2F%2Fmek%3D","updated":"2014-04-12 00:04:28.000000000","message":"Done","commit_id":"65446913cc0a0872d2ef9d58f84caf17c7aadc30"},{"author":{"_account_id":9625,"name":"Thiago da Silva","email":"thiagodasilva@gmail.com","username":"thiago"},"change_message_id":"cddf4b921c1188e941091dfbf7c04e3c6f95cdf5","unresolved":false,"context_lines":[{"line_number":38,"context_line":"Concept which is not the same as the \"default”.  As you will see when we begin to\r"},{"line_number":39,"context_line":"configure policies, each policy has both a name (human friendly, configurable) as well\r"},{"line_number":40,"context_line":"as an index (or simply policy number). Swift reserves index 0 to map to the object ring\r"},{"line_number":41,"context_line":"that’s present in all installations, /etc/swift/object.ring.gz.  You can name this policy\r"},{"line_number":42,"context_line":"anything you like, and if no name is given it will report itself as Policy_0, however\r"},{"line_number":43,"context_line":"you cannot change the index as there must always be a policy with index 0.\r"},{"line_number":44,"context_line":"\r"}],"source_content_type":"text/x-rst","patch_set":9,"id":"AAAAW3%2F%2Fmd0%3D","line":41,"updated":"2014-04-11 21:02:55.000000000","message":"(e.g., /etc/swift/object.ring.gz)","commit_id":"65446913cc0a0872d2ef9d58f84caf17c7aadc30"},{"author":{"_account_id":7479,"name":"paul luse","email":"paul.e.luse@intel.com","username":"peluse"},"change_message_id":"80c1648d12595e2482c44b8a5611064e83997d56","unresolved":false,"context_lines":[{"line_number":38,"context_line":"Concept which is not the same as the \"default”.  As you will see when we begin to\r"},{"line_number":39,"context_line":"configure policies, each policy has both a name (human friendly, configurable) as well\r"},{"line_number":40,"context_line":"as an index (or simply policy number). Swift reserves index 0 to map to the object ring\r"},{"line_number":41,"context_line":"that’s present in all installations, /etc/swift/object.ring.gz.  You can name this policy\r"},{"line_number":42,"context_line":"anything you like, and if no name is given it will report itself as Policy_0, however\r"},{"line_number":43,"context_line":"you cannot change the index as there must always be a policy with index 0.\r"},{"line_number":44,"context_line":"\r"}],"source_content_type":"text/x-rst","patch_set":9,"id":"AAAAW3%2F%2Fldg%3D","line":41,"in_reply_to":"AAAAW3%2F%2Fmd0%3D","updated":"2014-04-12 00:04:28.000000000","message":"Done","commit_id":"65446913cc0a0872d2ef9d58f84caf17c7aadc30"},{"author":{"_account_id":9625,"name":"Thiago da Silva","email":"thiagodasilva@gmail.com","username":"thiago"},"change_message_id":"cddf4b921c1188e941091dfbf7c04e3c6f95cdf5","unresolved":false,"context_lines":[{"line_number":51,"context_line":"\r"},{"line_number":52,"context_line":"In other words, default means “create using this policy if nothing else is specified”\r"},{"line_number":53,"context_line":"and Policy_0 means “use the legacy policy if a container doesn’t have one*” which\r"},{"line_number":54,"context_line":"really means use object.ring.gz for lookups but, in the future will also mean\r"},{"line_number":55,"context_line":"“and use replication” as opposed to something like Erasure Coding.  We’ll provide\r"},{"line_number":56,"context_line":"some examples of each of these in the upcoming sections.\r"},{"line_number":57,"context_line":"\r"}],"source_content_type":"text/x-rst","patch_set":9,"id":"AAAAW3%2F%2FmdQ%3D","line":54,"updated":"2014-04-11 21:02:55.000000000","message":"suggest to remove this: \u0027but, in the future will also mean \"and use replication” as opposed to something like Erasure Coding.\u0027\n\nit\u0027s making the sentence long and becomes confusing","commit_id":"65446913cc0a0872d2ef9d58f84caf17c7aadc30"},{"author":{"_account_id":7479,"name":"paul luse","email":"paul.e.luse@intel.com","username":"peluse"},"change_message_id":"80c1648d12595e2482c44b8a5611064e83997d56","unresolved":false,"context_lines":[{"line_number":51,"context_line":"\r"},{"line_number":52,"context_line":"In other words, default means “create using this policy if nothing else is specified”\r"},{"line_number":53,"context_line":"and Policy_0 means “use the legacy policy if a container doesn’t have one*” which\r"},{"line_number":54,"context_line":"really means use object.ring.gz for lookups but, in the future will also mean\r"},{"line_number":55,"context_line":"“and use replication” as opposed to something like Erasure Coding.  We’ll provide\r"},{"line_number":56,"context_line":"some examples of each of these in the upcoming sections.\r"},{"line_number":57,"context_line":"\r"}],"source_content_type":"text/x-rst","patch_set":9,"id":"AAAAW3%2F%2Flcw%3D","line":54,"in_reply_to":"AAAAW3%2F%2FmdQ%3D","updated":"2014-04-12 00:04:28.000000000","message":"Done","commit_id":"65446913cc0a0872d2ef9d58f84caf17c7aadc30"},{"author":{"_account_id":9625,"name":"Thiago da Silva","email":"thiagodasilva@gmail.com","username":"thiago"},"change_message_id":"cddf4b921c1188e941091dfbf7c04e3c6f95cdf5","unresolved":false,"context_lines":[{"line_number":58,"context_line":"* Note that with the Storage Policy based code, it’s not possible to create a\r"},{"line_number":59,"context_line":"container that doesn’t have a policy.  If nothing is provided, Swift will still select\r"},{"line_number":60,"context_line":"the default and assign it to the container.  For containers created before\r"},{"line_number":61,"context_line":"Storage Policies were introduced, the legacy Policy_0 will be used.\r"},{"line_number":62,"context_line":"\r"},{"line_number":63,"context_line":"-----------------------\r"},{"line_number":64,"context_line":"Containers and Policies\r"}],"source_content_type":"text/x-rst","patch_set":9,"id":"AAAAW3%2F%2Fmck%3D","line":61,"updated":"2014-04-11 21:02:55.000000000","message":"so this also means, that \"after\" storage policy, if a user wants to create a container in Policy-0, they will have to specify so, unless it is the default, correct?","commit_id":"65446913cc0a0872d2ef9d58f84caf17c7aadc30"},{"author":{"_account_id":7479,"name":"paul luse","email":"paul.e.luse@intel.com","username":"peluse"},"change_message_id":"80c1648d12595e2482c44b8a5611064e83997d56","unresolved":false,"context_lines":[{"line_number":58,"context_line":"* Note that with the Storage Policy based code, it’s not possible to create a\r"},{"line_number":59,"context_line":"container that doesn’t have a policy.  If nothing is provided, Swift will still select\r"},{"line_number":60,"context_line":"the default and assign it to the container.  For containers created before\r"},{"line_number":61,"context_line":"Storage Policies were introduced, the legacy Policy_0 will be used.\r"},{"line_number":62,"context_line":"\r"},{"line_number":63,"context_line":"-----------------------\r"},{"line_number":64,"context_line":"Containers and Policies\r"}],"source_content_type":"text/x-rst","patch_set":9,"id":"AAAAW3%2F%2FlcE%3D","line":61,"in_reply_to":"AAAAW3%2F%2Fmck%3D","updated":"2014-04-12 00:04:28.000000000","message":"correct, if you create a new container after policies are enabled it will always choose the default.  The default is either policy_0 or one that the admin has explicitlu labeled as default","commit_id":"65446913cc0a0872d2ef9d58f84caf17c7aadc30"},{"author":{"_account_id":9625,"name":"Thiago da Silva","email":"thiagodasilva@gmail.com","username":"thiago"},"change_message_id":"cddf4b921c1188e941091dfbf7c04e3c6f95cdf5","unresolved":false,"context_lines":[{"line_number":63,"context_line":"-----------------------\r"},{"line_number":64,"context_line":"Containers and Policies\r"},{"line_number":65,"context_line":"-----------------------\r"},{"line_number":66,"context_line":"So how are policies actually used by Swift?  The answer is, policies are associated with\r"},{"line_number":67,"context_line":"containers.  There are many advantages to this approach, not the least of which is how\r"},{"line_number":68,"context_line":"easy it makes life on applications that want to take advantage of them.\r"},{"line_number":69,"context_line":"\r"}],"source_content_type":"text/x-rst","patch_set":9,"id":"AAAAW3%2F%2FmcQ%3D","line":66,"updated":"2014-04-11 21:02:55.000000000","message":"\"So,\" ????","commit_id":"65446913cc0a0872d2ef9d58f84caf17c7aadc30"},{"author":{"_account_id":7479,"name":"paul luse","email":"paul.e.luse@intel.com","username":"peluse"},"change_message_id":"80c1648d12595e2482c44b8a5611064e83997d56","unresolved":false,"context_lines":[{"line_number":63,"context_line":"-----------------------\r"},{"line_number":64,"context_line":"Containers and Policies\r"},{"line_number":65,"context_line":"-----------------------\r"},{"line_number":66,"context_line":"So how are policies actually used by Swift?  The answer is, policies are associated with\r"},{"line_number":67,"context_line":"containers.  There are many advantages to this approach, not the least of which is how\r"},{"line_number":68,"context_line":"easy it makes life on applications that want to take advantage of them.\r"},{"line_number":69,"context_line":"\r"}],"source_content_type":"text/x-rst","patch_set":9,"id":"AAAAW3%2F%2FlZk%3D","line":66,"in_reply_to":"AAAAW3%2F%2FmcQ%3D","updated":"2014-04-12 00:04:28.000000000","message":"Done","commit_id":"65446913cc0a0872d2ef9d58f84caf17c7aadc30"},{"author":{"_account_id":9625,"name":"Thiago da Silva","email":"thiagodasilva@gmail.com","username":"thiago"},"change_message_id":"cddf4b921c1188e941091dfbf7c04e3c6f95cdf5","unresolved":false,"context_lines":[{"line_number":65,"context_line":"-----------------------\r"},{"line_number":66,"context_line":"So how are policies actually used by Swift?  The answer is, policies are associated with\r"},{"line_number":67,"context_line":"containers.  There are many advantages to this approach, not the least of which is how\r"},{"line_number":68,"context_line":"easy it makes life on applications that want to take advantage of them.\r"},{"line_number":69,"context_line":"\r"},{"line_number":70,"context_line":"Each container has a new special immutable metadata element called the storage\r"},{"line_number":71,"context_line":"policy index.  Note that internally, Swift relies on policy indexes and not policy names.\r"}],"source_content_type":"text/x-rst","patch_set":9,"id":"AAAAW3%2F%2FmcA%3D","line":68,"updated":"2014-04-11 21:02:55.000000000","message":"this sentence seems reduntant? maybe? sounds like, \"it\u0027s great because it\u0027s great\"","commit_id":"65446913cc0a0872d2ef9d58f84caf17c7aadc30"},{"author":{"_account_id":7479,"name":"paul luse","email":"paul.e.luse@intel.com","username":"peluse"},"change_message_id":"80c1648d12595e2482c44b8a5611064e83997d56","unresolved":false,"context_lines":[{"line_number":65,"context_line":"-----------------------\r"},{"line_number":66,"context_line":"So how are policies actually used by Swift?  The answer is, policies are associated with\r"},{"line_number":67,"context_line":"containers.  There are many advantages to this approach, not the least of which is how\r"},{"line_number":68,"context_line":"easy it makes life on applications that want to take advantage of them.\r"},{"line_number":69,"context_line":"\r"},{"line_number":70,"context_line":"Each container has a new special immutable metadata element called the storage\r"},{"line_number":71,"context_line":"policy index.  Note that internally, Swift relies on policy indexes and not policy names.\r"}],"source_content_type":"text/x-rst","patch_set":9,"id":"AAAAW3%2F%2Flb0%3D","line":68,"in_reply_to":"AAAAW3%2F%2FmcA%3D","updated":"2014-04-12 00:04:28.000000000","message":"heh","commit_id":"65446913cc0a0872d2ef9d58f84caf17c7aadc30"},{"author":{"_account_id":9625,"name":"Thiago da Silva","email":"thiagodasilva@gmail.com","username":"thiago"},"change_message_id":"cddf4b921c1188e941091dfbf7c04e3c6f95cdf5","unresolved":false,"context_lines":[{"line_number":72,"context_line":"Policy names are there for human readability and translation is managed in the proxy.\r"},{"line_number":73,"context_line":"When a container is created, one new optional header is supported to specify the\r"},{"line_number":74,"context_line":"policy name.  If nothing is specified, the default policy is used (and if no default was\r"},{"line_number":75,"context_line":"specified, Policy_0 is considered the default).\r"},{"line_number":76,"context_line":"\r"},{"line_number":77,"context_line":"Once a policy index is put into a container database, it can never be changed.  The\r"},{"line_number":78,"context_line":"implications on data placement/movement for large datasets would make this a task\r"}],"source_content_type":"text/x-rst","patch_set":9,"id":"AAAAW3%2F%2FmbY%3D","line":75,"updated":"2014-04-11 21:02:55.000000000","message":"seems like this sentence between parenthesis is important enought that it should have been mentioned where you were explaining the difference between default and Policy_0","commit_id":"65446913cc0a0872d2ef9d58f84caf17c7aadc30"},{"author":{"_account_id":7479,"name":"paul luse","email":"paul.e.luse@intel.com","username":"peluse"},"change_message_id":"80c1648d12595e2482c44b8a5611064e83997d56","unresolved":false,"context_lines":[{"line_number":72,"context_line":"Policy names are there for human readability and translation is managed in the proxy.\r"},{"line_number":73,"context_line":"When a container is created, one new optional header is supported to specify the\r"},{"line_number":74,"context_line":"policy name.  If nothing is specified, the default policy is used (and if no default was\r"},{"line_number":75,"context_line":"specified, Policy_0 is considered the default).\r"},{"line_number":76,"context_line":"\r"},{"line_number":77,"context_line":"Once a policy index is put into a container database, it can never be changed.  The\r"},{"line_number":78,"context_line":"implications on data placement/movement for large datasets would make this a task\r"}],"source_content_type":"text/x-rst","patch_set":9,"id":"AAAAW3%2F%2FlbA%3D","line":75,"in_reply_to":"AAAAW3%2F%2FmbY%3D","updated":"2014-04-12 00:04:28.000000000","message":"well, I think it repeats what was already explained because its important.  I\u0027ll double back and try to make sure the message was clear the first time - if not I\u0027ll try to update the earlier stuff","commit_id":"65446913cc0a0872d2ef9d58f84caf17c7aadc30"},{"author":{"_account_id":9625,"name":"Thiago da Silva","email":"thiagodasilva@gmail.com","username":"thiago"},"change_message_id":"cddf4b921c1188e941091dfbf7c04e3c6f95cdf5","unresolved":false,"context_lines":[{"line_number":74,"context_line":"policy name.  If nothing is specified, the default policy is used (and if no default was\r"},{"line_number":75,"context_line":"specified, Policy_0 is considered the default).\r"},{"line_number":76,"context_line":"\r"},{"line_number":77,"context_line":"Once a policy index is put into a container database, it can never be changed.  The\r"},{"line_number":78,"context_line":"implications on data placement/movement for large datasets would make this a task\r"},{"line_number":79,"context_line":"best left for applications to decide if/where/when. Therefore, if a container has an\r"},{"line_number":80,"context_line":"existing policy of, for example 3x replication, and one wanted to migrate that data to\r"}],"source_content_type":"text/x-rst","patch_set":9,"id":"AAAAW3%2F%2FmbI%3D","line":77,"updated":"2014-04-11 21:02:55.000000000","message":"Do you mean: \"Once a container has been assigned a policy, it can never be changed\"?","commit_id":"65446913cc0a0872d2ef9d58f84caf17c7aadc30"},{"author":{"_account_id":7479,"name":"paul luse","email":"paul.e.luse@intel.com","username":"peluse"},"change_message_id":"80c1648d12595e2482c44b8a5611064e83997d56","unresolved":false,"context_lines":[{"line_number":74,"context_line":"policy name.  If nothing is specified, the default policy is used (and if no default was\r"},{"line_number":75,"context_line":"specified, Policy_0 is considered the default).\r"},{"line_number":76,"context_line":"\r"},{"line_number":77,"context_line":"Once a policy index is put into a container database, it can never be changed.  The\r"},{"line_number":78,"context_line":"implications on data placement/movement for large datasets would make this a task\r"},{"line_number":79,"context_line":"best left for applications to decide if/where/when. Therefore, if a container has an\r"},{"line_number":80,"context_line":"existing policy of, for example 3x replication, and one wanted to migrate that data to\r"}],"source_content_type":"text/x-rst","patch_set":9,"id":"AAAAW3%2F%2Flao%3D","line":77,"in_reply_to":"AAAAW3%2F%2FmbI%3D","updated":"2014-04-12 00:04:28.000000000","message":"yup, will reword.  thanks","commit_id":"65446913cc0a0872d2ef9d58f84caf17c7aadc30"},{"author":{"_account_id":9625,"name":"Thiago da Silva","email":"thiagodasilva@gmail.com","username":"thiago"},"change_message_id":"cddf4b921c1188e941091dfbf7c04e3c6f95cdf5","unresolved":false,"context_lines":[{"line_number":78,"context_line":"implications on data placement/movement for large datasets would make this a task\r"},{"line_number":79,"context_line":"best left for applications to decide if/where/when. Therefore, if a container has an\r"},{"line_number":80,"context_line":"existing policy of, for example 3x replication, and one wanted to migrate that data to\r"},{"line_number":81,"context_line":"a different policy, let’s say Erasure Code (when its available), the application would\r"},{"line_number":82,"context_line":"create another container specifying the Erasure Code policy name and then simply\r"},{"line_number":83,"context_line":"move the data from one container to the other.\r"},{"line_number":84,"context_line":"\r"}],"source_content_type":"text/x-rst","patch_set":9,"id":"AAAAW3%2F%2Fmao%3D","line":81,"updated":"2014-04-11 21:02:55.000000000","message":"Feels like mentioning Erasure code is distracting, because there\u0027s always the need to mention that it is not yet available. I\u0027d stick with the other examples you gave like maybe moving from SSD to slower disk with 3x replica","commit_id":"65446913cc0a0872d2ef9d58f84caf17c7aadc30"},{"author":{"_account_id":7479,"name":"paul luse","email":"paul.e.luse@intel.com","username":"peluse"},"change_message_id":"80c1648d12595e2482c44b8a5611064e83997d56","unresolved":false,"context_lines":[{"line_number":78,"context_line":"implications on data placement/movement for large datasets would make this a task\r"},{"line_number":79,"context_line":"best left for applications to decide if/where/when. Therefore, if a container has an\r"},{"line_number":80,"context_line":"existing policy of, for example 3x replication, and one wanted to migrate that data to\r"},{"line_number":81,"context_line":"a different policy, let’s say Erasure Code (when its available), the application would\r"},{"line_number":82,"context_line":"create another container specifying the Erasure Code policy name and then simply\r"},{"line_number":83,"context_line":"move the data from one container to the other.\r"},{"line_number":84,"context_line":"\r"}],"source_content_type":"text/x-rst","patch_set":9,"id":"AAAAW3%2F%2FlZw%3D","line":81,"in_reply_to":"AAAAW3%2F%2Fmao%3D","updated":"2014-04-12 00:04:28.000000000","message":"Yeah, well EC was one of the driving reasons for this.  But, this is the 2nd comment I\u0027ve gotten like this so I\u0027ll take this one out at least.","commit_id":"65446913cc0a0872d2ef9d58f84caf17c7aadc30"},{"author":{"_account_id":6968,"name":"Christian Schwede","email":"cschwede@nvidia.com","username":"cschwede"},"change_message_id":"d23266768650677aff53f2405d37bef5cef44526","unresolved":false,"context_lines":[{"line_number":26,"context_line":"implement a performance policy.\r"},{"line_number":27,"context_line":"\r"},{"line_number":28,"context_line":"- Collecting nodes into group:  A few examples here would be to assure data is\r"},{"line_number":29,"context_line":"Always placed in a particular data center or geography, one could assign all devices\r"},{"line_number":30,"context_line":"belonging to that set of nodes to a single policy.  Another example would be to collect\r"},{"line_number":31,"context_line":"together a set of nodes that use a different Diskfile (Kinetic, Gluster) and use a policy\r"},{"line_number":32,"context_line":"to direct traffic just to those nodes.\r"}],"source_content_type":"text/x-rst","patch_set":10,"id":"AAAAXH%2F%2F9gc%3D","line":29,"updated":"2014-04-16 09:01:47.000000000","message":"Always -\u003e always","commit_id":"f417e756ecdb023af8aff0ca026a974b72ec2dde"},{"author":{"_account_id":7479,"name":"paul luse","email":"paul.e.luse@intel.com","username":"peluse"},"change_message_id":"7cb7768e6c9cddf35f180b1cb79dc4a6e9e9a773","unresolved":false,"context_lines":[{"line_number":26,"context_line":"implement a performance policy.\r"},{"line_number":27,"context_line":"\r"},{"line_number":28,"context_line":"- Collecting nodes into group:  A few examples here would be to assure data is\r"},{"line_number":29,"context_line":"Always placed in a particular data center or geography, one could assign all devices\r"},{"line_number":30,"context_line":"belonging to that set of nodes to a single policy.  Another example would be to collect\r"},{"line_number":31,"context_line":"together a set of nodes that use a different Diskfile (Kinetic, Gluster) and use a policy\r"},{"line_number":32,"context_line":"to direct traffic just to those nodes.\r"}],"source_content_type":"text/x-rst","patch_set":10,"id":"AAAAXH%2F%2F5Jw%3D","line":29,"in_reply_to":"AAAAXH%2F%2F9gc%3D","updated":"2014-04-16 16:46:31.000000000","message":"Done","commit_id":"f417e756ecdb023af8aff0ca026a974b72ec2dde"},{"author":{"_account_id":6968,"name":"Christian Schwede","email":"cschwede@nvidia.com","username":"cschwede"},"change_message_id":"d23266768650677aff53f2405d37bef5cef44526","unresolved":false,"context_lines":[{"line_number":39,"context_line":"Default versus “Policy 0”\r"},{"line_number":40,"context_line":"--------------------\r"},{"line_number":41,"context_line":"Storage Policies is a versatile feature intended to support both new and pre-existing\r"},{"line_number":42,"context_line":"Clusters with the same level of flexibility.  For that reason, we introduce the “Policy 0”\r"},{"line_number":43,"context_line":"Concept which is not the same as the \"default” policy.  As you will see when we begin to\r"},{"line_number":44,"context_line":"configure policies, each policy has both a name (human friendly, configurable) as well\r"},{"line_number":45,"context_line":"as an index (or simply policy number). Swift reserves index 0 to map to the object ring\r"}],"source_content_type":"text/x-rst","patch_set":10,"id":"AAAAW3%2F%2FfWs%3D","line":42,"updated":"2014-04-16 09:01:47.000000000","message":"Looks like the quotes are UTF8 chars? There are more quotes in the doc that are also UTF8-chars.","commit_id":"f417e756ecdb023af8aff0ca026a974b72ec2dde"},{"author":{"_account_id":7479,"name":"paul luse","email":"paul.e.luse@intel.com","username":"peluse"},"change_message_id":"7cb7768e6c9cddf35f180b1cb79dc4a6e9e9a773","unresolved":false,"context_lines":[{"line_number":39,"context_line":"Default versus “Policy 0”\r"},{"line_number":40,"context_line":"--------------------\r"},{"line_number":41,"context_line":"Storage Policies is a versatile feature intended to support both new and pre-existing\r"},{"line_number":42,"context_line":"Clusters with the same level of flexibility.  For that reason, we introduce the “Policy 0”\r"},{"line_number":43,"context_line":"Concept which is not the same as the \"default” policy.  As you will see when we begin to\r"},{"line_number":44,"context_line":"configure policies, each policy has both a name (human friendly, configurable) as well\r"},{"line_number":45,"context_line":"as an index (or simply policy number). Swift reserves index 0 to map to the object ring\r"}],"source_content_type":"text/x-rst","patch_set":10,"id":"AAAAXH%2F%2F5Jg%3D","line":42,"in_reply_to":"AAAAW3%2F%2FfWs%3D","updated":"2014-04-16 16:46:31.000000000","message":"Done","commit_id":"f417e756ecdb023af8aff0ca026a974b72ec2dde"},{"author":{"_account_id":6968,"name":"Christian Schwede","email":"cschwede@nvidia.com","username":"cschwede"},"change_message_id":"d23266768650677aff53f2405d37bef5cef44526","unresolved":false,"context_lines":[{"line_number":63,"context_line":"* Note that with the Storage Policy based code, it’s not possible to create a\r"},{"line_number":64,"context_line":"container that doesn’t have a policy.  If nothing is provided, Swift will still select\r"},{"line_number":65,"context_line":"the default and assign it to the container.  For containers created before\r"},{"line_number":66,"context_line":"Storage Policies were introduced, the legacy Policy_0 will be used.\r"},{"line_number":67,"context_line":"\r"},{"line_number":68,"context_line":"-----------------------\r"},{"line_number":69,"context_line":"Containers and Policies\r"}],"source_content_type":"text/x-rst","patch_set":10,"id":"AAAAXH%2F%2F9fg%3D","line":66,"updated":"2014-04-16 09:01:47.000000000","message":"Maybe you can add a note that because of this you can\u0027t go back to pre-SP-times? Ie once you update a cluster to use SP there is no way back?","commit_id":"f417e756ecdb023af8aff0ca026a974b72ec2dde"},{"author":{"_account_id":7479,"name":"paul luse","email":"paul.e.luse@intel.com","username":"peluse"},"change_message_id":"7cb7768e6c9cddf35f180b1cb79dc4a6e9e9a773","unresolved":false,"context_lines":[{"line_number":63,"context_line":"* Note that with the Storage Policy based code, it’s not possible to create a\r"},{"line_number":64,"context_line":"container that doesn’t have a policy.  If nothing is provided, Swift will still select\r"},{"line_number":65,"context_line":"the default and assign it to the container.  For containers created before\r"},{"line_number":66,"context_line":"Storage Policies were introduced, the legacy Policy_0 will be used.\r"},{"line_number":67,"context_line":"\r"},{"line_number":68,"context_line":"-----------------------\r"},{"line_number":69,"context_line":"Containers and Policies\r"}],"source_content_type":"text/x-rst","patch_set":10,"id":"AAAAXH%2F%2F5Gw%3D","line":66,"in_reply_to":"AAAAXH%2F%2F9fg%3D","updated":"2014-04-16 16:46:31.000000000","message":"good point, I put a note in the new Upgrade section that mentions this","commit_id":"f417e756ecdb023af8aff0ca026a974b72ec2dde"},{"author":{"_account_id":6968,"name":"Christian Schwede","email":"cschwede@nvidia.com","username":"cschwede"},"change_message_id":"d23266768650677aff53f2405d37bef5cef44526","unresolved":false,"context_lines":[{"line_number":162,"context_line":"            - Policy names must be unique\r"},{"line_number":163,"context_line":"            - No more than 1 policy can be declared default\r"},{"line_number":164,"context_line":"            - Only supported types are allowed\r"},{"line_number":165,"context_line":"\r"},{"line_number":166,"context_line":"There are some other considerations when managing policies:\r"},{"line_number":167,"context_line":"\r"},{"line_number":168,"context_line":"            - Policy names can be changed (but be sure that users are aware!)\r"}],"source_content_type":"text/x-rst","patch_set":10,"id":"AAAAXH%2F%2F9eA%3D","line":165,"updated":"2014-04-16 09:01:47.000000000","message":"What about using non-ascii named policies? Should they be avoided at all or is it possible to just use UTF8 names?","commit_id":"f417e756ecdb023af8aff0ca026a974b72ec2dde"},{"author":{"_account_id":7479,"name":"paul luse","email":"paul.e.luse@intel.com","username":"peluse"},"change_message_id":"7cb7768e6c9cddf35f180b1cb79dc4a6e9e9a773","unresolved":false,"context_lines":[{"line_number":162,"context_line":"            - Policy names must be unique\r"},{"line_number":163,"context_line":"            - No more than 1 policy can be declared default\r"},{"line_number":164,"context_line":"            - Only supported types are allowed\r"},{"line_number":165,"context_line":"\r"},{"line_number":166,"context_line":"There are some other considerations when managing policies:\r"},{"line_number":167,"context_line":"\r"},{"line_number":168,"context_line":"            - Policy names can be changed (but be sure that users are aware!)\r"}],"source_content_type":"text/x-rst","patch_set":10,"id":"AAAAXH%2F%2F5GE%3D","line":165,"in_reply_to":"AAAAXH%2F%2F9eA%3D","updated":"2014-04-16 16:46:31.000000000","message":"I hadn\u0027t thought about it and am not familiar with the implications, will put it out there for discussion.  thanks","commit_id":"f417e756ecdb023af8aff0ca026a974b72ec2dde"},{"author":{"_account_id":6968,"name":"Christian Schwede","email":"cschwede@nvidia.com","username":"cschwede"},"change_message_id":"d23266768650677aff53f2405d37bef5cef44526","unresolved":false,"context_lines":[{"line_number":171,"context_line":"            - Do not delete a policy, if one is no longer needed simply don\u0027t use it.\r"},{"line_number":172,"context_line":"              It might be a good idea to name it something unique indicating that\r"},{"line_number":173,"context_line":"              it is no longer valid, like \"-deprecated\"\r"},{"line_number":174,"context_line":"\r"},{"line_number":175,"context_line":"There will be additional parameters for policies as new features are added\r"},{"line_number":176,"context_line":"(e.g., Erasure Code), but for now only a section name/index and name\r"},{"line_number":177,"context_line":"are required.  Once swift.conf is configured for a new policy, a new ring\r"}],"source_content_type":"text/x-rst","patch_set":10,"id":"AAAAXH%2F%2F9cs%3D","line":174,"updated":"2014-04-16 09:01:47.000000000","message":"What should an operator do if he wants to prevent using a specific policy?","commit_id":"f417e756ecdb023af8aff0ca026a974b72ec2dde"},{"author":{"_account_id":7479,"name":"paul luse","email":"paul.e.luse@intel.com","username":"peluse"},"change_message_id":"7cb7768e6c9cddf35f180b1cb79dc4a6e9e9a773","unresolved":false,"context_lines":[{"line_number":171,"context_line":"            - Do not delete a policy, if one is no longer needed simply don\u0027t use it.\r"},{"line_number":172,"context_line":"              It might be a good idea to name it something unique indicating that\r"},{"line_number":173,"context_line":"              it is no longer valid, like \"-deprecated\"\r"},{"line_number":174,"context_line":"\r"},{"line_number":175,"context_line":"There will be additional parameters for policies as new features are added\r"},{"line_number":176,"context_line":"(e.g., Erasure Code), but for now only a section name/index and name\r"},{"line_number":177,"context_line":"are required.  Once swift.conf is configured for a new policy, a new ring\r"}],"source_content_type":"text/x-rst","patch_set":10,"id":"AAAAXH%2F%2F5EY%3D","line":174,"in_reply_to":"AAAAXH%2F%2F9cs%3D","updated":"2014-04-16 16:46:31.000000000","message":"We didn\u0027t talk about that as a requirement - assuming you mean allowing access to policies per account or something like that.","commit_id":"f417e756ecdb023af8aff0ca026a974b72ec2dde"},{"author":{"_account_id":8542,"name":"Prashanth Pai","email":"ppai@redhat.com","username":"pai"},"change_message_id":"dd7ef76caafbfe918c3083332cbfd2b2831aa019","unresolved":false,"context_lines":[{"line_number":1,"context_line":"\u003cTODO: edit/review -- I *think* the organization is OK now\u003e\r"},{"line_number":2,"context_line":"\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\r"},{"line_number":3,"context_line":"Storage Policies\r"},{"line_number":4,"context_line":"\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\r"}],"source_content_type":"text/x-rst","patch_set":12,"id":"AAAAXH%2F%2FX1g%3D","line":1,"updated":"2014-04-22 09:18:06.000000000","message":"This documentation is really great! As a newbie, helped me get many doubts cleared :)","commit_id":"7ebc2a91b0d1df3ff6ae148797f77d3da12de844"},{"author":{"_account_id":7479,"name":"paul luse","email":"paul.e.luse@intel.com","username":"peluse"},"change_message_id":"ce3add0ce215ca465ea4f06de0a8da47f5e0c264","unresolved":false,"context_lines":[{"line_number":1,"context_line":"\u003cTODO: edit/review -- I *think* the organization is OK now\u003e\r"},{"line_number":2,"context_line":"\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\r"},{"line_number":3,"context_line":"Storage Policies\r"},{"line_number":4,"context_line":"\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\r"}],"source_content_type":"text/x-rst","patch_set":12,"id":"AAAAXH%2F%2FVYk%3D","line":1,"in_reply_to":"AAAAXH%2F%2FX1g%3D","updated":"2014-04-22 13:21:21.000000000","message":"thanks, glad to hear it!","commit_id":"7ebc2a91b0d1df3ff6ae148797f77d3da12de844"},{"author":{"_account_id":8542,"name":"Prashanth Pai","email":"ppai@redhat.com","username":"pai"},"change_message_id":"dd7ef76caafbfe918c3083332cbfd2b2831aa019","unresolved":false,"context_lines":[{"line_number":139,"context_line":"* The policy index must be integer\r"},{"line_number":140,"context_line":"* If no policy is declared as the default, Policy_0 is set as the default\r"},{"line_number":141,"context_line":"* Policy indexes must be unique\r"},{"line_number":142,"context_line":"* Policy names are required\r"},{"line_number":143,"context_line":"* Policy names must be unique\r"},{"line_number":144,"context_line":"* No more than 1 policy can be declared default\r"},{"line_number":145,"context_line":"* Only supported types are allowed\r"}],"source_content_type":"text/x-rst","patch_set":12,"id":"AAAAXH%2F%2FXn4%3D","line":142,"updated":"2014-04-22 09:18:06.000000000","message":"Name not required for policy 0. Right ?","commit_id":"7ebc2a91b0d1df3ff6ae148797f77d3da12de844"},{"author":{"_account_id":7479,"name":"paul luse","email":"paul.e.luse@intel.com","username":"peluse"},"change_message_id":"ce3add0ce215ca465ea4f06de0a8da47f5e0c264","unresolved":false,"context_lines":[{"line_number":139,"context_line":"* The policy index must be integer\r"},{"line_number":140,"context_line":"* If no policy is declared as the default, Policy_0 is set as the default\r"},{"line_number":141,"context_line":"* Policy indexes must be unique\r"},{"line_number":142,"context_line":"* Policy names are required\r"},{"line_number":143,"context_line":"* Policy names must be unique\r"},{"line_number":144,"context_line":"* No more than 1 policy can be declared default\r"},{"line_number":145,"context_line":"* Only supported types are allowed\r"}],"source_content_type":"text/x-rst","patch_set":12,"id":"AAAAXH%2F%2FVX4%3D","line":142,"in_reply_to":"AAAAXH%2F%2FXn4%3D","updated":"2014-04-22 13:21:21.000000000","message":"technically is is required however if not named it will be set to the default.  Doesn\u0027t hurt if the admin sets it though","commit_id":"7ebc2a91b0d1df3ff6ae148797f77d3da12de844"},{"author":{"_account_id":8542,"name":"Prashanth Pai","email":"ppai@redhat.com","username":"pai"},"change_message_id":"dd7ef76caafbfe918c3083332cbfd2b2831aa019","unresolved":false,"context_lines":[{"line_number":142,"context_line":"* Policy names are required\r"},{"line_number":143,"context_line":"* Policy names must be unique\r"},{"line_number":144,"context_line":"* No more than 1 policy can be declared default\r"},{"line_number":145,"context_line":"* Only supported types are allowed\r"},{"line_number":146,"context_line":"\r"},{"line_number":147,"context_line":"There are some other considerations when managing policies:\r"},{"line_number":148,"context_line":"\r"}],"source_content_type":"text/x-rst","patch_set":12,"id":"AAAAXH%2F%2FX8Q%3D","line":145,"updated":"2014-04-22 09:18:06.000000000","message":"Wondering what \"supported types\" means.","commit_id":"7ebc2a91b0d1df3ff6ae148797f77d3da12de844"},{"author":{"_account_id":7479,"name":"paul luse","email":"paul.e.luse@intel.com","username":"peluse"},"change_message_id":"ce3add0ce215ca465ea4f06de0a8da47f5e0c264","unresolved":false,"context_lines":[{"line_number":142,"context_line":"* Policy names are required\r"},{"line_number":143,"context_line":"* Policy names must be unique\r"},{"line_number":144,"context_line":"* No more than 1 policy can be declared default\r"},{"line_number":145,"context_line":"* Only supported types are allowed\r"},{"line_number":146,"context_line":"\r"},{"line_number":147,"context_line":"There are some other considerations when managing policies:\r"},{"line_number":148,"context_line":"\r"}],"source_content_type":"text/x-rst","patch_set":12,"id":"AAAAXH%2F%2FVXw%3D","line":145,"in_reply_to":"AAAAXH%2F%2FX8Q%3D","updated":"2014-04-22 13:21:21.000000000","message":"Today this means replication, I will add that as an example.  There will be more in the future (Erasure Code is next(","commit_id":"7ebc2a91b0d1df3ff6ae148797f77d3da12de844"},{"author":{"_account_id":8542,"name":"Prashanth Pai","email":"ppai@redhat.com","username":"pai"},"change_message_id":"dd7ef76caafbfe918c3083332cbfd2b2831aa019","unresolved":false,"context_lines":[{"line_number":151,"context_line":"* You cannot change the index of a policy once it has been created\r"},{"line_number":152,"context_line":"* Do not delete a policy, if one is no longer needed simply don\u0027t use it.\r"},{"line_number":153,"context_line":"* It might be a good idea to name it something unique indicating that\r"},{"line_number":154,"context_line":"* it is no longer valid, like \u0027-deprecated\u0027\r"},{"line_number":155,"context_line":"\r"},{"line_number":156,"context_line":"There will be additional parameters for policies as new features are added\r"},{"line_number":157,"context_line":"(e.g., Erasure Code), but for now only a section name/index and name\r"}],"source_content_type":"text/x-rst","patch_set":12,"id":"AAAAXH%2F%2FX7I%3D","line":154,"updated":"2014-04-22 09:18:06.000000000","message":"a \u0027*\u0027 here would render as separate bullet point in markdown list","commit_id":"7ebc2a91b0d1df3ff6ae148797f77d3da12de844"},{"author":{"_account_id":7479,"name":"paul luse","email":"paul.e.luse@intel.com","username":"peluse"},"change_message_id":"ce3add0ce215ca465ea4f06de0a8da47f5e0c264","unresolved":false,"context_lines":[{"line_number":151,"context_line":"* You cannot change the index of a policy once it has been created\r"},{"line_number":152,"context_line":"* Do not delete a policy, if one is no longer needed simply don\u0027t use it.\r"},{"line_number":153,"context_line":"* It might be a good idea to name it something unique indicating that\r"},{"line_number":154,"context_line":"* it is no longer valid, like \u0027-deprecated\u0027\r"},{"line_number":155,"context_line":"\r"},{"line_number":156,"context_line":"There will be additional parameters for policies as new features are added\r"},{"line_number":157,"context_line":"(e.g., Erasure Code), but for now only a section name/index and name\r"}],"source_content_type":"text/x-rst","patch_set":12,"id":"AAAAXH%2F%2FVWw%3D","line":154,"in_reply_to":"AAAAXH%2F%2FX7I%3D","updated":"2014-04-22 13:21:21.000000000","message":"thanks, I\u0027ve not done this rst mark-up before, will save final changes in that area for very last to make sure its all consistent but thanks for the note","commit_id":"7ebc2a91b0d1df3ff6ae148797f77d3da12de844"},{"author":{"_account_id":8542,"name":"Prashanth Pai","email":"ppai@redhat.com","username":"pai"},"change_message_id":"dd7ef76caafbfe918c3083332cbfd2b2831aa019","unresolved":false,"context_lines":[{"line_number":230,"context_line":"-----------------------\r"},{"line_number":231,"context_line":"\r"},{"line_number":232,"context_line":"A new module, storage_policy.py, is responsible for parsing the\r"},{"line_number":233,"context_line":"swift.conf file, validating the input, and create a global collection of\r"},{"line_number":234,"context_line":"configured policies via class StoragePolicyCollection(object).  This\r"},{"line_number":235,"context_line":"collection is made up of policies of class StoragePolicy(object). The\r"},{"line_number":236,"context_line":"collection class includes handy functions for getting to a policy either\r"}],"source_content_type":"text/x-rst","patch_set":12,"id":"AAAAXH%2F%2FX3c%3D","line":233,"updated":"2014-04-22 09:18:06.000000000","message":"s/create/creating","commit_id":"7ebc2a91b0d1df3ff6ae148797f77d3da12de844"},{"author":{"_account_id":7479,"name":"paul luse","email":"paul.e.luse@intel.com","username":"peluse"},"change_message_id":"ce3add0ce215ca465ea4f06de0a8da47f5e0c264","unresolved":false,"context_lines":[{"line_number":230,"context_line":"-----------------------\r"},{"line_number":231,"context_line":"\r"},{"line_number":232,"context_line":"A new module, storage_policy.py, is responsible for parsing the\r"},{"line_number":233,"context_line":"swift.conf file, validating the input, and create a global collection of\r"},{"line_number":234,"context_line":"configured policies via class StoragePolicyCollection(object).  This\r"},{"line_number":235,"context_line":"collection is made up of policies of class StoragePolicy(object). The\r"},{"line_number":236,"context_line":"collection class includes handy functions for getting to a policy either\r"}],"source_content_type":"text/x-rst","patch_set":12,"id":"AAAAXH%2F%2FVWE%3D","line":233,"in_reply_to":"AAAAXH%2F%2FX3c%3D","updated":"2014-04-22 13:21:21.000000000","message":"Done","commit_id":"7ebc2a91b0d1df3ff6ae148797f77d3da12de844"},{"author":{"_account_id":8542,"name":"Prashanth Pai","email":"ppai@redhat.com","username":"pai"},"change_message_id":"dd7ef76caafbfe918c3083332cbfd2b2831aa019","unresolved":false,"context_lines":[{"line_number":238,"context_line":"also one very important function, get_object_ring().  Object rings\r"},{"line_number":239,"context_line":"are now members of the StoragePolicy() class and are actually not\r"},{"line_number":240,"context_line":"instantiated until needed for the first time.  Any caller anywhere\r"},{"line_number":241,"context_line":"in the code base that needs to access and object ring must use\r"},{"line_number":242,"context_line":"the POLICIES global singleton to access the get_object_ring() function\r"},{"line_number":243,"context_line":"and provide the policy index.  The global is instantiated when Swift\r"},{"line_number":244,"context_line":"starts and provides a means to patch policies for the test code.\r"}],"source_content_type":"text/x-rst","patch_set":12,"id":"AAAAXH%2F%2FX2g%3D","line":241,"updated":"2014-04-22 09:18:06.000000000","message":"delete \"and\" ?","commit_id":"7ebc2a91b0d1df3ff6ae148797f77d3da12de844"},{"author":{"_account_id":7479,"name":"paul luse","email":"paul.e.luse@intel.com","username":"peluse"},"change_message_id":"ce3add0ce215ca465ea4f06de0a8da47f5e0c264","unresolved":false,"context_lines":[{"line_number":238,"context_line":"also one very important function, get_object_ring().  Object rings\r"},{"line_number":239,"context_line":"are now members of the StoragePolicy() class and are actually not\r"},{"line_number":240,"context_line":"instantiated until needed for the first time.  Any caller anywhere\r"},{"line_number":241,"context_line":"in the code base that needs to access and object ring must use\r"},{"line_number":242,"context_line":"the POLICIES global singleton to access the get_object_ring() function\r"},{"line_number":243,"context_line":"and provide the policy index.  The global is instantiated when Swift\r"},{"line_number":244,"context_line":"starts and provides a means to patch policies for the test code.\r"}],"source_content_type":"text/x-rst","patch_set":12,"id":"AAAAXH%2F%2FVU8%3D","line":241,"in_reply_to":"AAAAXH%2F%2FX2g%3D","updated":"2014-04-22 13:21:21.000000000","message":"yes, was supposed to be \"an\"","commit_id":"7ebc2a91b0d1df3ff6ae148797f77d3da12de844"},{"author":{"_account_id":8542,"name":"Prashanth Pai","email":"ppai@redhat.com","username":"pai"},"change_message_id":"dd7ef76caafbfe918c3083332cbfd2b2831aa019","unresolved":false,"context_lines":[{"line_number":241,"context_line":"in the code base that needs to access and object ring must use\r"},{"line_number":242,"context_line":"the POLICIES global singleton to access the get_object_ring() function\r"},{"line_number":243,"context_line":"and provide the policy index.  The global is instantiated when Swift\r"},{"line_number":244,"context_line":"starts and provides a means to patch policies for the test code.\r"},{"line_number":245,"context_line":"\r"},{"line_number":246,"context_line":"Middleware\r"},{"line_number":247,"context_line":"----------\r"}],"source_content_type":"text/x-rst","patch_set":12,"id":"AAAAXH%2F%2FX2U%3D","line":244,"updated":"2014-04-22 09:18:06.000000000","message":"I could not understand this part - \"provides a means to patch policies for the test code\"","commit_id":"7ebc2a91b0d1df3ff6ae148797f77d3da12de844"},{"author":{"_account_id":7479,"name":"paul luse","email":"paul.e.luse@intel.com","username":"peluse"},"change_message_id":"ce3add0ce215ca465ea4f06de0a8da47f5e0c264","unresolved":false,"context_lines":[{"line_number":241,"context_line":"in the code base that needs to access and object ring must use\r"},{"line_number":242,"context_line":"the POLICIES global singleton to access the get_object_ring() function\r"},{"line_number":243,"context_line":"and provide the policy index.  The global is instantiated when Swift\r"},{"line_number":244,"context_line":"starts and provides a means to patch policies for the test code.\r"},{"line_number":245,"context_line":"\r"},{"line_number":246,"context_line":"Middleware\r"},{"line_number":247,"context_line":"----------\r"}],"source_content_type":"text/x-rst","patch_set":12,"id":"AAAAXH%2F%2FVUU%3D","line":244,"in_reply_to":"AAAAXH%2F%2FX2U%3D","updated":"2014-04-22 13:21:21.000000000","message":"does this make more sense?\n\"provides a mechanism to patch policies for the test code\"","commit_id":"7ebc2a91b0d1df3ff6ae148797f77d3da12de844"},{"author":{"_account_id":8542,"name":"Prashanth Pai","email":"ppai@redhat.com","username":"pai"},"change_message_id":"dd7ef76caafbfe918c3083332cbfd2b2831aa019","unresolved":false,"context_lines":[{"line_number":295,"context_line":"do drastically different things, or maybe not.  For example, the difference in\r"},{"line_number":296,"context_line":"handling a replication job for 2x versus 3x is pretty trivial however the\r"},{"line_number":297,"context_line":"difference in handling replication between 3x and erasure code is anything\r"},{"line_number":298,"context_line":"but.  In fact, the term ‘replication’ really isn’t appropriate for some policies\r"},{"line_number":299,"context_line":"like erasure code however the majority of the framework for collecting and\r"},{"line_number":300,"context_line":"processing jobs remains the same.  Thus, those functions in the replicator are\r"},{"line_number":301,"context_line":"leveraged for all policies and then there is policy specific code required for\r"}],"source_content_type":"text/x-rst","patch_set":12,"id":"AAAAXH%2F%2FXuo%3D","line":298,"updated":"2014-04-22 09:18:06.000000000","message":"anything but \"complex\"/\"non-trvial\" ?","commit_id":"7ebc2a91b0d1df3ff6ae148797f77d3da12de844"},{"author":{"_account_id":7479,"name":"paul luse","email":"paul.e.luse@intel.com","username":"peluse"},"change_message_id":"ce3add0ce215ca465ea4f06de0a8da47f5e0c264","unresolved":false,"context_lines":[{"line_number":295,"context_line":"do drastically different things, or maybe not.  For example, the difference in\r"},{"line_number":296,"context_line":"handling a replication job for 2x versus 3x is pretty trivial however the\r"},{"line_number":297,"context_line":"difference in handling replication between 3x and erasure code is anything\r"},{"line_number":298,"context_line":"but.  In fact, the term ‘replication’ really isn’t appropriate for some policies\r"},{"line_number":299,"context_line":"like erasure code however the majority of the framework for collecting and\r"},{"line_number":300,"context_line":"processing jobs remains the same.  Thus, those functions in the replicator are\r"},{"line_number":301,"context_line":"leveraged for all policies and then there is policy specific code required for\r"}],"source_content_type":"text/x-rst","patch_set":12,"id":"AAAAXH%2F%2FVPk%3D","line":298,"in_reply_to":"AAAAXH%2F%2FXuo%3D","updated":"2014-04-22 13:21:21.000000000","message":"yes, ending a sentence in \"anything but\" is grammatically correct but I guess may not be the best way to state this for best international understanding.  Will reword, thanks","commit_id":"7ebc2a91b0d1df3ff6ae148797f77d3da12de844"},{"author":{"_account_id":8542,"name":"Prashanth Pai","email":"ppai@redhat.com","username":"pai"},"change_message_id":"dd7ef76caafbfe918c3083332cbfd2b2831aa019","unresolved":false,"context_lines":[{"line_number":314,"context_line":"lays out the directory structure described earlier but that’s owned within\r"},{"line_number":315,"context_line":"Diskfile; external modules have no visibility into that detail.  A common\r"},{"line_number":316,"context_line":"function is provided to map various directory names and/or strings\r"},{"line_number":317,"context_line":"based on their policy index – for example Diskfile deines get_data_dir()\r"},{"line_number":318,"context_line":"which builds off of a generic get_policy_string() to consistently build\r"},{"line_number":319,"context_line":"policy aware strings for various usage.\r"},{"line_number":320,"context_line":"\r"}],"source_content_type":"text/x-rst","patch_set":12,"id":"AAAAXH%2F%2FXso%3D","line":317,"updated":"2014-04-22 09:18:06.000000000","message":"s/deines/defines","commit_id":"7ebc2a91b0d1df3ff6ae148797f77d3da12de844"},{"author":{"_account_id":7479,"name":"paul luse","email":"paul.e.luse@intel.com","username":"peluse"},"change_message_id":"ce3add0ce215ca465ea4f06de0a8da47f5e0c264","unresolved":false,"context_lines":[{"line_number":314,"context_line":"lays out the directory structure described earlier but that’s owned within\r"},{"line_number":315,"context_line":"Diskfile; external modules have no visibility into that detail.  A common\r"},{"line_number":316,"context_line":"function is provided to map various directory names and/or strings\r"},{"line_number":317,"context_line":"based on their policy index – for example Diskfile deines get_data_dir()\r"},{"line_number":318,"context_line":"which builds off of a generic get_policy_string() to consistently build\r"},{"line_number":319,"context_line":"policy aware strings for various usage.\r"},{"line_number":320,"context_line":"\r"}],"source_content_type":"text/x-rst","patch_set":12,"id":"AAAAXH%2F%2FVSU%3D","line":317,"in_reply_to":"AAAAXH%2F%2FXso%3D","updated":"2014-04-22 13:21:21.000000000","message":"Done","commit_id":"7ebc2a91b0d1df3ff6ae148797f77d3da12de844"},{"author":{"_account_id":8542,"name":"Prashanth Pai","email":"ppai@redhat.com","username":"pai"},"change_message_id":"dd7ef76caafbfe918c3083332cbfd2b2831aa019","unresolved":false,"context_lines":[{"line_number":338,"context_line":"storage policies.\r"},{"line_number":339,"context_line":"\r"},{"line_number":340,"context_line":"The container sync functionality only needs to be policy aware in that it\r"},{"line_number":341,"context_line":"accessed the object rings.  Therefore, it needs to pull the policy index\r"},{"line_number":342,"context_line":"out of the container information and use it to select the appropriate\r"},{"line_number":343,"context_line":"object ring from the POLICIES global.\r"},{"line_number":344,"context_line":"\r"}],"source_content_type":"text/x-rst","patch_set":12,"id":"AAAAXH%2F%2FXp8%3D","line":341,"updated":"2014-04-22 09:18:06.000000000","message":"s/accessed/accesses","commit_id":"7ebc2a91b0d1df3ff6ae148797f77d3da12de844"},{"author":{"_account_id":7479,"name":"paul luse","email":"paul.e.luse@intel.com","username":"peluse"},"change_message_id":"ce3add0ce215ca465ea4f06de0a8da47f5e0c264","unresolved":false,"context_lines":[{"line_number":338,"context_line":"storage policies.\r"},{"line_number":339,"context_line":"\r"},{"line_number":340,"context_line":"The container sync functionality only needs to be policy aware in that it\r"},{"line_number":341,"context_line":"accessed the object rings.  Therefore, it needs to pull the policy index\r"},{"line_number":342,"context_line":"out of the container information and use it to select the appropriate\r"},{"line_number":343,"context_line":"object ring from the POLICIES global.\r"},{"line_number":344,"context_line":"\r"}],"source_content_type":"text/x-rst","patch_set":12,"id":"AAAAXH%2F%2FVO8%3D","line":341,"in_reply_to":"AAAAXH%2F%2FXp8%3D","updated":"2014-04-22 13:21:21.000000000","message":"Done","commit_id":"7ebc2a91b0d1df3ff6ae148797f77d3da12de844"},{"author":{"_account_id":7847,"name":"Alistair Coles","email":"alistairncoles@gmail.com","username":"acoles"},"change_message_id":"1f4330beab79dc2a991c99b5db0d1a8ddab8f1eb","unresolved":false,"context_lines":[{"line_number":6,"context_line":"Storage Policies allow for some level of segmenting the cluster for various\r"},{"line_number":7,"context_line":"purposes through the creation of multiple object rings. Storage Policies are\r"},{"line_number":8,"context_line":"not implemented as a separate code module but are an important concept in\r"},{"line_number":9,"context_line":"understanding Swift architecture.\r"},{"line_number":10,"context_line":"\r"},{"line_number":11,"context_line":"As described in :doc:`overview_ring`, Swift uses modified hashing rings to\r"},{"line_number":12,"context_line":"determine where data should reside in the cluster. There is a separate ring\r"}],"source_content_type":"text/x-rst","patch_set":13,"id":"7adec928_2bed25c4","line":9,"updated":"2014-05-16 11:09:08.000000000","message":"see comment in the architectural overview file - it would be helpful to repeat the sentence about policies applying on per container basis early on in this file.","commit_id":"126ca8da784d87b1f5c0be934d81feef724bfd7e"},{"author":{"_account_id":7479,"name":"paul luse","email":"paul.e.luse@intel.com","username":"peluse"},"change_message_id":"fb622d4e912d2389e8cd4e9c5eb7a009985e0f0f","unresolved":false,"context_lines":[{"line_number":6,"context_line":"Storage Policies allow for some level of segmenting the cluster for various\r"},{"line_number":7,"context_line":"purposes through the creation of multiple object rings. Storage Policies are\r"},{"line_number":8,"context_line":"not implemented as a separate code module but are an important concept in\r"},{"line_number":9,"context_line":"understanding Swift architecture.\r"},{"line_number":10,"context_line":"\r"},{"line_number":11,"context_line":"As described in :doc:`overview_ring`, Swift uses modified hashing rings to\r"},{"line_number":12,"context_line":"determine where data should reside in the cluster. There is a separate ring\r"}],"source_content_type":"text/x-rst","patch_set":13,"id":"7adec928_c0a781bb","line":9,"in_reply_to":"7adec928_2bed25c4","updated":"2014-05-19 15:15:26.000000000","message":"I copied it over but a little further down in the section where containers are talked about so its in better context","commit_id":"126ca8da784d87b1f5c0be934d81feef724bfd7e"},{"author":{"_account_id":7847,"name":"Alistair Coles","email":"alistairncoles@gmail.com","username":"acoles"},"change_message_id":"1f4330beab79dc2a991c99b5db0d1a8ddab8f1eb","unresolved":false,"context_lines":[{"line_number":13,"context_line":"for account databases, container databases, and there is also one object\r"},{"line_number":14,"context_line":"ring per storage policy.  Each object ring behaves exactly the same way\r"},{"line_number":15,"context_line":"and is maintained in the same manner - the only difference is which devices\r"},{"line_number":16,"context_line":"are assigned to which rings.  By supporting multiple object rings, Swift allows\r"},{"line_number":17,"context_line":"the application and/or deployer to essentially segregate the object storage\r"},{"line_number":18,"context_line":"within a single cluster.  There are many reasons why this might be desirable:\r"},{"line_number":19,"context_line":"\r"}],"source_content_type":"text/x-rst","patch_set":13,"id":"7adec928_05e93880","line":16,"updated":"2014-05-16 11:09:08.000000000","message":"Possibly a bit confusing to say \u0027the only difference is which devices are assigned to which rings\u0027 - their replica count can also differ, and in the saio setup the same devices are assigned to two rings.","commit_id":"126ca8da784d87b1f5c0be934d81feef724bfd7e"},{"author":{"_account_id":7479,"name":"paul luse","email":"paul.e.luse@intel.com","username":"peluse"},"change_message_id":"fb622d4e912d2389e8cd4e9c5eb7a009985e0f0f","unresolved":false,"context_lines":[{"line_number":13,"context_line":"for account databases, container databases, and there is also one object\r"},{"line_number":14,"context_line":"ring per storage policy.  Each object ring behaves exactly the same way\r"},{"line_number":15,"context_line":"and is maintained in the same manner - the only difference is which devices\r"},{"line_number":16,"context_line":"are assigned to which rings.  By supporting multiple object rings, Swift allows\r"},{"line_number":17,"context_line":"the application and/or deployer to essentially segregate the object storage\r"},{"line_number":18,"context_line":"within a single cluster.  There are many reasons why this might be desirable:\r"},{"line_number":19,"context_line":"\r"}],"source_content_type":"text/x-rst","patch_set":13,"id":"7adec928_009c095c","line":16,"in_reply_to":"7adec928_05e93880","updated":"2014-05-19 15:15:26.000000000","message":"Done","commit_id":"126ca8da784d87b1f5c0be934d81feef724bfd7e"},{"author":{"_account_id":7847,"name":"Alistair Coles","email":"alistairncoles@gmail.com","username":"acoles"},"change_message_id":"1f4330beab79dc2a991c99b5db0d1a8ddab8f1eb","unresolved":false,"context_lines":[{"line_number":24,"context_line":"\r"},{"line_number":25,"context_line":"* Performance:  Just as SSDs can be used as the exclusive members of an account or\r"},{"line_number":26,"context_line":"database ring, an SSD-only object ring can be created as well and used to\r"},{"line_number":27,"context_line":"implement a performance policy.\r"},{"line_number":28,"context_line":"\r"},{"line_number":29,"context_line":"* Collecting nodes into group:  A few examples here would be to assure data is\r"},{"line_number":30,"context_line":"always placed in a particular data center or geography, one could assign all devices\r"}],"source_content_type":"text/x-rst","patch_set":13,"id":"7adec928_05a05842","line":27,"updated":"2014-05-16 11:09:08.000000000","message":"s/performance/high performance/ perhaps?","commit_id":"126ca8da784d87b1f5c0be934d81feef724bfd7e"},{"author":{"_account_id":7479,"name":"paul luse","email":"paul.e.luse@intel.com","username":"peluse"},"change_message_id":"fb622d4e912d2389e8cd4e9c5eb7a009985e0f0f","unresolved":false,"context_lines":[{"line_number":24,"context_line":"\r"},{"line_number":25,"context_line":"* Performance:  Just as SSDs can be used as the exclusive members of an account or\r"},{"line_number":26,"context_line":"database ring, an SSD-only object ring can be created as well and used to\r"},{"line_number":27,"context_line":"implement a performance policy.\r"},{"line_number":28,"context_line":"\r"},{"line_number":29,"context_line":"* Collecting nodes into group:  A few examples here would be to assure data is\r"},{"line_number":30,"context_line":"always placed in a particular data center or geography, one could assign all devices\r"}],"source_content_type":"text/x-rst","patch_set":13,"id":"7adec928_e0fd5d6f","line":27,"in_reply_to":"7adec928_05a05842","updated":"2014-05-19 15:15:26.000000000","message":"Done","commit_id":"126ca8da784d87b1f5c0be934d81feef724bfd7e"},{"author":{"_account_id":7847,"name":"Alistair Coles","email":"alistairncoles@gmail.com","username":"acoles"},"change_message_id":"1f4330beab79dc2a991c99b5db0d1a8ddab8f1eb","unresolved":false,"context_lines":[{"line_number":29,"context_line":"* Collecting nodes into group:  A few examples here would be to assure data is\r"},{"line_number":30,"context_line":"always placed in a particular data center or geography, one could assign all devices\r"},{"line_number":31,"context_line":"belonging to that set of nodes to a single policy.  Another example would be to collect\r"},{"line_number":32,"context_line":"together a set of nodes that use a different Diskfile (Kinetic, Gluster) and use a policy\r"},{"line_number":33,"context_line":"to direct traffic just to those nodes.\r"},{"line_number":34,"context_line":"\r"},{"line_number":35,"context_line":"NOTE: Today, choosing a different storage policy allows the use of different object rings,\r"}],"source_content_type":"text/x-rst","patch_set":13,"id":"7adec928_c5bcb06f","line":32,"updated":"2014-05-16 11:09:08.000000000","message":"readers of an overview may not be familiar with the term \u0027Diskfile\u0027 - maybe \u0027backend object storage implementation\u0027. Also, add an \u0027e.g.\u0027 before Kinetic, Gluster","commit_id":"126ca8da784d87b1f5c0be934d81feef724bfd7e"},{"author":{"_account_id":7479,"name":"paul luse","email":"paul.e.luse@intel.com","username":"peluse"},"change_message_id":"fb622d4e912d2389e8cd4e9c5eb7a009985e0f0f","unresolved":false,"context_lines":[{"line_number":29,"context_line":"* Collecting nodes into group:  A few examples here would be to assure data is\r"},{"line_number":30,"context_line":"always placed in a particular data center or geography, one could assign all devices\r"},{"line_number":31,"context_line":"belonging to that set of nodes to a single policy.  Another example would be to collect\r"},{"line_number":32,"context_line":"together a set of nodes that use a different Diskfile (Kinetic, Gluster) and use a policy\r"},{"line_number":33,"context_line":"to direct traffic just to those nodes.\r"},{"line_number":34,"context_line":"\r"},{"line_number":35,"context_line":"NOTE: Today, choosing a different storage policy allows the use of different object rings,\r"}],"source_content_type":"text/x-rst","patch_set":13,"id":"7adec928_604dcdc3","line":32,"in_reply_to":"7adec928_c5bcb06f","updated":"2014-05-19 15:15:26.000000000","message":"I use Diskfile a lot so I added a quick definition in the NOTE below the paragraph","commit_id":"126ca8da784d87b1f5c0be934d81feef724bfd7e"},{"author":{"_account_id":7847,"name":"Alistair Coles","email":"alistairncoles@gmail.com","username":"acoles"},"change_message_id":"1f4330beab79dc2a991c99b5db0d1a8ddab8f1eb","unresolved":false,"context_lines":[{"line_number":34,"context_line":"\r"},{"line_number":35,"context_line":"NOTE: Today, choosing a different storage policy allows the use of different object rings,\r"},{"line_number":36,"context_line":"but future policies (such as Erasure Coding) will also change how the functional code\r"},{"line_number":37,"context_line":"behaves when processing a request.\r"},{"line_number":38,"context_line":"\r"},{"line_number":39,"context_line":"-------------------------\r"},{"line_number":40,"context_line":"Default versus \u0027Policy 0\u0027\r"}],"source_content_type":"text/x-rst","patch_set":13,"id":"7adec928_c8884725","line":37,"updated":"2014-05-16 11:09:08.000000000","message":"maybe: \u0027...will also change the functional behavior of the object ring when processing a request\u0027","commit_id":"126ca8da784d87b1f5c0be934d81feef724bfd7e"},{"author":{"_account_id":7479,"name":"paul luse","email":"paul.e.luse@intel.com","username":"peluse"},"change_message_id":"fb622d4e912d2389e8cd4e9c5eb7a009985e0f0f","unresolved":false,"context_lines":[{"line_number":34,"context_line":"\r"},{"line_number":35,"context_line":"NOTE: Today, choosing a different storage policy allows the use of different object rings,\r"},{"line_number":36,"context_line":"but future policies (such as Erasure Coding) will also change how the functional code\r"},{"line_number":37,"context_line":"behaves when processing a request.\r"},{"line_number":38,"context_line":"\r"},{"line_number":39,"context_line":"-------------------------\r"},{"line_number":40,"context_line":"Default versus \u0027Policy 0\u0027\r"}],"source_content_type":"text/x-rst","patch_set":13,"id":"7adec928_a0f1956c","line":37,"in_reply_to":"7adec928_c8884725","updated":"2014-05-19 15:15:26.000000000","message":"so actually I did mean \"functional code\" as the obj ring doesn\u0027t change behaviors; I\u0027ll see if I can make it clearer, thanks","commit_id":"126ca8da784d87b1f5c0be934d81feef724bfd7e"},{"author":{"_account_id":7847,"name":"Alistair Coles","email":"alistairncoles@gmail.com","username":"acoles"},"change_message_id":"1f4330beab79dc2a991c99b5db0d1a8ddab8f1eb","unresolved":false,"context_lines":[{"line_number":43,"context_line":"clusters with the same level of flexibility.  For that reason, we introduce the \u0027Policy 0\u0027\r"},{"line_number":44,"context_line":"concept which is not the same as the \u0027default” policy.  As you will see when we begin to\r"},{"line_number":45,"context_line":"configure policies, each policy has both a name (human friendly, configurable) as well\r"},{"line_number":46,"context_line":"as an index (or simply policy number). Swift reserves index 0 to map to the object ring\r"},{"line_number":47,"context_line":"that’s present in all installations (e.g., ‘/etc/swift/object.ring.gz’).  You can name this policy\r"},{"line_number":48,"context_line":"anything you like, and if no name is given it will report itself as Policy_0, however\r"},{"line_number":49,"context_line":"you cannot change the index as there must always be a policy with index 0.\r"}],"source_content_type":"text/x-rst","patch_set":13,"id":"7adec928_8b1d5969","line":46,"updated":"2014-05-16 11:09:08.000000000","message":"For clarity, can this object ring be referred to as the \u0027default object ring\u0027 or \u0027object ring 0\u0027 or perhaps \u0027legacy object ring\u0027?","commit_id":"126ca8da784d87b1f5c0be934d81feef724bfd7e"},{"author":{"_account_id":7479,"name":"paul luse","email":"paul.e.luse@intel.com","username":"peluse"},"change_message_id":"fb622d4e912d2389e8cd4e9c5eb7a009985e0f0f","unresolved":false,"context_lines":[{"line_number":43,"context_line":"clusters with the same level of flexibility.  For that reason, we introduce the \u0027Policy 0\u0027\r"},{"line_number":44,"context_line":"concept which is not the same as the \u0027default” policy.  As you will see when we begin to\r"},{"line_number":45,"context_line":"configure policies, each policy has both a name (human friendly, configurable) as well\r"},{"line_number":46,"context_line":"as an index (or simply policy number). Swift reserves index 0 to map to the object ring\r"},{"line_number":47,"context_line":"that’s present in all installations (e.g., ‘/etc/swift/object.ring.gz’).  You can name this policy\r"},{"line_number":48,"context_line":"anything you like, and if no name is given it will report itself as Policy_0, however\r"},{"line_number":49,"context_line":"you cannot change the index as there must always be a policy with index 0.\r"}],"source_content_type":"text/x-rst","patch_set":13,"id":"7adec928_405c514b","line":46,"in_reply_to":"7adec928_8b1d5969","updated":"2014-05-19 15:15:26.000000000","message":"I avoided every calling it the default obj ring because the def obj ring would be the ring associated with whatever policy is defined as default which may not be policy 0 ring.  Legacy sometimes isn\u0027t a good word to use for new features I think too, or maybe that\u0027s just me.  Leaving this for now but if others chime in we can always update it :)","commit_id":"126ca8da784d87b1f5c0be934d81feef724bfd7e"},{"author":{"_account_id":7847,"name":"Alistair Coles","email":"alistairncoles@gmail.com","username":"acoles"},"change_message_id":"1f4330beab79dc2a991c99b5db0d1a8ddab8f1eb","unresolved":false,"context_lines":[{"line_number":68,"context_line":"\r"},{"line_number":69,"context_line":"-----------------------\r"},{"line_number":70,"context_line":"Containers and Policies\r"},{"line_number":71,"context_line":"-----------------------\r"},{"line_number":72,"context_line":"How are policies actually used by Swift?  Well, policies are implemented at the\r"},{"line_number":73,"context_line":"container level.  There are many advantages to this approach, not the least of which\r"},{"line_number":74,"context_line":"is how easy it makes life on applications that want to take advantage of them. Each\r"}],"source_content_type":"text/x-rst","patch_set":13,"id":"7adec928_8b90f996","line":71,"updated":"2014-05-16 11:09:08.000000000","message":"Might be better to move this ahead of the \u0027Default vs policy 0\u0027 section - that talks about containers before we get to read this","commit_id":"126ca8da784d87b1f5c0be934d81feef724bfd7e"},{"author":{"_account_id":7479,"name":"paul luse","email":"paul.e.luse@intel.com","username":"peluse"},"change_message_id":"fb622d4e912d2389e8cd4e9c5eb7a009985e0f0f","unresolved":false,"context_lines":[{"line_number":68,"context_line":"\r"},{"line_number":69,"context_line":"-----------------------\r"},{"line_number":70,"context_line":"Containers and Policies\r"},{"line_number":71,"context_line":"-----------------------\r"},{"line_number":72,"context_line":"How are policies actually used by Swift?  Well, policies are implemented at the\r"},{"line_number":73,"context_line":"container level.  There are many advantages to this approach, not the least of which\r"},{"line_number":74,"context_line":"is how easy it makes life on applications that want to take advantage of them. Each\r"}],"source_content_type":"text/x-rst","patch_set":13,"id":"7adec928_20282599","line":71,"in_reply_to":"7adec928_8b90f996","updated":"2014-05-19 15:15:26.000000000","message":"Done","commit_id":"126ca8da784d87b1f5c0be934d81feef724bfd7e"},{"author":{"_account_id":7847,"name":"Alistair Coles","email":"alistairncoles@gmail.com","username":"acoles"},"change_message_id":"1f4330beab79dc2a991c99b5db0d1a8ddab8f1eb","unresolved":false,"context_lines":[{"line_number":117,"context_line":"/async_pending\u003dN ? maps to async pending update for storage policy index #N\r"},{"line_number":118,"context_line":"\r"},{"line_number":119,"context_line":"Note that these directory names are actually owned by the specific Diskfile\r"},{"line_number":120,"context_line":"Implementation, the names shown above are used by the default Diskfile.\r"},{"line_number":121,"context_line":"\r"},{"line_number":122,"context_line":"--------------------\r"},{"line_number":123,"context_line":"Configuring Policies\r"}],"source_content_type":"text/x-rst","patch_set":13,"id":"7adec928_2bee0589","line":120,"updated":"2014-05-16 11:09:08.000000000","message":"does that mean, in other words, that the convention only applies to the default DiskFile implementation?","commit_id":"126ca8da784d87b1f5c0be934d81feef724bfd7e"},{"author":{"_account_id":7479,"name":"paul luse","email":"paul.e.luse@intel.com","username":"peluse"},"change_message_id":"fb622d4e912d2389e8cd4e9c5eb7a009985e0f0f","unresolved":false,"context_lines":[{"line_number":117,"context_line":"/async_pending\u003dN ? maps to async pending update for storage policy index #N\r"},{"line_number":118,"context_line":"\r"},{"line_number":119,"context_line":"Note that these directory names are actually owned by the specific Diskfile\r"},{"line_number":120,"context_line":"Implementation, the names shown above are used by the default Diskfile.\r"},{"line_number":121,"context_line":"\r"},{"line_number":122,"context_line":"--------------------\r"},{"line_number":123,"context_line":"Configuring Policies\r"}],"source_content_type":"text/x-rst","patch_set":13,"id":"7adec928_ca0b1f22","line":120,"in_reply_to":"7adec928_2bee0589","updated":"2014-05-19 15:15:26.000000000","message":"pretty much, at this doc level though trying to explain exactly where/how these names are constructed is probably too ambitious.  For that level of detail I think it would be best to leave it to the code","commit_id":"126ca8da784d87b1f5c0be934d81feef724bfd7e"},{"author":{"_account_id":7847,"name":"Alistair Coles","email":"alistairncoles@gmail.com","username":"acoles"},"change_message_id":"1f4330beab79dc2a991c99b5db0d1a8ddab8f1eb","unresolved":false,"context_lines":[{"line_number":131,"context_line":"See :doc:`policies_saio` for a step by step guide on adding a policy to the SAIO setup.\r"},{"line_number":132,"context_line":"\r"},{"line_number":133,"context_line":"Note that each policy has a section starting with [storage-policy:N] where N is the\r"},{"line_number":134,"context_line":"policy index/number.  There’s no reason other than readability that these be\r"},{"line_number":135,"context_line":"sequential but there are a number of rules enforced by Swift when parsing this\r"},{"line_number":136,"context_line":"file:\r"},{"line_number":137,"context_line":"\r"}],"source_content_type":"text/x-rst","patch_set":13,"id":"7adec928_cb63e118","line":134,"updated":"2014-05-16 11:09:08.000000000","message":"be good to settle on either \u0027index\u0027 or \u0027number\u0027 and use throughout","commit_id":"126ca8da784d87b1f5c0be934d81feef724bfd7e"},{"author":{"_account_id":7479,"name":"paul luse","email":"paul.e.luse@intel.com","username":"peluse"},"change_message_id":"fb622d4e912d2389e8cd4e9c5eb7a009985e0f0f","unresolved":false,"context_lines":[{"line_number":131,"context_line":"See :doc:`policies_saio` for a step by step guide on adding a policy to the SAIO setup.\r"},{"line_number":132,"context_line":"\r"},{"line_number":133,"context_line":"Note that each policy has a section starting with [storage-policy:N] where N is the\r"},{"line_number":134,"context_line":"policy index/number.  There’s no reason other than readability that these be\r"},{"line_number":135,"context_line":"sequential but there are a number of rules enforced by Swift when parsing this\r"},{"line_number":136,"context_line":"file:\r"},{"line_number":137,"context_line":"\r"}],"source_content_type":"text/x-rst","patch_set":13,"id":"7adec928_aa1fb359","line":134,"in_reply_to":"7adec928_cb63e118","updated":"2014-05-19 15:15:26.000000000","message":"Done","commit_id":"126ca8da784d87b1f5c0be934d81feef724bfd7e"},{"author":{"_account_id":7847,"name":"Alistair Coles","email":"alistairncoles@gmail.com","username":"acoles"},"change_message_id":"1f4330beab79dc2a991c99b5db0d1a8ddab8f1eb","unresolved":false,"context_lines":[{"line_number":135,"context_line":"sequential but there are a number of rules enforced by Swift when parsing this\r"},{"line_number":136,"context_line":"file:\r"},{"line_number":137,"context_line":"\r"},{"line_number":138,"context_line":"* If Policy_0 is not declared or no policies defined, Swift will create one\r"},{"line_number":139,"context_line":"* The policy index must be integer\r"},{"line_number":140,"context_line":"* If no policy is declared as the default, Policy_0 is set as the default\r"},{"line_number":141,"context_line":"* Policy indexes must be unique\r"}],"source_content_type":"text/x-rst","patch_set":13,"id":"7adec928_6b22cdba","line":138,"updated":"2014-05-16 11:09:08.000000000","message":"Up above it says we don\u0027t have to call it Policy_0, so shouldn\u0027t this be \u0027If a policy with index 0 is not declared,...\u0027 ?","commit_id":"126ca8da784d87b1f5c0be934d81feef724bfd7e"},{"author":{"_account_id":7479,"name":"paul luse","email":"paul.e.luse@intel.com","username":"peluse"},"change_message_id":"fb622d4e912d2389e8cd4e9c5eb7a009985e0f0f","unresolved":false,"context_lines":[{"line_number":135,"context_line":"sequential but there are a number of rules enforced by Swift when parsing this\r"},{"line_number":136,"context_line":"file:\r"},{"line_number":137,"context_line":"\r"},{"line_number":138,"context_line":"* If Policy_0 is not declared or no policies defined, Swift will create one\r"},{"line_number":139,"context_line":"* The policy index must be integer\r"},{"line_number":140,"context_line":"* If no policy is declared as the default, Policy_0 is set as the default\r"},{"line_number":141,"context_line":"* Policy indexes must be unique\r"}],"source_content_type":"text/x-rst","patch_set":13,"id":"7adec928_2a33a3f6","line":138,"in_reply_to":"7adec928_6b22cdba","updated":"2014-05-19 15:15:26.000000000","message":"Done","commit_id":"126ca8da784d87b1f5c0be934d81feef724bfd7e"},{"author":{"_account_id":7847,"name":"Alistair Coles","email":"alistairncoles@gmail.com","username":"acoles"},"change_message_id":"1f4330beab79dc2a991c99b5db0d1a8ddab8f1eb","unresolved":false,"context_lines":[{"line_number":136,"context_line":"file:\r"},{"line_number":137,"context_line":"\r"},{"line_number":138,"context_line":"* If Policy_0 is not declared or no policies defined, Swift will create one\r"},{"line_number":139,"context_line":"* The policy index must be integer\r"},{"line_number":140,"context_line":"* If no policy is declared as the default, Policy_0 is set as the default\r"},{"line_number":141,"context_line":"* Policy indexes must be unique\r"},{"line_number":142,"context_line":"* Policy names are required\r"}],"source_content_type":"text/x-rst","patch_set":13,"id":"7adec928_b648bc5c","line":139,"updated":"2014-05-16 11:09:08.000000000","message":"must be a positive integer, or can it be negative ?","commit_id":"126ca8da784d87b1f5c0be934d81feef724bfd7e"},{"author":{"_account_id":7479,"name":"paul luse","email":"paul.e.luse@intel.com","username":"peluse"},"change_message_id":"fb622d4e912d2389e8cd4e9c5eb7a009985e0f0f","unresolved":false,"context_lines":[{"line_number":136,"context_line":"file:\r"},{"line_number":137,"context_line":"\r"},{"line_number":138,"context_line":"* If Policy_0 is not declared or no policies defined, Swift will create one\r"},{"line_number":139,"context_line":"* The policy index must be integer\r"},{"line_number":140,"context_line":"* If no policy is declared as the default, Policy_0 is set as the default\r"},{"line_number":141,"context_line":"* Policy indexes must be unique\r"},{"line_number":142,"context_line":"* Policy names are required\r"}],"source_content_type":"text/x-rst","patch_set":13,"id":"7adec928_6a504b0b","line":139,"in_reply_to":"7adec928_b648bc5c","updated":"2014-05-19 15:15:26.000000000","message":"positive, thanks","commit_id":"126ca8da784d87b1f5c0be934d81feef724bfd7e"},{"author":{"_account_id":7847,"name":"Alistair Coles","email":"alistairncoles@gmail.com","username":"acoles"},"change_message_id":"1f4330beab79dc2a991c99b5db0d1a8ddab8f1eb","unresolved":false,"context_lines":[{"line_number":137,"context_line":"\r"},{"line_number":138,"context_line":"* If Policy_0 is not declared or no policies defined, Swift will create one\r"},{"line_number":139,"context_line":"* The policy index must be integer\r"},{"line_number":140,"context_line":"* If no policy is declared as the default, Policy_0 is set as the default\r"},{"line_number":141,"context_line":"* Policy indexes must be unique\r"},{"line_number":142,"context_line":"* Policy names are required\r"},{"line_number":143,"context_line":"* Policy names must be unique\r"}],"source_content_type":"text/x-rst","patch_set":13,"id":"7adec928_b65fdc0d","line":140,"updated":"2014-05-16 11:09:08.000000000","message":"as before ... \u0027the policy with index 0 is set as the default\u0027","commit_id":"126ca8da784d87b1f5c0be934d81feef724bfd7e"},{"author":{"_account_id":7479,"name":"paul luse","email":"paul.e.luse@intel.com","username":"peluse"},"change_message_id":"fb622d4e912d2389e8cd4e9c5eb7a009985e0f0f","unresolved":false,"context_lines":[{"line_number":137,"context_line":"\r"},{"line_number":138,"context_line":"* If Policy_0 is not declared or no policies defined, Swift will create one\r"},{"line_number":139,"context_line":"* The policy index must be integer\r"},{"line_number":140,"context_line":"* If no policy is declared as the default, Policy_0 is set as the default\r"},{"line_number":141,"context_line":"* Policy indexes must be unique\r"},{"line_number":142,"context_line":"* Policy names are required\r"},{"line_number":143,"context_line":"* Policy names must be unique\r"}],"source_content_type":"text/x-rst","patch_set":13,"id":"7adec928_ca595f36","line":140,"in_reply_to":"7adec928_b65fdc0d","updated":"2014-05-19 15:15:26.000000000","message":"Done","commit_id":"126ca8da784d87b1f5c0be934d81feef724bfd7e"},{"author":{"_account_id":7847,"name":"Alistair Coles","email":"alistairncoles@gmail.com","username":"acoles"},"change_message_id":"1f4330beab79dc2a991c99b5db0d1a8ddab8f1eb","unresolved":false,"context_lines":[{"line_number":140,"context_line":"* If no policy is declared as the default, Policy_0 is set as the default\r"},{"line_number":141,"context_line":"* Policy indexes must be unique\r"},{"line_number":142,"context_line":"* Policy names are required\r"},{"line_number":143,"context_line":"* Policy names must be unique\r"},{"line_number":144,"context_line":"* No more than 1 policy can be declared default\r"},{"line_number":145,"context_line":"* Only supported types are allowed (e.g., replication)\r"},{"line_number":146,"context_line":"\r"}],"source_content_type":"text/x-rst","patch_set":13,"id":"7adec928_b1e4463c","line":143,"updated":"2014-05-16 11:09:08.000000000","message":"might be worth mentioning if policy names are case sensitive","commit_id":"126ca8da784d87b1f5c0be934d81feef724bfd7e"},{"author":{"_account_id":7479,"name":"paul luse","email":"paul.e.luse@intel.com","username":"peluse"},"change_message_id":"fb622d4e912d2389e8cd4e9c5eb7a009985e0f0f","unresolved":false,"context_lines":[{"line_number":140,"context_line":"* If no policy is declared as the default, Policy_0 is set as the default\r"},{"line_number":141,"context_line":"* Policy indexes must be unique\r"},{"line_number":142,"context_line":"* Policy names are required\r"},{"line_number":143,"context_line":"* Policy names must be unique\r"},{"line_number":144,"context_line":"* No more than 1 policy can be declared default\r"},{"line_number":145,"context_line":"* Only supported types are allowed (e.g., replication)\r"},{"line_number":146,"context_line":"\r"}],"source_content_type":"text/x-rst","patch_set":13,"id":"7adec928_4a454f41","line":143,"in_reply_to":"7adec928_b1e4463c","updated":"2014-05-19 15:15:26.000000000","message":"Done","commit_id":"126ca8da784d87b1f5c0be934d81feef724bfd7e"},{"author":{"_account_id":7847,"name":"Alistair Coles","email":"alistairncoles@gmail.com","username":"acoles"},"change_message_id":"1f4330beab79dc2a991c99b5db0d1a8ddab8f1eb","unresolved":false,"context_lines":[{"line_number":142,"context_line":"* Policy names are required\r"},{"line_number":143,"context_line":"* Policy names must be unique\r"},{"line_number":144,"context_line":"* No more than 1 policy can be declared default\r"},{"line_number":145,"context_line":"* Only supported types are allowed (e.g., replication)\r"},{"line_number":146,"context_line":"\r"},{"line_number":147,"context_line":"There are some other considerations when managing policies:\r"},{"line_number":148,"context_line":"\r"}],"source_content_type":"text/x-rst","patch_set":13,"id":"7adec928_b6c51c5d","line":145,"updated":"2014-05-16 11:09:08.000000000","message":"what is a \u0027type\u0027? I don\u0027t think types are mentioned anywhere else","commit_id":"126ca8da784d87b1f5c0be934d81feef724bfd7e"},{"author":{"_account_id":7479,"name":"paul luse","email":"paul.e.luse@intel.com","username":"peluse"},"change_message_id":"fb622d4e912d2389e8cd4e9c5eb7a009985e0f0f","unresolved":false,"context_lines":[{"line_number":142,"context_line":"* Policy names are required\r"},{"line_number":143,"context_line":"* Policy names must be unique\r"},{"line_number":144,"context_line":"* No more than 1 policy can be declared default\r"},{"line_number":145,"context_line":"* Only supported types are allowed (e.g., replication)\r"},{"line_number":146,"context_line":"\r"},{"line_number":147,"context_line":"There are some other considerations when managing policies:\r"},{"line_number":148,"context_line":"\r"}],"source_content_type":"text/x-rst","patch_set":13,"id":"7adec928_2a8f2376","line":145,"in_reply_to":"7adec928_b6c51c5d","updated":"2014-05-19 15:15:26.000000000","message":"Done","commit_id":"126ca8da784d87b1f5c0be934d81feef724bfd7e"},{"author":{"_account_id":7847,"name":"Alistair Coles","email":"alistairncoles@gmail.com","username":"acoles"},"change_message_id":"1f4330beab79dc2a991c99b5db0d1a8ddab8f1eb","unresolved":false,"context_lines":[{"line_number":149,"context_line":"* Policy names can be changed (but be sure that users are aware!)\r"},{"line_number":150,"context_line":"* The default policy can be changed at any time\r"},{"line_number":151,"context_line":"* You cannot change the index of a policy once it has been created\r"},{"line_number":152,"context_line":"* Do not delete a policy, if one is no longer needed simply don\u0027t use it.\r"},{"line_number":153,"context_line":"* It might be a good idea to name it something unique indicating that\r"},{"line_number":154,"context_line":"* it is no longer valid, like \u0027-deprecated\u0027\r"},{"line_number":155,"context_line":"\r"}],"source_content_type":"text/x-rst","patch_set":13,"id":"7adec928_f6d88455","line":152,"updated":"2014-05-16 11:09:08.000000000","message":"Is that a MUST not delete? i.e. bad things will happen? If so maybe make the warning stronger.","commit_id":"126ca8da784d87b1f5c0be934d81feef724bfd7e"},{"author":{"_account_id":7479,"name":"paul luse","email":"paul.e.luse@intel.com","username":"peluse"},"change_message_id":"fb622d4e912d2389e8cd4e9c5eb7a009985e0f0f","unresolved":false,"context_lines":[{"line_number":149,"context_line":"* Policy names can be changed (but be sure that users are aware!)\r"},{"line_number":150,"context_line":"* The default policy can be changed at any time\r"},{"line_number":151,"context_line":"* You cannot change the index of a policy once it has been created\r"},{"line_number":152,"context_line":"* Do not delete a policy, if one is no longer needed simply don\u0027t use it.\r"},{"line_number":153,"context_line":"* It might be a good idea to name it something unique indicating that\r"},{"line_number":154,"context_line":"* it is no longer valid, like \u0027-deprecated\u0027\r"},{"line_number":155,"context_line":"\r"}],"source_content_type":"text/x-rst","patch_set":13,"id":"7adec928_caf5dfed","line":152,"in_reply_to":"7adec928_f6d88455","updated":"2014-05-19 15:15:26.000000000","message":"thanks, we\u0027ll update this once an outstanding patch lands that defines the exact behaviors","commit_id":"126ca8da784d87b1f5c0be934d81feef724bfd7e"},{"author":{"_account_id":7847,"name":"Alistair Coles","email":"alistairncoles@gmail.com","username":"acoles"},"change_message_id":"1f4330beab79dc2a991c99b5db0d1a8ddab8f1eb","unresolved":false,"context_lines":[{"line_number":152,"context_line":"* Do not delete a policy, if one is no longer needed simply don\u0027t use it.\r"},{"line_number":153,"context_line":"* It might be a good idea to name it something unique indicating that\r"},{"line_number":154,"context_line":"* it is no longer valid, like \u0027-deprecated\u0027\r"},{"line_number":155,"context_line":"\r"},{"line_number":156,"context_line":"There will be additional parameters for policies as new features are added\r"},{"line_number":157,"context_line":"(e.g., Erasure Code), but for now only a section name/index and name\r"},{"line_number":158,"context_line":"are required.  Once swift.conf is configured for a new policy, a new ring\r"}],"source_content_type":"text/x-rst","patch_set":13,"id":"7adec928_d688e824","line":155,"updated":"2014-05-16 11:09:08.000000000","message":"An example policy section would be helpful, like in the saio+policies doc","commit_id":"126ca8da784d87b1f5c0be934d81feef724bfd7e"},{"author":{"_account_id":7479,"name":"paul luse","email":"paul.e.luse@intel.com","username":"peluse"},"change_message_id":"fb622d4e912d2389e8cd4e9c5eb7a009985e0f0f","unresolved":false,"context_lines":[{"line_number":152,"context_line":"* Do not delete a policy, if one is no longer needed simply don\u0027t use it.\r"},{"line_number":153,"context_line":"* It might be a good idea to name it something unique indicating that\r"},{"line_number":154,"context_line":"* it is no longer valid, like \u0027-deprecated\u0027\r"},{"line_number":155,"context_line":"\r"},{"line_number":156,"context_line":"There will be additional parameters for policies as new features are added\r"},{"line_number":157,"context_line":"(e.g., Erasure Code), but for now only a section name/index and name\r"},{"line_number":158,"context_line":"are required.  Once swift.conf is configured for a new policy, a new ring\r"}],"source_content_type":"text/x-rst","patch_set":13,"id":"7adec928_6abdabd7","line":155,"in_reply_to":"7adec928_d688e824","updated":"2014-05-19 15:15:26.000000000","message":"Done","commit_id":"126ca8da784d87b1f5c0be934d81feef724bfd7e"}]}
