Comment 6 for bug 1484598

Revision history for this message
OpenStack Infra (hudson-openstack) wrote : Fix merged to swift (master)

Reviewed: https://review.openstack.org/215276
Committed: https://git.openstack.org/cgit/openstack/swift/commit/?id=44a861787a60346aded8be2a54ef4e16accccbb6
Submitter: Jenkins
Branch: master

commit 44a861787a60346aded8be2a54ef4e16accccbb6
Author: Alistair Coles <email address hidden>
Date: Mon Oct 5 17:40:06 2015 +0100

    Enable object server to return non-durable data

    This patch improves EC GET response handling:

    - The proxy no longer requires all object servers to have a
      durable file for the fragment archive that they return in
      response to a GET. The proxy will now be satisfied if just
      one object server has a durable file at the same timestamp
      as fragments from other object servers.

      This means that the proxy can now successfully GET an
      object that had missing durable files when it was PUT.

    - The proxy will now ensure that it has a quorum of *unique*
      fragment indexes from object servers before considering a
      GET to be successful.

    - The proxy is now able to fetch multiple fragment archives
      having different indexes from the same node. This enables
      the proxy to successfully GET an object that has some
      fragments that have landed on the same node, for example
      after a rebalance.

    This new behavior is facilitated by an exchange of new
    headers on a GET request and response between the proxy and
    object servers.

    An object server now includes with a GET (or HEAD) response:

    - X-Backend-Fragments: the value of this describes all
      fragment archive indexes that the server has for the
      object by encoding a map of the form: timestamp -> <list
      of fragment indexes>

    - X-Backend-Durable-Timestamp: the value of this is the
      internal form of the timestamp of the newest durable file
      that was found, if any.

    - X-Backend-Data-Timestamp: the value of this is the
      internal form of the timestamp of the data file that was
      used to construct the diskfile.

    A proxy server now includes with a GET request:

    - X-Backend-Fragment-Preferences: the value of this
      describes the proxy's current preference with respect to
      those fragments that it would have object servers
      return. It encodes a list of timestamp, and for each
      timestamp a list of fragment indexes that the proxy does
      NOT require (because it already has them).

      The presence of a X-Backend-Fragment-Preferences header
      (even one with an empty list as its value) will cause the
      object server to search for the most appropriate fragment
      to return, disregarding the existence or not of any
      durable file. The object server assumes that the proxy
      knows best.

    Closes-Bug: 1469094
    Closes-Bug: 1484598

    Change-Id: I2310981fd1c4622ff5d1a739cbcc59637ffe3fc3
    Co-Authored-By: Paul Luse <email address hidden>
    Co-Authored-By: Clay Gerrard <email address hidden>