Thanks for the explanation. I do not have a strong opinion regarding this interface. So, if it is better from your perspective, I'm +1 for this. I just saying it may not help a lot regarding the type-safe.
Regarding the bounded wildcard type, yes, it's the implementation detail. If it won't make a difference for user, I'm also +1 for not using bounded wildcard type there. Best, Yangze Guo On Wed, Apr 15, 2020 at 4:23 PM Till Rohrmann <trohrm...@apache.org> wrote: > > I think <T extends ExternalResourceInfo> Set<T> > getExternalResourceInfos(String resourceName, Class<T> > externalResourceType) is not less flexible than the other API since you can > always pass in ExternalResourceInfo.class as the second argument. > > The benefit I see for the user is that he does not have to do the > instanceof checks and type casts himself. This is admittedly not a big deal > but still a better API imo. > > I think the interface of the Driver and what is returned by the > RuntimeContext don't have to have the same type because you can cast it or > repack it. If the current implementation simply stores what the Driver > returns and RuntimeContext returns this map, then it might seem that there > is a connection. But this should be an implementation detail rather than a > necessity. > > Maybe we could also pull in someone from the SDK team to give us his > opinion on the user facing API. > > Cheers, > Till > > On Wed, Apr 15, 2020 at 10:13 AM Xintong Song <tonysong...@gmail.com> wrote: > > > > > > > I agree that such an interface won't give compile time checks but I think > > > that it could be easier to use from a user's perspective because there is > > > no explicit casting required. > > > public interface RuntimeContext { > > > <T extends ExternalResourceInfo> Set<T> > > getExternalResourceInfos(String > > > resourceName, Class<T> externalResourceType); > > > } > > > > > > I'm not sure how less efforts is required from users to pass in a > > `externalResourceType` compared to do an explicit type casting. > > A potential side effect of passing in a `externalResourceType` is that, it > > requires user (e.g. the operator) to know which specific type should be > > returned in advance, which may limit the flexibility. > > > > E.g., we might have an operator that can work with multiple different > > implementations of `ExternalResourceInfo`. It may decide its behavior based > > on the actually type returned by `getExternalResourceInfos` at runtime. > > > > > > Thank you~ > > > > Xintong Song > > > > > > > > On Wed, Apr 15, 2020 at 4:09 PM Yangze Guo <karma...@gmail.com> wrote: > > > > > @Till > > > If we add "Class<T> externalResourceType" param, what if there are > > > multiple subtypes in the ExternalResourceInfos set of one external > > > resource? It seems user has to set the T to ExternalResourceInfo and > > > the mechanism is useless at this case. > > > > > > Best, > > > Yangze Guo > > > > > > On Wed, Apr 15, 2020 at 3:57 PM Till Rohrmann <trohrm...@apache.org> > > > wrote: > > > > > > > > Ok, if there can be multiple resources of the same type then we > > > definitely > > > > need the name as a differentiator. > > > > > > > > I agree that such an interface won't give compile time checks but I > > think > > > > that it could be easier to use from a user's perspective because there > > is > > > > no explicit casting required. > > > > > > > > public interface RuntimeContext { > > > > <T extends ExternalResourceInfo> Set<T> > > > getExternalResourceInfos(String > > > > resourceName, Class<T> externalResourceType); > > > > } > > > > > > > > One minor note: I think the value of the returned map does not need to > > > use > > > > a bounded wildcard type because for the user it won't make a > > difference. > > > > > > > > Cheers, > > > > Till > > > > > > > > On Wed, Apr 15, 2020 at 8:20 AM Yangze Guo <karma...@gmail.com> wrote: > > > > > > > > > Hi Till, > > > > > > > > > > > ExternalResourceDriver could return a Set<? extends > > > > > ExternalResourceInfo>. > > > > > It sounds good. > > > > > > > > > > > then one could make the interface type-safe by changing it to > > > > > > public interface RuntimeContext { > > > > > > <T extends ExternalResourceInfo> Set<T> > > > > > > getExternalResourceInfo(Class<T> externalResourceType); > > > > > > } > > > > > I think it may not help. > > > > > - I think the assumption of "there is always only one resource of a > > > > > specific type" is too strong. The external resource framework should > > > > > only assume it gets a set of ExternalResourceInfo from the driver. > > The > > > > > concrete implementation is given by user. So, if we give such an > > > > > assumption, it would hurt the flexibility. There could be multiple > > > > > types in the returned externalResourceInfo set. There could also be > > > > > different types returned from different driver implementation or > > > > > version. The contract about the return type between Driver and > > > > > Operator should be guaranteed by user. > > > > > - Since the Drivers are loaded dynamically in runtime, if there is a > > > > > type mismatch, the job would fail in runtime instead of in compile > > > > > time, no matter the type extraction is done by Operator or Flink > > core. > > > > > This interface would not gain benefits for type safety. > > > > > > > > > > Best, > > > > > Yangze Guo > > > > > > > > > > On Wed, Apr 15, 2020 at 1:38 AM Till Rohrmann <trohrm...@apache.org> > > > > > wrote: > > > > > > > > > > > > Thanks for updating the FLIP, Yangze. > > > > > > > > > > > > If ExternalResourceInfo is a marker interface, then > > > > > ExternalResourceDriver > > > > > > could return a Set<? extends ExternalResourceInfo>. This makes is a > > > bit > > > > > > nicer for the implementor because he can use the concrete subtype. > > > > > > > > > > > > If we assume that users will always cast the ExternalResourceInfo > > > > > instance > > > > > > into the concrete subtype and if we assume that there is always > > only > > > one > > > > > > resource of a specific type, then one could make the interface > > > type-safe > > > > > by > > > > > > changing it to > > > > > > > > > > > > public interface RuntimeContext { > > > > > > <T extends ExternalResourceInfo> Set<T> > > > > > > getExternalResourceInfo(Class<T> externalResourceType); > > > > > > } > > > > > > > > > > > > If we want to support multiple GPU resources, then one would need > > to > > > use > > > > > > the name of the respective resource as well. > > > > > > > > > > > > Cheers, > > > > > > Till > > > > > > > > > > > > On Mon, Apr 13, 2020 at 4:19 AM Xintong Song < > > tonysong...@gmail.com> > > > > > wrote: > > > > > > > > > > > > > Thanks for updating the FLIP, Yangze. > > > > > > > The latest FLIP looks good to me. > > > > > > > > > > > > > > nit: Javadoc of `ExternalResourceDriver#retrieveResourceInfo` is > > > out of > > > > > > > sync. > > > > > > > > > > > > > > > Retrieve the information of the external resources according to > > > the > > > > > > > > resourceProfile. > > > > > > > > > > > > > > > > > > > > > Thank you~ > > > > > > > > > > > > > > Xintong Song > > > > > > > > > > > > > > > > > > > > > > > > > > > > On Sat, Apr 11, 2020 at 11:04 AM Becket Qin < > > becket....@gmail.com> > > > > > wrote: > > > > > > > > > > > > > > > Good feedback form Xintong. The latest FLIP looks good to me. > > > > > > > > > > > > > > > > Thanks, > > > > > > > > > > > > > > > > Jiangjie (Becket) Qin > > > > > > > > > > > > > > > > On Sat, Apr 11, 2020 at 9:20 AM Yangze Guo <karma...@gmail.com > > > > > > > > wrote: > > > > > > > > > > > > > > > > > Hi there, > > > > > > > > > I've updated the FLIP accordingly. Please take a look. If you > > > have > > > > > any > > > > > > > > > further concerns please let me know. > > > > > > > > > > > > > > > > > > Best, > > > > > > > > > Yangze Guo > > > > > > > > > > > > > > > > > > On Fri, Apr 10, 2020 at 6:40 PM Yangze Guo < > > karma...@gmail.com > > > > > > > > > wrote: > > > > > > > > > > > > > > > > > > > > Thanks for the feedback, Xintong. > > > > > > > > > > > > > > > > > > > > - Should we have a factory interface for > > > > > `ExternalResourceDriver`, > > > > > > > that > > > > > > > > > > takes the configuration and returns a driver instance? > > > > > Otherwise, if > > > > > > > we > > > > > > > > > are > > > > > > > > > > creating the driver instance with reflection, we kind of > > > > > implicitly > > > > > > > > > > requires the driver to have a public non-argument > > > constructor. > > > > > If we > > > > > > > > > > decided to go with this approach, then we will not need > > > > > > > > > > `ExternalResourceDriver#open`. > > > > > > > > > > > > > > > > > > > > True, we could have an `ExternalResourceDriverFactory`, > > like > > > > > > > > > > interface ExternalResourceDriverFactory { > > > > > > > > > > ExternalResourceDriver fromConfiguration(Configuration > > > > > config); > > > > > > > > > > } > > > > > > > > > > Regarding the configuration, the user should provide > > > > > > > > > > "external-resource.{resourceName}.driver-factory.class" > > > instead. > > > > > > > > > > > > > > > > > > > > - Not sure about the necessity of > > > > > `ExternalResourceDriver#close`. I > > > > > > > > would > > > > > > > > > > suggest to avoid introduce more interfaces if not > > absolutely > > > > > > > necessary. > > > > > > > > > > > > > > > > > > > > I add `ExternalResourceDriver#close` in case user needs to > > > clean > > > > > up > > > > > > > > > > internal states and any other resources. It's true that it > > > may > > > > > not > > > > > > > > > > absolutely necessary for our GPUDriver. From my side, I'm > > ok > > > to > > > > > > > remove > > > > > > > > > > it. > > > > > > > > > > > > > > > > > > > > - `ExternalResourceDriver#retrieveResourceInfo` should not > > > take > > > > > > > > > > `ResourceProfile` as argument. This exposes more > > information > > > > > than it > > > > > > > > > needs. > > > > > > > > > > In addition, it requires the runtime/core to understand how > > > to > > > > > > > properly > > > > > > > > > > wrap the external resource into `ResourceProfile`. E.g., > > > > > > > > > > `ResourceProfile#extendedResources` takes `Resource`, which > > > is an > > > > > > > > > abstract > > > > > > > > > > class. Runtime/core has to known which implementation of > > > > > `Resource` > > > > > > > to > > > > > > > > > use. > > > > > > > > > > > > > > > > > > > > True, at the moment, I think the amount of the resource is > > > > > enough for > > > > > > > > > > the `ExternalResourceDriver#retrieveResourceInfo`. In the > > > > > future, if > > > > > > > > > > the fine-grained external resource management is supported, > > > the > > > > > > > amount > > > > > > > > > > of the resource seems to be enough either. If we want to > > > leverage > > > > > > > some > > > > > > > > > > external resources which could not be measured by a single > > > long > > > > > > > value, > > > > > > > > > > we might enrich this. But I'd like to keep it out of the > > > scope of > > > > > > > this > > > > > > > > > > FLIP. > > > > > > > > > > > > > > > > > > > > - Do we really need `ExternalResourceInfo#getInformation`? > > I > > > > > think it > > > > > > > > > > should be good enough to make `ExternalResourceInfo` an > > empty > > > > > > > > interface. > > > > > > > > > > User can define their own `ExternalResourceInfo` > > > implementation > > > > > and > > > > > > > how > > > > > > > > > it > > > > > > > > > > is used by the operator user codes. > > > > > > > > > > > > > > > > > > > > Sounds good. > > > > > > > > > > > > > > > > > > > > Best, > > > > > > > > > > Yangze Guo > > > > > > > > > > > > > > > > > > > > On Fri, Apr 10, 2020 at 6:04 PM Xintong Song < > > > > > tonysong...@gmail.com> > > > > > > > > > wrote: > > > > > > > > > > > > > > > > > > > > > > Sorry to pull this back. I have some concerns about the > > > recent > > > > > > > > updated > > > > > > > > > > > interface details. > > > > > > > > > > > > > > > > > > > > > > - Should we have a factory interface for > > > > > `ExternalResourceDriver`, > > > > > > > > that > > > > > > > > > > > takes the configuration and returns a driver instance? > > > > > Otherwise, > > > > > > > if > > > > > > > > > we are > > > > > > > > > > > creating the driver instance with reflection, we kind of > > > > > implicitly > > > > > > > > > > > requires the driver to have a public non-argument > > > constructor. > > > > > If > > > > > > > we > > > > > > > > > > > decided to go with this approach, then we will not need > > > > > > > > > > > `ExternalResourceDriver#open`. > > > > > > > > > > > - Not sure about the necessity of > > > > > `ExternalResourceDriver#close`. I > > > > > > > > > would > > > > > > > > > > > suggest to avoid introduce more interfaces if not > > > absolutely > > > > > > > > necessary. > > > > > > > > > > > - `ExternalResourceDriver#retrieveResourceInfo` should > > not > > > take > > > > > > > > > > > `ResourceProfile` as argument. This exposes more > > > information > > > > > than > > > > > > > it > > > > > > > > > needs. > > > > > > > > > > > In addition, it requires the runtime/core to understand > > > how to > > > > > > > > properly > > > > > > > > > > > wrap the external resource into `ResourceProfile`. E.g., > > > > > > > > > > > `ResourceProfile#extendedResources` takes `Resource`, > > > which is > > > > > an > > > > > > > > > abstract > > > > > > > > > > > class. Runtime/core has to known which implementation of > > > > > `Resource` > > > > > > > > to > > > > > > > > > use. > > > > > > > > > > > - Do we really need > > `ExternalResourceInfo#getInformation`? > > > I > > > > > think > > > > > > > it > > > > > > > > > > > should be good enough to make `ExternalResourceInfo` an > > > empty > > > > > > > > > interface. > > > > > > > > > > > User can define their own `ExternalResourceInfo` > > > > > implementation and > > > > > > > > > how it > > > > > > > > > > > is used by the operator user codes. > > > > > > > > > > > > > > > > > > > > > > Thank you~ > > > > > > > > > > > > > > > > > > > > > > Xintong Song > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > On Thu, Apr 9, 2020 at 2:25 PM Becket Qin < > > > > > becket....@gmail.com> > > > > > > > > > wrote: > > > > > > > > > > > > > > > > > > > > > > > +1 > > > > > > > > > > > > > > > > > > > > > > > > Thanks for driving this effort, Ynagze. The latest FLIP > > > wiki > > > > > > > looks > > > > > > > > > good to > > > > > > > > > > > > me. > > > > > > > > > > > > > > > > > > > > > > > > Cheers, > > > > > > > > > > > > > > > > > > > > > > > > Jiangjie (Becket) Qin > > > > > > > > > > > > > > > > > > > > > > > > On Wed, Apr 8, 2020 at 4:10 PM Yangze Guo < > > > > > karma...@gmail.com> > > > > > > > > > wrote: > > > > > > > > > > > > > > > > > > > > > > > > > Edit: RuntimeContext interface > > > > > > > > > > > > > From: Map<String, Set<ExternalResourceInfo>> > > > > > > > > > > > > > getExternalResourceInfo(ResourceSpec resourceSpec); > > > > > > > > > > > > > To: Map<String, Set<ExternalResourceInfo>> > > > > > > > > > getExternalResourceInfo(); > > > > > > > > > > > > > > > > > > > > > > > > > > Best, > > > > > > > > > > > > > Yangze Guo > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > On Wed, Apr 8, 2020 at 11:36 AM Yangze Guo < > > > > > karma...@gmail.com > > > > > > > > > > > > > > > > > wrote: > > > > > > > > > > > > > > > > > > > > > > > > > > > > Hi, there > > > > > > > > > > > > > > > > > > > > > > > > > > > > I have updated the FLIP, mainly target to make it > > > more > > > > > > > detailed > > > > > > > > > and > > > > > > > > > > > > > > clear. The general design is not changed, but there > > > are > > > > > still > > > > > > > > > some > > > > > > > > > > > > > > changes need to be notified here: > > > > > > > > > > > > > > > > > > > > > > > > > > > > - Change the `ExternalResourceDriver` from abstract > > > > > class to > > > > > > > > > > > > > > interface, since it does not have an abstract > > > > > implementation. > > > > > > > > > Add life > > > > > > > > > > > > > > cycle method `open` and `close`. > > > > > > > > > > > > > > > > > > > > > > > > > > > > - Specify the method added to the RuntimeContext > > from > > > > > which > > > > > > > > user > > > > > > > > > get > > > > > > > > > > > > > > the information of external resources. > > > > > > > > > > > > > > Map<String, Set<ExternalResourceInfo>> > > > > > > > > > > > > > > getExternalResourceInfo(ResourceSpec resourceSpec); > > > > > > > > > > > > > > > > > > > > > > > > > > > > - Add "String getInformation()" method to > > > > > > > > `ExternalResourceInfo` > > > > > > > > > > > > > interface. > > > > > > > > > > > > > > > > > > > > > > > > > > > > - Treat adding external resource info to > > > RestAPI/WebUI > > > > > as a > > > > > > > > > future > > > > > > > > > > > > work. > > > > > > > > > > > > > > > > > > > > > > > > > > > > If you have any new concerns after that change, > > > please > > > > > > > > mentioned > > > > > > > > > here. > > > > > > > > > > > > > > Sorry for disturbing you. > > > > > > > > > > > > > > > > > > > > > > > > > > > > Best, > > > > > > > > > > > > > > Yangze Guo > > > > > > > > > > > > > > > > > > > > > > > > > > > > On Wed, Apr 8, 2020 at 9:55 AM Yang Wang < > > > > > > > > danrtsey...@gmail.com> > > > > > > > > > > > > wrote: > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > Thanks Yangze for the efforts to support GPU > > > extended > > > > > > > > > resources. > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > +1 for this FLIP > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > Best, > > > > > > > > > > > > > > > Yang > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > Till Rohrmann <trohrm...@apache.org> > > 于2020年4月2日周四 > > > > > > > 下午11:10写道: > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > Thanks for driving this effort Yangze. > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > +1 > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > Cheers, > > > > > > > > > > > > > > > > Till > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > On Wed, Apr 1, 2020 at 12:41 PM Canbin Zheng < > > > > > > > > > > > > felixzhen...@gmail.com > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > wrote: > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > Thanks Yangze for driving the initial CPU > > > support! > > > > > > > > > > > > > > > > > +1 (non-binding) from my side. > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > Xintong Song <tonysong...@gmail.com> > > > 于2020年4月1日周三 > > > > > > > > > 下午6:36写道: > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > Thanks Yangze, the FLIP looks good to me. > > > > > > > > > > > > > > > > > > +1 (non-binding) from my side. > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > Thank you~ > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > Xintong Song > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > On Wed, Apr 1, 2020 at 5:22 PM Yangze Guo < > > > > > > > > > karma...@gmail.com> > > > > > > > > > > > > > wrote: > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > Hi everyone, > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > I'd like to start the vote of FLIP-108 > > [1], > > > > > which > > > > > > > > adds > > > > > > > > > GPU > > > > > > > > > > > > > support in > > > > > > > > > > > > > > > > > > > Flink. This FLIP is discussed in the > > > thread[2]. > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > The vote will be open for at least 72 > > > hours. > > > > > Unless > > > > > > > > > there is > > > > > > > > > > > > an > > > > > > > > > > > > > > > > > > objection, > > > > > > > > > > > > > > > > > > > I will try to close it by April 4, 2020 > > > 10:00 > > > > > UTC > > > > > > > if > > > > > > > > > we have > > > > > > > > > > > > > received > > > > > > > > > > > > > > > > > > > sufficient votes. > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > [1] > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > https://cwiki.apache.org/confluence/display/FLINK/FLIP-108%3A+Add+GPU+support+in+Flink > > > > > > > > > > > > > > > > > > > [2] > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > http://apache-flink-mailing-list-archive.1008284.n3.nabble.com/DISCUSS-FLIP-108-Add-GPU-support-in-Flink-td38286.html > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > Best, > > > > > > > > > > > > > > > > > > > Yangze Guo > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > >