Blame doc/protocol-binary-range.xml

Packit Service 584ef9
Packit Service 584ef9
Packit Service 584ef9
Packit Service 584ef9
Packit Service 584ef9
Packit Service 584ef9
Packit Service 584ef9
Packit Service 584ef9
Packit Service 584ef9
Packit Service 584ef9
<rfc category="info" docName="draft-stone-memcache-udp-01" ipr="trust200902">
Packit Service 584ef9
Packit Service 584ef9
  <front>
Packit Service 584ef9
Packit Service 584ef9
    <title abbrev="Memcache Over UDP"> Memcache Binary Protocol: Extensions for UDP </title>
Packit Service 584ef9
Packit Service 584ef9
    <author fullname="Aaron Stone" surname="Aaron Stone" role="editor">
Packit Service 584ef9
      <organization>Six Apart, Ltd.</organization>
Packit Service 584ef9
      <address>
Packit Service 584ef9
        <postal>
Packit Service 584ef9
          <street>548 4th Street</street>
Packit Service 584ef9
          <city>San Francisco</city>
Packit Service 584ef9
          <region>CA</region>
Packit Service 584ef9
          94107
Packit Service 584ef9
          <country>USA</country>
Packit Service 584ef9
        </postal>
Packit Service 584ef9
        <email>aaron@serendipity.palo-alto.ca.us</email>
Packit Service 584ef9
      </address>
Packit Service 584ef9
    </author>
Packit Service 584ef9
Packit Service 584ef9
    <date day="14" month="December" year="2007" />
Packit Service 584ef9
Packit Service 584ef9
    <area>Applications</area>
Packit Service 584ef9
Packit Service 584ef9
    <keyword>memcache memcached cache udp</keyword>
Packit Service 584ef9
Packit Service 584ef9
    <abstract>
Packit Service 584ef9
      <t>
Packit Service 584ef9
      This memo explains extensions to the memcache binary protocol for use in a UDP environment.
Packit Service 584ef9
      </t>
Packit Service 584ef9
Packit Service 584ef9
      <t>
Packit Service 584ef9
      Memcache is a high performance key-value cache. It is intentionally a
Packit Service 584ef9
      dumb cache, optimized for speed only. Applications using memcache do
Packit Service 584ef9
      not rely on it for data -- a persistent database with guaranteed reliability
Packit Service 584ef9
      is strongly recommended -- but applications can run much faster when
Packit Service 584ef9
      cached data is available in memcache.
Packit Service 584ef9
      </t>
Packit Service 584ef9
    </abstract>
Packit Service 584ef9
  </front>
Packit Service 584ef9
Packit Service 584ef9
  <middle>
Packit Service 584ef9
    <section anchor="introduction" title="Introduction">
Packit Service 584ef9
      <t>
Packit Service 584ef9
      Memcache is a high performance key-value cache. It is intentionally a
Packit Service 584ef9
      dumb cache, optimized for speed only. Applications using memcache do
Packit Service 584ef9
      not rely on it for data -- a persistent database with guaranteed reliability
Packit Service 584ef9
      is strongly recommended -- but applications can run much faster when
Packit Service 584ef9
      cached data is available in memcache.
Packit Service 584ef9
      </t>
Packit Service 584ef9
      <t>
Packit Service 584ef9
      Sites may find that, due to their network architecture or application usage patterns,
Packit Service 584ef9
      the stateless <xref target="UDP"/> protocol better suits their needs. This document
Packit Service 584ef9
      provides extensions and descriptions of use of the <xref target="MEMCACHE">memcache protocol</xref>
Packit Service 584ef9
      in a UDP environment.
Packit Service 584ef9
      </t>
Packit Service 584ef9
      <t>
Packit Service 584ef9
      It is a goal of this document to provide sufficient information in each UDP packet
Packit Service 584ef9
      as to avoid any requirement for statefulness on the part of the server nor significant
Packit Service 584ef9
      caching of outstanding packets on the part of the client.
Packit Service 584ef9
      </t>
Packit Service 584ef9
      <section anchor="conventions" title="Conventions Used In This Document">
Packit Service 584ef9
        <t>The key words "MUST", "MUST NOT", "REQUIRED", "SHALL", "SHALL NOT",
Packit Service 584ef9
        "SHOULD", "SHOULD NOT", "RECOMMENDED", "MAY", and "OPTIONAL" in this
Packit Service 584ef9
        document are to be interpreted as described in <xref target="KEYWORDS"/>.
Packit Service 584ef9
        </t>
Packit Service 584ef9
      </section>
Packit Service 584ef9
    </section>
