0
Fork 0
mirror of https://github.com/ninenines/cowboy.git synced 2025-07-14 04:10:24 +00:00
cowboy/Makefile
Loïc Hoguin 48f417ac8f
Fix and optimize sending of WINDOW_UPDATE frames
For long-running connections it was possible for the connection
window to become larger than allowed by the protocol because the
window increases claimed by stream handlers were never reclaimed
even if no data was consumed.

The new code applies heuristics to fix this and reduce the number
of WINDOW_UPDATE frames that are sent. It includes six new options
to control that behavior: margin, max and threshold for both the
connection and stream windows. The margin is some extra space
added on top of the requested read size. The max is the maximum
window size at any given time. The threshold is a minimum window
size that must be reached before we even consider sending more
WINDOW_UPDATE frames. We also avoid sending WINDOW_UPDATE frames
when there is already enough space in the window, or when the
read size is 0.

Cowlib is set to master until a new tag is done.
2019-09-05 14:07:38 +02:00

108 lines
2.9 KiB
Makefile

# See LICENSE for licensing information.
PROJECT = cowboy
PROJECT_DESCRIPTION = Small, fast, modern HTTP server.
PROJECT_VERSION = 2.6.3
PROJECT_REGISTERED = cowboy_clock
# Options.
PLT_APPS = public_key ssl
CT_OPTS += -ct_hooks cowboy_ct_hook [] # -boot start_sasl
# Dependencies.
LOCAL_DEPS = crypto
DEPS = cowlib ranch
dep_cowlib = git https://github.com/ninenines/cowlib master
dep_ranch = git https://github.com/ninenines/ranch 1.7.1
DOC_DEPS = asciideck
TEST_DEPS = $(if $(CI_ERLANG_MK),ci.erlang.mk) ct_helper gun proper
dep_ct_helper = git https://github.com/extend/ct_helper master
dep_gun = git https://github.com/ninenines/gun 1.2.0
# CI configuration.
dep_ci.erlang.mk = git https://github.com/ninenines/ci.erlang.mk master
DEP_EARLY_PLUGINS = ci.erlang.mk
AUTO_CI_OTP ?= OTP-20+
AUTO_CI_HIPE ?= OTP-LATEST
# AUTO_CI_ERLLVM ?= OTP-LATEST
AUTO_CI_WINDOWS ?= OTP-20+
# Standard targets.
include erlang.mk
# Don't run the examples test suite by default.
ifndef FULL
CT_SUITES := $(filter-out examples ws_autobahn,$(CT_SUITES))
endif
# Compile options.
ERLC_OPTS += +warn_missing_spec +warn_untyped_record
TEST_ERLC_OPTS += +'{parse_transform, eunit_autoexport}'
# Generate rebar.config on build.
app:: rebar.config
# Dialyze the tests.
DIALYZER_OPTS += --src -r test
# h2spec setup.
GOPATH := $(ERLANG_MK_TMP)/gopath
export GOPATH
H2SPEC := $(GOPATH)/src/github.com/summerwind/h2spec/h2spec
export H2SPEC
# @todo It would be better to allow these dependencies to be specified
# on a per-target basis instead of for all targets.
test-build:: $(H2SPEC)
$(H2SPEC):
$(gen_verbose) mkdir -p $(GOPATH)/src/github.com/summerwind
$(verbose) git clone --depth 1 https://github.com/summerwind/h2spec $(dir $(H2SPEC)) || true
$(verbose) $(MAKE) -C $(dir $(H2SPEC)) build MAKEFLAGS= || true
# Use erl_make_certs from the tested release during CI
# and ensure that ct_helper is always recompiled.
ci-setup:: clean deps test-deps
$(gen_verbose) cp ~/.kerl/builds/$(CI_OTP_RELEASE)/otp_src_git/lib/ssl/test/erl_make_certs.erl deps/ct_helper/src/ || true
$(gen_verbose) $(MAKE) -C $(DEPS_DIR)/ct_helper clean app
# Prepare for the release.
prepare_tag:
$(verbose) echo -n "Most recent tag: "
$(verbose) git tag | tail -n1
$(verbose) git verify-tag `git tag | tail -n1`
$(verbose) echo -n "MAKEFILE: "
$(verbose) grep -m1 PROJECT_VERSION Makefile
$(verbose) echo -n "APP: "
$(verbose) grep -m1 vsn ebin/$(PROJECT).app | sed 's/ //g'
$(verbose) echo -n "GUIDE: "
$(verbose) grep -h dep_$(PROJECT)_commit doc/src/guide/*.asciidoc || true
$(verbose) echo
$(verbose) echo "Titles in most recent CHANGELOG:"
$(verbose) for f in `ls -r doc/src/guide/migrating_from_*.asciidoc | head -n1`; do \
echo $$f:; \
grep == $$f; \
done
$(verbose) echo
$(verbose) echo "Dependencies:"
$(verbose) grep ^DEPS Makefile || echo "DEPS ="
$(verbose) grep ^dep_ Makefile || true
$(verbose) echo
$(verbose) echo "rebar.config:"
$(verbose) cat rebar.config || true