stratosphere/stratosphere — pull request #511 by uce (2014-02-26 11:20:00+00:00)
Title: Offer buffer-oriented API for I/O (#25)

The runtime offered a record-oriented API (#25) for data transfers, which
* resulted in unnecessary data (de)serialization,
* complicated the upcoming fault tolerance implementation, and
* blocked more efficient implementations of higher-level operators.

With this commit, the runtime offers a buffer-oriented API for the output side (sending), which is oblivious to records. The buffer oriented input side (receiving) is still to be implemented.

---

* Previously, the I/O classes allowed different implementations of channels, gates etc. with the `ByteBuffered*` implementation being the default one. I've merged those classes to only have the default implementation (e.g. InputChannel, OutputChannel), which greatly simplifies the code.
* Every I/O class had an associated `*Context`, which was initiated at runtime for buffer allocation. All these classes could be removed, since the I/O stack does not allocate buffers anymore, but instead is fed buffers to send/receive.
* Record serialization has been moved from the channels (for the output side, input side is still pending) to the writers/readers. For example `RecordWriter` still offers the record-oriented API, but serializes records into buffers and dispatches full buffers via the new buffer-oriented API (`BufferWriter`).
* The (previosuly singleton) `GlobalBufferPool` (for network buffers) is now instantiated by the `ChannelManager` for each TaskManager. The network buffers are used by `RecordWriter` for record serialization and by the input channels (will be changed) for deserialization. In the future, the buffers can directly come from the upper layers (formerly PACT).
* I've reorganized the touched classes into the package `eu.stratosphere.runtime.*` (previously `eu.stratosphere.nephele.*`) to start with the removal of the deprecated Nephele/PACT separation.