Add config proto for FileSystemBuffer filter (#20788)
Signed-off-by: Raven Black <ravenblack@dropbox.com> Mirrored from https://github.com/envoyproxy/envoy @ a2776d8e86eb3d593976f0d0a8a941b7ee233184pull/626/head
parent
59653fa01d
commit
419533a5de
4 changed files with 146 additions and 0 deletions
@ -0,0 +1,13 @@ |
|||||||
|
# DO NOT EDIT. This file is generated by tools/proto_format/proto_sync.py. |
||||||
|
|
||||||
|
load("@envoy_api//bazel:api_build_system.bzl", "api_proto_package") |
||||||
|
|
||||||
|
licenses(["notice"]) # Apache 2 |
||||||
|
|
||||||
|
api_proto_package( |
||||||
|
deps = [ |
||||||
|
"//envoy/extensions/common/async_files/v3:pkg", |
||||||
|
"@com_github_cncf_udpa//udpa/annotations:pkg", |
||||||
|
"@com_github_cncf_udpa//xds/annotations/v3:pkg", |
||||||
|
], |
||||||
|
) |
@ -0,0 +1,131 @@ |
|||||||
|
syntax = "proto3"; |
||||||
|
|
||||||
|
package envoy.extensions.filters.http.file_system_buffer.v3; |
||||||
|
|
||||||
|
import "envoy/extensions/common/async_files/v3/async_file_manager.proto"; |
||||||
|
|
||||||
|
import "google/protobuf/wrappers.proto"; |
||||||
|
|
||||||
|
import "xds/annotations/v3/status.proto"; |
||||||
|
|
||||||
|
import "udpa/annotations/status.proto"; |
||||||
|
import "validate/validate.proto"; |
||||||
|
|
||||||
|
option java_package = "io.envoyproxy.envoy.extensions.filters.http.file_system_buffer.v3"; |
||||||
|
option java_outer_classname = "FileSystemBufferProto"; |
||||||
|
option java_multiple_files = true; |
||||||
|
option go_package = "github.com/envoyproxy/go-control-plane/envoy/extensions/filters/http/file_system_buffer/v3;file_system_bufferv3"; |
||||||
|
option (udpa.annotations.file_status).package_version_status = ACTIVE; |
||||||
|
option (xds.annotations.v3.file_status).work_in_progress = true; |
||||||
|
|
||||||
|
// [#not-implemented-hide:] |
||||||
|
// The behavior of the filter for a stream. |
||||||
|
// [#next-free-field: 6] |
||||||
|
message BufferBehavior { |
||||||
|
message StreamWhenPossible { |
||||||
|
} |
||||||
|
|
||||||
|
message Bypass { |
||||||
|
} |
||||||
|
|
||||||
|
message InjectContentLengthIfNecessary { |
||||||
|
} |
||||||
|
|
||||||
|
message FullyBufferAndAlwaysInjectContentLength { |
||||||
|
} |
||||||
|
|
||||||
|
message FullyBuffer { |
||||||
|
} |
||||||
|
|
||||||
|
oneof behavior { |
||||||
|
option (validate.required) = true; |
||||||
|
|
||||||
|
// Don't inject ``content-length`` header. |
||||||
|
// Output immediately, buffer only if output is slower than input. |
||||||
|
StreamWhenPossible stream_when_possible = 1; |
||||||
|
|
||||||
|
// Never buffer, do nothing. |
||||||
|
Bypass bypass = 2; |
||||||
|
|
||||||
|
// If ``content-length`` is not present, buffer the entire input, |
||||||
|
// inject ``content-length`` header, then output. |
||||||
|
// If ``content-length`` is already present, act like ``stream_when_possible``. |
||||||
|
InjectContentLengthIfNecessary inject_content_length_if_necessary = 3; |
||||||
|
|
||||||
|
// Always buffer the entire input, and inject ``content-length``, |
||||||
|
// overwriting any provided content-length header. |
||||||
|
FullyBufferAndAlwaysInjectContentLength fully_buffer_and_always_inject_content_length = 4; |
||||||
|
|
||||||
|
// Always buffer the entire input, do not modify ``content-length``. |
||||||
|
FullyBuffer fully_buffer = 5; |
||||||
|
} |
||||||
|
} |
||||||
|
|
||||||
|
// [#not-implemented-hide:] |
||||||
|
// The configuration for one direction of the filter behavior. |
||||||
|
message StreamConfig { |
||||||
|
// Whether to bypass / stream / fully buffer / etc. |
||||||
|
// If unset in route, vhost and listener config, the default is ``stream_when_possible``. |
||||||
|
BufferBehavior behavior = 1; |
||||||
|
|
||||||
|
// The amount stored in the memory buffer before buffering to disk. |
||||||
|
// If unset in route, vhost and listener config, defaults to a hardcoded value of 1MiB |
||||||
|
google.protobuf.UInt64Value memory_buffer_bytes_limit = 2; |
||||||
|
|
||||||
|
// The maximum storage (excluding memory) to be buffered in this filter. |
||||||
|
// If unset in route, vhost and listener config, defaults to a hardcoded value of 32MiB |
||||||
|
google.protobuf.UInt64Value storage_buffer_bytes_limit = 3; |
||||||
|
|
||||||
|
// The maximum amount that can be queued for writing to storage, above which the |
||||||
|
// source is requested to pause. If unset, defaults to the same value as |
||||||
|
// ``memory_buffer_bytes_limit``. |
||||||
|
// |
||||||
|
// For example, assuming the recipient is not consuming data at all, if |
||||||
|
// ``memory_buffer_bytes_limit`` was 32MiB, and ``storage_buffer_queue_high_watermark_bytes`` |
||||||
|
// was 64MiB, and the filesystem is backed up so writes are not occurring promptly, |
||||||
|
// then: |
||||||
|
// * Any request less than 32MiB will eventually pass through without ever attempting |
||||||
|
// to write to disk. |
||||||
|
// * Any request with over 32MiB buffered will start trying to write to disk. |
||||||
|
// * If it reaches (32+64)MiB buffered and not yet written to disk, a high |
||||||
|
// watermark signal is sent to the source. |
||||||
|
// * Any stream whose total size exceeds |
||||||
|
// ``memory_buffer_bytes_limit + storage_buffer_bytes_limit`` will provoke an error. |
||||||
|
// (Note, if the recipient *is* consuming data then it is possible for such an |
||||||
|
// oversized request to pass through the buffer filter, provided the recipient |
||||||
|
// isn't consuming data too slowly.) |
||||||
|
// |
||||||
|
// The low watermark signal is sent when the memory buffer is at size |
||||||
|
// ``memory_buffer_bytes_limit + (storage_buffer_queue_high_watermark_bytes / 2)``. |
||||||
|
google.protobuf.UInt64Value storage_buffer_queue_high_watermark_bytes = 4; |
||||||
|
} |
||||||
|
|
||||||
|
// [#not-implemented-hide:] |
||||||
|
// Configuration for file system buffer filter. |
||||||
|
// |
||||||
|
// Route-specific configs override only the fields they explicitly include; unset |
||||||
|
// fields inherit from the vhost or listener-level config, or, if never set, |
||||||
|
// and not required, use a default value. |
||||||
|
message FileSystemBufferFilterConfig { |
||||||
|
// A configuration for an AsyncFileManager. |
||||||
|
// |
||||||
|
// If unset in route, vhost and listener, an exception will be thrown. |
||||||
|
common.async_files.v3.AsyncFileManagerConfig manager_config = 1; |
||||||
|
|
||||||
|
// An optional path to which the unlinked files should be written - this may |
||||||
|
// determine which physical storage device will be used. |
||||||
|
// |
||||||
|
// If unset in route, vhost and listener, will use the environment variable |
||||||
|
// ``TMPDIR``, or, if that's also unset, will use ``/tmp``. |
||||||
|
google.protobuf.StringValue storage_buffer_path = 2; |
||||||
|
|
||||||
|
// Optional configuration for how to buffer (or not) requests. |
||||||
|
// If unset in route, vhost and listener, ``StreamConfig`` default values will be used |
||||||
|
// (with behavior ``stream_when_possible``) |
||||||
|
StreamConfig request = 3; |
||||||
|
|
||||||
|
// Optional configuration for how to buffer (or not) responses. |
||||||
|
// If unset in route, vhost and listener, ``StreamConfig`` default values will be used |
||||||
|
// (with behavior ``stream_when_possible``) |
||||||
|
StreamConfig response = 4; |
||||||
|
} |
Loading…
Reference in new issue