Skip to content

Latest commit

 

History

History
338 lines (262 loc) · 21.4 KB

TODO.org

File metadata and controls

338 lines (262 loc) · 21.4 KB

completed

Add application codec to base pipeline

Add application router to http pipeline

handle keep alive

handle content type

Add route applicator to http pipeline

Wrap Http/2 Request/Response objects

Wrap Http2Headers

Http2ServerCodec

Http2ClientCodec

Update proxy to use application request object

on deck

Refactor Http1Headers and Http2Headers to use java8 interface default methods

publish to maven central

Authorization uses route pipeline

Http1ServerCodec sets response Transfer-Encoding

https://developer.mozilla.org/en-US/docs/Web/HTTP/Headers/Transfer-Encoding

Http1ServerCodec sets Content-Length for FullResponse

https://tools.ietf.org/html/rfc7230#section-3.3.2

How to handle http 100 Continue?

Update WAF to use application request object

backlog

upgrade to java 9

blocker lombok?

build should fail on javadoc warnings

Application layer rate limiting

separate integration tests

use jesse kinkead’s java precommit hook

script this

config update handler

  • sits in pipeline
  • fires config update event
  • channel handlers further down the pipeline know how to handle event
  • questions
    • how to fire once for each channel?
    • how to fire in thread?
  • answers keep a collection of open channel objects
    • write the config update to the pipeline
    • well behaved pipeline should just pass along the object
    • config update handler catches the object before it tries to go to the wire
  • answers keep a collections of open channel objects
    • fire user event for config update
    • well behaved pipeline should just pass along the object
    • each interested party should inform the event that they consumed it
  • how to deal with stale connections holding onto old config data
    • at some point old shitty things should die
      • how to make them die?

ResponseBuilder that takes a Request to build a response for.

  • pull in tracing and anything else the response would otherwise have to go look for

RequestBuilder that takes a Request

  • used proxy logic
  • propagate tracing

connection pool that is optimized to worker loop allocation

for a worker loop group of size N create at least N connections to the remote endpoint

get rid of jetty helpers, replace them with MockWebServer

setup errorprone

document how to write a netty handler

it’s ok to throw exceptions

use ChannelFuture’s cause() to catch exceptions

document immutable object testing concepts

public class ClassUnderTest {
  private final Value value;
  public ClassUnderTest(Value v) {
    value = preconditions.notNull(v);
  }
}

in code

git grep -n TODO src | sed -e 's/^/** /g'

re-file

todo.md

  • Create default implementations for each of the most important interfaces
  • Add better tests around config
  • Add better testing around client failure modes
  • Add full HttpParser for BBtoHttpResponse

config

TLS - startup configurable

Load from Typesafe Config, attach to XioServerConfig

Circuit Breakers - runtime configurable

Ip Address - runtime configurable

  • Config Class: IpAddressDeterministicRuleEngineConfig
  • Marshall Classes: ThriftMarshaller / ThriftUnmarshaller

Define Config class

Define Marshall classes

Host Address - runtime configurable

  • Config Class: HostnameDeterministicRuleEngineConfig
  • Marshall Classes: ThriftMarshaller / ThriftUnmarshaller

Define Config class

Define Marshall classes

Layer 4 Behavioral - runtime configurable

  • Config Class:

Define Config class

Application Codec - startup configurable

Load from Typesafe Config

Aggregation & Compression - startup configurable

Load from Typesafe Config

Decode Token - startup configurable

Load from Typesafe Config

Http1 Rules - runtime configurable

  • Config Class: Http1DeterministicRuleEngineConfig
  • Marshall Classes: ThriftMarshaller / ThriftUnmarshaller

Define Config class

Define Marshall classes

Layer 7 Behavioral - runtime configurable

Define Config class

Multiplex Req - startup configurable

Load from Typesafe Config

Persistent Connection Manager - startup configurable

Load from Typesafe Config

Local Variables