You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@avro.apache.org by cu...@apache.org on 2010/02/04 19:58:30 UTC
svn commit: r906610 - in /hadoop/avro/trunk: ./ doc/src/content/xdocs/
lang/java/src/java/org/apache/avro/ipc/
Author: cutting
Date: Thu Feb 4 18:58:29 2010
New Revision: 906610
URL: http://svn.apache.org/viewvc?rev=906610&view=rev
Log:
AVRO-340, AVRO-342: Define usage of HTTP as RPC transport in spec, and document that Java's socket and datagram transports are non-standard.
Modified:
hadoop/avro/trunk/CHANGES.txt
hadoop/avro/trunk/doc/src/content/xdocs/spec.xml
hadoop/avro/trunk/lang/java/src/java/org/apache/avro/ipc/DatagramServer.java
hadoop/avro/trunk/lang/java/src/java/org/apache/avro/ipc/DatagramTransceiver.java
hadoop/avro/trunk/lang/java/src/java/org/apache/avro/ipc/HttpTransceiver.java
hadoop/avro/trunk/lang/java/src/java/org/apache/avro/ipc/SocketServer.java
hadoop/avro/trunk/lang/java/src/java/org/apache/avro/ipc/SocketTransceiver.java
Modified: hadoop/avro/trunk/CHANGES.txt
URL: http://svn.apache.org/viewvc/hadoop/avro/trunk/CHANGES.txt?rev=906610&r1=906609&r2=906610&view=diff
==============================================================================
--- hadoop/avro/trunk/CHANGES.txt (original)
+++ hadoop/avro/trunk/CHANGES.txt Thu Feb 4 18:58:29 2010
@@ -292,7 +292,13 @@
AVRO-395. Add a cscope Makefile target (Eli Collins via massie)
- AVRO-397. Whitespace change and comment clarification in datafile.py (hammer)
+ AVRO-397. Whitespace change and comment clarification in
+ datafile.py (hammer)
+
+ AVRO-340. Define usage of HTTP as RPC transport in spec. (cutting)
+
+ AVRO-342. Document that Java's socket and datagram RPC transports
+ are non-standard. (cutting)
OPTIMIZATIONS
Modified: hadoop/avro/trunk/doc/src/content/xdocs/spec.xml
URL: http://svn.apache.org/viewvc/hadoop/avro/trunk/doc/src/content/xdocs/spec.xml?rev=906610&r1=906609&r2=906610&view=diff
==============================================================================
--- hadoop/avro/trunk/doc/src/content/xdocs/spec.xml (original)
+++ hadoop/avro/trunk/doc/src/content/xdocs/spec.xml Thu Feb 4 18:58:29 2010
@@ -750,11 +750,7 @@
<section>
<title>Message Transport</title>
<p>Messages may be transmitted via
- different <em>transport</em> mechanisms. For example, one
- might use the HTTP, raw sockets, or SSL, etc. This document
- specifies formats for request and response message data, but
- it does not yet specify any details of how message data is
- encapsulated in different transports.</p>
+ different <em>transport</em> mechanisms.</p>
<p>To the transport, a <em>message</em> is an opaque byte sequence.</p>
@@ -772,6 +768,23 @@
messages with unique identifiers.</p>
</li>
</ul>
+
+ <section>
+ <title>HTTP as Transport</title>
+ <p>When
+ <a href="http://www.w3.org/Protocols/rfc2616/rfc2616.html">HTTP</a>
+ is used as a transport, each Avro message exchange is an
+ HTTP request/response pair. All messages of an Avro
+ protocol should share a single URL at an HTTP server.
+ Other protocols may also use that URL. Both normal and
+ error Avro response messages should use the 200 (OK)
+ response code. The chunked encoding may be used for
+ requests and responses, but, regardless the Avro request
+ and response are the entire content of an HTTP request and
+ response. The HTTP Content-Type of requests and responses
+ should be specified as "avro/binary". Requests should be
+ made using the POST method.</p>
+ </section>
</section>
<section>
Modified: hadoop/avro/trunk/lang/java/src/java/org/apache/avro/ipc/DatagramServer.java
URL: http://svn.apache.org/viewvc/hadoop/avro/trunk/lang/java/src/java/org/apache/avro/ipc/DatagramServer.java?rev=906610&r1=906609&r2=906610&view=diff
==============================================================================
--- hadoop/avro/trunk/lang/java/src/java/org/apache/avro/ipc/DatagramServer.java (original)
+++ hadoop/avro/trunk/lang/java/src/java/org/apache/avro/ipc/DatagramServer.java Thu Feb 4 18:58:29 2010
@@ -27,7 +27,8 @@
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
-/** A simple datagram-based server implementation. */
+/** A datagram-based server implementation. This uses a simple, non-standard
+ * wire protocol and is not intended for production services. */
public class DatagramServer extends Thread implements Server {
private static final Logger LOG =
LoggerFactory.getLogger(DatagramServer.class);
Modified: hadoop/avro/trunk/lang/java/src/java/org/apache/avro/ipc/DatagramTransceiver.java
URL: http://svn.apache.org/viewvc/hadoop/avro/trunk/lang/java/src/java/org/apache/avro/ipc/DatagramTransceiver.java?rev=906610&r1=906609&r2=906610&view=diff
==============================================================================
--- hadoop/avro/trunk/lang/java/src/java/org/apache/avro/ipc/DatagramTransceiver.java (original)
+++ hadoop/avro/trunk/lang/java/src/java/org/apache/avro/ipc/DatagramTransceiver.java Thu Feb 4 18:58:29 2010
@@ -28,7 +28,8 @@
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
-/** A datagram-based {@link Transceiver} implementation. */
+/** A datagram-based {@link Transceiver} implementation. This uses a simple,
+ * non-standard wire protocol and is not intended for production services. */
public class DatagramTransceiver extends Transceiver {
private static final Logger LOG
= LoggerFactory.getLogger(DatagramTransceiver.class);
Modified: hadoop/avro/trunk/lang/java/src/java/org/apache/avro/ipc/HttpTransceiver.java
URL: http://svn.apache.org/viewvc/hadoop/avro/trunk/lang/java/src/java/org/apache/avro/ipc/HttpTransceiver.java?rev=906610&r1=906609&r2=906610&view=diff
==============================================================================
--- hadoop/avro/trunk/lang/java/src/java/org/apache/avro/ipc/HttpTransceiver.java (original)
+++ hadoop/avro/trunk/lang/java/src/java/org/apache/avro/ipc/HttpTransceiver.java Thu Feb 4 18:58:29 2010
@@ -26,14 +26,14 @@
import java.util.ArrayList;
import java.util.List;
import java.net.URL;
-import java.net.URLConnection;
+import java.net.HttpURLConnection;
/** An HTTP-based {@link Transceiver} implementation. */
public class HttpTransceiver extends Transceiver {
static final String CONTENT_TYPE = "avro/binary";
private URL url;
- private URLConnection connection;
+ private HttpURLConnection connection;
public HttpTransceiver(URL url) { this.url = url; }
@@ -42,7 +42,8 @@
@Override
public synchronized List<ByteBuffer> transceive(List<ByteBuffer> request)
throws IOException {
- this.connection = url.openConnection();
+ this.connection = (HttpURLConnection)url.openConnection();
+ connection.setRequestMethod("POST");
connection.setRequestProperty("Content-Type", CONTENT_TYPE);
connection.setRequestProperty("Content-Length",
Integer.toString(getLength(request)));
Modified: hadoop/avro/trunk/lang/java/src/java/org/apache/avro/ipc/SocketServer.java
URL: http://svn.apache.org/viewvc/hadoop/avro/trunk/lang/java/src/java/org/apache/avro/ipc/SocketServer.java?rev=906610&r1=906609&r2=906610&view=diff
==============================================================================
--- hadoop/avro/trunk/lang/java/src/java/org/apache/avro/ipc/SocketServer.java (original)
+++ hadoop/avro/trunk/lang/java/src/java/org/apache/avro/ipc/SocketServer.java Thu Feb 4 18:58:29 2010
@@ -28,7 +28,8 @@
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
-/** A simple socket-based server implementation. */
+/** A socket-based server implementation. This uses a simple, non-standard wire
+ * protocol and is not intended for production services. */
public class SocketServer extends Thread implements Server {
private static final Logger LOG = LoggerFactory.getLogger(SocketServer.class);
Modified: hadoop/avro/trunk/lang/java/src/java/org/apache/avro/ipc/SocketTransceiver.java
URL: http://svn.apache.org/viewvc/hadoop/avro/trunk/lang/java/src/java/org/apache/avro/ipc/SocketTransceiver.java?rev=906610&r1=906609&r2=906610&view=diff
==============================================================================
--- hadoop/avro/trunk/lang/java/src/java/org/apache/avro/ipc/SocketTransceiver.java (original)
+++ hadoop/avro/trunk/lang/java/src/java/org/apache/avro/ipc/SocketTransceiver.java Thu Feb 4 18:58:29 2010
@@ -28,7 +28,8 @@
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
-/** A simple socket-based {@link Transceiver} implementation. */
+/** A socket-based {@link Transceiver} implementation. This uses a simple,
+ * non-standard wire protocol and is not intended for production services. */
public class SocketTransceiver extends Transceiver {
private static final Logger LOG
= LoggerFactory.getLogger(SocketTransceiver.class);