Packit Service 584ef9
Packit Service 584ef9
    <section anchor="values" title="Defined Values">
Packit Service 584ef9
      <section anchor="value-magic" title="Magic Byte">
Packit Service 584ef9
        <t>
Packit Service 584ef9
        The magic bytes remains the same as in <xref target="MEMCACHE"/>.
Packit Service 584ef9
        </t>
Packit Service 584ef9
      </section>
Packit Service 584ef9
Packit Service 584ef9
      <section anchor="value-status" title="Response Status">
Packit Service 584ef9
        <t>
Packit Service 584ef9
        Additional status values:
Packit Service 584ef9
        <list hangIndent="8" style="hanging">
Packit Service 584ef9
          <t hangText="0x0004">Value is larger than a single response packet</t>
Packit Service 584ef9
        </list>
Packit Service 584ef9
        </t>
Packit Service 584ef9
      </section>
Packit Service 584ef9
Packit Service 584ef9
      <section anchor="value-opcodes" title="Command Opcodes">
Packit Service 584ef9
        <t>
Packit Service 584ef9
        Additional opcode values:
Packit Service 584ef9
        <list hangIndent="8" style="hanging">
Packit Service 584ef9
          <t hangText="0x0C">Get Range</t>
Packit Service 584ef9
          <t hangText="0x0D">Set Range</t>
Packit Service 584ef9
        </list>
Packit Service 584ef9
        </t>
Packit Service 584ef9
      </section>
Packit Service 584ef9
Packit Service 584ef9
      <section anchor="value-types" title="Data Types">
Packit Service 584ef9
        <t>
Packit Service 584ef9
        There are no new data types in this extension.
Packit Service 584ef9
        </t>
Packit Service 584ef9
      </section>
Packit Service 584ef9
    </section>
Packit Service 584ef9
Packit Service 584ef9
    <section anchor="commands" title="Commands">
Packit Service 584ef9
Packit Service 584ef9
      <section anchor="command-get" title="Get Response">
Packit Service 584ef9
        <t>
Packit Service 584ef9
        This section extends the behavior of the Get and GetQ commands as described in
Packit Service 584ef9
        <xref target="MEMCACHE" x:sec="command-get"/>.
Packit Service 584ef9
        </t>
Packit Service 584ef9
Packit Service 584ef9
        <t>
Packit Service 584ef9
        When a Get or GetQ request is made via UDP, and the value of the key for which
Packit Service 584ef9
        the request was made is larger than can be placed into a single UDP packet (noting
Packit Service 584ef9
        that the protocol header must also be counted), a Get Range response packet
Packit Service 584ef9
        MUST be sent instead of the Get response packet. In this instance:
Packit Service 584ef9
        <list style="numbers">
Packit Service 584ef9
          <t>The Status field of the response header MUST be 0x0004.</t>
Packit Service 584ef9
          <t>The Offset field of the GetR response extras MUST be 0.</t>
Packit Service 584ef9
          <t>The Length field of the GetR response extras, and the data contained in
Packit Service 584ef9
             the Value field of the packet, SHOULD be the maximum
Packit Service 584ef9
             allowed length of a UDP packet, less the space required by the header
Packit Service 584ef9
             and extras; however it MAY be any amount below this maximum.</t>
Packit Service 584ef9
          <t>The Total value length field of the response extras MUST be the
Packit Service 584ef9
             actual length of the complete value.</t>
Packit Service 584ef9
        </list>
Packit Service 584ef9
        </t>
Packit Service 584ef9
Packit Service 584ef9
        <t>
Packit Service 584ef9
        The client, upon receipt of a Get Range response bearing Status 0x004
Packit Service 584ef9
        and a Message ID corresponding to its Get request, shall then know that
Packit Service 584ef9
        it has received only the first portion of the value. The client MAY choose
Packit Service 584ef9
        to request the remaining portion of the value by sending one or more Get Range requests.
Packit Service 584ef9
        </t>
Packit Service 584ef9
      </section>
Packit Service 584ef9
Packit Service 584ef9
      <section anchor="command-getr-request" title="Get Range Request">
Packit Service 584ef9
        <t>
Packit Service 584ef9
	  The Get Range request is primarily intended for use over a UDP transport
Packit Service 584ef9
	  to request byte ranges of the value for a key. In the event that the Data version
Packit Service 584ef9
	  check fails to match that of the key, an error MUST be returned.
Packit Service 584ef9
	</t>
Packit Service 584ef9
        <t>
Packit Service 584ef9
      <figure>
Packit Service 584ef9
        <preamble>Extra data for get range request:</preamble>
