Go to file
Chris Vest 617d9ccef1 Add support for read-only buffers
Motivation:
There are cases where you want a buffer to be "constant."
Buffers are inherently mutable, but it's possible to block off write access to the buffer contents.
This doesn't make it completely safe to share the buffer across multiple threads, but it does catch most races that could occur.

Modification:
Add a method to Buf for toggling read-only mode.
When a buffer is read-only, the write accessors throw exceptions when called.
In the MemSegBuf, this is implemented by having separate read and write references to the underlying memory segment.
In a read-only buffer, the write reference is redirected to point to a closed memory segment, thus preventing all writes to the memory backing the buffer.

Result:
It is now possible to make buffers read-only.
Note, however, that it is also possible to toggle a read-only buffer back to writable.
We need that in order for buffer pools to be able to fully reset the state of a buffer, regardless of the buffer implementation.
2021-01-05 16:53:21 +01:00
.github/workflows Capture build artifacts for failed builds 2020-12-01 14:38:09 +01:00
src Add support for read-only buffers 2021-01-05 16:53:21 +01:00
.dockerignore Add a docker-based build 2020-11-18 17:16:37 +01:00
.gitignore Prepare incubator repo for new buffer API 2020-11-17 14:56:28 +01:00
Dockerfile Try a different caching mechanism 2020-11-21 15:26:10 +01:00
Makefile The make clean command now also cleans up after failed build commands 2020-12-11 12:10:04 +01:00
pom.xml The assertj-core dependency should only be available in test scope 2020-11-23 18:11:22 +01:00
README.md Readme file updates 2021-01-05 12:51:17 +01:00

Netty Incubator Buffer API

This repository is incubating a new buffer API proposed for Netty 5.

Building and Testing

Short version: just run make.

The project currently relies on snapshot versions of the Panama Foreign fork of OpenJDK. This allows us to test out the most recent version of the jdk.incubator.foreign APIs, but also make building, and local development more involved. To simplify things, we have a Docker based build, controlled via a Makefile with the following commands:

  • image build the docker image. This includes building a snapshot of OpenJDK, and download all relevant Maven dependencies.
  • test run all tests in a docker container. This implies image. The container is automatically deleted afterwards.
  • dbg drop into a shell in the build container, without running the build itself. The debugging container is not deleted afterwards.
  • clean remove the leftover containers created by dbg, test, and build.
  • build build binaries and run all tests in a container, and copy the target directory out of the container afterwards. This is the default build target.