Re: RFC - Client side configuration for a SNI proxy

2020-03-12 Thread Dan Smith
As Bill pointed out, I'm looking into whether we can make an API where a user could plug in their own proxy implementation, somewhat along the lines of what Jake suggested. Just to be clear - Jake's code is more of a demonstration of some concepts than a working prototype. The API we actually need

Re: RFC - Client side configuration for a SNI proxy

2020-03-12 Thread Owen Nichols
I’m not nearly as familiar with proxies as y’all are, but thinking OO here, I would expect an API (interface) that covers all interactions that might involve a proxy, e.g.: interface Proxy { Socket connectSocket(InetSocketAddress hostAndPort); } You could then have several implementations, s

Re: RFC - Client side configuration for a SNI proxy

2020-03-12 Thread Jacob Barrett
Everyone, I would like to hear from more than us 5 people on this. It would be really great if others would chime in. -Jake > On Mar 12, 2020, at 3:05 PM, Bill Burcham wrote: > > Sure Udo. Dan is exploring some ideas now. > > All: let's consider this round of RFC closed (since it official

Re: RFC - Client side configuration for a SNI proxy

2020-03-12 Thread Bill Burcham
Sure Udo. Dan is exploring some ideas now. All: let's consider this round of RFC closed (since it officially closed yesterday) and we'll re-open it with a new deadline when we have those changes in hand. On Thu, Mar 12, 2020 at 8:26 AM Udo Kohlmeyer wrote: > Hi there Jake, > > Another twist to

Re: RFC - Client side configuration for a SNI proxy

2020-03-12 Thread Udo Kohlmeyer
Hi there Jake, Another twist to the story, but with a working (if unpolished ;) ) prototype. It covers all bases of: * Type safety * Extensibility * Simple API design * API clarity It takes the best of all approaches. I like it!! +1 to this implementation. -1 to Bill's approach. @Bil

Re: RFC - Client side configuration for a SNI proxy

2020-03-11 Thread Jacob Barrett
-1 I hate to do this but I really feel like we went backwards on this change. > On Mar 11, 2020, at 3:03 PM, Bill Burcham wrote: > PoolFactory { > setProxyAddress(String host, int port); > } > > ClientCacheFactory { > setPoolProxyAddress(String host, int port); > } It gives the user no infor

Re: RFC - Client side configuration for a SNI proxy

2020-03-11 Thread Dan Smith
+1 to Bill's proposal. -Dan On Wed, Mar 11, 2020 at 3:10 PM Udo Kohlmeyer wrote: > Bill, > > thank you for writing up *_our_* discussion of wrt this matter. > > +1 on the new API suggestion > > +1 to the future expansion, using an SPI approach to extend into support > SOCKS5 aswell. > > Great t

Re: RFC - Client side configuration for a SNI proxy

2020-03-11 Thread Udo Kohlmeyer
Bill, thank you for writing up *_our_* discussion of wrt this matter. +1 on the new API suggestion +1 to the future expansion, using an SPI approach to extend into support SOCKS5 aswell. Great team effort to get this one over the line. --Udo On 3/11/20 3:03 PM, Bill Burcham wrote: In orde

Re: RFC - Client side configuration for a SNI proxy

2020-03-11 Thread Bill Burcham
In order to expeditiously address the current need (SNI proxy configuration) and leave the door open to possible future expansion to other proxy protocols, possibly via an SPI as Jacob alluded, I'd like to propose modifying the current RFC as follows: * eliminate the ProxyType enum * change the na

Re: RFC - Client side configuration for a SNI proxy

2020-03-10 Thread Jacob Barrett
I think we should look at it from the standpoint of an SPI. The proxy work should be pluggable. One implementation we will provide out of the box is SNI. With this in mind geode-core (or better yet geode-proxy-spi) should only define a few interfaces. ProxyConfiguration and ProxyFactory. The

Re: RFC - Client side configuration for a SNI proxy

