Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

http/1 and http/2: end to end flow control #150

Closed
mattklein123 opened this issue Oct 14, 2016 · 7 comments
Closed

http/1 and http/2: end to end flow control #150

mattklein123 opened this issue Oct 14, 2016 · 7 comments
Assignees
Labels
enhancement Feature requests. Not bugs or questions.
Milestone

Comments

@mattklein123
Copy link
Member

mattklein123 commented Oct 14, 2016

Take over nghttp2 window updates and some stream/filter callbacks to apply back pressure when needed. For http/1 just stop reading from the socket.

@mattklein123 mattklein123 added the enhancement Feature requests. Not bugs or questions. label Oct 14, 2016
@mattklein123 mattklein123 changed the title http/2: end to end flow control http/1 and http/2: end to end flow control Jan 24, 2017
@htuch
Copy link
Member

htuch commented Feb 6, 2017

@mattklein123 I'm interested in getting started on this issue. I'm wondering if you have any any context (beyond the need to avoid infinite buffering) or initial thoughts.

@mattklein123 mattklein123 added this to the 1.2.0 milestone Feb 6, 2017
@mattklein123
Copy link
Member Author

Here is my rough thinking on how to go about this (these are rough thoughts, feel free to propose alternatives once you start investigating). This is going to be a fairly complicated change. I think it would be good to break this up into small pieces just so that we can test things incrementally (that should not be that hard to do).

Changes to codec.h

https://github.com/lyft/envoy/blob/master/include/envoy/http/codec.h

IMO we should try to hide as much of the windowing stuff as possible from higher layers.

  • On Stream interface, we will need a disableRead() and enableRead() (or variant). On HTTP/1 this will directly interface with the connection by disabling/enabling socket reads. On HTTP/2, this will work with the nghttp2 nghttp2_session_consume API. (As part of this change, we will need to switch to using nghttp2_option_set_no_auto_window_update). Roughly, for http/2, when enabled, we should just consume() data as we get it. When disabled, we keep track of how much data needs to be consumed, and then only consume it when we become enabled. When calling consume(), we need to flush pending frames to release window updates also. From an API perspective at this payer, disable/enable of read is eventually consistent. It might not happen right away and some number of reads might still happen.
  • On the Stream interface, I would add: setWriteBufferHighWatermark() (or variant). In StreamCallbacks, we will need a callback for when we go above the high watermark as well as back below it.
  • The default HTTP/2 window sizes need to be configurable. Right now we just generically open up to 256MiB. I don't have a strong opinion in v1 of this change as to whether we make this configurable on a global basis or per listener basis. We should probably keep the connection window large and do flow control at stream level. The default write high buffer watermark could also be set in the same default way.

Changes to connection.h

https://github.com/lyft/envoy/blob/master/include/envoy/network/connection.h

We are going to need a setWriteBufferHighWatermark() here as well as a set of callbacks. This will end up being used in the HTTP/1 case so that we can get notified of writes when we are above the high watermark.

Changes to connection_impl

We need to support real socket disable/enable for the HTTP/1 case. Right now we do a soft disable, mainly because it's much faster to get notified of remote close. If we upgrade to libevent 2.1, we can switch this behavior out for #391 so that we can use EPOLLRDHUP, which would be a lot better (there are other solutions also, can talk about this separately).

Changes to filter.h

https://github.com/lyft/envoy/blob/master/include/envoy/http/filter.h

Filters need to be notified of when the downstream connection goes above/below the high watermark. Additionally, filters will need to be able to enable/disable reading from the downstream stream.

  • In StreamFilterCallbacks, much like reset, I would add the ability to both get notifications of above/below watermark events, as well as enable/disable read. NOTE: It would be technically more correct if enable/disable read actually propagated through the filter stack with the ability for a filter to pause (consume) this event, and then restart, but I do not think this extra complexity is worthwhile. I would just hit the underlying stream directly.

Other random changes

There will be various other changes required to router and a few other places to plumb through the callbacks and then wire it up back and forth. For this change we will also want end-to-end integration tests.

@htuch
Copy link
Member

htuch commented Feb 9, 2017

Thinking about this API a little, I'm wondering if we have a good way to determine what the per-stream memory use will actually be. Using a watermark is a little loosey-goosey as the actual memory use might exceed the watermark by an arbitrary amount due to the last send prior to when the send pipeline decides to stop sending due to the high watermark exceeded callback.

An alternative API would involve not always consuming the entire buffer in encodeData(), but only up to the available buffer space, where we add an upper bound to each buffer. This might be a bit more invasive based on various comments about the expectation that buffer slices are movable in their entirety.

Thoughts?

@mattklein123
Copy link
Member Author

