Tags: codedge-llc/kadabra
Tags
fix: process hierarchy (#37) * fix: use temporary instead of transient restart for Kadabra.Supervisor * feat: removed StreamSupervisor Part of a supervision restructuring. Connection will basically monitor everything except ConnectionQueue. * feat: Hpack and Socket brought under Connection * feat: all new process hierarchy Removed GenStage completely. ConnectionQueue is replaced with ConnectionPool, which will (eventually) maintain clones of Connection for better parallelism. * fix: pass tests for elixir 1.4.5 * fix: handle :connection_error shutdowns * refactor: minor changes Also: added elixir 1.7.0 to travis * refactor: module dependency restructuring - Encodable implementations moved into Encodable - Frame.Flags broken back out into each frame - Connection.Egress for sending outbound frames * test: removed some useless tests * fix: removed unnecessary Process.monitor of streams by connection Also: GOAWAY logging disabled by default, can be re-enabled with `:debug_log?` config option.
fix: proper supervision cleanup (#35) * fix: proper supervision cleanup WIP * fix: everything now supervised under :kadabra app Was the original setup a while back. Supervisor was quitting with :shutdown during cleanup, which would shutdown the process that originally start_link'd it. * fix: timeout on stream WindowUpdate Replies immediately so connection can continue on with its life. Call timeout was previously crashing connection on occasion. * refactor: minor refactoring * feat: CONTINUATION for sending large headers WIP Chunks correctly, but remotes are still terminating with a COMPRESSION_ERROR. Possible ideas why: 1. Hpack is encoding the fragment wrong 2. Frames are being sent out of order 3. Continuation frames are being serialized wrong 4. Remotes aren't equipped to handle such large headers 5. Sending a 20mb header is just a shitty thing to do * fix: don't crash Connection if Socket closed Fixed by not shutting down Kadabra.Socket if the socket closes. Bins sent to a closed socket are simply ignored. Sending CONTINUATION frames is mostly there. Fairly certain the issue is with hpack, so I'll need to figure something out. * chore: bump version and update changelog * test: increase test coverage
feat: v0.4.1 (#34) * feat: socket moved to its own GenServer * feat: frame validation GOAWAY errors WIP New Connection.Processor module to validate frames, acting on them if valid. Also: Ping now has :stream_id * feat: set max initial window size and max frame size Also, various refactorings. * fix: dont accidentally send 0-size WINDOW_UPDATE It's a PROTOCOL_ERROR * fix: respect remote flow control window WINDOW_UPDATES were blowing past the max limit for servers that enforce it (APNS). Also: Connection.FlowControl can now queue a list of requests, and process them recursively. * refactor: cleanup to increase test coverage * fix: process GOAWAY immediately (and send one back) Proper thing to do on recv of GOAWAY. * fix: dont auto-stop Kadabra.Connection On recv of GOAWAY, error, etc, wait for Supervisor to stop it by spawning a task. Might present issues on received stream frames that get processed before the kill. Will need to implement some sort of graceful shutdown. * refactor: remove StreamSupervisor Makes more sense to just link streams to Connection and remove them from flow control as they stop. Will be useful for detecting crashed streams and handling accordingly. * refactor: remove registry tuples for Stream No longer needed! * refactor: removed Stream.FlowControl dependencies It now acts more like a data chunker that respects a given configuration. Stream is now responsible for popping off the :out_queue and sending the appropriate DATA frames. * fix: differentiate local and remote settings * refactor: reduce Stream dependencies * refactor: HEADERS frame implements Encodable * refactor: remove various module dependencies * refactor: remove Socket depdency on Frame * refactor: StreamSet Currently held within Connection.FlowControl-- needs to be broken out. Will allow Stream.FlowControl and Connection.FlowControl to become effectively the same when refactored properly. * fix: send WINDOW_UPDATE on stream even with full conn * test: increase test coverage * chore: prepare for v0.4.1 release
PreviousNext