Packit Service 584ef9
          <artwork>
Packit Service 584ef9
Byte/     0       |       1       |       2       |       3       |
Packit Service 584ef9
   /              |               |               |               |
Packit Service 584ef9
  |0 1 2 3 4 5 6 7|0 1 2 3 4 5 6 7|0 1 2 3 4 5 6 7|0 1 2 3 4 5 6 7|
Packit Service 584ef9
  +---------------+---------------+---------------+---------------+
Packit Service 584ef9
 0| Flags                                                         |
Packit Service 584ef9
  +---------------+---------------+---------------+---------------+
Packit Service 584ef9
 4| Data version check                                            |
Packit Service 584ef9
  |                                                               |
Packit Service 584ef9
  +---------------+---------------+---------------+---------------+
Packit Service 584ef9
12| Offset                                                        |
Packit Service 584ef9
  +---------------+---------------+---------------+---------------+
Packit Service 584ef9
16| Length                                                        |
Packit Service 584ef9
  +---------------+---------------+---------------+---------------+
Packit Service 584ef9
Total 20 bytes
Packit Service 584ef9
      </artwork></figure>
Packit Service 584ef9
        </t>
Packit Service 584ef9
      </section>
Packit Service 584ef9
Packit Service 584ef9
      <section anchor="command-getr-response" title="Get Range Response">
Packit Service 584ef9
        <t>
Packit Service 584ef9
	  The Get Range request is primarily intended for use over a UDP transport
Packit Service 584ef9
	  to indicate the location of the bytes of the value for a key contained in
Packit Service 584ef9
	  a given packet. A client receives enough information in each Get Range
Packit Service 584ef9
	  extras to construct an appropriately sized buffer in its own memory and
Packit Service 584ef9
	  blindly insert the contents of the packet at the given byte offset.
Packit Service 584ef9
	</t>
Packit Service 584ef9
        <t>
Packit Service 584ef9
      <figure>
Packit Service 584ef9
        <preamble>Extra data for get range response:</preamble>
Packit Service 584ef9
          <artwork>
Packit Service 584ef9
Byte/     0       |       1       |       2       |       3       |
Packit Service 584ef9
   /              |               |               |               |
Packit Service 584ef9
  |0 1 2 3 4 5 6 7|0 1 2 3 4 5 6 7|0 1 2 3 4 5 6 7|0 1 2 3 4 5 6 7|
Packit Service 584ef9
  +---------------+---------------+---------------+---------------+
Packit Service 584ef9
 0| Flags                                                         |
Packit Service 584ef9
  +---------------+---------------+---------------+---------------+
Packit Service 584ef9
 4| Data version check                                            |
Packit Service 584ef9
  |                                                               |
Packit Service 584ef9
  +---------------+---------------+---------------+---------------+
Packit Service 584ef9
12| Offset                                                        |
Packit Service 584ef9
  +---------------+---------------+---------------+---------------+
Packit Service 584ef9
16| Length                                                        |
Packit Service 584ef9
  +---------------+---------------+---------------+---------------+
Packit Service 584ef9
20| Total value length                                            |
Packit Service 584ef9
  +---------------+---------------+---------------+---------------+
Packit Service 584ef9
Total 24 bytes
Packit Service 584ef9
      </artwork></figure>
Packit Service 584ef9
        </t>
Packit Service 584ef9
      </section>
Packit Service 584ef9
Packit Service 584ef9
    </section>
Packit Service 584ef9
Packit Service 584ef9
    <section anchor="security" title="Security Considerations">
Packit Service 584ef9
      <t>
Packit Service 584ef9
      This document does not introduce any new security considerations
Packit Service 584ef9
      beyond those discussed in <xref target="MEMCACHE" x:sec="security"/>.
Packit Service 584ef9
      </t>
Packit Service 584ef9
    </section>
Packit Service 584ef9
Packit Service 584ef9
  </middle>
Packit Service 584ef9
Packit Service 584ef9
  <back>
Packit Service 584ef9
    <references title="Normative References">
Packit Service 584ef9
      <dwdrfc-ref anchor='UDP' src='reference.RFC.0768.xml'/>
Packit Service 584ef9
      <dwdrfc-ref anchor='KEYWORDS' src='reference.RFC.2119.xml'/>
Packit Service 584ef9
      
Packit Service 584ef9
      <dwdrfc-ref anchor='MEMCACHE' src='reference.RFC.2119.xml'/>
Packit Service 584ef9
    </references>
Packit Service 584ef9
  </back>
Packit Service 584ef9
Packit Service 584ef9
</rfc>
Packit Service 584ef9