{"action":"created","issue":{"url":"https://api.github.com/repos/envoyproxy/envoy/issues/4391","repository_url":"https://api.github.com/repos/envoyproxy/envoy","labels_url":"https://api.github.com/repos/envoyproxy/envoy/issues/4391/labels{/name}","comments_url":"https://api.github.com/repos/envoyproxy/envoy/issues/4391/comments","events_url":"https://api.github.com/repos/envoyproxy/envoy/issues/4391/events","html_url":"https://github.com/envoyproxy/envoy/issues/4391","id":358831097,"node_id":"MDU6SXNzdWUzNTg4MzEwOTc=","number":4391,"title":"Feature Request: Versioning support for filters","user":{"login":"mandarjog","id":800375,"node_id":"MDQ6VXNlcjgwMDM3NQ==","avatar_url":"https://avatars2.githubusercontent.com/u/800375?v=4","gravatar_id":"","url":"https://api.github.com/users/mandarjog","html_url":"https://github.com/mandarjog","followers_url":"https://api.github.com/users/mandarjog/followers","following_url":"https://api.github.com/users/mandarjog/following{/other_user}","gists_url":"https://api.github.com/users/mandarjog/gists{/gist_id}","starred_url":"https://api.github.com/users/mandarjog/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/mandarjog/subscriptions","organizations_url":"https://api.github.com/users/mandarjog/orgs","repos_url":"https://api.github.com/users/mandarjog/repos","events_url":"https://api.github.com/users/mandarjog/events{/privacy}","received_events_url":"https://api.github.com/users/mandarjog/received_events","type":"User","site_admin":false},"labels":[{"id":620444894,"node_id":"MDU6TGFiZWw2MjA0NDQ4OTQ=","url":"https://api.github.com/repos/envoyproxy/envoy/labels/design%20proposal","name":"design proposal","color":"c5def5","default":false}],"state":"open","locked":false,"assignee":null,"assignees":[],"milestone":null,"comments":4,"created_at":"2018-09-10T23:27:43Z","updated_at":"2018-09-12T17:00:55Z","closed_at":null,"author_association":"CONTRIBUTOR","body":"*Title*: *Versioning support for filters*\r\n\r\n*Description*:\r\nStatically linked Envoy filters are registered as various factories such as `NamedListenerFilterConfigFactory` and `NamedHttpFilterConfigFactory`.\r\nAll factories implement `virtual std::string name() PURE;` function that identifies its name.\r\n\r\nWhen envoy calls control plane using XDS, it passes along the [`Node`](https://github.com/envoyproxy/data-plane-api/blob/master/envoy/api/v2/core/base.proto#L40) proto. `build_version` and `metadata` inform the control plane about the specific envoy and the kind of configuration the control plane should generate.\r\n\r\nOut of this `build_version` is a property of the binary and meta data is whatever was placed in the `bootstrap` config at the start.\r\n\r\nIn order for the control plane to generate correct config for each filter, it must know \r\n1. The specific version of the filter that is being configured.\r\n2. Filters that are statically configured in the particular envoy build.\r\n\r\nAt present `build_version` represents both these things in an inexact way.\r\n\r\n**Use case**\r\nConsider a backwards incompatible change in a filter configuration, at present it is not possible to know directly from the binary the version of config that a filter expects.  The workaround is to shove it in the bootstrap config, but this is backwards. Filters and their versions are a property of the build and therefore should not be specified by configuration. \r\n\r\n**Proposal**\r\n1.\r\nAdd the following to all the filter config factories. Existing filters will not need to change code.\r\nWhen a filter needs to avail of version, it should start returning a version.\r\n```c++\r\nvirtual std::string version() { return \"\"; }\r\n```\r\nFilter versions should be manually maintained by the filter author.\r\n\r\n2. \r\nAdd filter versions that maps filter name ==> version to `Node`\r\n```proto\r\nmap<string, string> filter_versions = 6;\r\n```"},"comment":{"url":"https://api.github.com/repos/envoyproxy/envoy/issues/comments/420722926","html_url":"https://github.com/envoyproxy/envoy/issues/4391#issuecomment-420722926","issue_url":"https://api.github.com/repos/envoyproxy/envoy/issues/4391","id":420722926,"node_id":"MDEyOklzc3VlQ29tbWVudDQyMDcyMjkyNg==","user":{"login":"mandarjog","id":800375,"node_id":"MDQ6VXNlcjgwMDM3NQ==","avatar_url":"https://avatars2.githubusercontent.com/u/800375?v=4","gravatar_id":"","url":"https://api.github.com/users/mandarjog","html_url":"https://github.com/mandarjog","followers_url":"https://api.github.com/users/mandarjog/followers","following_url":"https://api.github.com/users/mandarjog/following{/other_user}","gists_url":"https://api.github.com/users/mandarjog/gists{/gist_id}","starred_url":"https://api.github.com/users/mandarjog/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/mandarjog/subscriptions","organizations_url":"https://api.github.com/users/mandarjog/orgs","repos_url":"https://api.github.com/users/mandarjog/repos","events_url":"https://api.github.com/users/mandarjog/events{/privacy}","received_events_url":"https://api.github.com/users/mandarjog/received_events","type":"User","site_admin":false},"created_at":"2018-09-12T17:00:55Z","updated_at":"2018-09-12T17:00:55Z","author_association":"CONTRIBUTOR","body":"1. Could be an implementation detail or recommendation.\r\n2. I think we should require a proper `semver` compatible version. It is much cleaner for the control plane to use it in version constraints. "}}
{"actor":{"display_login":"mandarjog"}}