2020-03-10 Thread Dan Smith
After some side discussions, I think different SniProxyConfiguration, SocksProxyConfiguration, etc. interfaces are more than we need. Just having a type, host and port should support any proxies we might see in the foreseeable future. I like this better: Option A setProxy(ProxyType type, String h

Re: RFC - Client side configuration for a SNI proxy

2020-03-10 Thread Dan Smith
The other reason I like setProxy(SniProxyConfiguration) is that it makes it clear to the user what a legal value to pass in is. with setProxy(ProxyConfiguration) the user can be mislead into thinking they are supposed to implement ProxyConfiguration, but at runtime our code will break if the object

Re: RFC - Client side configuration for a SNI proxy

2020-03-10 Thread John Blum
Again, we should keep the API footprint *small* and quit adding overrides for every type of Proxy we would (potentially) support. What is the point of an abstraction/type-hierarchy if you don't use it? The Enum would give users the possible range of currently supported Proxies anyway. Additional

Re: RFC - Client side configuration for a SNI proxy

2020-03-10 Thread Udo Kohlmeyer
I disagree. I think /setProxy(ProxyConfiguration)/ is 1st prize. If we are concerned that users will not know WHAT options are available.. We could always have a static builder for our supported options. --Udo On 3/10/20 10:07 AM, Dan Smith wrote: Ok, how about this? setProxy(SniProxyConf

Re: RFC - Client side configuration for a SNI proxy

2020-03-10 Thread Dan Smith
Ok, how about this? setProxy(SniProxyConfiguration config) interface SniProxyConfiguration extends ProxyConfiguration { static SniProxyConfiguration create(String host, int port); String getHost(); int getPort() } The main difference here from John's proposal being that setProxy takes a

Re: RFC - Client side configuration for a SNI proxy

2020-03-09 Thread John Blum
Corrections ( :-P ), my apologies... Iterable proxyConfigurations = ...; StreamSupport.stream(proxyConfiguration*s*.*spliterator*(), false) .filter(config -> config.getType.isSecure()) *// This could be improved; see below...* .*forEach*(config -> // do something with *each* secure proxy

Re: RFC - Client side configuration for a SNI proxy

2020-03-09 Thread John Blum
Yes, it's redundant (i.e. Enum + class type). However, having an Enum in addition to a specific type (1 reason I defaulted the getType() method) can still be useful, such as in a switch statement for example. Enums are, well, easier to enumerate (useful in Streams with filters). Maybe you are go

Re: RFC - Client side configuration for a SNI proxy

2020-03-09 Thread Jacob Barrett
Yes it’s redundant. > On Mar 9, 2020, at 5:08 PM, Bill Burcham wrote: > > What I like about John's full-fledged-class-per-proxy-kind is that > everything that can potentially vary with proxy kind is all together in a > single object. > > That being said, John, in your SniProxyConfiguration, it

Re: RFC - Client side configuration for a SNI proxy

2020-03-09 Thread Bill Burcham
What I like about John's full-fledged-class-per-proxy-kind is that everything that can potentially vary with proxy kind is all together in a single object. That being said, John, in your SniProxyConfiguration, it seems to me that the class itself (SniProxyConfiguration) could easily stand for the

Re: RFC - Client side configuration for a SNI proxy

2020-03-09 Thread Jacob Barrett
+1 to Anthony and John. See similar comments in the RFC. > On Mar 9, 2020, at 12:08 PM, Anthony Baker wrote: > > I’m not suggesting encoding the the proxy type in the URI. Just wondering if > we can support stronger typing than String for defining host/port/url > configuration. As John notes

Re: RFC - Client side configuration for a SNI proxy

2020-03-09 Thread Anthony Baker
I’m not suggesting encoding the the proxy type in the URI. Just wondering if we can support stronger typing than String for defining host/port/url configuration. As John notes, later in the thread, perhaps using a configuration interface may help. Anthony > On Mar 9, 2020, at 11:11 AM, Bill

Re: RFC - Client side configuration for a SNI proxy

2020-03-09 Thread Udo Kohlmeyer
@Bill and I were just talking about exact thing. If one adds 1 level of abstraction to this, one might get something that is maybe a little more extendible. That said, we are not expecting to support 100's of different proxy types.. possible only 2. But I do lean towards @JohnB's suggestion..

Re: RFC - Client side configuration for a SNI proxy

2020-03-09 Thread John Blum
Actually, a modification and note... NOTE: Obviously, host/port might apply to more than 1 ProxyType or all. This is just example. And, I would define SniProxyConfiguration as... interface SniProxyConfiguration { default ProxyType getType() { return ProxyType.SNI; } String getHost();

Re: RFC - Client side configuration for a SNI proxy

2020-03-09 Thread John Blum
+1 to using an Enum over separate methods. Less is more and having a smaller footprint (API) is better than an overloaded one where the number of methods could easily explode. That is smart design. Additionally, it is not hard to introduce a bit more abstraction if the parameters might vary by P

Re: RFC - Client side configuration for a SNI proxy

2020-03-09 Thread Dan Smith
> What is your thinking about using the enum vs specific named API’s (e.g. setPoolProxyWithSNI). I think the nice thing about the enum is over separate methods is that it's strongly typed, but it might still allow us to support additional proxy types in the future with less modifications for code

Re: RFC - Client side configuration for a SNI proxy

2020-03-09 Thread Bill Burcham
Anthony and Jacob, I can see how the proposed ProxyType parameter could fit into the scheme part of a a URI. However, the problem that introduces is that we would then have to pick (named) URL schemes to support. But URL schemes are standardized and it's not obvious which of the standard ones might

Re: RFC - Client side configuration for a SNI proxy

2020-03-09 Thread Bill Burcham
By popular demand we are extending the RFC review period. I know Udo asked for Friday (and Joris +1'd it), but since this is a small RFC, we'd like to try to close it by Wednesday, March 11, ok? On Mon, Mar 9, 2020 at 10:39 AM Jacob Barrett wrote: > I raised similar concerns as a comment in the

Re: RFC - Client side configuration for a SNI proxy

2020-03-09 Thread Jacob Barrett
I raised similar concerns as a comment in the RFC. > On Mar 9, 2020, at 10:29 AM, Anthony Baker wrote: > > Given this new API: > >setPoolProxy(ProxyType type, String proxyAddress) > > The ProxyType enum seems to be a look ahead at supporting other kinds of > proxies. What is your thinki

Re: RFC - Client side configuration for a SNI proxy

2020-03-09 Thread Anthony Baker
Given this new API: setPoolProxy(ProxyType type, String proxyAddress) The ProxyType enum seems to be a look ahead at supporting other kinds of proxies. What is your thinking about using the enum vs specific named API’s (e.g. setPoolProxyWithSNI). Currently the definition of the proxyA

Re: RFC - Client side configuration for a SNI proxy

2020-03-09 Thread Joris Melchior
+1 On Fri, Mar 6, 2020 at 2:46 PM Udo Kohlmeyer wrote: > Hi there Bill, > > Whilst I commend your enthusiasm. Giving the community a weekend to > review an RFC is less than optimal. > > Please extend you deadline until 13 March 2020. Which is more reasonable. > > --Udo > > On 3/6/20 11:04 AM, Bi

Re: RFC - Client side configuration for a SNI proxy

2020-03-06 Thread Udo Kohlmeyer
Hi there Bill, Whilst I commend your enthusiasm. Giving the community a weekend to review an RFC is less than optimal. Please extend you deadline until 13 March 2020. Which is more reasonable. --Udo On 3/6/20 11:04 AM, Bill Burcham wrote: Please review the RFC for *Client side configuration

RFC - Client side configuration for a SNI proxy

2020-03-06 Thread Bill Burcham
Please review the RFC for *Client side configuration for a SNI proxy*: https://cwiki.apache.org/confluence/display/GEODE/Client+side+configuration+for+a+SNI+proxy Please comment by Monday, March 9, 2020. Regards, Bill and Ernie