)]}'
{"doc/source/admin/index.rst":[{"author":{"_account_id":15343,"name":"Tim Burke","email":"tburke@nvidia.com","username":"tburke"},"change_message_id":"4d315ab9668743c02005e712c522e48a4ab5d139","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\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d"},{"line_number":2,"context_line":"OpenStack Swift Administrator Guide"},{"line_number":3,"context_line":"\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d"},{"line_number":4,"context_line":""},{"line_number":5,"context_line":".. toctree::"}],"source_content_type":"text/x-rst","patch_set":2,"id":"3f1d235d_fc75d232","line":2,"updated":"2017-07-07 02:27:18.000000000","message":"Not \"OpenStack Object Storage Administrator Guide\"?\n\nI feel like this could use a blurb about the scope of this document, and who the target audience is.","commit_id":"4cb76a41ce0562a458154be1628b33688a0df802"}],"doc/source/admin/objectstorage-arch.rst":[{"author":{"_account_id":15343,"name":"Tim Burke","email":"tburke@nvidia.com","username":"tburke"},"change_message_id":"4d315ab9668743c02005e712c522e48a4ab5d139","unresolved":false,"context_lines":[{"line_number":38,"context_line":"machines use a moderate amount of RAM and are network I/O intensive."},{"line_number":39,"context_line":"Since these systems field each incoming API request, you should"},{"line_number":40,"context_line":"provision them with two high-throughput (10GbE) interfaces - one for the"},{"line_number":41,"context_line":"incoming ``front-end`` requests and the other for the ``back-end`` access to"},{"line_number":42,"context_line":"the object storage nodes to put and fetch data."},{"line_number":43,"context_line":""},{"line_number":44,"context_line":"Factors to consider"}],"source_content_type":"text/x-rst","patch_set":2,"id":"3f1d235d_9c0b7e8c","line":41,"range":{"start_line":41,"start_character":54,"end_line":41,"end_character":66},"updated":"2017-07-07 02:27:18.000000000","message":"The fixed-width font feels strange here.","commit_id":"4cb76a41ce0562a458154be1628b33688a0df802"},{"author":{"_account_id":15343,"name":"Tim Burke","email":"tburke@nvidia.com","username":"tburke"},"change_message_id":"4d315ab9668743c02005e712c522e48a4ab5d139","unresolved":false,"context_lines":[{"line_number":59,"context_line":"memory and CPU. Metadata needs to be readily available to return objects"},{"line_number":60,"context_line":"quickly. The object stores run services not only to field incoming"},{"line_number":61,"context_line":"requests from the access tier, but to also run replicators, auditors,"},{"line_number":62,"context_line":"and reapers. You can provision object stores provisioned with single"},{"line_number":63,"context_line":"gigabit or 10 gigabit network interface depending on the expected"},{"line_number":64,"context_line":"workload and desired performance."},{"line_number":65,"context_line":""}],"source_content_type":"text/x-rst","patch_set":2,"id":"3f1d235d_9c193ed8","line":62,"range":{"start_line":62,"start_character":31,"end_line":62,"end_character":56},"updated":"2017-07-07 02:27:18.000000000","message":"s/object stores provisioned/storage nodes/","commit_id":"4cb76a41ce0562a458154be1628b33688a0df802"},{"author":{"_account_id":15343,"name":"Tim Burke","email":"tburke@nvidia.com","username":"tburke"},"change_message_id":"4d315ab9668743c02005e712c522e48a4ab5d139","unresolved":false,"context_lines":[{"line_number":61,"context_line":"requests from the access tier, but to also run replicators, auditors,"},{"line_number":62,"context_line":"and reapers. You can provision object stores provisioned with single"},{"line_number":63,"context_line":"gigabit or 10 gigabit network interface depending on the expected"},{"line_number":64,"context_line":"workload and desired performance."},{"line_number":65,"context_line":""},{"line_number":66,"context_line":"**Object Storage (swift)**"},{"line_number":67,"context_line":""}],"source_content_type":"text/x-rst","patch_set":2,"id":"3f1d235d_1c252e09","line":64,"updated":"2017-07-07 02:27:18.000000000","message":"I\u0027d argue you still want twin NICs to better isolate replication traffic from client requests.","commit_id":"4cb76a41ce0562a458154be1628b33688a0df802"}],"doc/source/admin/objectstorage-characteristics.rst":[{"author":{"_account_id":15343,"name":"Tim Burke","email":"tburke@nvidia.com","username":"tburke"},"change_message_id":"4d315ab9668743c02005e712c522e48a4ab5d139","unresolved":false,"context_lines":[{"line_number":6,"context_line":""},{"line_number":7,"context_line":"-  All objects stored in Object Storage have a URL."},{"line_number":8,"context_line":""},{"line_number":9,"context_line":"-  All objects stored are replicated 3✕ in as-unique-as-possible zones,"},{"line_number":10,"context_line":"   which can be defined as a group of drives, a node, a rack, and so on."},{"line_number":11,"context_line":""},{"line_number":12,"context_line":"-  All objects have their own metadata."}],"source_content_type":"text/x-rst","patch_set":2,"id":"3f1d235d_e6c2e352","line":9,"range":{"start_line":9,"start_character":26,"end_line":9,"end_character":39},"updated":"2017-07-07 02:27:18.000000000","message":"\"By default\"? I feel like we need some sort of qualifier here.","commit_id":"4cb76a41ce0562a458154be1628b33688a0df802"},{"author":{"_account_id":15343,"name":"Tim Burke","email":"tburke@nvidia.com","username":"tburke"},"change_message_id":"4d315ab9668743c02005e712c522e48a4ab5d139","unresolved":false,"context_lines":[{"line_number":33,"context_line":""},{"line_number":34,"context_line":"Object Storage (swift)"},{"line_number":35,"context_line":""},{"line_number":36,"context_line":".. figure:: figures/objectstorage.png"},{"line_number":37,"context_line":""},{"line_number":38,"context_line":"Developers can either write directly to the Swift API or use one of the"},{"line_number":39,"context_line":"many client libraries that exist for all of the popular programming"}],"source_content_type":"text/x-rst","patch_set":2,"id":"3f1d235d_e6ec23bc","line":36,"updated":"2017-07-07 02:27:18.000000000","message":"I\u0027m not sure what this image adds.","commit_id":"4cb76a41ce0562a458154be1628b33688a0df802"},{"author":{"_account_id":15343,"name":"Tim Burke","email":"tburke@nvidia.com","username":"tburke"},"change_message_id":"4d315ab9668743c02005e712c522e48a4ab5d139","unresolved":false,"context_lines":[{"line_number":35,"context_line":""},{"line_number":36,"context_line":".. figure:: figures/objectstorage.png"},{"line_number":37,"context_line":""},{"line_number":38,"context_line":"Developers can either write directly to the Swift API or use one of the"},{"line_number":39,"context_line":"many client libraries that exist for all of the popular programming"},{"line_number":40,"context_line":"languages, such as Java, Python, Ruby, and C#. Amazon S3 and RackSpace"},{"line_number":41,"context_line":"Cloud Files users should be very familiar with Object Storage. Users new"},{"line_number":42,"context_line":"to object storage systems will have to adjust to a different approach"}],"source_content_type":"text/x-rst","patch_set":2,"id":"3f1d235d_a6e2abd3","line":39,"range":{"start_line":38,"start_character":61,"end_line":39,"end_character":21},"updated":"2017-07-07 02:27:18.000000000","message":"Feels like it could use a link to Associated Projects.","commit_id":"4cb76a41ce0562a458154be1628b33688a0df802"}],"doc/source/admin/objectstorage-components.rst":[{"author":{"_account_id":15343,"name":"Tim Burke","email":"tburke@nvidia.com","username":"tburke"},"change_message_id":"4d315ab9668743c02005e712c522e48a4ab5d139","unresolved":false,"context_lines":[{"line_number":14,"context_line":"   does not impact the rest of the cluster as data replicates"},{"line_number":15,"context_line":"   across zones."},{"line_number":16,"context_line":""},{"line_number":17,"context_line":"-  **Accounts and containers** - Each account and container are"},{"line_number":18,"context_line":"   individual databases that are distributed across the cluster. An"},{"line_number":19,"context_line":"   account database contains the list of containers in that account. A"},{"line_number":20,"context_line":"   container database contains the list of objects in that container."}],"source_content_type":"text/x-rst","patch_set":2,"id":"3f1d235d_a6518b38","line":17,"updated":"2017-07-07 02:27:18.000000000","message":"Here we seem to switch from describing what a thing *does* to what a thing *is*; it reads strangely.","commit_id":"4cb76a41ce0562a458154be1628b33688a0df802"},{"author":{"_account_id":15343,"name":"Tim Burke","email":"tburke@nvidia.com","username":"tburke"},"change_message_id":"4d315ab9668743c02005e712c522e48a4ab5d139","unresolved":false,"context_lines":[{"line_number":30,"context_line":""},{"line_number":31,"context_line":"**Object Storage building blocks**"},{"line_number":32,"context_line":""},{"line_number":33,"context_line":".. figure:: figures/objectstorage-buildingblocks.png"},{"line_number":34,"context_line":""},{"line_number":35,"context_line":""},{"line_number":36,"context_line":"Proxy servers"}],"source_content_type":"text/x-rst","patch_set":2,"id":"3f1d235d_813f9985","line":33,"updated":"2017-07-07 02:27:18.000000000","message":"While you *could* build your rings this way, the notion of \"zones\" in this image seems so far from normal that it\u0027s quite misleading.","commit_id":"4cb76a41ce0562a458154be1628b33688a0df802"},{"author":{"_account_id":15343,"name":"Tim Burke","email":"tburke@nvidia.com","username":"tburke"},"change_message_id":"4d315ab9668743c02005e712c522e48a4ab5d139","unresolved":false,"context_lines":[{"line_number":39,"context_line":"Proxy servers are the public face of Object Storage and handle all of"},{"line_number":40,"context_line":"the incoming API requests. Once a proxy server receives a request, it"},{"line_number":41,"context_line":"determines the storage node based on the object\u0027s URL, for example:"},{"line_number":42,"context_line":"https://swift.example.com/v1/account/container/object. Proxy servers"},{"line_number":43,"context_line":"also coordinate responses, handle failures, and coordinate timestamps."},{"line_number":44,"context_line":""},{"line_number":45,"context_line":"Proxy servers use a shared-nothing architecture and can be scaled as"}],"source_content_type":"text/x-rst","patch_set":2,"id":"3f1d235d_a1c17556","line":42,"range":{"start_line":42,"start_character":0,"end_line":42,"end_character":53},"updated":"2017-07-07 02:27:18.000000000","message":"I wonder if wrapping this with ``backticks`` would make it not-a-link...","commit_id":"4cb76a41ce0562a458154be1628b33688a0df802"},{"author":{"_account_id":15343,"name":"Tim Burke","email":"tburke@nvidia.com","username":"tburke"},"change_message_id":"4d315ab9668743c02005e712c522e48a4ab5d139","unresolved":false,"context_lines":[{"line_number":44,"context_line":""},{"line_number":45,"context_line":"Proxy servers use a shared-nothing architecture and can be scaled as"},{"line_number":46,"context_line":"needed based on projected workloads. A minimum of two proxy servers"},{"line_number":47,"context_line":"should be deployed for redundancy. If one proxy server fails, the others"},{"line_number":48,"context_line":"take over."},{"line_number":49,"context_line":""},{"line_number":50,"context_line":"For more information concerning proxy server configuration, see"},{"line_number":51,"context_line":"`Configuration Reference"}],"source_content_type":"text/x-rst","patch_set":2,"id":"3f1d235d_61e8fdb1","line":48,"range":{"start_line":47,"start_character":35,"end_line":48,"end_character":10},"updated":"2017-07-07 02:27:18.000000000","message":"Worth noting that you still need to set up your own load-balancer/fail-over system?","commit_id":"4cb76a41ce0562a458154be1628b33688a0df802"},{"author":{"_account_id":15343,"name":"Tim Burke","email":"tburke@nvidia.com","username":"tburke"},"change_message_id":"4d315ab9668743c02005e712c522e48a4ab5d139","unresolved":false,"context_lines":[{"line_number":49,"context_line":""},{"line_number":50,"context_line":"For more information concerning proxy server configuration, see"},{"line_number":51,"context_line":"`Configuration Reference"},{"line_number":52,"context_line":"\u003chttps://docs.openstack.org/ocata/config-reference/object-storage/proxy-server.html\u003e`_."},{"line_number":53,"context_line":""},{"line_number":54,"context_line":"Rings"},{"line_number":55,"context_line":"-----"}],"source_content_type":"text/x-rst","patch_set":2,"id":"3f1d235d_a10bb58b","line":52,"range":{"start_line":52,"start_character":28,"end_line":52,"end_character":33},"updated":"2017-07-07 02:27:18.000000000","message":"Can we make these internal refs now? I really don\u0027t like the idea of adding *more* hard links with OpenStack code names in them that will eventually start 404ing without us really noticing.","commit_id":"4cb76a41ce0562a458154be1628b33688a0df802"},{"author":{"_account_id":15343,"name":"Tim Burke","email":"tburke@nvidia.com","username":"tburke"},"change_message_id":"4d315ab9668743c02005e712c522e48a4ab5d139","unresolved":false,"context_lines":[{"line_number":54,"context_line":"Rings"},{"line_number":55,"context_line":"-----"},{"line_number":56,"context_line":""},{"line_number":57,"context_line":"A ring represents a mapping between the names of entities stored on disks"},{"line_number":58,"context_line":"and their physical locations. There are separate rings for accounts,"},{"line_number":59,"context_line":"containers, and objects. When other components need to perform any"},{"line_number":60,"context_line":"operation on an object, container, or account, they need to interact"},{"line_number":61,"context_line":"with the appropriate ring to determine their location in the cluster."}],"source_content_type":"text/x-rst","patch_set":2,"id":"3f1d235d_a1305557","line":58,"range":{"start_line":57,"start_character":36,"end_line":58,"end_character":28},"updated":"2017-07-07 02:27:18.000000000","message":"\"the names of entities stored in the cluster and their physical locations on disks\" might be better?","commit_id":"4cb76a41ce0562a458154be1628b33688a0df802"},{"author":{"_account_id":15343,"name":"Tim Burke","email":"tburke@nvidia.com","username":"tburke"},"change_message_id":"4d315ab9668743c02005e712c522e48a4ab5d139","unresolved":false,"context_lines":[{"line_number":58,"context_line":"and their physical locations. There are separate rings for accounts,"},{"line_number":59,"context_line":"containers, and objects. When other components need to perform any"},{"line_number":60,"context_line":"operation on an object, container, or account, they need to interact"},{"line_number":61,"context_line":"with the appropriate ring to determine their location in the cluster."},{"line_number":62,"context_line":""},{"line_number":63,"context_line":"The ring maintains this mapping using zones, devices, partitions, and"},{"line_number":64,"context_line":"replicas. Each partition in the ring is replicated, by default, three"}],"source_content_type":"text/x-rst","patch_set":2,"id":"3f1d235d_21256509","line":61,"range":{"start_line":61,"start_character":39,"end_line":61,"end_character":44},"updated":"2017-07-07 02:27:18.000000000","message":"The antecedent is ambiguous.","commit_id":"4cb76a41ce0562a458154be1628b33688a0df802"},{"author":{"_account_id":15343,"name":"Tim Burke","email":"tburke@nvidia.com","username":"tburke"},"change_message_id":"4d315ab9668743c02005e712c522e48a4ab5d139","unresolved":false,"context_lines":[{"line_number":60,"context_line":"operation on an object, container, or account, they need to interact"},{"line_number":61,"context_line":"with the appropriate ring to determine their location in the cluster."},{"line_number":62,"context_line":""},{"line_number":63,"context_line":"The ring maintains this mapping using zones, devices, partitions, and"},{"line_number":64,"context_line":"replicas. Each partition in the ring is replicated, by default, three"},{"line_number":65,"context_line":"times across the cluster, and partition locations are stored in the"},{"line_number":66,"context_line":"mapping maintained by the ring. The ring is also responsible for"}],"source_content_type":"text/x-rst","patch_set":2,"id":"3f1d235d_e16f6d25","line":63,"range":{"start_line":63,"start_character":38,"end_line":63,"end_character":43},"updated":"2017-07-07 02:27:18.000000000","message":"Kinda, I guess? Not really. The significant part is (partition, replica) -\u003e device.","commit_id":"4cb76a41ce0562a458154be1628b33688a0df802"},{"author":{"_account_id":15343,"name":"Tim Burke","email":"tburke@nvidia.com","username":"tburke"},"change_message_id":"4d315ab9668743c02005e712c522e48a4ab5d139","unresolved":false,"context_lines":[{"line_number":64,"context_line":"replicas. Each partition in the ring is replicated, by default, three"},{"line_number":65,"context_line":"times across the cluster, and partition locations are stored in the"},{"line_number":66,"context_line":"mapping maintained by the ring. The ring is also responsible for"},{"line_number":67,"context_line":"determining which devices are used for handoff in failure scenarios."},{"line_number":68,"context_line":""},{"line_number":69,"context_line":"Data can be isolated into zones in the ring. Each partition replica is"},{"line_number":70,"context_line":"guaranteed to reside in a different zone. A zone could represent a"}],"source_content_type":"text/x-rst","patch_set":2,"id":"3f1d235d_a19a9510","line":67,"range":{"start_line":67,"start_character":35,"end_line":67,"end_character":46},"updated":"2017-07-07 02:27:18.000000000","message":"\"as handoffs\", maybe? *shrug*","commit_id":"4cb76a41ce0562a458154be1628b33688a0df802"},{"author":{"_account_id":15343,"name":"Tim Burke","email":"tburke@nvidia.com","username":"tburke"},"change_message_id":"4d315ab9668743c02005e712c522e48a4ab5d139","unresolved":false,"context_lines":[{"line_number":66,"context_line":"mapping maintained by the ring. The ring is also responsible for"},{"line_number":67,"context_line":"determining which devices are used for handoff in failure scenarios."},{"line_number":68,"context_line":""},{"line_number":69,"context_line":"Data can be isolated into zones in the ring. Each partition replica is"},{"line_number":70,"context_line":"guaranteed to reside in a different zone. A zone could represent a"},{"line_number":71,"context_line":"drive, a server, a cabinet, a switch, or even a data center."},{"line_number":72,"context_line":""},{"line_number":73,"context_line":"The partitions of the ring are equally divided among all of the devices"}],"source_content_type":"text/x-rst","patch_set":2,"id":"3f1d235d_218685ba","line":70,"range":{"start_line":69,"start_character":45,"end_line":70,"end_character":40},"updated":"2017-07-07 02:27:18.000000000","message":"Weeeellllll... no. Not really, no.","commit_id":"4cb76a41ce0562a458154be1628b33688a0df802"},{"author":{"_account_id":15343,"name":"Tim Burke","email":"tburke@nvidia.com","username":"tburke"},"change_message_id":"4d315ab9668743c02005e712c522e48a4ab5d139","unresolved":false,"context_lines":[{"line_number":70,"context_line":"guaranteed to reside in a different zone. A zone could represent a"},{"line_number":71,"context_line":"drive, a server, a cabinet, a switch, or even a data center."},{"line_number":72,"context_line":""},{"line_number":73,"context_line":"The partitions of the ring are equally divided among all of the devices"},{"line_number":74,"context_line":"in the Object Storage installation. When partitions need to be moved"},{"line_number":75,"context_line":"around (for example, if a device is added to the cluster), the ring"},{"line_number":76,"context_line":"ensures that a minimum number of partitions are moved at a time, and"}],"source_content_type":"text/x-rst","patch_set":2,"id":"3f1d235d_616ebd00","line":73,"range":{"start_line":73,"start_character":0,"end_line":73,"end_character":71},"updated":"2017-07-07 02:27:18.000000000","message":"This seems to be contradicted by the next paragraph.","commit_id":"4cb76a41ce0562a458154be1628b33688a0df802"},{"author":{"_account_id":15343,"name":"Tim Burke","email":"tburke@nvidia.com","username":"tburke"},"change_message_id":"4d315ab9668743c02005e712c522e48a4ab5d139","unresolved":false,"context_lines":[{"line_number":90,"context_line":""},{"line_number":91,"context_line":".. figure:: figures/objectstorage-ring.png"},{"line_number":92,"context_line":""},{"line_number":93,"context_line":"These rings are externally managed. The server processes themselves"},{"line_number":94,"context_line":"do not modify the rings, they are instead given new rings modified by"},{"line_number":95,"context_line":"other tools."},{"line_number":96,"context_line":""},{"line_number":97,"context_line":"The ring uses a configurable number of bits from an ``MD5`` hash for a path"},{"line_number":98,"context_line":"as a partition index that designates a device. The number of bits kept"},{"line_number":99,"context_line":"from the hash is known as the partition power, and 2 to the partition"},{"line_number":100,"context_line":"power indicates the partition count. Partitioning the full ``MD5`` hash ring"},{"line_number":101,"context_line":"allows other parts of the cluster to work in batches of items at once"},{"line_number":102,"context_line":"which ends up either more efficient or at least less complex than"},{"line_number":103,"context_line":"working with each item separately or the entire cluster all at once."},{"line_number":104,"context_line":""},{"line_number":105,"context_line":"Another configurable value is the replica count, which indicates how"},{"line_number":106,"context_line":"many of the partition-device assignments make up a single ring. For a"},{"line_number":107,"context_line":"given partition number, each replica\u0027s device will not be in the same"},{"line_number":108,"context_line":"zone as any other replica\u0027s device. Zones can be used to group devices"},{"line_number":109,"context_line":"based on physical locations, power separations, network separations, or"},{"line_number":110,"context_line":"any other attribute that would improve the availability of multiple"},{"line_number":111,"context_line":"replicas at the same time."},{"line_number":112,"context_line":""},{"line_number":113,"context_line":"Zones"},{"line_number":114,"context_line":"-----"}],"source_content_type":"text/x-rst","patch_set":2,"id":"3f1d235d_7c078219","line":111,"range":{"start_line":93,"start_character":0,"end_line":111,"end_character":26},"updated":"2017-07-07 02:27:18.000000000","message":"This all seems to be more or less lifted from https://docs.openstack.org/swift/latest/overview_ring.html -- better to just link?","commit_id":"4cb76a41ce0562a458154be1628b33688a0df802"},{"author":{"_account_id":15343,"name":"Tim Burke","email":"tburke@nvidia.com","username":"tburke"},"change_message_id":"4d315ab9668743c02005e712c522e48a4ab5d139","unresolved":false,"context_lines":[{"line_number":165,"context_line":""},{"line_number":166,"context_line":"System replicators and object uploads/downloads operate on partitions."},{"line_number":167,"context_line":"As the system scales up, its behavior continues to be predictable"},{"line_number":168,"context_line":"because the number of partitions is a fixed number."},{"line_number":169,"context_line":""},{"line_number":170,"context_line":"Implementing a partition is conceptually simple, a partition is just a"},{"line_number":171,"context_line":"directory sitting on a disk with a corresponding hash table of what it"}],"source_content_type":"text/x-rst","patch_set":2,"id":"3f1d235d_bc787a8f","line":168,"updated":"2017-07-07 02:27:18.000000000","message":"I feel like this paragraph could use some rewording.","commit_id":"4cb76a41ce0562a458154be1628b33688a0df802"},{"author":{"_account_id":15343,"name":"Tim Burke","email":"tburke@nvidia.com","username":"tburke"},"change_message_id":"4d315ab9668743c02005e712c522e48a4ab5d139","unresolved":false,"context_lines":[{"line_number":167,"context_line":"As the system scales up, its behavior continues to be predictable"},{"line_number":168,"context_line":"because the number of partitions is a fixed number."},{"line_number":169,"context_line":""},{"line_number":170,"context_line":"Implementing a partition is conceptually simple, a partition is just a"},{"line_number":171,"context_line":"directory sitting on a disk with a corresponding hash table of what it"},{"line_number":172,"context_line":"contains."},{"line_number":173,"context_line":""}],"source_content_type":"text/x-rst","patch_set":2,"id":"3f1d235d_7ca30201","line":170,"range":{"start_line":170,"start_character":47,"end_line":170,"end_character":48},"updated":"2017-07-07 02:27:18.000000000","message":"s/,/:/","commit_id":"4cb76a41ce0562a458154be1628b33688a0df802"},{"author":{"_account_id":15343,"name":"Tim Burke","email":"tburke@nvidia.com","username":"tburke"},"change_message_id":"4d315ab9668743c02005e712c522e48a4ab5d139","unresolved":false,"context_lines":[{"line_number":189,"context_line":""},{"line_number":190,"context_line":"The replicator knows if replication needs to take place by examining"},{"line_number":191,"context_line":"hashes. A hash file is created for each partition, which contains hashes"},{"line_number":192,"context_line":"of each directory in the partition. Each of the three hash files is"},{"line_number":193,"context_line":"compared. For a given partition, the hash files for each of the"},{"line_number":194,"context_line":"partition\u0027s copies are compared. If the hashes are different, then it is"},{"line_number":195,"context_line":"time to replicate, and the directory that needs to be replicated is"},{"line_number":196,"context_line":"copied over."},{"line_number":197,"context_line":""}],"source_content_type":"text/x-rst","patch_set":2,"id":"3f1d235d_bcd4fa48","line":194,"range":{"start_line":192,"start_character":36,"end_line":194,"end_character":32},"updated":"2017-07-07 02:27:18.000000000","message":"These two are redundant.","commit_id":"4cb76a41ce0562a458154be1628b33688a0df802"},{"author":{"_account_id":15343,"name":"Tim Burke","email":"tburke@nvidia.com","username":"tburke"},"change_message_id":"4d315ab9668743c02005e712c522e48a4ab5d139","unresolved":false,"context_lines":[{"line_number":200,"context_line":"TCP connections, which is inefficient) and there is a consistent number"},{"line_number":201,"context_line":"of hashes to compare."},{"line_number":202,"context_line":""},{"line_number":203,"context_line":"The cluster eventually has a consistent behavior where the newest data"},{"line_number":204,"context_line":"has a priority."},{"line_number":205,"context_line":""},{"line_number":206,"context_line":""}],"source_content_type":"text/x-rst","patch_set":2,"id":"3f1d235d_1c71ae76","line":203,"range":{"start_line":203,"start_character":12,"end_line":203,"end_character":48},"updated":"2017-07-07 02:27:18.000000000","message":"s/eventually has a consistent behavior/has an eventually-consistent behavior/\n\nI don\u0027t think it quite means the same thing otherwise.","commit_id":"4cb76a41ce0562a458154be1628b33688a0df802"},{"author":{"_account_id":15343,"name":"Tim Burke","email":"tburke@nvidia.com","username":"tburke"},"change_message_id":"4d315ab9668743c02005e712c522e48a4ab5d139","unresolved":false,"context_lines":[{"line_number":221,"context_line":"and introduce the components."},{"line_number":222,"context_line":""},{"line_number":223,"context_line":""},{"line_number":224,"context_line":"Upload"},{"line_number":225,"context_line":"~~~~~~"},{"line_number":226,"context_line":""},{"line_number":227,"context_line":"A client uses the REST API to make a HTTP request to PUT an object into"}],"source_content_type":"text/x-rst","patch_set":2,"id":"3f1d235d_1cf64ed8","line":224,"range":{"start_line":224,"start_character":0,"end_line":224,"end_character":6},"updated":"2017-07-07 02:27:18.000000000","message":"This isn\u0027t a use-case, it\u0027s an action. A use-case would be something like \"wanting to store a backup\" which may involve actions like creating containers or uploading objects.","commit_id":"4cb76a41ce0562a458154be1628b33688a0df802"},{"author":{"_account_id":15343,"name":"Tim Burke","email":"tburke@nvidia.com","username":"tburke"},"change_message_id":"4d315ab9668743c02005e712c522e48a4ab5d139","unresolved":false,"context_lines":[{"line_number":235,"context_line":""},{"line_number":236,"context_line":"The data is then sent to each storage node where it is placed in the"},{"line_number":237,"context_line":"appropriate partition. At least two of the three writes must be"},{"line_number":238,"context_line":"successful before the client is notified that the upload was successful."},{"line_number":239,"context_line":""},{"line_number":240,"context_line":"Next, the container database is updated asynchronously to reflect that"},{"line_number":241,"context_line":"there is a new object in it."}],"source_content_type":"text/x-rst","patch_set":2,"id":"3f1d235d_3cd22a29","line":238,"updated":"2017-07-07 02:27:18.000000000","message":"\"In the event of failures, ...\"","commit_id":"4cb76a41ce0562a458154be1628b33688a0df802"},{"author":{"_account_id":15343,"name":"Tim Burke","email":"tburke@nvidia.com","username":"tburke"},"change_message_id":"4d315ab9668743c02005e712c522e48a4ab5d139","unresolved":false,"context_lines":[{"line_number":252,"context_line":"~~~~~~~~"},{"line_number":253,"context_line":""},{"line_number":254,"context_line":"A request comes in for an account/container/object. Using the same"},{"line_number":255,"context_line":"consistent hashing, the partition name is generated. A lookup in the"},{"line_number":256,"context_line":"ring reveals which storage nodes contain that partition. A request is"},{"line_number":257,"context_line":"made to one of the storage nodes to fetch the object and, if that fails,"},{"line_number":258,"context_line":"requests are made to the other nodes."}],"source_content_type":"text/x-rst","patch_set":2,"id":"3f1d235d_3c246a5d","line":255,"range":{"start_line":255,"start_character":34,"end_line":255,"end_character":38},"updated":"2017-07-07 02:27:18.000000000","message":"We\u0027ve referred to (at least) a \"partition index\", \"partition number\", and now \"partition name\" -- we should pick one term and stick to it.","commit_id":"4cb76a41ce0562a458154be1628b33688a0df802"}],"doc/source/admin/objectstorage-features.rst":[{"author":{"_account_id":15343,"name":"Tim Burke","email":"tburke@nvidia.com","username":"tburke"},"change_message_id":"4d315ab9668743c02005e712c522e48a4ab5d139","unresolved":false,"context_lines":[{"line_number":10,"context_line":"     - Benefits"},{"line_number":11,"context_line":"   * - Leverages commodity hardware"},{"line_number":12,"context_line":"     - No lock-in, lower price/GB."},{"line_number":13,"context_line":"   * - HDD/node failure agnostic"},{"line_number":14,"context_line":"     - Self-healing, reliable, data redundancy protects from failures."},{"line_number":15,"context_line":"   * - Unlimited storage"},{"line_number":16,"context_line":"     - Large and flat namespace, highly scalable read/write access,"}],"source_content_type":"text/x-rst","patch_set":2,"id":"3f1d235d_4643d742","line":13,"range":{"start_line":13,"start_character":7,"end_line":13,"end_character":32},"updated":"2017-07-07 02:27:18.000000000","message":"I don\u0027t know what this means. \"HDD agnostic\" would make some amount of sense, but seems to fall under the above \"Leverages commodity hardware\" point. Are we looking for \"Fault tolerant\"?","commit_id":"4cb76a41ce0562a458154be1628b33688a0df802"},{"author":{"_account_id":15343,"name":"Tim Burke","email":"tburke@nvidia.com","username":"tburke"},"change_message_id":"4d315ab9668743c02005e712c522e48a4ab5d139","unresolved":false,"context_lines":[{"line_number":26,"context_line":"       RAID)"},{"line_number":27,"context_line":"     - A configurable number of accounts, containers and object copies"},{"line_number":28,"context_line":"       for high availability."},{"line_number":29,"context_line":"   * - Easily add capacity (unlike RAID resize)"},{"line_number":30,"context_line":"     - Elastic data scaling with ease."},{"line_number":31,"context_line":"   * - No central database"},{"line_number":32,"context_line":"     - Higher performance, no bottlenecks."}],"source_content_type":"text/x-rst","patch_set":2,"id":"3f1d235d_e6b1c345","line":29,"range":{"start_line":29,"start_character":28,"end_line":29,"end_character":45},"updated":"2017-07-07 02:27:18.000000000","message":"This seems like a strange comparison to make...","commit_id":"4cb76a41ce0562a458154be1628b33688a0df802"},{"author":{"_account_id":15343,"name":"Tim Burke","email":"tburke@nvidia.com","username":"tburke"},"change_message_id":"4d315ab9668743c02005e712c522e48a4ab5d139","unresolved":false,"context_lines":[{"line_number":30,"context_line":"     - Elastic data scaling with ease."},{"line_number":31,"context_line":"   * - No central database"},{"line_number":32,"context_line":"     - Higher performance, no bottlenecks."},{"line_number":33,"context_line":"   * - RAID not required"},{"line_number":34,"context_line":"     - Handle many small, random reads and writes efficiently."},{"line_number":35,"context_line":"   * - Built-in management utilities"},{"line_number":36,"context_line":"     - Account management: Create, add, verify, and delete users;"}],"source_content_type":"text/x-rst","patch_set":2,"id":"3f1d235d_46df5768","line":33,"range":{"start_line":33,"start_character":7,"end_line":33,"end_character":24},"updated":"2017-07-07 02:27:18.000000000","message":"...and we just keep coming back to it! Is this a thing that people think about? And how does this tie in to small-object efficiency?","commit_id":"4cb76a41ce0562a458154be1628b33688a0df802"},{"author":{"_account_id":15343,"name":"Tim Burke","email":"tburke@nvidia.com","username":"tburke"},"change_message_id":"4d315ab9668743c02005e712c522e48a4ab5d139","unresolved":false,"context_lines":[{"line_number":33,"context_line":"   * - RAID not required"},{"line_number":34,"context_line":"     - Handle many small, random reads and writes efficiently."},{"line_number":35,"context_line":"   * - Built-in management utilities"},{"line_number":36,"context_line":"     - Account management: Create, add, verify, and delete users;"},{"line_number":37,"context_line":"       Container management: Upload, download, and verify; Monitoring:"},{"line_number":38,"context_line":"       Capacity, host, network, log trawling, and cluster health."},{"line_number":39,"context_line":"   * - Drive auditing"}],"source_content_type":"text/x-rst","patch_set":2,"id":"3f1d235d_e6df8363","line":36,"range":{"start_line":36,"start_character":7,"end_line":36,"end_character":64},"updated":"2017-07-07 02:27:18.000000000","message":"This *really* needs some better delineation between \"account\" and \"user\"","commit_id":"4cb76a41ce0562a458154be1628b33688a0df802"},{"author":{"_account_id":15343,"name":"Tim Burke","email":"tburke@nvidia.com","username":"tburke"},"change_message_id":"4d315ab9668743c02005e712c522e48a4ab5d139","unresolved":false,"context_lines":[{"line_number":34,"context_line":"     - Handle many small, random reads and writes efficiently."},{"line_number":35,"context_line":"   * - Built-in management utilities"},{"line_number":36,"context_line":"     - Account management: Create, add, verify, and delete users;"},{"line_number":37,"context_line":"       Container management: Upload, download, and verify; Monitoring:"},{"line_number":38,"context_line":"       Capacity, host, network, log trawling, and cluster health."},{"line_number":39,"context_line":"   * - Drive auditing"},{"line_number":40,"context_line":"     - Detect drive failures preempting data corruption."}],"source_content_type":"text/x-rst","patch_set":2,"id":"3f1d235d_c63927a4","line":37,"range":{"start_line":37,"start_character":51,"end_line":37,"end_character":57},"updated":"2017-07-07 02:27:18.000000000","message":"What does this mean? Come to think about it, for this whole subclause, are we talking about a container or the objects within a container?","commit_id":"4cb76a41ce0562a458154be1628b33688a0df802"},{"author":{"_account_id":15343,"name":"Tim Burke","email":"tburke@nvidia.com","username":"tburke"},"change_message_id":"4d315ab9668743c02005e712c522e48a4ab5d139","unresolved":false,"context_lines":[{"line_number":42,"context_line":"     - Users can set an expiration time or a TTL on an object to"},{"line_number":43,"context_line":"       control access."},{"line_number":44,"context_line":"   * - Direct object access"},{"line_number":45,"context_line":"     - Enable direct browser access to content, such as for a control"},{"line_number":46,"context_line":"       panel."},{"line_number":47,"context_line":"   * - Realtime visibility into client requests"},{"line_number":48,"context_line":"     - Know what users are requesting."},{"line_number":49,"context_line":"   * - Supports S3 API"}],"source_content_type":"text/x-rst","patch_set":2,"id":"3f1d235d_c66247ae","line":46,"range":{"start_line":45,"start_character":48,"end_line":46,"end_character":12},"updated":"2017-07-07 02:27:18.000000000","message":"I... what?","commit_id":"4cb76a41ce0562a458154be1628b33688a0df802"},{"author":{"_account_id":15343,"name":"Tim Burke","email":"tburke@nvidia.com","username":"tburke"},"change_message_id":"4d315ab9668743c02005e712c522e48a4ab5d139","unresolved":false,"context_lines":[{"line_number":46,"context_line":"       panel."},{"line_number":47,"context_line":"   * - Realtime visibility into client requests"},{"line_number":48,"context_line":"     - Know what users are requesting."},{"line_number":49,"context_line":"   * - Supports S3 API"},{"line_number":50,"context_line":"     - Utilize tools that were designed for the popular S3 API."},{"line_number":51,"context_line":"   * - Restrict containers per account"},{"line_number":52,"context_line":"     - Limit access to control usage by user."}],"source_content_type":"text/x-rst","patch_set":2,"id":"3f1d235d_46763772","line":49,"updated":"2017-07-07 02:27:18.000000000","message":"May be worth pointing out that this requires an additional package.","commit_id":"4cb76a41ce0562a458154be1628b33688a0df802"},{"author":{"_account_id":15343,"name":"Tim Burke","email":"tburke@nvidia.com","username":"tburke"},"change_message_id":"4d315ab9668743c02005e712c522e48a4ab5d139","unresolved":false,"context_lines":[{"line_number":48,"context_line":"     - Know what users are requesting."},{"line_number":49,"context_line":"   * - Supports S3 API"},{"line_number":50,"context_line":"     - Utilize tools that were designed for the popular S3 API."},{"line_number":51,"context_line":"   * - Restrict containers per account"},{"line_number":52,"context_line":"     - Limit access to control usage by user."},{"line_number":53,"context_line":"   * - Support for NetApp, Nexenta, Solidfire"},{"line_number":54,"context_line":"     - Unified support for block volumes using a variety of storage"},{"line_number":55,"context_line":"       systems."}],"source_content_type":"text/x-rst","patch_set":2,"id":"3f1d235d_e66663bb","line":52,"range":{"start_line":51,"start_character":7,"end_line":52,"end_character":45},"updated":"2017-07-07 02:27:18.000000000","message":"Huh? Are we talking about quotas?","commit_id":"4cb76a41ce0562a458154be1628b33688a0df802"},{"author":{"_account_id":15343,"name":"Tim Burke","email":"tburke@nvidia.com","username":"tburke"},"change_message_id":"4d315ab9668743c02005e712c522e48a4ab5d139","unresolved":false,"context_lines":[{"line_number":50,"context_line":"     - Utilize tools that were designed for the popular S3 API."},{"line_number":51,"context_line":"   * - Restrict containers per account"},{"line_number":52,"context_line":"     - Limit access to control usage by user."},{"line_number":53,"context_line":"   * - Support for NetApp, Nexenta, Solidfire"},{"line_number":54,"context_line":"     - Unified support for block volumes using a variety of storage"},{"line_number":55,"context_line":"       systems."},{"line_number":56,"context_line":"   * - Snapshot and backup API for block volumes."},{"line_number":57,"context_line":"     - Data protection and recovery for VM data."},{"line_number":58,"context_line":"   * - Standalone volume API available"}],"source_content_type":"text/x-rst","patch_set":2,"id":"3f1d235d_86268f67","line":55,"range":{"start_line":53,"start_character":7,"end_line":55,"end_character":15},"updated":"2017-07-07 02:27:18.000000000","message":"Seems strange to be calling out these products. Do we mean this in the sense that we don\u0027t really care *what* block storage you\u0027re using? This seems at odds with the \"Leverages commodity hardware\" line...","commit_id":"4cb76a41ce0562a458154be1628b33688a0df802"},{"author":{"_account_id":15343,"name":"Tim Burke","email":"tburke@nvidia.com","username":"tburke"},"change_message_id":"4d315ab9668743c02005e712c522e48a4ab5d139","unresolved":false,"context_lines":[{"line_number":53,"context_line":"   * - Support for NetApp, Nexenta, Solidfire"},{"line_number":54,"context_line":"     - Unified support for block volumes using a variety of storage"},{"line_number":55,"context_line":"       systems."},{"line_number":56,"context_line":"   * - Snapshot and backup API for block volumes."},{"line_number":57,"context_line":"     - Data protection and recovery for VM data."},{"line_number":58,"context_line":"   * - Standalone volume API available"},{"line_number":59,"context_line":"     - Separate endpoint and API for integration with other compute"},{"line_number":60,"context_line":"       systems."},{"line_number":61,"context_line":"   * - Integration with Compute"},{"line_number":62,"context_line":"     -  Fully integrated with Compute for attaching block volumes and"},{"line_number":63,"context_line":"        reporting on usage."}],"source_content_type":"text/x-rst","patch_set":2,"id":"3f1d235d_e6e9c3e2","line":63,"range":{"start_line":56,"start_character":7,"end_line":63,"end_character":27},"updated":"2017-07-07 02:27:18.000000000","message":"Wat.\n\nWe must\u0027ve picked up some Cinder bullet points.","commit_id":"4cb76a41ce0562a458154be1628b33688a0df802"}],"doc/source/admin/objectstorage-troubleshoot.rst":[{"author":{"_account_id":15343,"name":"Tim Burke","email":"tburke@nvidia.com","username":"tburke"},"change_message_id":"4d315ab9668743c02005e712c522e48a4ab5d139","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\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d"},{"line_number":2,"context_line":"Troubleshoot Object Storage"},{"line_number":3,"context_line":"\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d"},{"line_number":4,"context_line":""},{"line_number":5,"context_line":"For Object Storage, everything is logged in ``/var/log/syslog`` (or"}],"source_content_type":"text/x-rst","patch_set":2,"id":"3f1d235d_7c97823b","line":2,"updated":"2017-07-07 02:27:18.000000000","message":"How much of this can we replace with links to the ops runbook?","commit_id":"4cb76a41ce0562a458154be1628b33688a0df802"}],"doc/source/admin/objectstorage.rst":[{"author":{"_account_id":2472,"name":"Doug Hellmann","email":"dhellmann@redhat.com","username":"doug-hellmann"},"change_message_id":"e77fde911ebdabc324fc18c4fcbeea7cedd21fb5","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":1,"id":"3f1d235d_d0be7dac","updated":"2017-07-06 23:11:21.000000000","message":"Unless you anticipate adding more files that need to be similarly separated with a different file prefix, you could just put this content in index.rst.","commit_id":"8cc25f0368ec675b09adc3d97bb83ce9fcf4cf54"}],"doc/source/index.rst":[{"author":{"_account_id":15343,"name":"Tim Burke","email":"tburke@nvidia.com","username":"tburke"},"change_message_id":"4d315ab9668743c02005e712c522e48a4ab5d139","unresolved":false,"context_lines":[{"line_number":93,"context_line":"    replication_network"},{"line_number":94,"context_line":"    logs"},{"line_number":95,"context_line":"    ops_runbook/index"},{"line_number":96,"context_line":"    admin/index"},{"line_number":97,"context_line":""},{"line_number":98,"context_line":"Object Storage v1 REST API Documentation"},{"line_number":99,"context_line":"\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d"}],"source_content_type":"text/x-rst","patch_set":2,"id":"3f1d235d_9c513e39","line":96,"updated":"2017-07-07 02:27:18.000000000","message":"How much does this (the \"OpenStack Swift Administrator Guide\") overlap with the \"Administrator’s Guide\" four lines above? I feel like this is going to add confusion, at least in the short-term. What\u0027s the longer-term plan for these documents?","commit_id":"4cb76a41ce0562a458154be1628b33688a0df802"}],"setup.cfg":[{"author":{"_account_id":2472,"name":"Doug Hellmann","email":"dhellmann@redhat.com","username":"doug-hellmann"},"change_message_id":"e77fde911ebdabc324fc18c4fcbeea7cedd21fb5","unresolved":false,"context_lines":[{"line_number":105,"context_line":"all_files \u003d 1"},{"line_number":106,"context_line":"build-dir \u003d doc/build"},{"line_number":107,"context_line":"source-dir \u003d doc/source"},{"line_number":108,"context_line":"warning-is-error \u003d 1"},{"line_number":109,"context_line":""},{"line_number":110,"context_line":"[egg_info]"},{"line_number":111,"context_line":"tag_build \u003d"}],"source_content_type":"text/x-ttcn-cfg","patch_set":1,"id":"3f1d235d_b0bae1bd","line":108,"updated":"2017-07-06 23:11:21.000000000","message":"You might want to turn this back off until the pyeclib warning is resolved. Anything logged at warning level during the doc build will trigger a failure.","commit_id":"8cc25f0368ec675b09adc3d97bb83ce9fcf4cf54"},{"author":{"_account_id":330,"name":"John Dickinson","email":"me@not.mn","username":"notmyname"},"change_message_id":"314d11c49cd2b733036718a9deac8c386c9ac15d","unresolved":false,"context_lines":[{"line_number":105,"context_line":"all_files \u003d 1"},{"line_number":106,"context_line":"build-dir \u003d doc/build"},{"line_number":107,"context_line":"source-dir \u003d doc/source"},{"line_number":108,"context_line":"warning-is-error \u003d 1"},{"line_number":109,"context_line":""},{"line_number":110,"context_line":"[egg_info]"},{"line_number":111,"context_line":"tag_build \u003d"}],"source_content_type":"text/x-ttcn-cfg","patch_set":1,"id":"3f1d235d_8b58daf9","line":108,"in_reply_to":"3f1d235d_b0bae1bd","updated":"2017-07-06 23:42:56.000000000","message":"ah yes, we\u0027ve been dealing with that one for a long time\n\nhttps://review.openstack.org/#/c/469314/","commit_id":"8cc25f0368ec675b09adc3d97bb83ce9fcf4cf54"}]}
