We want to write these protocols in a way that is not Snowflake-specific but allows any type of bridge to connect to or poll our broker/BridgeDB bridge distribution service.
The idea is that in the beginning we will start with very reliable "bridge" (which could be snowflakes) that perhaps rotate IP addresses every month or so. After that we can collect measurements and move towards more ephemeral "bridges".
Some things to keep in mind are the types of information that the snowflakes give to the broker (such as proxy version/type) to allow for metrics. This information might change so we'll want a flexible and extensible protocol.
To upload designs, you'll need to enable LFS and have an admin enable hashed storage. More information
Child items ...
Show closed items
Linked items 0
Link issues together to show that they're related.
Learn more.
Trac: Keywords: N/Adeleted, snowflake, design added Description: Add information that the snowflakes give to the broker (such as proxy version/type) to allow for metrics.
We want to write these protocols in a way that is not Snowflake-specific but allows any type of bridge to connect to or poll our broker/BridgeDB bridge distribution service.
The idea is that in the beginning we will start with very reliable "bridge" (which could be snowflakes) that perhaps rotate IP addresses every month or so. After that we can collect measurements and move towards more ephemeral "bridges".
Some things to keep in mind are the types of information that the snowflakes give to the broker (such as proxy version/type) to allow for metrics. This information might change so we'll want a flexible and extensible protocol.
Does the "token bucket" algorithm in Snowflake right now do what we think?
I suspect the answer is no. I'm pretty sure BucketRateLimit didn't work before ab34f8e889 (part of #28732 (moved)), and I won't swear that the commit fixed it :) I was tempted, then, to rip out the rate-limit code for the sake of starting from a simpler basis, but decided not to.
I'm pretty sure BucketRateLimit and DummyRateLimit are based off objects of the same name in the flash proxy code. As I recall, they were working in flash proxy.
Thanks serna! I like the idea of providing a 2XX response. This will also help with the error/warning messages produced in the browser-based proxy logs.
As referenced in #29426 (moved), the broker currently gives proxies a 504 message if no client is available which is a questionable design
I suggest changing the status to 204 No Content, it would represent that there's no error but it also no one to connect to.
I disagree here. It's better not to hide any necessary information in the HTTP layer, because not every way of interacting with the broker will have those HTTP features. See for example comment:11:ticket:25985. Even assuming HTTP, codes like 204 are probably less likely to pass untouched by proxies. I propose to just always use status code 200, unless there is a genuine internal server error, and encode all necessary information in the HTTP body. We're not designing a REST interface here.
As referenced in #29426 (moved), the broker currently gives proxies a 504 message if no client is available which is a questionable design
I suggest changing the status to 204 No Content, it would represent that there's no error but it also no one to connect to.
I disagree here. It's better not to hide any necessary information in the HTTP layer, because not every way of interacting with the broker will have those HTTP features. See for example comment:11:ticket:25985. Even assuming HTTP, codes like 204 are probably less likely to pass untouched by proxies. I propose to just always use status code 200, unless there is a genuine internal server error, and encode all necessary information in the HTTP body. We're not designing a REST interface here.
Okay, this makes sense to me. So the idea would be to change all codes to 200 and then do a redesign as suggested in #30704 (moved).