The problem with modifying encodeData() to do partial writes is not only that it will be an incredibly invasive change (I'm guessing many weeks to get it correct), but that I don't think it helps. In the case of a partial write, unless you reset the stream, you are going to have to buffer the data somewhere (in the router, etc.). So you are still at the whim of when window updates go out.

IMO, a rough memory maximum is sufficient for almost all use cases (potentially coupled with a safeguard where we stop handling new connections / fail HC when we go above some high memory watermark).

If a real memory guarantee is needed, I think we could do the following:

  • Do the above API suggestions
  • Do not consume read data until we actually write the data to the other side. Thus, memory for a stream is bounded by the receive window on the other side.
  • I don't think this would be too much of a change to the above, and we could potentially support both models. (Pre-consume would be higher perf in some cases).

@htuch
Copy link
Member

htuch commented Feb 9, 2017

Yeah, partial writes don't help, but if we knew how much buffer space was available on the send path we could only consume from the kernel up to this amount and/or set the receive window appropriately in H2. I think this is something like what you're getting at with the last points above. In any case, this still wouldn't provide precise bounding, since any filter might change the size of data as it passes thru (e.g. a gzip filter).

I'll continue with your original API suggestion for now, but it would be good to have some way to know the number of streams that can be handled for a given amount of memory in the future.

@mattklein123
Copy link
Member Author

One option that I considered is having encodeData (and write() on the connection) return the amount of data currently buffered. This would be a larger change, but could be used to drive dynamically changing window sizes... Something to consider in a follow up change? Not sure if we want to do that in v1.

@mattklein123 mattklein123 modified the milestones: 1.2.0, 1.3.0 Feb 11, 2017
htuch added a commit to htuch/envoy that referenced this issue Mar 10, 2017
…read buffer limits (envoyproxy#150).

Baby steps towards flow control. This patch plumbs the TCP connection buffer limits to the listener
and enforces it on the read buffer only. Later patches will also plumb to the upstream cluster
connection and cover the write buffer (which requires the watermark API).
htuch added a commit to htuch/envoy that referenced this issue Mar 15, 2017
mattklein123 pushed a commit that referenced this issue Mar 16, 2017
@mattklein123 mattklein123 modified the milestones: 1.3.0, 1.4.0 Apr 14, 2017
@mattklein123 mattklein123 modified the milestones: 1.4.0, 1.5.0 Jul 21, 2017
@alyssawilk
Copy link
Contributor

Commenting late in the game, the other advantage of the partial write over the current callback/notification driven design is only the parties which are actively contributing to buffer bloat are actually notified. My main concern with the existing design is if you have 100 streams on a connection, pushing the high and low watermark to all 100 is a bunch of extra work if a small subset of streams are the primary bandwidth hogs. It seems more efficient and elegant to have the just-in-time notification where writes are simply not accepted. But I'll buy Matt's explanation that we can potentially support both models and start with the one he thinks is more sane :-)

mattklein123 pushed a commit that referenced this issue Aug 16, 2017
This should fix the issue where the router gets a watermark event before it has stats
(onAboveWriteBufferHighWatermark before decodeHeaders())
This can happen on muxed H2 where one stream's response causes a high 
watermark event while another stream is parsing large headers.

The fix also addresses passing on high watermark events to the new downstream 
stream in case of retries.

part of #150
Fixes #1447
Fixes #1443
htuch pushed a commit that referenced this issue Aug 22, 2017
This fixes a bug in my implementation of #150 where we were passing connection-level flow control blockage to new client side streams but not new server side streams.
rshriram pushed a commit to rshriram/envoy that referenced this issue Oct 30, 2018
rshriram pushed a commit to rshriram/envoy that referenced this issue Oct 30, 2018
* Point to googleapi in service control client. (envoyproxy#91)

* Point to googleapi in service control client.

* Use git repository for service-control-client.

* Merge latest changes from master (envoyproxy#104)

* Get attributes from envoy config. (envoyproxy#87)

* Send all attributes.

* Remove unused const strings.

* Address comment.

* updated SHA to point to newer envoy with RDS API feature (envoyproxy#94)

* Disable travis on stable branches (envoyproxy#96)

* Publish debug binaries (no release yet) (envoyproxy#98)

* Copies the binary instead of linking for release (envoyproxy#102)

* Extract quota config from service config. (envoyproxy#101)

* Add metric_cost in config.

* Remove group rules.

* Call loadQuotaConfig in config::create.

* Update latest update from master branch (envoyproxy#106)

* Get attributes from envoy config. (envoyproxy#87)

* Send all attributes.

* Remove unused const strings.

* Address comment.

* updated SHA to point to newer envoy with RDS API feature (envoyproxy#94)

* Disable travis on stable branches (envoyproxy#96)

* Publish debug binaries (no release yet) (envoyproxy#98)

* Copies the binary instead of linking for release (envoyproxy#102)

* Added quota contoll without the service control client library (envoyproxy#93)

* Added quota contoll without the service control client library

* Applied code review

* Applied code review

* Resolve conflicts

* Resolve conflicts

* Fixed format error reported by script/check-style

* Fixed a bug at Aggregated::GetAuthToken that causes Segmentation Fault

* Changed usage of template funcion

* Applied latest changes from the repo

* Applied latest changes from the repo

* Applied latest changes from the repo

* Adde comments

* Updated log information

* Applied envoyproxy#101

* Changed metric_cost_map to metric_cost_vector

* Fixed test case compilation error

* Fixed test case compilation error

* Add unit test for quota config. (envoyproxy#108)

* Add unit test for quota config.

* Add comments.

* Update test specifics.

* Merge latest changes from master branch (envoyproxy#112)

* Get attributes from envoy config. (envoyproxy#87)

* Send all attributes.

* Remove unused const strings.

* Address comment.

* updated SHA to point to newer envoy with RDS API feature (envoyproxy#94)

* Disable travis on stable branches (envoyproxy#96)

* Publish debug binaries (no release yet) (envoyproxy#98)

* Copies the binary instead of linking for release (envoyproxy#102)

* Not to use api_key if its service is not actived. (envoyproxy#109)

* If QuotaControl service is not available, return utils::Status::OK (envoyproxy#113)

* If QuotaControl service is not available, return utils::Status::OK

* Updated comment

* Return HTTP status code 429 on google.rpc.Code.RESOURCE_EXHAUSTED (envoyproxy#119)

* Fixed incorrectly resolved conflicts (envoyproxy#123)

* Added unit test cases for rate limiting (envoyproxy#124)

* Fixed incorrectly resolved conflicts

* Added unit test cases for rate limiting

* Added unit test cases for rate limiting

* Added unit test cases for rate limiting

* Added unit test cases for rate limiting

* Added unit test cases for rate limiting

* Added unit test cases for rate limiting

* Rename response.http.code (envoyproxy#125) (envoyproxy#128)

* Added handling of error code QUOTA_SYSTEM_UNAVAILABLE (envoyproxy#148)

* Integrated service control client library with quota cache aggregation (envoyproxy#149)

* Fixed error on merge (envoyproxy#151)

* Integrated service control client library with quota cache aggregation

* Fixed error on merge

* Fixed the compatibility issue with the latest update on esp (envoyproxy#152)

* Removed copied proto files (envoyproxy#208)

* Set default allocate quota request timeout to 1sec and applied latest service control client library change (envoyproxy#211)

* Merged key_restriction related changes from master (envoyproxy#213)

* Merge latest changes from master branch (envoyproxy#217)

* Not call report if decodeHeaders is not called. (envoyproxy#150)

* Update mixerclient with sync-ed grpc write and fail-fast. (envoyproxy#155)

* Update mixerclient with sync-ed write and fail-fast.

* Update to latest test.

* Update again

* Update envoy to PR553 (envoyproxy#156)

* Update envoy to PR553

* Update libevent to 2.1.8

* Uses a specific version of the Shared Pipeline lib (envoyproxy#158)

* Update lyft/envoy commit Id to latest. (envoyproxy#161)

* Update lyft/envoy commit Id to latest.

* Remove the comment about pull request

* Add new line - will delete in next commit.

* Update repositories.bzl (envoyproxy#169)

* Always set response latency (envoyproxy#172)

* Update mixerclient to sync_transport change. (envoyproxy#178)

* Use opaque config to turn on/off forward attribute and mixer filter (envoyproxy#179)

* Modify mixer filter

* Swap defaults

* Make the filter decoder only

* cache mixer disabled decision

* Fix a bug in opaque config change and test it out (envoyproxy#182)

* Fix a bug and test it out

* Update filter type

* Update README.md

* Update mixer client to mixer api with gogoproto. (envoyproxy#184)

* Move .bazelrc to tools/bazel.rc (envoyproxy#186)

* Move .bazelrc to tools/bazel.rc

* Update Jenkinsfile with latest version of pipeline

* Support apikey based traffic restriction (envoyproxy#189)

* b/36368559 support apikey based traffic restriction

* Fixed code formatting

* Fix crash in unreachable/overloaded RDS (envoyproxy#190)

* Add mixer client end to end integration test. (envoyproxy#177)

* Add mixer client end to end integration test.

* Split some repositories into a separate file.

* use real mixer for fake mixer_server.

* Test repository

* use mixer bzl file.

* Use mixer repositories

* Not to use mixer repository.

* Add return line at the end of WORKSPACE.

* Fix broken link (envoyproxy#193)

* Make quota call (envoyproxy#192)

* hookup quota call

* Make quota call.

* Update indent.

* Update envoy and update configs (envoyproxy#195)

* Update envoy and update configs

* Use gcc-4.9 for travis

* Use bazel 0.4.5

* Fix SHA of lightstep-tracer-common

* Enable check cache and refactory mixer config loading  (envoyproxy#197)

* Refactory the mixer config loading.

* fix format

* Add integration test.

* updated README.md

* s/send/sent/

* Split into separate tests. (envoyproxy#201)

* Update README on how to enable check cache. (envoyproxy#204)

* Update README on how to enable check cache.

* Update the comment.

* build: support Envoy native Bazel build. (envoyproxy#210)

* build: support Envoy native Bazel build.

This patch switches the Envoy build from src/envoy/repositories.bzl to
using the upstream native build.

See envoyproxy#663 for the corresponding changes
on the Envoy side.

* Use Envoy master with BUILD.wip rename merged.

* Fix clang-format issues.

* Fixes bazel.rc issues (envoyproxy#212)

* Fixes bazel rc issues

* Update Jenkins to latest pipeline version

* Updated the commit id of cloudendpoints/service-control-client-cxx (envoyproxy#218)

* Update commitid of cloudendpoints/service-control-client-cxx repo (envoyproxy#220)
rshriram pushed a commit to rshriram/envoy that referenced this issue Oct 30, 2018
* Created check security rules file and a few dummy/helper functions. (envoyproxy#40)

* Created check security rules file and a few dummy/helper functions.

And added it to check work flow.

* Fix format.

* Firebase: Merge from master. (envoyproxy#53)

* Simple TCP server to show how to retrieve original dest IP:port after an iptables redirect (envoyproxy#38)

* Simple TCP server to show how to retrieve original dest IP:port after an iptables redirect

* Fixed style.

* Rebase Envoy (envoyproxy#41)

* Update prototype to use iptables (envoyproxy#42)

* Rebase to fixed Envoy (envoyproxy#43)

* Handle HEAD request. (envoyproxy#34)

* Handle HEAD request.

* Try with GET if HEAD fails.

* Address comments.

* Format file.

* Expose bazel target (envoyproxy#48)

* Try again (envoyproxy#49)

* Enable ESP to invoke Firebase Security rules. (envoyproxy#54)

* Enable ESP to invoke Firebase Security rules.

* Address code review comments.

* Remove some debug logs

* Add proto file to capture TestRulesetRequest.

* clang-format files

* Resolve a merge issue with previous commit

* Allow security rules to disabled via serverconfig

* format file

* Addressed Wayne's review comments.

* Add firebase server to Server Config.

* Address Lizan's review comments

* Address review comments.

* Disable check rules service by default.

* Address more review comments.

* Fix a check.

* Delete unwanted constant.

* Address Wayne's comments and add a simple config test.

* Address a review comment.

* Add negative test case for config

* Address code review

* Remove unwanted const std::string

* Merge from master into firebase (envoyproxy#65)

* Simple TCP server to show how to retrieve original dest IP:port after an iptables redirect (envoyproxy#38)

* Simple TCP server to show how to retrieve original dest IP:port after an iptables redirect

* Fixed style.

* Rebase Envoy (envoyproxy#41)

* Update prototype to use iptables (envoyproxy#42)

* Rebase to fixed Envoy (envoyproxy#43)

* Handle HEAD request. (envoyproxy#34)

* Handle HEAD request.

* Try with GET if HEAD fails.

* Address comments.

* Format file.

* Expose bazel target (envoyproxy#48)

* Try again (envoyproxy#49)

* Integrate with mixer client. (envoyproxy#55)

* Integrate with mixer client.

* Restore  repositories.bzl back.

* Add originIp and originHost attributes. (envoyproxy#56)

* Add uuid-dev dependency in README.md (envoyproxy#45)

* Extract originIp and OriginHost. (envoyproxy#57)

* Extract originIp and OriginHost.

* Make header x-forwarded-host const.

* Update buckets for UI. (envoyproxy#58)

* Update buckets for UI.

* Only update time_distribution.

* Add targetService attribute. (envoyproxy#59)

* Use envoy new access_log handler for sending Report. (envoyproxy#60)

* use access_log handler.

* Not to use Loggable base class.

* Update to the latest envoy with envoyproxy#396. (envoyproxy#61)

* Fix tclap dependency fetching error (envoyproxy#62)

* Update the auth checke to use service.experimental.authorization.providerwq!

* Update the auth check to use service.experimental.authorization.provider

* Update the auth check to use service.experimental.authorization.provider (envoyproxy#67)

* Update the auth check to use service.experimental.authorization.provider

* Address comments and revert accidental change.

* Remove unnecessary added accidentally.

* Another patch

* fix the logic

* fix lint

* Fix broken test and add unit tests

* Fix comments

* Fix style check

* revert style for raw string

* fix small lint

* fix small lint

* fix small lint

* Unit tests for check security rules. (envoyproxy#75)

* Unit tests for check security rules.

* format

* Address review comments.

* Fix typos

* Merge from master to firebase (envoyproxy#143)

* Simple TCP server to show how to retrieve original dest IP:port after an iptables redirect (envoyproxy#38)

* Simple TCP server to show how to retrieve original dest IP:port after an iptables redirect

* Fixed style.

* Rebase Envoy (envoyproxy#41)

* Update prototype to use iptables (envoyproxy#42)

* Rebase to fixed Envoy (envoyproxy#43)

* Handle HEAD request. (envoyproxy#34)

* Handle HEAD request.

* Try with GET if HEAD fails.

* Address comments.

* Format file.

* Expose bazel target (envoyproxy#48)

* Try again (envoyproxy#49)

* Integrate with mixer client. (envoyproxy#55)

* Integrate with mixer client.

* Restore  repositories.bzl back.

* Add originIp and originHost attributes. (envoyproxy#56)

* Add uuid-dev dependency in README.md (envoyproxy#45)

* Extract originIp and OriginHost. (envoyproxy#57)

* Extract originIp and OriginHost.

* Make header x-forwarded-host const.

* Update buckets for UI. (envoyproxy#58)

* Update buckets for UI.

* Only update time_distribution.

* Add targetService attribute. (envoyproxy#59)

* Use envoy new access_log handler for sending Report. (envoyproxy#60)

* use access_log handler.

* Not to use Loggable base class.

* Update to the latest envoy with envoyproxy#396. (envoyproxy#61)

* Fix tclap dependency fetching error (envoyproxy#62)

* Integrate mixer client directly with envoy. (envoyproxy#66)

* Integrate mixer client directly with envoy.

* Send response header in Report.

* rename filter name from esp to mixer.

* add README.

* Add release binary script. (envoyproxy#68)

* Push tar.gz to GCS (envoyproxy#69)

* Push tar.gz to GCS

* Rename envoy_esp

* Remove mixer_client from api_manager. (envoyproxy#72)

* Update mixer client SHA. (envoyproxy#74)

* Update readme. (envoyproxy#73)

* Adds Jenkinsfile and updates release-binary to create a SHA. (envoyproxy#71)

* Adds Jenkinsfile and update release-binary
* Update Jenkinsfile and gitignore
* Fixes typo and use normal build Node
* Uses default bazel config
* Using batch mode
* Update bazel memory settings
* Do not use Jenkins bazel env
* Set .bazelrc for postsubmit

* Update grpc and protobuf (envoyproxy#70)

* protobuf v3.2.0
* grpc v1.1.1
* Align auth lib with grpc 1.1.1

* Add sourceService. (envoyproxy#78)

* Add script to build docker image. (envoyproxy#77)

* Add script to build docker image.

* Add start_envoy for docker image.

* Use official attribute names (envoyproxy#80)

* Use official attribute names

* fix format

* Creates a KEY for mixer client dep. Updates release-binary (envoyproxy#79)

* Updated mixer repo to use a key for commit

* release-binary skip build if file exists.

* Update src/envoy/mixer/README. (envoyproxy#82)

* Fix src/envoy/mixer/README.md (envoyproxy#85)

* Get attributes from envoy config. (envoyproxy#87)

* Send all attributes.

* Remove unused const strings.

* Address comment.

* updated SHA to point to newer envoy with RDS API feature (envoyproxy#94)

* Disable travis on stable branches (envoyproxy#96)

* Publish debug binaries (no release yet) (envoyproxy#98)

* Copies the binary instead of linking for release (envoyproxy#102)

* Not to use api_key if its service is not actived. (envoyproxy#109)

* Update envoy and add c-ares (envoyproxy#107)

* Update envoy and add c-ares depedencies

* Update release script with debug and normal binary

* remove debug ls

* formatting

* Send StatusCode Attributes to Mixer. (envoyproxy#110)

* Add send_attribute filter. (envoyproxy#115)

* Add send_attribute filter.

* Fix format

* rename variable serialized_attributes_

* Address the comments.

* Fail request if api_key is not valid. (envoyproxy#116)

* Fail request if api_key is not valid.

* Format code.

* Update comments.

* Address comment.

* Rename response.http.code (envoyproxy#125)

* Send headers as string map. (envoyproxy#129)

* Send headers as string map.

* Remove origin.ip and origin.host.

* Fix format

* unify bazel's docker build targets with other istio repos (envoyproxy#127)

* update base debug docker image reference (envoyproxy#133)

* Update postsubmit to create docker images (envoyproxy#132)

* Adding config release for bazel build (envoyproxy#135)

* Fix mixer client crash. (envoyproxy#136)

* Get mixerclient with response parsing. (envoyproxy#138)

* Update nghttp2 to sync with envoy (envoyproxy#140)

* Fix src/envoy/mixer/README.md

* Update nghttp2 to sync with envoy

* update

* fix typo

* Merge from master to firebase (envoyproxy#159)

* Simple TCP server to show how to retrieve original dest IP:port after an iptables redirect (envoyproxy#38)

* Simple TCP server to show how to retrieve original dest IP:port after an iptables redirect

* Fixed style.

* Rebase Envoy (envoyproxy#41)

* Update prototype to use iptables (envoyproxy#42)

* Rebase to fixed Envoy (envoyproxy#43)

* Handle HEAD request. (envoyproxy#34)

* Handle HEAD request.

* Try with GET if HEAD fails.

* Address comments.

* Format file.

* Expose bazel target (envoyproxy#48)

* Try again (envoyproxy#49)

* Integrate with mixer client. (envoyproxy#55)

* Integrate with mixer client.

* Restore  repositories.bzl back.

* Add originIp and originHost attributes. (envoyproxy#56)

* Add uuid-dev dependency in README.md (envoyproxy#45)

* Extract originIp and OriginHost. (envoyproxy#57)

* Extract originIp and OriginHost.

* Make header x-forwarded-host const.

* Update buckets for UI. (envoyproxy#58)

* Update buckets for UI.

* Only update time_distribution.

* Add targetService attribute. (envoyproxy#59)

* Use envoy new access_log handler for sending Report. (envoyproxy#60)

* use access_log handler.

* Not to use Loggable base class.

* Update to the latest envoy with envoyproxy#396. (envoyproxy#61)

* Fix tclap dependency fetching error (envoyproxy#62)

* Integrate mixer client directly with envoy. (envoyproxy#66)

* Integrate mixer client directly with envoy.

* Send response header in Report.

* rename filter name from esp to mixer.

* add README.

* Add release binary script. (envoyproxy#68)

* Push tar.gz to GCS (envoyproxy#69)

* Push tar.gz to GCS

* Rename envoy_esp

* Remove mixer_client from api_manager. (envoyproxy#72)

* Update mixer client SHA. (envoyproxy#74)

* Update readme. (envoyproxy#73)

* Adds Jenkinsfile and updates release-binary to create a SHA. (envoyproxy#71)

* Adds Jenkinsfile and update release-binary
* Update Jenkinsfile and gitignore
* Fixes typo and use normal build Node
* Uses default bazel config
* Using batch mode
* Update bazel memory settings
* Do not use Jenkins bazel env
* Set .bazelrc for postsubmit

* Update grpc and protobuf (envoyproxy#70)

* protobuf v3.2.0
* grpc v1.1.1
* Align auth lib with grpc 1.1.1

* Add sourceService. (envoyproxy#78)

* Add script to build docker image. (envoyproxy#77)

* Add script to build docker image.

* Add start_envoy for docker image.

* Use official attribute names (envoyproxy#80)

* Use official attribute names

* fix format

* Creates a KEY for mixer client dep. Updates release-binary (envoyproxy#79)

* Updated mixer repo to use a key for commit

* release-binary skip build if file exists.

* Update src/envoy/mixer/README. (envoyproxy#82)

* Fix src/envoy/mixer/README.md (envoyproxy#85)

* Get attributes from envoy config. (envoyproxy#87)

* Send all attributes.

* Remove unused const strings.

* Address comment.

* updated SHA to point to newer envoy with RDS API feature (envoyproxy#94)

* Disable travis on stable branches (envoyproxy#96)

* Publish debug binaries (no release yet) (envoyproxy#98)

* Copies the binary instead of linking for release (envoyproxy#102)

* Not to use api_key if its service is not actived. (envoyproxy#109)

* Update envoy and add c-ares (envoyproxy#107)

* Update envoy and add c-ares depedencies

* Update release script with debug and normal binary

* remove debug ls

* formatting

* Send StatusCode Attributes to Mixer. (envoyproxy#110)

* Add send_attribute filter. (envoyproxy#115)

* Add send_attribute filter.

* Fix format

* rename variable serialized_attributes_

* Address the comments.

* Fail request if api_key is not valid. (envoyproxy#116)

* Fail request if api_key is not valid.

* Format code.

* Update comments.

* Address comment.

* Rename response.http.code (envoyproxy#125)

* Send headers as string map. (envoyproxy#129)

* Send headers as string map.

* Remove origin.ip and origin.host.

* Fix format

* unify bazel's docker build targets with other istio repos (envoyproxy#127)

* update base debug docker image reference (envoyproxy#133)

* Update postsubmit to create docker images (envoyproxy#132)

* Adding config release for bazel build (envoyproxy#135)

* Fix mixer client crash. (envoyproxy#136)

* Get mixerclient with response parsing. (envoyproxy#138)

* Update nghttp2 to sync with envoy (envoyproxy#140)

* Fix src/envoy/mixer/README.md

* Update nghttp2 to sync with envoy

* update

* fix typo

* Populate origin.user attribute from the SAN field of client cert (envoyproxy#142)

* Test

* test

* test

* revert file

* address comments

* test

* fix typo

* fix format

* fix format

* Update to latest mixer_client. (envoyproxy#145)

* Update to latest mixer_client.

* Updated the sha.

* Not call report if decodeHeaders is not called. (envoyproxy#150)

* Update mixerclient with sync-ed grpc write and fail-fast. (envoyproxy#155)

* Update mixerclient with sync-ed write and fail-fast.

* Update to latest test.

* Update again

* Update envoy to PR553 (envoyproxy#156)

* Update envoy to PR553

* Update libevent to 2.1.8

* Update the Commit id for envoy

* Allow for HTTP based function from Firebase rules (envoyproxy#202)

* Allow for HTTP based function from Firebase rules

* Fix code style check

* Added more comments.

* Fix style issues.

* Address code review comments from Limin and Lizan.

* Add more comments and address CR comments.

* Fix a typo.

* Address Wayne's CR comments.

* Merge from master to firebase (envoyproxy#237)

* Simple TCP server to show how to retrieve original dest IP:port after an iptables redirect (envoyproxy#38)

* Simple TCP server to show how to retrieve original dest IP:port after an iptables redirect

* Fixed style.

* Rebase Envoy (envoyproxy#41)

* Update prototype to use iptables (envoyproxy#42)

* Rebase to fixed Envoy (envoyproxy#43)

* Handle HEAD request. (envoyproxy#34)

* Handle HEAD request.

* Try with GET if HEAD fails.

* Address comments.

* Format file.

* Expose bazel target (envoyproxy#48)

* Try again (envoyproxy#49)

* Integrate with mixer client. (envoyproxy#55)

* Integrate with mixer client.

* Restore  repositories.bzl back.

* Add originIp and originHost attributes. (envoyproxy#56)

* Add uuid-dev dependency in README.md (envoyproxy#45)

* Extract originIp and OriginHost. (envoyproxy#57)

* Extract originIp and OriginHost.

* Make header x-forwarded-host const.

* Update buckets for UI. (envoyproxy#58)

* Update buckets for UI.

* Only update time_distribution.

* Add targetService attribute. (envoyproxy#59)

* Use envoy new access_log handler for sending Report. (envoyproxy#60)

* use access_log handler.

* Not to use Loggable base class.

* Update to the latest envoy with envoyproxy#396. (envoyproxy#61)

* Fix tclap dependency fetching error (envoyproxy#62)

* Integrate mixer client directly with envoy. (envoyproxy#66)

* Integrate mixer client directly with envoy.

* Send response header in Report.

* rename filter name from esp to mixer.

* add README.

* Add release binary script. (envoyproxy#68)

* Push tar.gz to GCS (envoyproxy#69)

* Push tar.gz to GCS

* Rename envoy_esp

* Remove mixer_client from api_manager. (envoyproxy#72)

* Update mixer client SHA. (envoyproxy#74)

* Update readme. (envoyproxy#73)

* Adds Jenkinsfile and updates release-binary to create a SHA. (envoyproxy#71)

* Adds Jenkinsfile and update release-binary
* Update Jenkinsfile and gitignore
* Fixes typo and use normal build Node
* Uses default bazel config
* Using batch mode
* Update bazel memory settings
* Do not use Jenkins bazel env
* Set .bazelrc for postsubmit

* Update grpc and protobuf (envoyproxy#70)

* protobuf v3.2.0
* grpc v1.1.1
* Align auth lib with grpc 1.1.1

* Add sourceService. (envoyproxy#78)

* Add script to build docker image. (envoyproxy#77)

* Add script to build docker image.

* Add start_envoy for docker image.

* Use official attribute names (envoyproxy#80)

* Use official attribute names

* fix format

* Creates a KEY for mixer client dep. Updates release-binary (envoyproxy#79)

* Updated mixer repo to use a key for commit

* release-binary skip build if file exists.

* Update src/envoy/mixer/README. (envoyproxy#82)

* Fix src/envoy/mixer/README.md (envoyproxy#85)

* Get attributes from envoy config. (envoyproxy#87)

* Send all attributes.

* Remove unused const strings.

* Address comment.

* updated SHA to point to newer envoy with RDS API feature (envoyproxy#94)

* Disable travis on stable branches (envoyproxy#96)

* Publish debug binaries (no release yet) (envoyproxy#98)

* Copies the binary instead of linking for release (envoyproxy#102)

* Not to use api_key if its service is not actived. (envoyproxy#109)

* Update envoy and add c-ares (envoyproxy#107)

* Update envoy and add c-ares depedencies

* Update release script with debug and normal binary

* remove debug ls

* formatting

* Send StatusCode Attributes to Mixer. (envoyproxy#110)

* Add send_attribute filter. (envoyproxy#115)

* Add send_attribute filter.

* Fix format

* rename variable serialized_attributes_

* Address the comments.

* Fail request if api_key is not valid. (envoyproxy#116)

* Fail request if api_key is not valid.

* Format code.

* Update comments.

* Address comment.

* Rename response.http.code (envoyproxy#125)

* Send headers as string map. (envoyproxy#129)

* Send headers as string map.

* Remove origin.ip and origin.host.

* Fix format

* unify bazel's docker build targets with other istio repos (envoyproxy#127)

* update base debug docker image reference (envoyproxy#133)

* Update postsubmit to create docker images (envoyproxy#132)

* Adding config release for bazel build (envoyproxy#135)

* Fix mixer client crash. (envoyproxy#136)

* Get mixerclient with response parsing. (envoyproxy#138)

* Update nghttp2 to sync with envoy (envoyproxy#140)

* Fix src/envoy/mixer/README.md

* Update nghttp2 to sync with envoy

* update

* fix typo

* Populate origin.user attribute from the SAN field of client cert (envoyproxy#142)

* Test

* test

* test

* revert file

* address comments

* test

* fix typo

* fix format

* fix format

* Update to latest mixer_client. (envoyproxy#145)

* Update to latest mixer_client.

* Updated the sha.

* Not call report if decodeHeaders is not called. (envoyproxy#150)

* Update mixerclient with sync-ed grpc write and fail-fast. (envoyproxy#155)

* Update mixerclient with sync-ed write and fail-fast.

* Update to latest test.

* Update again

* Update envoy to PR553 (envoyproxy#156)

* Update envoy to PR553

* Update libevent to 2.1.8

* Uses a specific version of the Shared Pipeline lib (envoyproxy#158)

* Update lyft/envoy commit Id to latest. (envoyproxy#161)

* Update lyft/envoy commit Id to latest.

* Remove the comment about pull request

* Add new line - will delete in next commit.

* Update repositories.bzl (envoyproxy#169)

* Always set response latency (envoyproxy#172)

* Update mixerclient to sync_transport change. (envoyproxy#178)

* Use opaque config to turn on/off forward attribute and mixer filter (envoyproxy#179)

* Modify mixer filter

* Swap defaults

* Make the filter decoder only

* cache mixer disabled decision

* Fix a bug in opaque config change and test it out (envoyproxy#182)

* Fix a bug and test it out

* Update filter type

* Update README.md

* Update mixer client to mixer api with gogoproto. (envoyproxy#184)

* Move .bazelrc to tools/bazel.rc (envoyproxy#186)

* Move .bazelrc to tools/bazel.rc

* Update Jenkinsfile with latest version of pipeline

* Support apikey based traffic restriction (envoyproxy#189)

* b/36368559 support apikey based traffic restriction

* Fixed code formatting

* Fix crash in unreachable/overloaded RDS (envoyproxy#190)

* Add mixer client end to end integration test. (envoyproxy#177)

* Add mixer client end to end integration test.

* Split some repositories into a separate file.

* use real mixer for fake mixer_server.

* Test repository

* use mixer bzl file.

* Use mixer repositories

* Not to use mixer repository.

* Add return line at the end of WORKSPACE.

* Fix broken link (envoyproxy#193)

* Make quota call (envoyproxy#192)

* hookup quota call

* Make quota call.

* Update indent.

* Update envoy and update configs (envoyproxy#195)

* Update envoy and update configs

* Use gcc-4.9 for travis

* Use bazel 0.4.5

* Fix SHA of lightstep-tracer-common

* Enable check cache and refactory mixer config loading  (envoyproxy#197)

* Refactory the mixer config loading.

* fix format

* Add integration test.

* updated README.md

* s/send/sent/

* Split into separate tests. (envoyproxy#201)

* Update README on how to enable check cache. (envoyproxy#204)

* Update README on how to enable check cache.

* Update the comment.

* build: support Envoy native Bazel build. (envoyproxy#210)

* build: support Envoy native Bazel build.

This patch switches the Envoy build from src/envoy/repositories.bzl to
using the upstream native build.

See envoyproxy#663 for the corresponding changes
on the Envoy side.

* Use Envoy master with BUILD.wip rename merged.

* Fix clang-format issues.

* Fixes bazel.rc issues (envoyproxy#212)

* Fixes bazel rc issues

* Update Jenkins to latest pipeline version

* Fix go build (envoyproxy#224)

* Use TranscoderInputStream to reduce confusion around ByteCount() (envoyproxy#225)

* Add TranscoderInputStream to reduce confusion

* fix_format

* Merge latest changes from rate_limiting to master (envoyproxy#221)

* Point to googleapi in service control client. (envoyproxy#91)

* Point to googleapi in service control client.

* Use git repository for service-control-client.

* Merge latest changes from master (envoyproxy#104)

* Get attributes from envoy config. (envoyproxy#87)

* Send all attributes.

* Remove unused const strings.

* Address comment.

* updated SHA to point to newer envoy with RDS API feature (envoyproxy#94)

* Disable travis on stable branches (envoyproxy#96)

* Publish debug binaries (no release yet) (envoyproxy#98)

* Copies the binary instead of linking for release (envoyproxy#102)

* Extract quota config from service config. (envoyproxy#101)

* Add metric_cost in config.

* Remove group rules.

* Call loadQuotaConfig in config::create.

* Update latest update from master branch (envoyproxy#106)

* Get attributes from envoy config. (envoyproxy#87)

* Send all attributes.

* Remove unused const strings.

* Address comment.

* updated SHA to point to newer envoy with RDS API feature (envoyproxy#94)

* Disable travis on stable branches (envoyproxy#96)

* Publish debug binaries (no release yet) (envoyproxy#98)

* Copies the binary instead of linking for release (envoyproxy#102)

* Added quota contoll without the service control client library (envoyproxy#93)

* Added quota contoll without the service control client library

* Applied code review

* Applied code review

* Resolve conflicts

* Resolve conflicts

* Fixed format error reported by script/check-style

* Fixed a bug at Aggregated::GetAuthToken that causes Segmentation Fault

* Changed usage of template funcion

* Applied latest changes from the repo

* Applied latest changes from the repo

* Applied latest changes from the repo

* Adde comments

* Updated log information

* Applied envoyproxy#101

* Changed metric_cost_map to metric_cost_vector

* Fixed test case compilation error

* Fixed test case compilation error

* Add unit test for quota config. (envoyproxy#108)

* Add unit test for quota config.

* Add comments.

* Update test specifics.

* Merge latest changes from master branch (envoyproxy#112)

* Get attributes from envoy config. (envoyproxy#87)

* Send all attributes.

* Remove unused const strings.

* Address comment.

* updated SHA to point to newer envoy with RDS API feature (envoyproxy#94)

* Disable travis on stable branches (envoyproxy#96)

* Publish debug binaries (no release yet) (envoyproxy#98)

* Copies the binary instead of linking for release (envoyproxy#102)

* Not to use api_key if its service is not actived. (envoyproxy#109)

* If QuotaControl service is not available, return utils::Status::OK (envoyproxy#113)

* If QuotaControl service is not available, return utils::Status::OK

* Updated comment

* Return HTTP status code 429 on google.rpc.Code.RESOURCE_EXHAUSTED (envoyproxy#119)

* Fixed incorrectly resolved conflicts (envoyproxy#123)

* Added unit test cases for rate limiting (envoyproxy#124)

* Fixed incorrectly resolved conflicts

* Added unit test cases for rate limiting

* Added unit test cases for rate limiting

* Added unit test cases for rate limiting

* Added unit test cases for rate limiting

* Added unit test cases for rate limiting

* Added unit test cases for rate limiting

* Rename response.http.code (envoyproxy#125) (envoyproxy#128)

* Added handling of error code QUOTA_SYSTEM_UNAVAILABLE (envoyproxy#148)

* Integrated service control client library with quota cache aggregation (envoyproxy#149)

* Fixed error on merge (envoyproxy#151)

* Integrated service control client library with quota cache aggregation

* Fixed error on merge

* Fixed the compatibility issue with the latest update on esp (envoyproxy#152)

* Removed copied proto files (envoyproxy#208)

* Set default allocate quota request timeout to 1sec and applied latest service control client library change (envoyproxy#211)

* Merged key_restriction related changes from master (envoyproxy#213)

* Merge latest changes from master branch (envoyproxy#217)

* Not call report if decodeHeaders is not called. (envoyproxy#150)

* Update mixerclient with sync-ed grpc write and fail-fast. (envoyproxy#155)

* Update mixerclient with sync-ed write and fail-fast.

* Update to latest test.

* Update again

* Update envoy to PR553 (envoyproxy#156)

* Update envoy to PR553

* Update libevent to 2.1.8

* Uses a specific version of the Shared Pipeline lib (envoyproxy#158)

* Update lyft/envoy commit Id to latest. (envoyproxy#161)

* Update lyft/envoy commit Id to latest.

* Remove the comment about pull request

* Add new line - will delete in next commit.

* Update repositories.bzl (envoyproxy#169)

* Always set response latency (envoyproxy#172)

* Update mixerclient to sync_transport change. (envoyproxy#178)

* Use opaque config to turn on/off forward attribute and mixer filter (envoyproxy#179)

* Modify mixer filter

* Swap defaults

* Make the filter decoder only

* cache mixer disabled decision

* Fix a bug in opaque config change and test it out (envoyproxy#182)

* Fix a bug and test it out

* Update filter type

* Update README.md

* Update mixer client to mixer api with gogoproto. (envoyproxy#184)

* Move .bazelrc to tools/bazel.rc (envoyproxy#186)

* Move .bazelrc to tools/bazel.rc

* Update Jenkinsfile with latest version of pipeline

* Support apikey based traffic restriction (envoyproxy#189)

* b/36368559 support apikey based traffic restriction

* Fixed code formatting

* Fix crash in unreachable/overloaded RDS (envoyproxy#190)

* Add mixer client end to end integration test. (envoyproxy#177)

* Add mixer client end to end integration test.

* Split some repositories into a separate file.

* use real mixer for fake mixer_server.

* Test repository

* use mixer bzl file.

* Use mixer repositories

* Not to use mixer repository.

* Add return line at the end of WORKSPACE.

* Fix broken link (envoyproxy#193)

* Make quota call (envoyproxy#192)

* hookup quota call

* Make quota call.

* Update indent.

* Update envoy and update configs (envoyproxy#195)

* Update envoy and update configs

* Use gcc-4.9 for travis

* Use bazel 0.4.5

* Fix SHA of lightstep-tracer-common

* Enable check cache and refactory mixer config loading  (envoyproxy#197)

* Refactory the mixer config loading.

* fix format

* Add integration test.

* updated README.md

* s/send/sent/

* Split into separate tests. (envoyproxy#201)

* Update README on how to enable check cache. (envoyproxy#204)

* Update README on how to enable check cache.

* Update the comment.

* build: support Envoy native Bazel build. (envoyproxy#210)

* build: support Envoy native Bazel build.

This patch switches the Envoy build from src/envoy/repositories.bzl to
using the upstream native build.

See envoyproxy#663 for the corresponding changes
on the Envoy side.

* Use Envoy master with BUILD.wip rename merged.

* Fix clang-format issues.

* Fixes bazel.rc issues (envoyproxy#212)

* Fixes bazel rc issues

* Update Jenkins to latest pipeline version

* Updated the commit id of cloudendpoints/service-control-client-cxx (envoyproxy#218)

* Update commitid of cloudendpoints/service-control-client-cxx repo (envoyproxy#220)

* Send delta metrics for intermediate reports. (envoyproxy#219)

* Send delta metrics for intermediate reports.

* Move last_request_bytes/last_response_bytes to RequestContext.

* Handle final report.

* Address comment.

* Update attributes to match the canonical attribute list. (envoyproxy#232)

* Update response.http.code to response.code and response.latency to response.duration to line up with the canonical attributes in istio/istio.github.io/docs/concepts/attributes.md

* Format according to clang-format

* Add envoy Buffer based TranscoderInputStream (envoyproxy#231)

* Add envoy Buffer based TranscoderInputStream

* fix format

* A few doc changes for consistency across repos. (envoyproxy#235)

* Add repositories.bzl

* Added missing export setting in bazel configuration (envoyproxy#236)

* Added export missing in bazel configuration

* Added export missing in bazel configuration

* Allow HTTP functions in firebase rules to specify audience (envoyproxy#244)

* Allow HTTP functions in firebase rules to specify audience

* Allow GetAuthToken to ignore cache and fix style checks.

* Fix GetAuthToken

* Address Wayne's comment

* Check for empty response body

* Remove .bazelrc.jenkins file not present in the master branch.

* Remove forward_attribute_filter.cc not present in master.
PiotrSikora added a commit to PiotrSikora/envoy that referenced this issue Aug 27, 2019
Previously, gInfinity was optimized out because std::isinf(gInfinity)
always evaluates to true, so the global.Infinity variable was never
imported from the host environment.

Signed-off-by: Piotr Sikora <piotrsikora@google.com>
PiotrSikora pushed a commit to PiotrSikora/envoy that referenced this issue Feb 21, 2020
Add upstream and downstream info in parent read callbacks in tcp too(envoyproxy#9949)
wolfguoliang pushed a commit to wolfguoliang/envoy that referenced this issue Jan 23, 2021
zh-translation: docs/root/intro/arch_overview/security/external_deps.rst
jpsim pushed a commit that referenced this issue Nov 28, 2022
Co-authored-by: Jose Ulises Nino Rivera junr03@users.noreply.github.com
Signed-off-by: Mike Schore <mike.schore@gmail.com>
Signed-off-by: JP Simard <jp@jpsim.com>
jpsim pushed a commit that referenced this issue Nov 29, 2022
Co-authored-by: Jose Ulises Nino Rivera junr03@users.noreply.github.com
Signed-off-by: Mike Schore <mike.schore@gmail.com>
Signed-off-by: JP Simard <jp@jpsim.com>
arminabf pushed a commit to arminabf/envoy that referenced this issue Jun 5, 2024
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
enhancement Feature requests. Not bugs or questions.
Projects
None yet
Development

No branches or pull requests

3 participants