Hi everyone, Thank you everyone for your valuable input. If there are no further questions or concerns about the FLIP[1], I would like to start voting tomorrow (6/7).
[1] https://cwiki.apache.org/confluence/display/FLINK/FLIP-295%3A+Support+lazy+initialization+of+catalogs+and+persistence+of+catalog+configurations Best, Feng On Sun, Jun 4, 2023 at 3:33 PM Feng Jin <jinfeng1...@gmail.com> wrote: > Hi Samrat, > > Thanks for your advice. > > > 1. The createCatalog method does not mention any exceptions being > thrown. > > CreateCatalog will throw CatalogException like registerCatalog. As > CatalogException is a RuntimeException, > there is no explicit declaration of throwing Exceptions in CatalogManager > and TableEnvironment. > To avoid misunderstandings, I have added the "throw CatalogException" flag > to the createCatalog method definition of CatalogStore. > > > 2. Could you please provide an exhaustive list of the supported kinds? > > Sure, the documentation now includes the configuration of the built-in > CatalogStore as well as how to configure a custom CatalogStore. > > > Best, > Feng > > > On Sun, Jun 4, 2023 at 4:23 AM Samrat Deb <decordea...@gmail.com> wrote: > >> Hi Feng, >> >> Thank you for providing the proposal. I believe this feature will be >> highly >> valuable. >> >> I have a couple of inquiries: >> >> 1. According to the documentation [1], the createCatalog method does not >> mention any exceptions being thrown. However, I would like to confirm if >> it >> is always true that there will be no failures in all scenarios. Please let >> me know if there is any additional information I may have missed. >> >> 2. Regarding the registration process using the `table.catalog-store.kind` >> configuration, could you please provide an exhaustive list of the >> supported >> kinds? >> It would be great to have a comprehensive understanding of the options >> available. >> >> Bests, >> Samrat >> >> [1] >> >> https://cwiki.apache.org/confluence/display/FLINK/FLIP-295%3A+Support+lazy+initialization+of+catalogs+and+persistence+of+catalog+configurations >> >> On Sat, Jun 3, 2023 at 5:54 PM Feng Jin <jinfeng1...@gmail.com> wrote: >> >> > Hi Hang and Jark >> > >> > Thank you very much for your reply. >> > >> > @Jark >> > > 1. Could you move the CatalogStore registration API to the "Public >> > Interface" section? >> > >> > Indeed, it is more reasonable. >> > >> > > 2. We should prefix "table." for the CatalogStore configuration. >> > >> > Sure, the names that you provided are indeed more logical and easier >> to >> > understand. >> > >> > > 3. About the open/close method in CatalogStoreFactory. >> > >> > I also agree with the proposed requirement scenario and design. I have >> > already made modifications to the interface. >> > >> > @Hang >> > >> > > 1. The `CatalogStore` need the `open`/`close` methods to init or close >> > the resource. >> > >> > I have already added the missing method. >> > >> > > 2. The `getCatalog` is misspelled as `optionalDescriptor`. >> > >> > Sorry for the misspelling, I updated this part. >> > >> > > 3. Then the `CatalogStoreFactory` may need the `open`/`close` methods >> > to init or close its resource >> > >> > This is indeed a scenario that needs to be considered, and I have added >> > relevant methods accordingly. >> > Additionally, I have included some relevant description information in >> the >> > documentation to help others understand >> > why the open/close methods need to be added. >> > >> > >> > Best, >> > Feng >> > >> > On Sat, Jun 3, 2023 at 12:35 PM Jark Wu <imj...@gmail.com> wrote: >> > >> > > Hi Jing, >> > > >> > > Thank you for the update. >> > > >> > > 1. Could you move the CatalogStore registration API to the "Public >> > > Interface" section? >> > > "Proposed Changes" is more like a place to describe the implementation >> > > details. >> > > >> > > 2. We should prefix "table." for the CatalogStore configuration. >> Besides, >> > > the config key >> > > name should be hierarchical[1]. Therefore, it may be better to use: >> > > "table.catalog-store.kind" >> > > "table.catalog-store.file.path" >> > > >> > > 3. I think Hang's suggestions make sense. >> > > >> > > Others look good to me. >> > > >> > > Best, >> > > Jark >> > > >> > > On Fri, 2 Jun 2023 at 17:28, Hang Ruan <ruanhang1...@gmail.com> >> wrote: >> > > >> > > > Hi, Feng. >> > > > >> > > > Thanks for the update. >> > > > The current design looks good to me. I have some minor comments. >> > > > >> > > > 1. The `CatalogStore` need the `open`/`close` methods to init or >> close >> > > the >> > > > resource. For example, when storing the information in MySQL, the >> store >> > > > needs to open and close the connections. >> > > > >> > > > 2. The `getCatalog` is misspelled as `optionalDescriptor`. >> > > > >> > > > 3. About the usage in the sql gateway. >> > > > Considering the usage in sql gateway, the sql gateway may create a >> > > > CatalogStore for each session. >> > > > If we are using the MySqlCatalogStore, there would be so many >> > > connections. >> > > > How can we reuse the connection among these sessions? >> > > > I think sql gateway need to maintain a connection pool in >> > > > the CatalogStoreFactory and each session get its own connection from >> > the >> > > > pool when it is created. >> > > > Then the `CatalogStoreFactory` may need the `open`/`close` methods >> to >> > > init >> > > > or close its resource. >> > > > Or is there a better way? >> > > > >> > > > Best, >> > > > Hang >> > > > >> > > > Feng Jin <jinfeng1...@gmail.com> 于2023年6月2日周五 14:45写道: >> > > > >> > > > > Thanks Jingsong. >> > > > > >> > > > > > Just naming, maybe `createCatalog` in TableEnv >> > > > > >> > > > > +1 For this, I have already updated FLIP. >> > > > > >> > > > > >> > > > > Best, >> > > > > Feng >> > > > > >> > > > > >> > > > > On Fri, Jun 2, 2023 at 11:32 AM Jingsong Li < >> jingsongl...@gmail.com> >> > > > > wrote: >> > > > > >> > > > > > Thanks Feng, >> > > > > > >> > > > > > Just naming, maybe `createCatalog` in TableEnv, I can see many >> > > > > > functions are converted to createxxx from registerxxx. >> > > > > > >> > > > > > On Fri, Jun 2, 2023 at 11:04 AM Feng Jin <jinfeng1...@gmail.com >> > >> > > > wrote: >> > > > > > > >> > > > > > > Hi jark, thanks for your suggestion. >> > > > > > > >> > > > > > > > 1. How to register the CatalogStore for Table API? I think >> the >> > > > > > > CatalogStore should be immutable once TableEnv is created. >> > > Otherwise, >> > > > > > there >> > > > > > > might be some data inconsistencies when CatalogStore is >> changed. >> > > > > > > >> > > > > > > Yes, We should initialize the CatalogStore when creating the >> > > > TableEnv. >> > > > > > > Therefore, my current proposal is to add a method to configure >> > the >> > > > > > > CatalogStore in EnvironmentSettings. >> > > > > > > >> > > > > > > // Initialize a catalog Store >> > > > > > > CatalogStore catalogStore = new FileCatalogStore(""); >> > > > > > > >> > > > > > > // set up the Table API >> > > > > > > final EnvironmentSettings settings = >> > > > > > > >> EnvironmentSettings.newInstance().inBatchMode() >> > > > > > > .withCatalogStore(catalogStore) >> > > > > > > .build(); >> > > > > > > >> > > > > > > final TableEnvironment tableEnv = >> > > > > > TableEnvironment.create(settings); >> > > > > > > >> > > > > > > >> > > > > > > > 2. Why does the CatalogStoreFactory interface only have a >> > default >> > > > > > method, >> > > > > > > not an interface method? >> > > > > > > >> > > > > > > Sorry, While I did refer to the Catalog interface, I agree >> that >> > as >> > > a >> > > > > new >> > > > > > > interface, the CatalogStoreFactory should not have a default >> > method >> > > > but >> > > > > > an >> > > > > > > interface method. I have already modified the interface. >> > > > > > > >> > > > > > > > 3. Please mention the alternative API in Javadoc for the >> > > > > > > deprecated`registerCatalog`. >> > > > > > > > 4. In the "Compatibility" section, would be better to >> mention >> > the >> > > > > > changed >> > > > > > > behavior of CREATE CATALOG statement if FileCatalogStore (or >> > other >> > > > > > > persisted catalog store) is used. >> > > > > > > >> > > > > > > Thanks for the suggestion, I have updated the FLIP [1]. >> > > > > > > >> > > > > > > >> > > > > > > [1]. >> > > > > > > >> > > > > > >> > > > > >> > > > >> > > >> > >> https://cwiki.apache.org/confluence/display/FLINK/FLIP-295%3A+Support+lazy+initialization+of+catalogs+and+persistence+of+catalog+configurations >> > > > > > > >> > > > > > > >> > > > > > > Best, >> > > > > > > Feng >> > > > > > > >> > > > > > > On Thu, Jun 1, 2023 at 9:22 PM Jark Wu <imj...@gmail.com> >> wrote: >> > > > > > > >> > > > > > > > Hi Feng, >> > > > > > > > >> > > > > > > > This is a useful FLIP. Thanks for starting this discussion. >> > > > > > > > The current design looks pretty good to me. I just have some >> > > minor >> > > > > > > > comments. >> > > > > > > > >> > > > > > > > 1. How to register the CatalogStore for Table API? I think >> the >> > > > > > CatalogStore >> > > > > > > > should be immutable once TableEnv is created. Otherwise, >> there >> > > > might >> > > > > be >> > > > > > > > some data inconsistencies when CatalogStore is changed. >> > > > > > > > >> > > > > > > > 2. Why does the CatalogStoreFactory interface only have a >> > default >> > > > > > method, >> > > > > > > > not an interface method? >> > > > > > > > >> > > > > > > > 3. Please mention the alternative API in Javadoc for the >> > > deprecated >> > > > > > > > `registerCatalog`. >> > > > > > > > >> > > > > > > > 4. In the "Compatibility" section, would be better to >> mention >> > the >> > > > > > changed >> > > > > > > > behavior of CREATE CATALOG statement if FileCatalogStore (or >> > > other >> > > > > > > > persisted catalog store) is used. >> > > > > > > > >> > > > > > > > >> > > > > > > > Best, >> > > > > > > > Jark >> > > > > > > > >> > > > > > > > On Thu, 1 Jun 2023 at 11:26, Feng Jin < >> jinfeng1...@gmail.com> >> > > > wrote: >> > > > > > > > >> > > > > > > > > Hi , thanks all for reviewing the flip. >> > > > > > > > > >> > > > > > > > > @Ron >> > > > > > > > > >> > > > > > > > > > Regarding the CatalogStoreFactory#createCatalogStore >> > method, >> > > > do >> > > > > we >> > > > > > > > need >> > > > > > > > > to provide a default implementation? >> > > > > > > > > >> > > > > > > > > Yes, we will provide a default >> InMemoryCatalogStoreFactory to >> > > > > create >> > > > > > an >> > > > > > > > > InMemoryCatalogStore. >> > > > > > > > > >> > > > > > > > > > If we get a Catalog from CatalogStore, after >> initializing >> > > it, >> > > > > > whether >> > > > > > > > we >> > > > > > > > > put it in Map<String, Catalog> catalogs again? >> > > > > > > > > >> > > > > > > > > Yes, in the current design, catalogs are stored as >> snapshots, >> > > and >> > > > > > once >> > > > > > > > > initialized, the Catalog will be placed in the Map<String, >> > > > Catalog> >> > > > > > > > > catalogs. >> > > > > > > > > Subsequently, the Map<String, Catalog> catalogs will be >> the >> > > > primary >> > > > > > > > source >> > > > > > > > > for obtaining the corresponding Catalog. >> > > > > > > > > >> > > > > > > > > > how about renaming them to `catalog.store.type` and >> > > > > > > > > `catalog.store.path`? >> > > > > > > > > >> > > > > > > > > I think it is okay. Adding "sql" at the beginning may >> seem a >> > > bit >> > > > > > > > strange. I >> > > > > > > > > will update the FLIP. >> > > > > > > > > >> > > > > > > > > >> > > > > > > > > >> > > > > > > > > @Shammon >> > > > > > > > > >> > > > > > > > > Thank you for the review. I have made the necessary >> > > corrections. >> > > > > > > > > Regarding the modifications made to the Public Interface, >> I >> > > have >> > > > > also >> > > > > > > > > included the relevant changes to the `TableEnvironment`. >> > > > > > > > > >> > > > > > > > > >> > > > > > > > > Best, >> > > > > > > > > Feng >> > > > > > > > > >> > > > > > > > > >> > > > > > > > > On Wed, May 31, 2023 at 5:02 PM Shammon FY < >> > zjur...@gmail.com> >> > > > > > wrote: >> > > > > > > > > >> > > > > > > > > > Hi feng, >> > > > > > > > > > >> > > > > > > > > > Thanks for updating, I have some minor comments >> > > > > > > > > > >> > > > > > > > > > 1. The modification of `CatalogManager` should not be in >> > > > `Public >> > > > > > > > > > Interfaces`, it is not a public interface. >> > > > > > > > > > >> > > > > > > > > > 2. `@PublicEvolving` should be added for `CatalogStore` >> and >> > > > > > > > > > `CatalogStoreFactory` >> > > > > > > > > > >> > > > > > > > > > 3. The code `Optional<Catalog> optionalDescriptor = >> > > > > > > > > > catalogStore.get(catalogName);` in the `CatalogManager` >> > > should >> > > > be >> > > > > > > > > > `Optional<CatalogDescriptor> optionalDescriptor = >> > > > > > > > > > catalogStore.get(catalogName);` >> > > > > > > > > > >> > > > > > > > > > Best, >> > > > > > > > > > Shammon FY >> > > > > > > > > > >> > > > > > > > > > >> > > > > > > > > > On Wed, May 31, 2023 at 2:24 PM liu ron < >> > ron9....@gmail.com> >> > > > > > wrote: >> > > > > > > > > > >> > > > > > > > > > > Hi, Feng >> > > > > > > > > > > >> > > > > > > > > > > Thanks for driving this FLIP, this proposal is very >> > useful >> > > > for >> > > > > > > > catalog >> > > > > > > > > > > management. >> > > > > > > > > > > I have some small questions: >> > > > > > > > > > > >> > > > > > > > > > > 1. Regarding the >> CatalogStoreFactory#createCatalogStore >> > > > method, >> > > > > > do we >> > > > > > > > > > need >> > > > > > > > > > > to provide a default implementation? >> > > > > > > > > > > 2. If we get Catalog from CatalogStore, after >> > initializing >> > > > it, >> > > > > > > > whether >> > > > > > > > > we >> > > > > > > > > > > put it to Map<String, Catalog> catalogs again? >> > > > > > > > > > > 3. Regarding the options `sql.catalog.store.type` and >> > > > > > > > > > > `sql.catalog.store.file.path`, how about renaming >> them to >> > > > > > > > > > > `catalog.store.type` and `catalog.store.path`? >> > > > > > > > > > > >> > > > > > > > > > > Best, >> > > > > > > > > > > Ron >> > > > > > > > > > > >> > > > > > > > > > > Feng Jin <jinfeng1...@gmail.com> 于2023年5月29日周一 >> 21:19写道: >> > > > > > > > > > > >> > > > > > > > > > > > Hi yuxia >> > > > > > > > > > > > >> > > > > > > > > > > > > But from the code in Proposed Changes, once we >> > > register >> > > > > the >> > > > > > > > > Catalog, >> > > > > > > > > > > we >> > > > > > > > > > > > initialize it and open it. right? >> > > > > > > > > > > > >> > > > > > > > > > > > Yes, In order to avoid inconsistent semantics of the >> > > > original >> > > > > > > > CREATE >> > > > > > > > > > > > CATALOG DDL, Catalog will be directly initialized in >> > > > > > > > registerCatalog >> > > > > > > > > so >> > > > > > > > > > > > that parameter validation can be performed. >> > > > > > > > > > > > >> > > > > > > > > > > > In the current design, lazy initialization is mainly >> > > > > reflected >> > > > > > in >> > > > > > > > > > > > getCatalog. If CatalogStore has already saved some >> > > catalog >> > > > > > > > > > > configurations, >> > > > > > > > > > > > only initialization is required in getCatalog. >> > > > > > > > > > > > >> > > > > > > > > > > > >> > > > > > > > > > > > Best, >> > > > > > > > > > > > Feng >> > > > > > > > > > > > >> > > > > > > > > > > > On Mon, May 29, 2023 at 8:27 PM yuxia < >> > > > > > luoyu...@alumni.sjtu.edu.cn >> > > > > > > > > >> > > > > > > > > > > wrote: >> > > > > > > > > > > > >> > > > > > > > > > > > > Hi, Feng. >> > > > > > > > > > > > > I'm trying to understanding the meaning of *lazy >> > > > > > initialization*. >> > > > > > > > > If >> > > > > > > > > > > i'm >> > > > > > > > > > > > > wrong, please correct me. >> > > > > > > > > > > > > >> > > > > > > > > > > > > IIUC, lazy initialization means only you need to >> > access >> > > > the >> > > > > > > > > catalog, >> > > > > > > > > > > then >> > > > > > > > > > > > > you initialize it. But from the code in Proposed >> > > Changes, >> > > > > > once we >> > > > > > > > > > > > register >> > > > > > > > > > > > > the Catalog, >> > > > > > > > > > > > > we initialize it and open it. right? >> > > > > > > > > > > > > >> > > > > > > > > > > > > Best regards, >> > > > > > > > > > > > > Yuxia >> > > > > > > > > > > > > >> > > > > > > > > > > > > ----- 原始邮件 ----- >> > > > > > > > > > > > > 发件人: "Jing Ge" <j...@ververica.com.INVALID> >> > > > > > > > > > > > > 收件人: "dev" <dev@flink.apache.org> >> > > > > > > > > > > > > 发送时间: 星期一, 2023年 5 月 29日 下午 5:12:46 >> > > > > > > > > > > > > 主题: Re: [DISCUSS] FLIP 295: Support persistence of >> > > > Catalog >> > > > > > > > > > > configuration >> > > > > > > > > > > > > and asynchronous registration >> > > > > > > > > > > > > >> > > > > > > > > > > > > Hi Feng, >> > > > > > > > > > > > > >> > > > > > > > > > > > > Thanks for your effort! +1 for the proposal. >> > > > > > > > > > > > > >> > > > > > > > > > > > > One of the major changes is that current design >> will >> > > > > provide >> > > > > > > > > > > > > Map<String,Catalog> catalogs as a snapshot instead >> > of a >> > > > > > cache, >> > > > > > > > > which >> > > > > > > > > > > > means >> > > > > > > > > > > > > once it has been initialized, any changes done by >> > other >> > > > > > sessions >> > > > > > > > > will >> > > > > > > > > > > not >> > > > > > > > > > > > > affect it. Point 6 described follow-up options for >> > > > further >> > > > > > > > > > improvement. >> > > > > > > > > > > > > >> > > > > > > > > > > > > Best regards, >> > > > > > > > > > > > > Jing >> > > > > > > > > > > > > >> > > > > > > > > > > > > On Mon, May 29, 2023 at 5:31 AM Feng Jin < >> > > > > > jinfeng1...@gmail.com> >> > > > > > > > > > > wrote: >> > > > > > > > > > > > > >> > > > > > > > > > > > > > Hi all, I would like to update you on the latest >> > > > progress >> > > > > > of >> > > > > > > > the >> > > > > > > > > > > FLIP. >> > > > > > > > > > > > > > >> > > > > > > > > > > > > > >> > > > > > > > > > > > > > Last week, Leonard Xu, HangRuan, Jing Ge, >> Shammon >> > FY, >> > > > > > ShengKai >> > > > > > > > > Fang >> > > > > > > > > > > > and I >> > > > > > > > > > > > > > had an offline discussion regarding the overall >> > > > solution >> > > > > > for >> > > > > > > > > Flink >> > > > > > > > > > > > > > CatalogStore. We have reached a consensus and I >> > have >> > > > > > updated >> > > > > > > > the >> > > > > > > > > > > final >> > > > > > > > > > > > > > solution in FLIP. >> > > > > > > > > > > > > > >> > > > > > > > > > > > > > Next, let me briefly describe the entire design: >> > > > > > > > > > > > > > >> > > > > > > > > > > > > > 1. >> > > > > > > > > > > > > > >> > > > > > > > > > > > > > Introduce CatalogDescriptor to store catalog >> > > > > > configuration >> > > > > > > > > > similar >> > > > > > > > > > > > to >> > > > > > > > > > > > > > TableDescriptor. >> > > > > > > > > > > > > > 2. >> > > > > > > > > > > > > > >> > > > > > > > > > > > > > The two key functions of CatalogStore - void >> > > > > > > > > storeCatalog(String >> > > > > > > > > > > > > > catalogName, CatalogDescriptor) and >> > > > CatalogDescriptor >> > > > > > > > > > > > > getCatalog(String) >> > > > > > > > > > > > > > will both use CatalogDescriptor instead of >> > Catalog >> > > > > > instance. >> > > > > > > > > > This >> > > > > > > > > > > > way, >> > > > > > > > > > > > > > CatalogStore will only be responsible for >> saving >> > > and >> > > > > > > > > retrieving >> > > > > > > > > > > > > catalog >> > > > > > > > > > > > > > configurations without having to initialize >> > > > catalogs. >> > > > > > > > > > > > > > 3. >> > > > > > > > > > > > > > >> > > > > > > > > > > > > > The default registerCatalog(String >> catalogName, >> > > > > Catalog >> > > > > > > > > catalog) >> > > > > > > > > > > > > > function in CatalogManager will be marked as >> > > > > deprecated. >> > > > > > > > > > > > > > 4. >> > > > > > > > > > > > > > >> > > > > > > > > > > > > > A new function registerCatalog(String >> > catalogName, >> > > > > > > > > > > CatalogDescriptor >> > > > > > > > > > > > > > catalog) will be added to serve as the >> default >> > > > > > registration >> > > > > > > > > > > function >> > > > > > > > > > > > > for >> > > > > > > > > > > > > > catalogs in CatalogManager. >> > > > > > > > > > > > > > 5. >> > > > > > > > > > > > > > >> > > > > > > > > > > > > > Map<String,Catalog> catalogs in CataloManager >> > will >> > > > > > remain >> > > > > > > > > > > unchanged >> > > > > > > > > > > > > and >> > > > > > > > > > > > > > save initialized catalogs.This means that >> > deletion >> > > > > > > > operations >> > > > > > > > > > from >> > > > > > > > > > > > one >> > > > > > > > > > > > > > session won't synchronize with other >> sessions. >> > > > > > > > > > > > > > 6. >> > > > > > > > > > > > > > >> > > > > > > > > > > > > > To support multi-session synchronization >> > scenarios >> > > > for >> > > > > > > > > deletions >> > > > > > > > > > > > later >> > > > > > > > > > > > > > on we should make Map<String,Catalog>catalogs >> > > > > > > > > configurable.There >> > > > > > > > > > > may >> > > > > > > > > > > > > be >> > > > > > > > > > > > > > three possible situations: >> > > > > > > > > > > > > > >> > > > > > > > > > > > > > a.Default caching of all initialized catalogs >> > > > > > > > > > > > > > >> > > > > > > > > > > > > > b.Introduction of LRU cache logic which can >> > > > > > automatically >> > > > > > > > > clear >> > > > > > > > > > > > > > long-unused catalogs. >> > > > > > > > > > > > > > >> > > > > > > > > > > > > > c.No caching of any instances; each call to >> > > > getCatalog >> > > > > > > > > creates a >> > > > > > > > > > > new >> > > > > > > > > > > > > > instance. >> > > > > > > > > > > > > > >> > > > > > > > > > > > > > >> > > > > > > > > > > > > > This is the document for discussion: >> > > > > > > > > > > > > > >> > > > > > > > > > > > > > >> > > > > > > > > > > > > >> > > > > > > > > > > > >> > > > > > > > > > > >> > > > > > > > > > >> > > > > > > > > >> > > > > > > > >> > > > > > >> > > > > >> > > > >> > > >> > >> https://docs.google.com/document/d/1HRJNd4_id7i6cUxGnAybmYZIwl5g1SmZCOzGdUz-6lU/edit >> > > > > > > > > > > > > > >> > > > > > > > > > > > > > This is the final proposal document: >> > > > > > > > > > > > > > >> > > > > > > > > > > > > > >> > > > > > > > > > > > > >> > > > > > > > > > > > >> > > > > > > > > > > >> > > > > > > > > > >> > > > > > > > > >> > > > > > > > >> > > > > > >> > > > > >> > > > >> > > >> > >> https://cwiki.apache.org/confluence/display/FLINK/FLIP-295%3A+Support+lazy+initialization+of+catalogs+and+persistence+of+catalog+configurations >> > > > > > > > > > > > > > >> > > > > > > > > > > > > > >> > > > > > > > > > > > > > Thank you very much for your attention and >> > > suggestions >> > > > on >> > > > > > this >> > > > > > > > > > > FLIP. A >> > > > > > > > > > > > > > special thanks to Hang Ruan for his suggestions >> on >> > > the >> > > > > > entire >> > > > > > > > > > design >> > > > > > > > > > > > and >> > > > > > > > > > > > > > organizing offline discussions. >> > > > > > > > > > > > > > >> > > > > > > > > > > > > > If you have any further suggestions or feedback >> > about >> > > > > this >> > > > > > FLIP >> > > > > > > > > > > please >> > > > > > > > > > > > > feel >> > > > > > > > > > > > > > free to share. >> > > > > > > > > > > > > > >> > > > > > > > > > > > > > >> > > > > > > > > > > > > > Best, >> > > > > > > > > > > > > > >> > > > > > > > > > > > > > Feng >> > > > > > > > > > > > > > >> > > > > > > > > > > > > > On Sat, May 6, 2023 at 8:32 PM Jing Ge >> > > > > > > > > <j...@ververica.com.invalid >> > > > > > > > > > > >> > > > > > > > > > > > > wrote: >> > > > > > > > > > > > > > >> > > > > > > > > > > > > > > Hi Feng, >> > > > > > > > > > > > > > > >> > > > > > > > > > > > > > > Thanks for improving the FLIP. It looks good >> to >> > me. >> > > > We >> > > > > > could >> > > > > > > > > > still >> > > > > > > > > > > > > > > reconsider in the future how to provide more >> > common >> > > > > > built-in >> > > > > > > > > > cache >> > > > > > > > > > > > > > > functionality in CatalogManager so that not >> every >> > > > > > > > CatalogSotre >> > > > > > > > > > > > > > > implementation has to take care of it. >> > > > > > > > > > > > > > > >> > > > > > > > > > > > > > > Best regards, >> > > > > > > > > > > > > > > Jing >> > > > > > > > > > > > > > > >> > > > > > > > > > > > > > > On Thu, May 4, 2023 at 1:47 PM Feng Jin < >> > > > > > > > jinfeng1...@gmail.com >> > > > > > > > > > >> > > > > > > > > > > > wrote: >> > > > > > > > > > > > > > > >> > > > > > > > > > > > > > > > Hi Jing, >> > > > > > > > > > > > > > > > >> > > > > > > > > > > > > > > > Thanks for your reply. >> > > > > > > > > > > > > > > > >> > > > > > > > > > > > > > > > > There might be more such issues. I would >> > > suggest >> > > > > you >> > > > > > > > > > > completely >> > > > > > > > > > > > > walk >> > > > > > > > > > > > > > > > through the FLIP again and fix those issues >> > > > > > > > > > > > > > > > >> > > > > > > > > > > > > > > > I am very sorry for my carelessness and at >> the >> > > same >> > > > > > time, I >> > > > > > > > > > > greatly >> > > > > > > > > > > > > > > > appreciate your careful review. I have >> > thoroughly >> > > > > > checked >> > > > > > > > the >> > > > > > > > > > > > entire >> > > > > > > > > > > > > > FLIP >> > > > > > > > > > > > > > > > and made corrections to these issues. >> > > > > > > > > > > > > > > > >> > > > > > > > > > > > > > > > >> > > > > > > > > > > > > > > > > If I am not mistaken, with the current >> FLIP >> > > > > design, >> > > > > > > > > > > > > CatalogManager >> > > > > > > > > > > > > > > > could work without Optional CatalogStore >> being >> > > > > > configured. >> > > > > > > > > > > > > > > > >> > > > > > > > > > > > > > > > Yes, in the original design, CatalogStore >> was >> > not >> > > > > > necessary >> > > > > > > > > > > because >> > > > > > > > > > > > > > > > CatalogManager used Map<String, Catalog> >> > catalogs >> > > > to >> > > > > > store >> > > > > > > > > > > catalog >> > > > > > > > > > > > > > > > instances. >> > > > > > > > > > > > > > > > However, this caused inconsistency issues. >> > > > > Therefore, I >> > > > > > > > > > modified >> > > > > > > > > > > > this >> > > > > > > > > > > > > > > part >> > > > > > > > > > > > > > > > of the design and removed Map<String, >> Catalog> >> > > > > catalogs >> > > > > > > > from >> > > > > > > > > > > > > > > > CatalogManager. >> > > > > > > > > > > > > > > > At the same time, InMemoryCatalog will >> serve >> > as >> > > > the >> > > > > > > > default >> > > > > > > > > > > > > > CatalogStore >> > > > > > > > > > > > > > > > to save catalogs in memory and replace the >> > > > > > functionality of >> > > > > > > > > > > > > > > > Map<String,Catalog>catalogs. >> > > > > > > > > > > > > > > > The previous plan that kept >> > > > > > Map<String,Catalog>catalogs has >> > > > > > > > > > been >> > > > > > > > > > > > > moved >> > > > > > > > > > > > > > to >> > > > > > > > > > > > > > > > Rejected Alternatives. >> > > > > > > > > > > > > > > > >> > > > > > > > > > > > > > > > >> > > > > > > > > > > > > > > > >> > > > > > > > > > > > > > > > Best, >> > > > > > > > > > > > > > > > Feng >> > > > > > > > > > > > > > > > >> > > > > > > > > > > > > > > > On Sun, Apr 30, 2023 at 9:03 PM Jing Ge >> > > > > > > > > > > <j...@ververica.com.invalid >> > > > > > > > > > > > > >> > > > > > > > > > > > > > > > wrote: >> > > > > > > > > > > > > > > > >> > > > > > > > > > > > > > > > > Hi Feng, >> > > > > > > > > > > > > > > > > >> > > > > > > > > > > > > > > > > There are still many places contain >> > > inconsistent >> > > > > > content, >> > > > > > > > > > e.g. >> > > > > > > > > > > > > > > > > >> > > > > > > > > > > > > > > > > 1. "Asynchronous registration" is still >> used. >> > > > > > > > > > > > > > > > > 2. The java comment of the method >> > > > > > registerCatalog(String >> > > > > > > > > > > > > catalogName, >> > > > > > > > > > > > > > > > > Catalog catalog) in CatalogManager does >> not >> > > tell >> > > > > > what the >> > > > > > > > > > > method >> > > > > > > > > > > > is >> > > > > > > > > > > > > > > > doing. >> > > > > > > > > > > > > > > > > >> > > > > > > > > > > > > > > > > >> > > > > > > > > > > > > > > > > There might be more such issues. I would >> > > suggest >> > > > > you >> > > > > > > > > > completely >> > > > > > > > > > > > > walk >> > > > > > > > > > > > > > > > > through the FLIP again and fix those >> issues. >> > > > > > > > > > > > > > > > > >> > > > > > > > > > > > > > > > > About the inMemoryCatalogStore, do you >> mean >> > > that >> > > > > you >> > > > > > will >> > > > > > > > > > build >> > > > > > > > > > > > the >> > > > > > > > > > > > > > > cache >> > > > > > > > > > > > > > > > > functionality in the CatalogStore? This >> is a >> > > very >> > > > > > > > different >> > > > > > > > > > > > design >> > > > > > > > > > > > > > > > concept >> > > > > > > > > > > > > > > > > from what the current FLIP described. If >> I am >> > > not >> > > > > > > > mistaken, >> > > > > > > > > > > with >> > > > > > > > > > > > > the >> > > > > > > > > > > > > > > > > current FLIP design, CatalogManager could >> > work >> > > > > > without >> > > > > > > > > > Optional >> > > > > > > > > > > > > > > > > CatalogStore being configured. That is the >> > > reason >> > > > > > why I >> > > > > > > > > > > mentioned >> > > > > > > > > > > > > in >> > > > > > > > > > > > > > > the >> > > > > > > > > > > > > > > > > last email that the example code wrt the >> > > Optional >> > > > > > > > > > CatalogStore >> > > > > > > > > > > is >> > > > > > > > > > > > > not >> > > > > > > > > > > > > > > > > correct. >> > > > > > > > > > > > > > > > > >> > > > > > > > > > > > > > > > > Best regards, >> > > > > > > > > > > > > > > > > Jing >> > > > > > > > > > > > > > > > > >> > > > > > > > > > > > > > > > > On Thu, Apr 27, 2023 at 3:55 PM Feng Jin < >> > > > > > > > > > > jinfeng1...@gmail.com> >> > > > > > > > > > > > > > > wrote: >> > > > > > > > > > > > > > > > > >> > > > > > > > > > > > > > > > > > Hi Jing >> > > > > > > > > > > > > > > > > > >> > > > > > > > > > > > > > > > > > >> > > > > > > > > > > > > > > > > > > There are still some NIT issues in the >> > FLIP >> > > > > > > > > > > > > > > > > > >> > > > > > > > > > > > > > > > > > Thank you very much for the careful >> > review. I >> > > > > have >> > > > > > > > > already >> > > > > > > > > > > made >> > > > > > > > > > > > > the >> > > > > > > > > > > > > > > > > > relevant changes. >> > > > > > > > > > > > > > > > > > >> > > > > > > > > > > > > > > > > > >> > > > > > > > > > > > > > > > > > > Speaking of the conflict issues in >> the >> > > > > > > > multi-instance >> > > > > > > > > > > > > > scenarios, I >> > > > > > > > > > > > > > > > am >> > > > > > > > > > > > > > > > > > not >> > > > > > > > > > > > > > > > > > sure if this is the intended behaviour >> > > > > > > > > > > > > > > > > > >> > > > > > > > > > > > > > > > > > Currently, there are conflicts in >> multiple >> > > > > > scenarios >> > > > > > > > with >> > > > > > > > > > the >> > > > > > > > > > > > > > current >> > > > > > > > > > > > > > > > > > design. I am thinking whether we should >> > > remove >> > > > > > > > > 'Map<String, >> > > > > > > > > > > > > > Catalog>' >> > > > > > > > > > > > > > > > and >> > > > > > > > > > > > > > > > > > make Cache the default behavior of >> > > > > > > > InMemoryCatalogStore. >> > > > > > > > > > This >> > > > > > > > > > > > > way, >> > > > > > > > > > > > > > > > users >> > > > > > > > > > > > > > > > > > can implement their own CatalogStore to >> > > achieve >> > > > > > > > > > > multi-instance >> > > > > > > > > > > > > > > > > > non-conflicting scenarios. What do you >> > think? >> > > > > > > > > > > > > > > > > > >> > > > > > > > > > > > > > > > > > >> > > > > > > > > > > > > > > > > > >> > > > > > > > > > > > > > > > > > Best, >> > > > > > > > > > > > > > > > > > Feng >> > > > > > > > > > > > > > > > > > >> > > > > > > > > > > > > > > > > > On Thu, Apr 27, 2023 at 9:03 PM Jing Ge >> > > > > > > > > > > > > <j...@ververica.com.invalid >> > > > > > > > > > > > > > > >> > > > > > > > > > > > > > > > > > wrote: >> > > > > > > > > > > > > > > > > > >> > > > > > > > > > > > > > > > > > > Hi Feng, >> > > > > > > > > > > > > > > > > > > >> > > > > > > > > > > > > > > > > > > Thanks for working on the FLIP. There >> are >> > > > still >> > > > > > some >> > > > > > > > > NIT >> > > > > > > > > > > > issues >> > > > > > > > > > > > > > in >> > > > > > > > > > > > > > > > the >> > > > > > > > > > > > > > > > > > FLIP >> > > > > > > > > > > > > > > > > > > like: >> > > > > > > > > > > > > > > > > > > >> > > > > > > > > > > > > > > > > > > 1. Optional<CatalogStore> catalogStore >> > has >> > > > been >> > > > > > used >> > > > > > > > as >> > > > > > > > > > > > > > > CatalogStore >> > > > > > > > > > > > > > > > > > > instead of Optional in the code >> example. >> > It >> > > > > > should be >> > > > > > > > > > fine >> > > > > > > > > > > to >> > > > > > > > > > > > > use >> > > > > > > > > > > > > > > it >> > > > > > > > > > > > > > > > as >> > > > > > > > > > > > > > > > > > > pseudo code for now and update it >> after >> > you >> > > > > > submit >> > > > > > > > the >> > > > > > > > > > PR. >> > > > > > > > > > > > > > > > > > > 2. addCatalog(...) is still used >> > somewhere >> > > in >> > > > > the >> > > > > > > > > > rejected >> > > > > > > > > > > > > > section >> > > > > > > > > > > > > > > > > which >> > > > > > > > > > > > > > > > > > > should be persistContext(...) to keep >> it >> > > > > > consistent. >> > > > > > > > > > > > > > > > > > > >> > > > > > > > > > > > > > > > > > > Speaking of the conflict issues in the >> > > > > > multi-instance >> > > > > > > > > > > > > scenarios, >> > > > > > > > > > > > > > I >> > > > > > > > > > > > > > > am >> > > > > > > > > > > > > > > > > not >> > > > > > > > > > > > > > > > > > > sure if this is the intended >> behaviour. >> > If >> > > > > > > > Map<String, >> > > > > > > > > > > > Catalog> >> > > > > > > > > > > > > > > > > catalogs >> > > > > > > > > > > > > > > > > > is >> > > > > > > > > > > > > > > > > > > used as a cache, it should be invalid, >> > once >> > > > the >> > > > > > > > related >> > > > > > > > > > > > catalog >> > > > > > > > > > > > > > has >> > > > > > > > > > > > > > > > > been >> > > > > > > > > > > > > > > > > > > removed from the CatalogStore by >> another >> > > > > > instance. >> > > > > > > > Did >> > > > > > > > > I >> > > > > > > > > > > miss >> > > > > > > > > > > > > > > > > something? >> > > > > > > > > > > > > > > > > > > >> > > > > > > > > > > > > > > > > > > Best regards, >> > > > > > > > > > > > > > > > > > > Jing >> > > > > > > > > > > > > > > > > > > >> > > > > > > > > > > > > > > > > > > On Thu, Apr 13, 2023 at 4:40 PM Feng >> Jin >> > < >> > > > > > > > > > > > > jinfeng1...@gmail.com> >> > > > > > > > > > > > > > > > > wrote: >> > > > > > > > > > > > > > > > > > > >> > > > > > > > > > > > > > > > > > > > Hi Jing,Shammon >> > > > > > > > > > > > > > > > > > > > Thanks for your reply. >> > > > > > > > > > > > > > > > > > > > >> > > > > > > > > > > > > > > > > > > > @Jing >> > > > > > > > > > > > > > > > > > > > >> > > > > > > > > > > > > > > > > > > > > How about persistCatalog()? >> > > > > > > > > > > > > > > > > > > > I think this is a good function >> name, I >> > > > have >> > > > > > > > updated >> > > > > > > > > it >> > > > > > > > > > > in >> > > > > > > > > > > > > the >> > > > > > > > > > > > > > > > > > > > documentation. >> > > > > > > > > > > > > > > > > > > > >> > > > > > > > > > > > > > > > > > > > > Some common cache features >> should >> > be >> > > > > > > > implemented >> > > > > > > > > > > > > > > > > > > > Thank you for the suggestion. If >> > > > alternative >> > > > > 1 >> > > > > > > > turns >> > > > > > > > > > out >> > > > > > > > > > > to >> > > > > > > > > > > > > be >> > > > > > > > > > > > > > > more >> > > > > > > > > > > > > > > > > > > > appropriate later, I will improve >> this >> > > part >> > > > > of >> > > > > > the >> > > > > > > > > > > content. >> > > > > > > > > > > > > > > > > > > > >> > > > > > > > > > > > > > > > > > > > > As the above discussion moves >> > forward, >> > > > the >> > > > > > > > option 2 >> > > > > > > > > > > > > solution >> > > > > > > > > > > > > > > > looks >> > > > > > > > > > > > > > > > > > more >> > > > > > > > > > > > > > > > > > > > like a replacement of option 1 >> > > > > > > > > > > > > > > > > > > > Yes, after discussing with Shammon >> > > offline, >> > > > > we >> > > > > > > > think >> > > > > > > > > > that >> > > > > > > > > > > > > > > solution >> > > > > > > > > > > > > > > > 2 >> > > > > > > > > > > > > > > > > > > might >> > > > > > > > > > > > > > > > > > > > be more suitable and also avoid any >> > > > > > inconsistency >> > > > > > > > > > issues. >> > > > > > > > > > > > > > > > > > > > >> > > > > > > > > > > > > > > > > > > > > There are some inconsistent >> > > descriptions >> > > > in >> > > > > > the >> > > > > > > > > > > content. >> > > > > > > > > > > > > > Would >> > > > > > > > > > > > > > > > you >> > > > > > > > > > > > > > > > > > > like >> > > > > > > > > > > > > > > > > > > > to clean them up? >> > > > > > > > > > > > > > > > > > > > I will do my best to improve the >> > document >> > > > and >> > > > > > > > > > appreciate >> > > > > > > > > > > > your >> > > > > > > > > > > > > > > > > > > suggestions. >> > > > > > > > > > > > > > > > > > > > >> > > > > > > > > > > > > > > > > > > > >> > > > > > > > > > > > > > > > > > > > >> > > > > > > > > > > > > > > > > > > > @Shammon >> > > > > > > > > > > > > > > > > > > > > can you put the unselected option >> in >> > > > > > `Rejected >> > > > > > > > > > > > > Alternatives` >> > > > > > > > > > > > > > > > > > > > Sure, I have moved it to the >> `Rejected >> > > > > > > > Alternatives`. >> > > > > > > > > > > > > > > > > > > > >> > > > > > > > > > > > > > > > > > > > >> > > > > > > > > > > > > > > > > > > > >> > > > > > > > > > > > > > > > > > > > Best >> > > > > > > > > > > > > > > > > > > > Feng >> > > > > > > > > > > > > > > > > > > > >> > > > > > > > > > > > > > > > > > > > >> > > > > > > > > > > > > > > > > > > > >> > > > > > > > > > > > > > > > > > > > On Thu, Apr 13, 2023 at 8:52 AM >> Shammon >> > > FY >> > > > < >> > > > > > > > > > > > > zjur...@gmail.com> >> > > > > > > > > > > > > > > > > wrote: >> > > > > > > > > > > > > > > > > > > > >> > > > > > > > > > > > > > > > > > > > > Hi Feng >> > > > > > > > > > > > > > > > > > > > > >> > > > > > > > > > > > > > > > > > > > > Thanks for your update. >> > > > > > > > > > > > > > > > > > > > > >> > > > > > > > > > > > > > > > > > > > > I found there are two options in >> > > > `Proposed >> > > > > > > > > Changes`, >> > > > > > > > > > > can >> > > > > > > > > > > > > you >> > > > > > > > > > > > > > > put >> > > > > > > > > > > > > > > > > the >> > > > > > > > > > > > > > > > > > > > > unselected option in `Rejected >> > > > > > Alternatives`? I >> > > > > > > > > think >> > > > > > > > > > > > this >> > > > > > > > > > > > > > may >> > > > > > > > > > > > > > > > help >> > > > > > > > > > > > > > > > > > us >> > > > > > > > > > > > > > > > > > > > > better understand your proposal >> > > > > > > > > > > > > > > > > > > > > >> > > > > > > > > > > > > > > > > > > > > >> > > > > > > > > > > > > > > > > > > > > Best, >> > > > > > > > > > > > > > > > > > > > > Shammon FY >> > > > > > > > > > > > > > > > > > > > > >> > > > > > > > > > > > > > > > > > > > > >> > > > > > > > > > > > > > > > > > > > > On Thu, Apr 13, 2023 at 4:49 AM >> Jing >> > Ge >> > > > > > > > > > > > > > > > <j...@ververica.com.invalid >> > > > > > > > > > > > > > > > > > >> > > > > > > > > > > > > > > > > > > > > wrote: >> > > > > > > > > > > > > > > > > > > > > >> > > > > > > > > > > > > > > > > > > > > > Hi Feng, >> > > > > > > > > > > > > > > > > > > > > > >> > > > > > > > > > > > > > > > > > > > > > Thanks for raising this FLIP. I >> am >> > > > still >> > > > > > > > confused >> > > > > > > > > > > after >> > > > > > > > > > > > > > > > > completely >> > > > > > > > > > > > > > > > > > > > > reading >> > > > > > > > > > > > > > > > > > > > > > the thread with following >> > questions: >> > > > > > > > > > > > > > > > > > > > > > >> > > > > > > > > > > > > > > > > > > > > > 1. Naming confusion - >> > > registerCatalog() >> > > > > and >> > > > > > > > > > > > addCatalog() >> > > > > > > > > > > > > > have >> > > > > > > > > > > > > > > > no >> > > > > > > > > > > > > > > > > > big >> > > > > > > > > > > > > > > > > > > > > > difference based on their names. >> > One >> > > of >> > > > > > them is >> > > > > > > > > > > > > responsible >> > > > > > > > > > > > > > > for >> > > > > > > > > > > > > > > > > > data >> > > > > > > > > > > > > > > > > > > > > > persistence. How about >> > > > persistCatalog()? >> > > > > > > > > > > > > > > > > > > > > > 2. As you mentioned that >> > Map<String, >> > > > > > Catalog> >> > > > > > > > > > > catalogs >> > > > > > > > > > > > is >> > > > > > > > > > > > > > > used >> > > > > > > > > > > > > > > > > as a >> > > > > > > > > > > > > > > > > > > > cache >> > > > > > > > > > > > > > > > > > > > > > and catalogStore is used for >> data >> > > > > > persistence. >> > > > > > > > I >> > > > > > > > > > > would >> > > > > > > > > > > > > > > suggest >> > > > > > > > > > > > > > > > > > > > describing >> > > > > > > > > > > > > > > > > > > > > > their purpose conceptually and >> > > clearly >> > > > in >> > > > > > the >> > > > > > > > > FLIP. >> > > > > > > > > > > > Some >> > > > > > > > > > > > > > > common >> > > > > > > > > > > > > > > > > > cache >> > > > > > > > > > > > > > > > > > > > > > features should be implemented, >> > i.e. >> > > > data >> > > > > > in >> > > > > > > > the >> > > > > > > > > > > cache >> > > > > > > > > > > > > and >> > > > > > > > > > > > > > > the >> > > > > > > > > > > > > > > > > > store >> > > > > > > > > > > > > > > > > > > > > should >> > > > > > > > > > > > > > > > > > > > > > be consistent. Same Catalog >> > instance >> > > > > > should be >> > > > > > > > > > found >> > > > > > > > > > > in >> > > > > > > > > > > > > the >> > > > > > > > > > > > > > > > store >> > > > > > > > > > > > > > > > > > and >> > > > > > > > > > > > > > > > > > > > in >> > > > > > > > > > > > > > > > > > > > > > the cache(either it has been >> > > > initialized >> > > > > > or it >> > > > > > > > > will >> > > > > > > > > > > be >> > > > > > > > > > > > > lazy >> > > > > > > > > > > > > > > > > > > > initialized) >> > > > > > > > > > > > > > > > > > > > > > for the same catalog name. The >> > > > > consistency >> > > > > > will >> > > > > > > > > be >> > > > > > > > > > > > taken >> > > > > > > > > > > > > > care >> > > > > > > > > > > > > > > > of >> > > > > > > > > > > > > > > > > > > while >> > > > > > > > > > > > > > > > > > > > > > updating the catalog. >> > > > > > > > > > > > > > > > > > > > > > 3. As the above discussion moves >> > > > forward, >> > > > > > the >> > > > > > > > > > option >> > > > > > > > > > > 2 >> > > > > > > > > > > > > > > solution >> > > > > > > > > > > > > > > > > > looks >> > > > > > > > > > > > > > > > > > > > > more >> > > > > > > > > > > > > > > > > > > > > > like a replacement of option 1, >> > > > because, >> > > > > > afaiu, >> > > > > > > > > > > issues >> > > > > > > > > > > > > > > > mentioned >> > > > > > > > > > > > > > > > > > > > > > previously with option 1 are not >> > > solved >> > > > > > yet. Do >> > > > > > > > > you >> > > > > > > > > > > > still >> > > > > > > > > > > > > > > want >> > > > > > > > > > > > > > > > to >> > > > > > > > > > > > > > > > > > > > propose >> > > > > > > > > > > > > > > > > > > > > > both options and ask for >> > suggestions >> > > > for >> > > > > > both >> > > > > > > > of >> > > > > > > > > > > them? >> > > > > > > > > > > > > > > > > > > > > > 4. After you updated the FLIP, >> > there >> > > > are >> > > > > > some >> > > > > > > > > > > > > inconsistent >> > > > > > > > > > > > > > > > > > > descriptions >> > > > > > > > > > > > > > > > > > > > > in >> > > > > > > > > > > > > > > > > > > > > > the content. Would you like to >> > clean >> > > > > them >> > > > > > up? >> > > > > > > > > > > Thanks! >> > > > > > > > > > > > > > > > > > > > > > >> > > > > > > > > > > > > > > > > > > > > > Best regards, >> > > > > > > > > > > > > > > > > > > > > > Jing >> > > > > > > > > > > > > > > > > > > > > > >> > > > > > > > > > > > > > > > > > > > > > >> > > > > > > > > > > > > > > > > > > > > > On Fri, Apr 7, 2023 at 9:24 AM >> Feng >> > > > Jin < >> > > > > > > > > > > > > > > jinfeng1...@gmail.com >> > > > > > > > > > > > > > > > > >> > > > > > > > > > > > > > > > > > > wrote: >> > > > > > > > > > > > > > > > > > > > > > >> > > > > > > > > > > > > > > > > > > > > > > hi Shammon >> > > > > > > > > > > > > > > > > > > > > > > >> > > > > > > > > > > > > > > > > > > > > > > Thank you for your response, >> and >> > I >> > > > > > completely >> > > > > > > > > > agree >> > > > > > > > > > > > > with >> > > > > > > > > > > > > > > your >> > > > > > > > > > > > > > > > > > point >> > > > > > > > > > > > > > > > > > > > of >> > > > > > > > > > > > > > > > > > > > > > > view. >> > > > > > > > > > > > > > > > > > > > > > > Initially, I may have over >> > > > complicated >> > > > > > the >> > > > > > > > > whole >> > > > > > > > > > > > issue. >> > > > > > > > > > > > > > > First >> > > > > > > > > > > > > > > > > and >> > > > > > > > > > > > > > > > > > > > > > foremost, >> > > > > > > > > > > > > > > > > > > > > > > we need to consider the >> > persistence >> > > > of >> > > > > > the >> > > > > > > > > > > Catalog's >> > > > > > > > > > > > > > > > > > Configuration. >> > > > > > > > > > > > > > > > > > > > > > > If we only need to provide >> > > > persistence >> > > > > > for >> > > > > > > > > > Catalog >> > > > > > > > > > > > > > > > > Configuration, >> > > > > > > > > > > > > > > > > > > we >> > > > > > > > > > > > > > > > > > > > > can >> > > > > > > > > > > > > > > > > > > > > > > add a toConfiguration method >> to >> > the >> > > > > > Catalog >> > > > > > > > > > > > interface. >> > > > > > > > > > > > > > > > > > > > > > > This method can convert a >> Catalog >> > > > > > instance >> > > > > > > > to a >> > > > > > > > > > > > > > Map<String, >> > > > > > > > > > > > > > > > > > String> >> > > > > > > > > > > > > > > > > > > > > > > properties, and the default >> > > > > > implementation >> > > > > > > > will >> > > > > > > > > > > throw >> > > > > > > > > > > > > an >> > > > > > > > > > > > > > > > > > exception. >> > > > > > > > > > > > > > > > > > > > > > > >> > > > > > > > > > > > > > > > > > > > > > > public interface Catalog { >> > > > > > > > > > > > > > > > > > > > > > > /** >> > > > > > > > > > > > > > > > > > > > > > > * Returns a map containing >> the >> > > > > > properties >> > > > > > > > of >> > > > > > > > > > the >> > > > > > > > > > > > > > catalog >> > > > > > > > > > > > > > > > > > object. >> > > > > > > > > > > > > > > > > > > > > > > * >> > > > > > > > > > > > > > > > > > > > > > > * @return a map containing >> the >> > > > > > properties >> > > > > > > > of >> > > > > > > > > > the >> > > > > > > > > > > > > > catalog >> > > > > > > > > > > > > > > > > > object >> > > > > > > > > > > > > > > > > > > > > > > * @throws >> > > > > > UnsupportedOperationException if >> > > > > > > > > the >> > > > > > > > > > > > > > > > implementing >> > > > > > > > > > > > > > > > > > > class >> > > > > > > > > > > > > > > > > > > > > does >> > > > > > > > > > > > > > > > > > > > > > > not override >> > > > > > > > > > > > > > > > > > > > > > > * the default >> implementation >> > of >> > > > this >> > > > > > > > method >> > > > > > > > > > > > > > > > > > > > > > > */ >> > > > > > > > > > > > > > > > > > > > > > > default Map<String, String> >> > > > > > toProperties() >> > > > > > > > { >> > > > > > > > > > > > > > > > > > > > > > > throw new >> > > > > > > > > > UnsupportedOperationException("Please >> > > > > > > > > > > > > > > implement >> > > > > > > > > > > > > > > > > > > > > > toProperties >> > > > > > > > > > > > > > > > > > > > > > > for this catalog"); >> > > > > > > > > > > > > > > > > > > > > > > } >> > > > > > > > > > > > > > > > > > > > > > > } >> > > > > > > > > > > > > > > > > > > > > > > >> > > > > > > > > > > > > > > > > > > > > > > The specific process is as >> > follows: >> > > > > > > > > > > > > > > > > > > > > > > >> > > > > > > > > > > > > > > > > > > > > > > 1. If the user has >> configured a >> > > > > > > > CatalogStore, >> > > > > > > > > > the >> > > > > > > > > > > > > > > > > > > toConfiguration() >> > > > > > > > > > > > > > > > > > > > > > method >> > > > > > > > > > > > > > > > > > > > > > > will be called when >> registering a >> > > > > Catalog >> > > > > > > > > > instance >> > > > > > > > > > > > with >> > > > > > > > > > > > > > > > > > > > > > > registerCatalog(String >> > catalogName, >> > > > > > Catalog >> > > > > > > > > > > catalog). >> > > > > > > > > > > > > The >> > > > > > > > > > > > > > > > > Catalog >> > > > > > > > > > > > > > > > > > > > > > instance >> > > > > > > > > > > > > > > > > > > > > > > will be converted to a >> > Map<String, >> > > > > > String> >> > > > > > > > > > > properties >> > > > > > > > > > > > > and >> > > > > > > > > > > > > > > > saved >> > > > > > > > > > > > > > > > > > to >> > > > > > > > > > > > > > > > > > > > the >> > > > > > > > > > > > > > > > > > > > > > > CatalogStore. If some Catalog >> > > > instances >> > > > > > do >> > > > > > > > not >> > > > > > > > > > > > > implement >> > > > > > > > > > > > > > > this >> > > > > > > > > > > > > > > > > > > method, >> > > > > > > > > > > > > > > > > > > > > an >> > > > > > > > > > > > > > > > > > > > > > > exception will be thrown. >> > > > > > > > > > > > > > > > > > > > > > > >> > > > > > > > > > > > > > > > > > > > > > > 2. If the user does not use a >> > > > > > CatalogStore, >> > > > > > > > > the >> > > > > > > > > > > > > > > > > > toConfiguration() >> > > > > > > > > > > > > > > > > > > > > method >> > > > > > > > > > > > > > > > > > > > > > > will not be called, ensuring >> > > > > consistency >> > > > > > with >> > > > > > > > > the >> > > > > > > > > > > > > > original >> > > > > > > > > > > > > > > > > > process. >> > > > > > > > > > > > > > > > > > > > > > > >> > > > > > > > > > > > > > > > > > > > > > > 3. Saving both the Map<String, >> > > > Catalog> >> > > > > > > > > catalogs >> > > > > > > > > > > and >> > > > > > > > > > > > > the >> > > > > > > > > > > > > > > > > > > CatalogStore >> > > > > > > > > > > > > > > > > > > > > at >> > > > > > > > > > > > > > > > > > > > > > > the same time can also avoid >> > > > conflicts >> > > > > > > > > > > > > > > > > > > > > > > >> > > > > > > > > > > > > > > > > > > > > > > >> > > > > > > > > > > > > > > > > > > > > > > For lazy initialization: >> > > > > > > > > > > > > > > > > > > > > > > we can start from the Catalog >> > > itself >> > > > > and >> > > > > > > > > provide >> > > > > > > > > > a >> > > > > > > > > > > > > > > dedicated >> > > > > > > > > > > > > > > > > > > Catalog >> > > > > > > > > > > > > > > > > > > > > > > implementation for lazy >> loading, >> > > such >> > > > > as >> > > > > > > > > > > > > > > ConfigurationCatalog >> > > > > > > > > > > > > > > > > > > > > > > >> > > > > > > > > > > > > > > > > > > > > > > public class >> ConfigurationCatalog >> > > > > > implements >> > > > > > > > > > > Catalog >> > > > > > > > > > > > { >> > > > > > > > > > > > > > > > > > > > > > > >> ConfigurationCatalog(Map<String, >> > > > > String> >> > > > > > > > > > > properties) >> > > > > > > > > > > > { >> > > > > > > > > > > > > > > > > > > > > > > } >> > > > > > > > > > > > > > > > > > > > > > > } >> > > > > > > > > > > > > > > > > > > > > > > >> > > > > > > > > > > > > > > > > > > > > > > I have added this design to >> the >> > > FLIP. >> > > > > > > > > > > > > > > > > > > > > > > >> > > > > > > > > > > > > > > > > > > > > > > >> > > > > > > > > > > > > > > > > > > > > > > Best, >> > > > > > > > > > > > > > > > > > > > > > > Feng >> > > > > > > > > > > > > > > > > > > > > > > >> > > > > > > > > > > > > > > > > > > > > > > On Thu, Apr 6, 2023 at >> 10:03 AM >> > > > Shammon >> > > > > > FY < >> > > > > > > > > > > > > > > > zjur...@gmail.com> >> > > > > > > > > > > > > > > > > > > > wrote: >> > > > > > > > > > > > > > > > > > > > > > > >> > > > > > > > > > > > > > > > > > > > > > > > Hi Feng >> > > > > > > > > > > > > > > > > > > > > > > > >> > > > > > > > > > > > > > > > > > > > > > > > Thanks for your answer. >> > > > > > > > > > > > > > > > > > > > > > > > >> > > > > > > > > > > > > > > > > > > > > > > > I have no questions about >> the >> > > > > > functionality >> > > > > > > > > of >> > > > > > > > > > > > > > > > > `CatalogStore`, >> > > > > > > > > > > > > > > > > > > but >> > > > > > > > > > > > > > > > > > > > > the >> > > > > > > > > > > > > > > > > > > > > > > > different operations of >> > multiple >> > > > > > > > > > > `registerCatalog` >> > > > > > > > > > > > or >> > > > > > > > > > > > > > > > > > > > `storeCatalog` >> > > > > > > > > > > > > > > > > > > > > in >> > > > > > > > > > > > > > > > > > > > > > > > `CatalogManager`. The >> > > > implementation >> > > > > in >> > > > > > > > Trino >> > > > > > > > > > is >> > > > > > > > > > > > also >> > > > > > > > > > > > > > the >> > > > > > > > > > > > > > > > > same, >> > > > > > > > > > > > > > > > > > > the >> > > > > > > > > > > > > > > > > > > > > > > > `CatalogManager` in trino >> only >> > > has >> > > > > one >> > > > > > > > > > > > > `createCatalog`, >> > > > > > > > > > > > > > > > which >> > > > > > > > > > > > > > > > > > > will >> > > > > > > > > > > > > > > > > > > > > save >> > > > > > > > > > > > > > > > > > > > > > > the >> > > > > > > > > > > > > > > > > > > > > > > > catalog to memory and >> > > > `CatalogStore`. >> > > > > > > > > > > > > > > > > > > > > > > > >> > > > > > > > > > > > > > > > > > > > > > > > I think we don't need to add >> > > > another >> > > > > > > > > > > > > `registerCatalog` >> > > > > > > > > > > > > > or >> > > > > > > > > > > > > > > > > > > > > `addCatalog` >> > > > > > > > > > > > > > > > > > > > > > to >> > > > > > > > > > > > > > > > > > > > > > > > save a catalog in >> `Map<String, >> > > > > Catalog> >> > > > > > > > > > catalogs` >> > > > > > > > > > > > or >> > > > > > > > > > > > > > > > > > > `CatalogStore >> > > > > > > > > > > > > > > > > > > > > > > > catalogStore`. As you >> > mentioned >> > > > > > before, >> > > > > > > > the >> > > > > > > > > > > > > > `Map<String, >> > > > > > > > > > > > > > > > > > > Catalog> >> > > > > > > > > > > > > > > > > > > > > > > > catalogs` is a cache in >> > > > > > `CatalogManager`. >> > > > > > > > How >> > > > > > > > > > > about >> > > > > > > > > > > > > > > saving >> > > > > > > > > > > > > > > > > the >> > > > > > > > > > > > > > > > > > > > > catalog >> > > > > > > > > > > > > > > > > > > > > > in >> > > > > > > > > > > > > > > > > > > > > > > > `Map<String, Catalog> >> catalogs` >> > > and >> > > > > > > > > > `CatalogStore >> > > > > > > > > > > > > > > > > catalogStore` >> > > > > > > > > > > > > > > > > > > > > > together >> > > > > > > > > > > > > > > > > > > > > > > > when it is registered or >> added >> > in >> > > > > > > > > > > `CatalogManager`? >> > > > > > > > > > > > > > > > > > > > > > > > >> > > > > > > > > > > > > > > > > > > > > > > > Best, >> > > > > > > > > > > > > > > > > > > > > > > > Shammon FY >> > > > > > > > > > > > > > > > > > > > > > > > >> > > > > > > > > > > > > > > > > > > > > > > > >> > > > > > > > > > > > > > > > > > > > > > > > On Tue, Apr 4, 2023 at >> 5:22 PM >> > > Feng >> > > > > > Jin < >> > > > > > > > > > > > > > > > > jinfeng1...@gmail.com >> > > > > > > > > > > > > > > > > > > >> > > > > > > > > > > > > > > > > > > > > wrote: >> > > > > > > > > > > > > > > > > > > > > > > > >> > > > > > > > > > > > > > > > > > > > > > > > > Thank you for your reply. >> I >> > am >> > > > very >> > > > > > sorry >> > > > > > > > > for >> > > > > > > > > > > the >> > > > > > > > > > > > > > > > > > > > misunderstanding >> > > > > > > > > > > > > > > > > > > > > > > caused >> > > > > > > > > > > > > > > > > > > > > > > > > by my deviation from the >> > > original >> > > > > > > > > discussion. >> > > > > > > > > > > > > > > > > > > > > > > > > >> > > > > > > > > > > > > > > > > > > > > > > > > @Shammon >> > > > > > > > > > > > > > > > > > > > > > > > > > I found there is a >> > > > pre-discussion >> > > > > > [1] >> > > > > > > > for >> > > > > > > > > > > this >> > > > > > > > > > > > > FLIP >> > > > > > > > > > > > > > > > > > > > > > > > > Yes, there was indeed >> such a >> > > > > > discussion >> > > > > > > > > > before. >> > > > > > > > > > > > > > > However, >> > > > > > > > > > > > > > > > > in >> > > > > > > > > > > > > > > > > > > > > > designing >> > > > > > > > > > > > > > > > > > > > > > > > the >> > > > > > > > > > > > > > > > > > > > > > > > > whole solution, I found >> that >> > > the >> > > > > > logic of >> > > > > > > > > > > > > > > CatalogManager >> > > > > > > > > > > > > > > > > > itself >> > > > > > > > > > > > > > > > > > > > > > doesn't >> > > > > > > > > > > > > > > > > > > > > > > > > need to change much. *We >> > cannot >> > > > > only >> > > > > > > > > persist >> > > > > > > > > > > > > Catalog >> > > > > > > > > > > > > > > > > > instances >> > > > > > > > > > > > > > > > > > > > > > > > themselves*, >> > > > > > > > > > > > > > > > > > > > > > > > > so exposing only >> > > > > > registerCatalog(String >> > > > > > > > > > > > > catalogName, >> > > > > > > > > > > > > > > > > Catalog >> > > > > > > > > > > > > > > > > > > > > catalog) >> > > > > > > > > > > > > > > > > > > > > > > > might >> > > > > > > > > > > > > > > > > > > > > > > > > not be enough to save >> > Catalogs, >> > > > > > because >> > > > > > > > in >> > > > > > > > > > the >> > > > > > > > > > > > end >> > > > > > > > > > > > > we >> > > > > > > > > > > > > > > > still >> > > > > > > > > > > > > > > > > > > need >> > > > > > > > > > > > > > > > > > > > to >> > > > > > > > > > > > > > > > > > > > > > > save >> > > > > > > > > > > > > > > > > > > > > > > > > the configurations >> > > corresponding >> > > > to >> > > > > > the >> > > > > > > > > > Catalog >> > > > > > > > > > > > > > > > instances. >> > > > > > > > > > > > > > > > > > > > > > Therefore, >> > > > > > > > > > > > > > > > > > > > > > > I >> > > > > > > > > > > > > > > > > > > > > > > > > decided to introduce the >> > > > > CatalogStore >> > > > > > > > > > interface >> > > > > > > > > > > > for >> > > > > > > > > > > > > > > > > > > configuration >> > > > > > > > > > > > > > > > > > > > > > > > > persistence. Regarding >> this >> > > > part, I >> > > > > > also >> > > > > > > > > took >> > > > > > > > > > > > > > > inspiration >> > > > > > > > > > > > > > > > > > from >> > > > > > > > > > > > > > > > > > > > > > Trino's >> > > > > > > > > > > > > > > > > > > > > > > > > implementation[1]. >> > > > > > > > > > > > > > > > > > > > > > > > > >> > > > > > > > > > > > > > > > > > > > > > > > > >> > > > > > > > > > > > > > > > > > > > > > > > > @yuxia >> > > > > > > > > > > > > > > > > > > > > > > > > >> > > > > > > > > > > > > > > > > > > > > > > > > > 1: The mechanism of >> > handling >> > > > > > catalog >> > > > > > > > with >> > > > > > > > > > the >> > > > > > > > > > > > > same >> > > > > > > > > > > > > > > name >> > > > > > > > > > > > > > > > > > > looks a >> > > > > > > > > > > > > > > > > > > > > > > little >> > > > > > > > > > > > > > > > > > > > > > > > of >> > > > > > > > > > > > > > > > > > > > > > > > > complex to me. >> > > > > > > > > > > > > > > > > > > > > > > > > Thank you for the >> > suggestion. I >> > > > > will >> > > > > > > > > provide >> > > > > > > > > > a >> > > > > > > > > > > > > > detailed >> > > > > > > > > > > > > > > > > > > > description >> > > > > > > > > > > > > > > > > > > > > > and >> > > > > > > > > > > > > > > > > > > > > > > > > code examples for this >> part, >> > > and >> > > > > add >> > > > > > it >> > > > > > > > to >> > > > > > > > > > the >> > > > > > > > > > > > > FLIP. >> > > > > > > > > > > > > > > > > > > > > > > > > >> > > > > > > > > > > > > > > > > > > > > > > > > > 2: TBH, the method name >> > > > > > `addCatalog` >> > > > > > > > > still >> > > > > > > > > > > > looks >> > > > > > > > > > > > > > > > confused >> > > > > > > > > > > > > > > > > > to >> > > > > > > > > > > > > > > > > > > > me. >> > > > > > > > > > > > > > > > > > > > > > > IIUC, >> > > > > > > > > > > > > > > > > > > > > > > > > this method is for storing >> > > > catalog >> > > > > to >> > > > > > > > > > > > CatalogStore, >> > > > > > > > > > > > > > how >> > > > > > > > > > > > > > > > > about >> > > > > > > > > > > > > > > > > > > > > > renaming >> > > > > > > > > > > > > > > > > > > > > > > it >> > > > > > > > > > > > > > > > > > > > > > > > > to `storeCatalog`? It's >> very >> > > > > personal >> > > > > > > > > > opinion, >> > > > > > > > > > > > you >> > > > > > > > > > > > > > can >> > > > > > > > > > > > > > > > > decide >> > > > > > > > > > > > > > > > > > > to >> > > > > > > > > > > > > > > > > > > > > take >> > > > > > > > > > > > > > > > > > > > > > > it >> > > > > > > > > > > > > > > > > > > > > > > > or >> > > > > > > > > > > > > > > > > > > > > > > > > not by your self. >> > > > > > > > > > > > > > > > > > > > > > > > > StoreCatalog looks more >> > > intuitive >> > > > > to >> > > > > > me. >> > > > > > > > I >> > > > > > > > > > > don't >> > > > > > > > > > > > > see >> > > > > > > > > > > > > > > any >> > > > > > > > > > > > > > > > > > > problem >> > > > > > > > > > > > > > > > > > > > > with >> > > > > > > > > > > > > > > > > > > > > > > it. >> > > > > > > > > > > > > > > > > > > > > > > > > >> > > > > > > > > > > > > > > > > > > > > > > > > > 3.For CREATE CATALOG >> > > statement, >> > > > > > which >> > > > > > > > > > method >> > > > > > > > > > > > will >> > > > > > > > > > > > > > be >> > > > > > > > > > > > > > > > > > called? >> > > > > > > > > > > > > > > > > > > > > > > > > `registerCatalog` or >> > > > `addCatalog`? >> > > > > > I'm >> > > > > > > > > > > wondering >> > > > > > > > > > > > > > > whether >> > > > > > > > > > > > > > > > > user >> > > > > > > > > > > > > > > > > > > can >> > > > > > > > > > > > > > > > > > > > > > add a >> > > > > > > > > > > > > > > > > > > > > > > > > catalog to store with SQL >> > > > stement. >> > > > > > > > > > > > > > > > > > > > > > > > > For CREATE CATALOG, my >> > original >> > > > > > design >> > > > > > > > was >> > > > > > > > > to >> > > > > > > > > > > add >> > > > > > > > > > > > > it >> > > > > > > > > > > > > > > > > directly >> > > > > > > > > > > > > > > > > > > to >> > > > > > > > > > > > > > > > > > > > > the >> > > > > > > > > > > > > > > > > > > > > > > > > CatalogStore, but this >> would >> > > > > disrupt >> > > > > > the >> > > > > > > > > > > existing >> > > > > > > > > > > > > > > logic. >> > > > > > > > > > > > > > > > > > > > > Therefore, I >> > > > > > > > > > > > > > > > > > > > > > > > think >> > > > > > > > > > > > > > > > > > > > > > > > > we can do both: save the >> > > > > > configuration to >> > > > > > > > > the >> > > > > > > > > > > > > > > > CatalogStore >> > > > > > > > > > > > > > > > > > and >> > > > > > > > > > > > > > > > > > > > > > > initialize >> > > > > > > > > > > > > > > > > > > > > > > > > the Catalog instance at >> the >> > > same >> > > > > time >> > > > > > > > > > > > > > > > > > > > > > > > > >> > > > > > > > > > > > > > > > > > > > > > > > > > 3. Is it really >> neccessary >> > to >> > > > > > provide a >> > > > > > > > > > > default >> > > > > > > > > > > > > > > > > > implmentation >> > > > > > > > > > > > > > > > > > > > for >> > > > > > > > > > > > > > > > > > > > > > > > > interface >> > > `CatalogStoreFactory`? >> > > > > > > > > > > > > > > > > > > > > > > > > I think it is necessary, >> > > > otherwise >> > > > > we >> > > > > > > > would >> > > > > > > > > > > need >> > > > > > > > > > > > to >> > > > > > > > > > > > > > > > > introduce >> > > > > > > > > > > > > > > > > > > an >> > > > > > > > > > > > > > > > > > > > > > > > additional >> > > > > > > > > > > > > > > > > > > > > > > > > Map to store the >> > configuration >> > > > for >> > > > > > lazy >> > > > > > > > > > > loading. >> > > > > > > > > > > > > > > > > > > > > > > > > >> > > > > > > > > > > > > > > > > > > > > > > > > > 4: About asynchronous >> > > > > registration >> > > > > > for >> > > > > > > > > > > catalog. >> > > > > > > > > > > > > > > > > > > > > > > > > I don't think >> > > > > registerCatalog(String >> > > > > > > > > > > catalogName, >> > > > > > > > > > > > > > > Catalog >> > > > > > > > > > > > > > > > > > > > catalog) >> > > > > > > > > > > > > > > > > > > > > > can >> > > > > > > > > > > > > > > > > > > > > > > be >> > > > > > > > > > > > > > > > > > > > > > > > > made into an asynchronous >> > > > interface >> > > > > > > > because >> > > > > > > > > > > > Catalog >> > > > > > > > > > > > > > is >> > > > > > > > > > > > > > > > > > already >> > > > > > > > > > > > > > > > > > > an >> > > > > > > > > > > > > > > > > > > > > > > > instance. >> > > > > > > > > > > > > > > > > > > > > > > > > >> > > > > > > > > > > > > > > > > > > > > > > > > > It looks more like lazy >> > > > > > initialization >> > > > > > > > > for >> > > > > > > > > > > > > catalog >> > > > > > > > > > > > > > > than >> > > > > > > > > > > > > > > > > > > > > > asynchronous >> > > > > > > > > > > > > > > > > > > > > > > > > registration, right? >> > > > > > > > > > > > > > > > > > > > > > > > > Indeed, my description was >> > > > > > inaccurate. It >> > > > > > > > > > > should >> > > > > > > > > > > > be >> > > > > > > > > > > > > > > lazy >> > > > > > > > > > > > > > > > > > > > > registration >> > > > > > > > > > > > > > > > > > > > > > > > > instead of asynchronous >> > > > > > registration. I >> > > > > > > > > have >> > > > > > > > > > > > > already >> > > > > > > > > > > > > > > > > updated >> > > > > > > > > > > > > > > > > > > the >> > > > > > > > > > > > > > > > > > > > > > title >> > > > > > > > > > > > > > > > > > > > > > > of >> > > > > > > > > > > > > > > > > > > > > > > > > the FLIP. >> > > > > > > > > > > > > > > > > > > > > > > > > >> > > > > > > > > > > > > > > > > > > > > > > > > >> > > > > > > > > > > > > > > > > > > > > > > > > >> > > > > > > > > > > > > > > > > > > > > > > > > >> > > > > > > > > > > > > > > > > > > > > > > > > [1]. >> > > > > > > > > > > > > > > > > > > > > > > > > >> > > > > > > > > > > > > > > > > > > > > > > > > >> > > > > > > > > > > > > > > > > > > > > > > > >> > > > > > > > > > > > > > > > > > > > > > > >> > > > > > > > > > > > > > > > > > > > > > >> > > > > > > > > > > > > > > > > > > > > >> > > > > > > > > > > > > > > > > > > > >> > > > > > > > > > > > > > > > > > > >> > > > > > > > > > > > > > > > > > >> > > > > > > > > > > > > > > > > >> > > > > > > > > > > > > > > > >> > > > > > > > > > > > > > > >> > > > > > > > > > > > > > >> > > > > > > > > > > > > >> > > > > > > > > > > > >> > > > > > > > > > > >> > > > > > > > > > >> > > > > > > > > >> > > > > > > > >> > > > > > >> > > > > >> > > > >> > > >> > >> https://github.com/trinodb/trino/blob/master/core/trino-main/src/main/java/io/trino/connector/CatalogStore.java >> > > > > > > > > > > > > > > > > > > > > > > > > >> > > > > > > > > > > > > > > > > > > > > > > > > >> > > > > > > > > > > > > > > > > > > > > > > > > On Tue, Apr 4, 2023 at >> > 4:27 PM >> > > > > > Shammon >> > > > > > > > FY < >> > > > > > > > > > > > > > > > > zjur...@gmail.com >> > > > > > > > > > > > > > > > > > > >> > > > > > > > > > > > > > > > > > > > > wrote: >> > > > > > > > > > > > > > > > > > > > > > > > > >> > > > > > > > > > > > > > > > > > > > > > > > > > Hi Feng >> > > > > > > > > > > > > > > > > > > > > > > > > > >> > > > > > > > > > > > > > > > > > > > > > > > > > I think if there is a >> > > > > > `registerCatalog` >> > > > > > > > > > > method >> > > > > > > > > > > > in >> > > > > > > > > > > > > > > > > > > > > `CatalogManager`, >> > > > > > > > > > > > > > > > > > > > > > > it >> > > > > > > > > > > > > > > > > > > > > > > > > will >> > > > > > > > > > > > > > > > > > > > > > > > > > confuse users whether a >> > > method >> > > > > > named >> > > > > > > > > > > > `addCatalog` >> > > > > > > > > > > > > > or >> > > > > > > > > > > > > > > > > > > > > `storeCatalog` >> > > > > > > > > > > > > > > > > > > > > > > is >> > > > > > > > > > > > > > > > > > > > > > > > > > added. >> > > > > > > > > > > > > > > > > > > > > > > > > > >> > > > > > > > > > > > > > > > > > > > > > > > > > And as you mentioned, >> the >> > > > memory >> > > > > > > > catalog >> > > > > > > > > > is a >> > > > > > > > > > > > > > > `cache`, >> > > > > > > > > > > > > > > > I >> > > > > > > > > > > > > > > > > > > think >> > > > > > > > > > > > > > > > > > > > > the >> > > > > > > > > > > > > > > > > > > > > > > > > concept >> > > > > > > > > > > > > > > > > > > > > > > > > > of `cache` should not be >> > > > exposed >> > > > > to >> > > > > > > > > users. >> > > > > > > > > > > > > > > > > > > > > > > > > > >> > > > > > > > > > > > > > > > > > > > > > > > > > I found there is a >> > > > pre-discussion >> > > > > > [1] >> > > > > > > > for >> > > > > > > > > > > this >> > > > > > > > > > > > > > FLIP. >> > > > > > > > > > > > > > > > > Please >> > > > > > > > > > > > > > > > > > > > > correct >> > > > > > > > > > > > > > > > > > > > > > > me >> > > > > > > > > > > > > > > > > > > > > > > > if >> > > > > > > > > > > > > > > > > > > > > > > > > > I'm wrong, IIUC, the >> > > conclusion >> > > > > of >> > > > > > that >> > > > > > > > > > > > > discussion >> > > > > > > > > > > > > > is >> > > > > > > > > > > > > > > > to >> > > > > > > > > > > > > > > > > > use >> > > > > > > > > > > > > > > > > > > > > > > > > > `CatalogManager` as an >> > > > interface >> > > > > > and >> > > > > > > > > > > implement >> > > > > > > > > > > > it >> > > > > > > > > > > > > > for >> > > > > > > > > > > > > > > > > > > different >> > > > > > > > > > > > > > > > > > > > > > > stores >> > > > > > > > > > > > > > > > > > > > > > > > > such >> > > > > > > > > > > > > > > > > > > > > > > > > > as memory, file and >> > external >> > > > > > system. >> > > > > > > > > > > > > > > > > > > > > > > > > > >> > > > > > > > > > > > > > > > > > > > > > > > > > I think there is a gap >> > > between >> > > > > the >> > > > > > > > > current >> > > > > > > > > > > FLIP >> > > > > > > > > > > > > > > design >> > > > > > > > > > > > > > > > > and >> > > > > > > > > > > > > > > > > > > that >> > > > > > > > > > > > > > > > > > > > > > > > > conclusion. >> > > > > > > > > > > > > > > > > > > > > > > > > > What about the proposal >> of >> > > the >> > > > > > > > discussion >> > > > > > > > > > in >> > > > > > > > > > > > > thread >> > > > > > > > > > > > > > > > [1] ? >> > > > > > > > > > > > > > > > > > > > > > > > > > >> > > > > > > > > > > > > > > > > > > > > > > > > > >> > > > > > > > > > > > > > > > > > > > > > > > > > [1] >> > > > > > > > > > > > > > > > > > > > > > >> > > > > > > > > > > > > > > > >> > > > > > > > > > >> > > > https://lists.apache.org/thread/9bnjblgd9wvrl75lkm84oo654c4lqv70 >> > > > > > > > > > > > > > > > > > > > > > > > > > >> > > > > > > > > > > > > > > > > > > > > > > > > > >> > > > > > > > > > > > > > > > > > > > > > > > > > Best, >> > > > > > > > > > > > > > > > > > > > > > > > > > Shammon FY >> > > > > > > > > > > > > > > > > > > > > > > > > > >> > > > > > > > > > > > > > > > > > > > > > > > > > >> > > > > > > > > > > > > > > > > > > > > > > > > > On Tue, Apr 4, 2023 at >> > > 3:41 PM >> > > > > > yuxia < >> > > > > > > > > > > > > > > > > > > > > luoyu...@alumni.sjtu.edu.cn> >> > > > > > > > > > > > > > > > > > > > > > > > > wrote: >> > > > > > > > > > > > > > > > > > > > > > > > > > >> > > > > > > > > > > > > > > > > > > > > > > > > > > Thanks Feng for >> driving >> > > this >> > > > > > FLIP. >> > > > > > > > > > > > > > > > > > > > > > > > > > > I have few comments: >> > > > > > > > > > > > > > > > > > > > > > > > > > > 1: The mechanism of >> > > handling >> > > > > > catalog >> > > > > > > > > with >> > > > > > > > > > > the >> > > > > > > > > > > > > > same >> > > > > > > > > > > > > > > > name >> > > > > > > > > > > > > > > > > > > > looks a >> > > > > > > > > > > > > > > > > > > > > > > > little >> > > > > > > > > > > > > > > > > > > > > > > > > of >> > > > > > > > > > > > > > > > > > > > > > > > > > > complex to me. I think >> > > it'll >> > > > be >> > > > > > > > better >> > > > > > > > > to >> > > > > > > > > > > > > explain >> > > > > > > > > > > > > > > it >> > > > > > > > > > > > > > > > in >> > > > > > > > > > > > > > > > > > the >> > > > > > > > > > > > > > > > > > > > > java >> > > > > > > > > > > > > > > > > > > > > > > doc >> > > > > > > > > > > > > > > > > > > > > > > > of >> > > > > > > > > > > > > > > > > > > > > > > > > > > these methods and >> give a >> > > > brief >> > > > > > > > example >> > > > > > > > > in >> > > > > > > > > > > > this >> > > > > > > > > > > > > > > FLIP. >> > > > > > > > > > > > > > > > > > > > > > > > > > > >> > > > > > > > > > > > > > > > > > > > > > > > > > > 2: TBH, the method >> name >> > > > > > `addCatalog` >> > > > > > > > > > still >> > > > > > > > > > > > > looks >> > > > > > > > > > > > > > > > > confused >> > > > > > > > > > > > > > > > > > > to >> > > > > > > > > > > > > > > > > > > > > me. >> > > > > > > > > > > > > > > > > > > > > > > > IIUC, >> > > > > > > > > > > > > > > > > > > > > > > > > > > this method is for >> > storing >> > > > > > catalog to >> > > > > > > > > > > > > > CatalogStore, >> > > > > > > > > > > > > > > > how >> > > > > > > > > > > > > > > > > > > about >> > > > > > > > > > > > > > > > > > > > > > > > renaming >> > > > > > > > > > > > > > > > > > > > > > > > > it >> > > > > > > > > > > > > > > > > > > > > > > > > > > to `storeCatalog`? >> It's >> > > very >> > > > > > personal >> > > > > > > > > > > > opinion, >> > > > > > > > > > > > > > you >> > > > > > > > > > > > > > > > can >> > > > > > > > > > > > > > > > > > > decide >> > > > > > > > > > > > > > > > > > > > > to >> > > > > > > > > > > > > > > > > > > > > > > take >> > > > > > > > > > > > > > > > > > > > > > > > > it >> > > > > > > > > > > > > > > > > > > > > > > > > > or >> > > > > > > > > > > > > > > > > > > > > > > > > > > not by your self. >> > > > > > > > > > > > > > > > > > > > > > > > > > > >> > > > > > > > > > > > > > > > > > > > > > > > > > > 3: For CREATE CATALOG >> > > > > statement, >> > > > > > > > which >> > > > > > > > > > > method >> > > > > > > > > > > > > > will >> > > > > > > > > > > > > > > be >> > > > > > > > > > > > > > > > > > > called? >> > > > > > > > > > > > > > > > > > > > > > > > > > > `registerCatalog` or >> > > > > > `addCatalog`? >> > > > > > > > I'm >> > > > > > > > > > > > > wondering >> > > > > > > > > > > > > > > > > whether >> > > > > > > > > > > > > > > > > > > user >> > > > > > > > > > > > > > > > > > > > > can >> > > > > > > > > > > > > > > > > > > > > > > > add a >> > > > > > > > > > > > > > > > > > > > > > > > > > > catalog to store with >> SQL >> > > > > > stement. >> > > > > > > > > > > > > > > > > > > > > > > > > > > >> > > > > > > > > > > > > > > > > > > > > > > > > > > >> > > > > > > > > > > > > > > > > > > > > > > > > > > 3: Is it really >> > neccessary >> > > to >> > > > > > > > provide a >> > > > > > > > > > > > default >> > > > > > > > > > > > > > > > > > > implmentation >> > > > > > > > > > > > > > > > > > > > > for >> > > > > > > > > > > > > > > > > > > > > > > > > > > interface >> > > > > `CatalogStoreFactory`? >> > > > > > > > > > > > > > > > > > > > > > > > > > > >> > > > > > > > > > > > > > > > > > > > > > > > > > > >> > > > > > > > > > > > > > > > > > > > > > > > > > > 4: About asynchronous >> > > > > > registration >> > > > > > > > for >> > > > > > > > > > > > catalog. >> > > > > > > > > > > > > > > > > > > > > > > > > > > >> > > > > > > > > > > > > > > > > > > > > > > > > > > > When creating a >> catalog >> > > > with >> > > > > > CREATE >> > > > > > > > > > > > CATALOG, >> > > > > > > > > > > > > > the >> > > > > > > > > > > > > > > > > > > > asynchronous >> > > > > > > > > > > > > > > > > > > > > > > > > > > registration method is >> > used >> > > > by >> > > > > > > > default. >> > > > > > > > > > > > > > > > > > > > > > > > > > > If asynchronous >> > > registration >> > > > is >> > > > > > the >> > > > > > > > > > default >> > > > > > > > > > > > > > > behavior, >> > > > > > > > > > > > > > > > > it >> > > > > > > > > > > > > > > > > > > > there >> > > > > > > > > > > > > > > > > > > > > > any >> > > > > > > > > > > > > > > > > > > > > > > > way >> > > > > > > > > > > > > > > > > > > > > > > > > > > that user can switch >> to >> > > > > > synchronous >> > > > > > > > > > > > > registration >> > > > > > > > > > > > > > > just >> > > > > > > > > > > > > > > > > > like >> > > > > > > > > > > > > > > > > > > > > > before? >> > > > > > > > > > > > > > > > > > > > > > > > > > > Will both method >> > > `addCatalog` >> > > > > and >> > > > > > > > > > > > > > `registerCatalog` >> > > > > > > > > > > > > > > > be >> > > > > > > > > > > > > > > > > > > > > > asynchronous >> > > > > > > > > > > > > > > > > > > > > > > > > > > registration? >> > > > > > > > > > > > > > > > > > > > > > > > > > > >> > > > > > > > > > > > > > > > > > > > > > > > > > > IIUC, in asynchronous >> > > > > > registration, >> > > > > > > > it >> > > > > > > > > > may >> > > > > > > > > > > > well >> > > > > > > > > > > > > > > that >> > > > > > > > > > > > > > > > > > CREATE >> > > > > > > > > > > > > > > > > > > > > > CATALOG >> > > > > > > > > > > > > > > > > > > > > > > > > > > executes successfully, >> > but >> > > > then >> > > > > > the >> > > > > > > > > > > following >> > > > > > > > > > > > > > > CREATE >> > > > > > > > > > > > > > > > > > TABLE >> > > > > > > > > > > > > > > > > > > > > > > statement >> > > > > > > > > > > > > > > > > > > > > > > > > will >> > > > > > > > > > > > > > > > > > > > > > > > > > > fail for the catalog >> fail >> > > to >> > > > > > open. >> > > > > > > > > > > > > > > > > > > > > > > > > > > I think it's a break >> > change >> > > > > which >> > > > > > > > > should >> > > > > > > > > > be >> > > > > > > > > > > > > > > > highlighted >> > > > > > > > > > > > > > > > > > in >> > > > > > > > > > > > > > > > > > > > this >> > > > > > > > > > > > > > > > > > > > > > > FLIP, >> > > > > > > > > > > > > > > > > > > > > > > > > may >> > > > > > > > > > > > > > > > > > > > > > > > > > > be in compatibility >> part. >> > > > > > > > > > > > > > > > > > > > > > > > > > > >> > > > > > > > > > > > > > > > > > > > > > > > > > > >> > > > > > > > > > > > > > > > > > > > > > > > > > > BTW, by saying >> > asynchronous >> > > > > > > > > > registration, I >> > > > > > > > > > > > > would >> > > > > > > > > > > > > > > > like >> > > > > > > > > > > > > > > > > to >> > > > > > > > > > > > > > > > > > > > > expect >> > > > > > > > > > > > > > > > > > > > > > > > there >> > > > > > > > > > > > > > > > > > > > > > > > > > > will be an executor to >> > open >> > > > or >> > > > > > > > register >> > > > > > > > > > > > catalog >> > > > > > > > > > > > > > in >> > > > > > > > > > > > > > > > the >> > > > > > > > > > > > > > > > > > > > > > background, >> > > > > > > > > > > > > > > > > > > > > > > > but >> > > > > > > > > > > > > > > > > > > > > > > > > > from >> > > > > > > > > > > > > > > > > > > > > > > > > > > your previous >> comments, >> > > > > > > > > > > > > > > > > > > > > > > > > > > "the Catalog instance >> > will >> > > be >> > > > > > > > > initialized >> > > > > > > > > > > if >> > > > > > > > > > > > it >> > > > > > > > > > > > > > has >> > > > > > > > > > > > > > > > not >> > > > > > > > > > > > > > > > > > > been >> > > > > > > > > > > > > > > > > > > > > > > > > initialized >> > > > > > > > > > > > > > > > > > > > > > > > > > > yet. If the >> > initialization >> > > > > > process >> > > > > > > > > fails, >> > > > > > > > > > > > these >> > > > > > > > > > > > > > > > > > statements >> > > > > > > > > > > > > > > > > > > > will >> > > > > > > > > > > > > > > > > > > > > > not >> > > > > > > > > > > > > > > > > > > > > > > > be >> > > > > > > > > > > > > > > > > > > > > > > > > > > executed >> successfully." >> > > > > > > > > > > > > > > > > > > > > > > > > > > It looks more like >> lazy >> > > > > > > > initialization >> > > > > > > > > > for >> > > > > > > > > > > > > > catalog >> > > > > > > > > > > > > > > > than >> > > > > > > > > > > > > > > > > > > > > > > asynchronous >> > > > > > > > > > > > > > > > > > > > > > > > > > > registration, right? >> > > > > > > > > > > > > > > > > > > > > > > > > > > >> > > > > > > > > > > > > > > > > > > > > > > > > > > >> > > > > > > > > > > > > > > > > > > > > > > > > > > Best regards, >> > > > > > > > > > > > > > > > > > > > > > > > > > > Yuxia >> > > > > > > > > > > > > > > > > > > > > > > > > > > >> > > > > > > > > > > > > > > > > > > > > > > > > > > ----- 原始邮件 ----- >> > > > > > > > > > > > > > > > > > > > > > > > > > > 发件人: "Feng Jin" < >> > > > > > > > jinfeng1...@gmail.com >> > > > > > > > > > >> > > > > > > > > > > > > > > > > > > > > > > > > > > 收件人: "dev" < >> > > > > dev@flink.apache.org >> > > > > > > >> > > > > > > > > > > > > > > > > > > > > > > > > > > 发送时间: 星期一, 2023年 4 月 >> 03日 >> > 下午 >> > > > > > 3:27:45 >> > > > > > > > > > > > > > > > > > > > > > > > > > > 主题: Re: [DISCUSS] FLIP >> > 295: >> > > > > > Support >> > > > > > > > > > > > persistence >> > > > > > > > > > > > > > of >> > > > > > > > > > > > > > > > > > Catalog >> > > > > > > > > > > > > > > > > > > > > > > > > configuration >> > > > > > > > > > > > > > > > > > > > > > > > > > > and asynchronous >> > > registration >> > > > > > > > > > > > > > > > > > > > > > > > > > > >> > > > > > > > > > > > > > > > > > > > > > > > > > > Hi everyone, Thank you >> > all >> > > > for >> > > > > > your >> > > > > > > > > > > interest >> > > > > > > > > > > > in >> > > > > > > > > > > > > > > this >> > > > > > > > > > > > > > > > > > > DISCUSS. >> > > > > > > > > > > > > > > > > > > > > > > > > > > >> > > > > > > > > > > > > > > > > > > > > > > > > > > @Shammon >> > > > > > > > > > > > > > > > > > > > > > > > > > > > How to handle a >> catalog >> > > > with >> > > > > > the >> > > > > > > > same >> > > > > > > > > > > name >> > > > > > > > > > > > > that >> > > > > > > > > > > > > > > > > exists >> > > > > > > > > > > > > > > > > > > for >> > > > > > > > > > > > > > > > > > > > > both >> > > > > > > > > > > > > > > > > > > > > > > of >> > > > > > > > > > > > > > > > > > > > > > > > > > them? >> > > > > > > > > > > > > > > > > > > > > > > > > > > >> > > > > > > > > > > > > > > > > > > > > > > > > > > I believe this is a >> > crucial >> > > > > > point. >> > > > > > > > > Based >> > > > > > > > > > on >> > > > > > > > > > > > my >> > > > > > > > > > > > > > > > current >> > > > > > > > > > > > > > > > > > > > personal >> > > > > > > > > > > > > > > > > > > > > > > > > > > understanding, the >> > > > Map<String, >> > > > > > > > Catalog> >> > > > > > > > > > > > > catalogs >> > > > > > > > > > > > > > > will >> > > > > > > > > > > > > > > > > > serve >> > > > > > > > > > > > > > > > > > > > as >> > > > > > > > > > > > > > > > > > > > > a >> > > > > > > > > > > > > > > > > > > > > > > > cache >> > > > > > > > > > > > > > > > > > > > > > > > > > > for instantiated >> catalogs >> > > and >> > > > > > have >> > > > > > > > the >> > > > > > > > > > > > highest >> > > > > > > > > > > > > > > > > priority. >> > > > > > > > > > > > > > > > > > > > > > > > > > > >> > > > > > > > > > > > > > > > > > > > > > > > > > > There are three >> methods >> > > that >> > > > > can >> > > > > > > > affect >> > > > > > > > > > the >> > > > > > > > > > > > > > > > Map<String, >> > > > > > > > > > > > > > > > > > > > > Catalog> >> > > > > > > > > > > > > > > > > > > > > > > > > > catalogs: >> > > > > > > > > > > > > > > > > > > > > > > > > > > >> > > > > > > > > > > > > > > > > > > > > > > > > > > 1. >> registerCatalog(String >> > > > > > > > catalogName, >> > > > > > > > > > > > Catalog >> > > > > > > > > > > > > > > > catalog) >> > > > > > > > > > > > > > > > > > > > > > > > > > > >> > > > > > > > > > > > > > > > > > > > > > > > > > > This method puts the >> > > catalog >> > > > > > instance >> > > > > > > > > > into >> > > > > > > > > > > > the >> > > > > > > > > > > > > > > > > > Map<String, >> > > > > > > > > > > > > > > > > > > > > > Catalog> >> > > > > > > > > > > > > > > > > > > > > > > > > > > catalogs. >> > > > > > > > > > > > > > > > > > > > > > > > > > > >> > > > > > > > > > > > > > > > > > > > > > > > > > > 2. >> > unregisterCatalog(String >> > > > > > > > > catalogName) >> > > > > > > > > > > > > > > > > > > > > > > > > > > >> > > > > > > > > > > > > > > > > > > > > > > > > > > This method removes >> the >> > > > catalog >> > > > > > > > > instance >> > > > > > > > > > > > > > > > corresponding >> > > > > > > > > > > > > > > > > to >> > > > > > > > > > > > > > > > > > > > > > > catalogName >> > > > > > > > > > > > > > > > > > > > > > > > > > > from the Map<String, >> > > Catalog> >> > > > > > > > catalogs. >> > > > > > > > > > > > > > > > > > > > > > > > > > > >> > > > > > > > > > > > > > > > > > > > > > > > > > > 3. getCatalog(String >> > > > > catalogName) >> > > > > > > > > > > > > > > > > > > > > > > > > > > >> > > > > > > > > > > > > > > > > > > > > > > > > > > This method first >> > retrieves >> > > > the >> > > > > > > > > > > corresponding >> > > > > > > > > > > > > > > catalog >> > > > > > > > > > > > > > > > > > > > instance >> > > > > > > > > > > > > > > > > > > > > > from >> > > > > > > > > > > > > > > > > > > > > > > > > > > the Map<String, >> Catalog> >> > > > > > catalogs. If >> > > > > > > > > the >> > > > > > > > > > > > > catalog >> > > > > > > > > > > > > > > > does >> > > > > > > > > > > > > > > > > > not >> > > > > > > > > > > > > > > > > > > > > exist, >> > > > > > > > > > > > > > > > > > > > > > > it >> > > > > > > > > > > > > > > > > > > > > > > > > > > retrieves the >> > corresponding >> > > > > > > > > configuration >> > > > > > > > > > > > from >> > > > > > > > > > > > > > the >> > > > > > > > > > > > > > > > > > > > > CatalogStore, >> > > > > > > > > > > > > > > > > > > > > > > > > > > initializes it, and >> puts >> > > the >> > > > > > > > > initialized >> > > > > > > > > > > > > Catalog >> > > > > > > > > > > > > > > > > instance >> > > > > > > > > > > > > > > > > > > > into >> > > > > > > > > > > > > > > > > > > > > > the >> > > > > > > > > > > > > > > > > > > > > > > > > > > Map<String, Catalog> >> > > > catalogs. >> > > > > > > > > > > > > > > > > > > > > > > > > > > >> > > > > > > > > > > > > > > > > > > > > > > > > > > The following two >> methods >> > > > only >> > > > > > modify >> > > > > > > > > the >> > > > > > > > > > > > > > > > configuration >> > > > > > > > > > > > > > > > > > in >> > > > > > > > > > > > > > > > > > > > the >> > > > > > > > > > > > > > > > > > > > > > > > > > > CatalogStore: >> > > > > > > > > > > > > > > > > > > > > > > > > > > >> > > > > > > > > > > > > > > > > > > > > > > > > > > 1. addCatalog(String >> > > > > catalogName, >> > > > > > > > > > > Map<String, >> > > > > > > > > > > > > > > String> >> > > > > > > > > > > > > > > > > > > > > properties) >> > > > > > > > > > > > > > > > > > > > > > > > > > > >> > > > > > > > > > > > > > > > > > > > > > > > > > > This method saves the >> > > > > properties >> > > > > > to >> > > > > > > > the >> > > > > > > > > > > > > > > catalogStore >> > > > > > > > > > > > > > > > > and >> > > > > > > > > > > > > > > > > > > > checks >> > > > > > > > > > > > > > > > > > > > > > > > > > > whether there is a >> > > > catalogName >> > > > > > with >> > > > > > > > the >> > > > > > > > > > > same >> > > > > > > > > > > > > > name. >> > > > > > > > > > > > > > > > > > > > > > > > > > > >> > > > > > > > > > > > > > > > > > > > > > > > > > > 2. >> removeCatalog(String >> > > > > > catalogName) >> > > > > > > > > > > > > > > > > > > > > > > > > > > This method removes >> the >> > > > > specified >> > > > > > > > > > > > configuration >> > > > > > > > > > > > > > of >> > > > > > > > > > > > > > > > the >> > > > > > > > > > > > > > > > > > > > > specified >> > > > > > > > > > > > > > > > > > > > > > > > > > > catalogName in the >> > > > > catalogStore. >> > > > > > > > > > > > > > > > > > > > > > > > > > > >> > > > > > > > > > > > > > > > > > > > > > > > > > > The following are >> > possible >> > > > > > conflict >> > > > > > > > > > > > scenarios: >> > > > > > > > > > > > > > > > > > > > > > > > > > > >> > > > > > > > > > > > > > > > > > > > > > > > > > > 1. When the >> corresponding >> > > > > > catalogName >> > > > > > > > > > > already >> > > > > > > > > > > > > > > exists >> > > > > > > > > > > > > > > > in >> > > > > > > > > > > > > > > > > > the >> > > > > > > > > > > > > > > > > > > > > > > > > > > CatalogStore but not >> in >> > the >> > > > > > > > Map<String, >> > > > > > > > > > > > > Catalog>, >> > > > > > > > > > > > > > > the >> > > > > > > > > > > > > > > > > > > > > > > > > > > registerCatalog(String >> > > > > > catalogName, >> > > > > > > > > > Catalog >> > > > > > > > > > > > > > > catalog) >> > > > > > > > > > > > > > > > > > method >> > > > > > > > > > > > > > > > > > > > can >> > > > > > > > > > > > > > > > > > > > > > > > > > > succeed and be >> directly >> > > saved >> > > > > to >> > > > > > the >> > > > > > > > > > > > > Map<String, >> > > > > > > > > > > > > > > > > Catalog> >> > > > > > > > > > > > > > > > > > > > > > catalogs. >> > > > > > > > > > > > > > > > > > > > > > > > > > > >> > > > > > > > > > > > > > > > > > > > > > > > > > > 2. When the >> corresponding >> > > > > > catalogName >> > > > > > > > > > > already >> > > > > > > > > > > > > > > exists >> > > > > > > > > > > > > > > > in >> > > > > > > > > > > > > > > > > > > both >> > > > > > > > > > > > > > > > > > > > > the >> > > > > > > > > > > > > > > > > > > > > > > > > > > CatalogStore and the >> > > > > Map<String, >> > > > > > > > > > Catalog>, >> > > > > > > > > > > > the >> > > > > > > > > > > > > > > > > > > > > > > registerCatalog(String >> > > > > > > > > > > > > > > > > > > > > > > > > > > catalogName, Catalog >> > > catalog) >> > > > > > method >> > > > > > > > > will >> > > > > > > > > > > > fail. >> > > > > > > > > > > > > > > > > > > > > > > > > > > >> > > > > > > > > > > > > > > > > > > > > > > > > > > 3. When the >> corresponding >> > > > > > catalogName >> > > > > > > > > > > already >> > > > > > > > > > > > > > > exists >> > > > > > > > > > > > > > > > in >> > > > > > > > > > > > > > > > > > the >> > > > > > > > > > > > > > > > > > > > > > > > > > > Map<String, Catalog>, >> the >> > > > > > > > > > addCatalog(String >> > > > > > > > > > > > > > > > > catalogName, >> > > > > > > > > > > > > > > > > > > > > > > Map<String, >> > > > > > > > > > > > > > > > > > > > > > > > > > > String> properties) >> > method >> > > > can >> > > > > > > > directly >> > > > > > > > > > > save >> > > > > > > > > > > > > the >> > > > > > > > > > > > > > > > > > properties >> > > > > > > > > > > > > > > > > > > > to >> > > > > > > > > > > > > > > > > > > > > > the >> > > > > > > > > > > > > > > > > > > > > > > > > > > catalogStore, but the >> > > > > > > > getCatalog(String >> > > > > > > > > > > > > > > catalogName) >> > > > > > > > > > > > > > > > > > method >> > > > > > > > > > > > > > > > > > > > > will >> > > > > > > > > > > > > > > > > > > > > > > not >> > > > > > > > > > > > > > > > > > > > > > > > > > > use the new properties >> > for >> > > > > > > > > initialization >> > > > > > > > > > > > > because >> > > > > > > > > > > > > > > the >> > > > > > > > > > > > > > > > > > > > > > corresponding >> > > > > > > > > > > > > > > > > > > > > > > > > > > catalog instance >> already >> > > > exists >> > > > > > in >> > > > > > > > > > catalogs >> > > > > > > > > > > > and >> > > > > > > > > > > > > > > will >> > > > > > > > > > > > > > > > be >> > > > > > > > > > > > > > > > > > > > > > > prioritized. >> > > > > > > > > > > > > > > > > > > > > > > > > > > Therefore, using the >> > > > > > > > > > > unregisterCatalog(String >> > > > > > > > > > > > > > > > > > catalogName) >> > > > > > > > > > > > > > > > > > > > > method >> > > > > > > > > > > > > > > > > > > > > > > to >> > > > > > > > > > > > > > > > > > > > > > > > > > > remove the instance >> > > > > > corresponding to >> > > > > > > > > the >> > > > > > > > > > > > > original >> > > > > > > > > > > > > > > > > > > catalogName >> > > > > > > > > > > > > > > > > > > > > is >> > > > > > > > > > > > > > > > > > > > > > > > > > > necessary. >> > > > > > > > > > > > > > > > > > > > > > > > > > > >> > > > > > > > > > > > > > > > > > > > > > > > > > > >> > > > > > > > > > > > > > > > > > > > > > > > > > > >> > > > > > > > > > > > > > > > > > > > > > > > > > > > I think it will >> confuse >> > > > users >> > > > > > that >> > > > > > > > > > > > > > > > > > > `registerCatalog(String >> > > > > > > > > > > > > > > > > > > > > > > > > > > catalogName,Catalog >> > > catalog)` >> > > > > in >> > > > > > the >> > > > > > > > > > > > > `Map<String, >> > > > > > > > > > > > > > > > > > Catalog> >> > > > > > > > > > > > > > > > > > > > > > > catalogs` >> > > > > > > > > > > > > > > > > > > > > > > > > and >> > > > > > > > > > > > > > > > > > > > > > > > > > > >> `registerCatalog(String >> > > > > > catalogName, >> > > > > > > > > > > > > Map<String, >> > > > > > > > > > > > > > > > > String> >> > > > > > > > > > > > > > > > > > > > > > > properties) >> > > > > > > > > > > > > > > > > > > > > > > > > > > >> > > > > > > > > > > > > > > > > > > > > > > > > > > This could potentially >> > lead >> > > > to >> > > > > > > > > > confusion. I >> > > > > > > > > > > > > > suggest >> > > > > > > > > > > > > > > > > > > changing >> > > > > > > > > > > > > > > > > > > > > the >> > > > > > > > > > > > > > > > > > > > > > > > > > > method name, perhaps >> to >> > > > > > > > > addCatalog(String >> > > > > > > > > > > > > > > > catalogName, >> > > > > > > > > > > > > > > > > > > > > > Map<String, >> > > > > > > > > > > > > > > > > > > > > > > > > > > String> properties), >> as >> > > > > > previously >> > > > > > > > > > > mentioned >> > > > > > > > > > > > > > > > > > > > > > > > > > > >> > > > > > > > > > > > > > > > > > > > > > > > > > > >> > > > > > > > > > > > > > > > > > > > > > > > > > > @Hang >> > > > > > > > > > > > > > > > > > > > > > > > > > > > add >> > > `registerCatalog(String >> > > > > > > > > > > > > catalogName,Catalog >> > > > > > > > > > > > > > > > > > catalog, >> > > > > > > > > > > > > > > > > > > > > > > > > > > boolean lazyInit)` >> method >> > > > > > > > > > > > > > > > > > > > > > > > > > > >> > > > > > > > > > > > > > > > > > > > > > > > > > > Since a catalog is >> > already >> > > an >> > > > > > > > instance, >> > > > > > > > > > > > adding >> > > > > > > > > > > > > > the >> > > > > > > > > > > > > > > > > > > "lazyInit" >> > > > > > > > > > > > > > > > > > > > > > > > > > > parameter to the >> > > > > > > > registerCatalog(String >> > > > > > > > > > > > > > > catalogName, >> > > > > > > > > > > > > > > > > > > Catalog >> > > > > > > > > > > > > > > > > > > > > > > catalog) >> > > > > > > > > > > > > > > > > > > > > > > > > > > method may not >> > necessarily >> > > > > > result in >> > > > > > > > > lazy >> > > > > > > > > > > > > > > > > initialization. >> > > > > > > > > > > > > > > > > > > > > > > > > > > >> > > > > > > > > > > > > > > > > > > > > > > > > > > > Do we need to think >> > about >> > > > > > > > encryption >> > > > > > > > > > > > > > > > > > > > > > > > > > > >> > > > > > > > > > > > > > > > > > > > > > > > > > > I think encryption is >> > > > > necessary, >> > > > > > but >> > > > > > > > > > > perhaps >> > > > > > > > > > > > > the >> > > > > > > > > > > > > > > > > > encryption >> > > > > > > > > > > > > > > > > > > > > logic >> > > > > > > > > > > > > > > > > > > > > > > > > > > should be implemented >> in >> > > the >> > > > > > > > > CatalogStore >> > > > > > > > > > > > when >> > > > > > > > > > > > > > the >> > > > > > > > > > > > > > > > data >> > > > > > > > > > > > > > > > > > is >> > > > > > > > > > > > > > > > > > > > > > actually >> > > > > > > > > > > > > > > > > > > > > > > > > > > saved. For instance, >> the >> > > > > > > > > FileCatalogStore >> > > > > > > > > > > > could >> > > > > > > > > > > > > > > > encrypt >> > > > > > > > > > > > > > > > > > the >> > > > > > > > > > > > > > > > > > > > > data >> > > > > > > > > > > > > > > > > > > > > > > when >> > > > > > > > > > > > > > > > > > > > > > > > > > > it is saved to a file, >> > > while >> > > > > the >> > > > > > > > > > > > > > MemoryCatalogStore >> > > > > > > > > > > > > > > > > does >> > > > > > > > > > > > > > > > > > > not >> > > > > > > > > > > > > > > > > > > > > > > require >> > > > > > > > > > > > > > > > > > > > > > > > > > > encryption. >> > > > > > > > > > > > > > > > > > > > > > > > > > > >> > > > > > > > > > > > > > > > > > > > > > > > > > > > Do we really need >> the >> > > > > > > > > > > > `MemoryCatalogStore`? >> > > > > > > > > > > > > > > > > > > > > > > > > > > >> > > > > > > > > > > > > > > > > > > > > > > > > > > I think it is >> necessary >> > to >> > > > > have a >> > > > > > > > > > > > > > > MemoryCatalogStore >> > > > > > > > > > > > > > > > as >> > > > > > > > > > > > > > > > > > the >> > > > > > > > > > > > > > > > > > > > > > default >> > > > > > > > > > > > > > > > > > > > > > > > > > > implementation, which >> > saves >> > > > > > Catalog >> > > > > > > > > > > > > > configurations >> > > > > > > > > > > > > > > in >> > > > > > > > > > > > > > > > > > > memory. >> > > > > > > > > > > > > > > > > > > > > > > > > > > Otherwise, if we want >> to >> > > > > > implement >> > > > > > > > > > > > asynchronous >> > > > > > > > > > > > > > > > loading >> > > > > > > > > > > > > > > > > > of >> > > > > > > > > > > > > > > > > > > > > > Catalog, >> > > > > > > > > > > > > > > > > > > > > > > > we >> > > > > > > > > > > > > > > > > > > > > > > > > > > would need to >> introduce >> > > > > > additional >> > > > > > > > > cache. >> > > > > > > > > > > > > > > > > > > > > > > > > > > >> > > > > > > > > > > > > > > > > > > > > > > > > > > >> > > > > > > > > > > > > > > > > > > > > > > > > > > @Xianxun >> > > > > > > > > > > > > > > > > > > > > > > > > > > >> > > > > > > > > > > > > > > > > > > > > > > > > > > > What if asynchronous >> > > > > > registration >> > > > > > > > > > failed? >> > > > > > > > > > > > > > > > > > > > > > > > > > > >> > > > > > > > > > > > > > > > > > > > > > > > > > > This is also a >> critical >> > > > > concern. >> > > > > > > > When >> > > > > > > > > > > > > executing >> > > > > > > > > > > > > > > DDL, >> > > > > > > > > > > > > > > > > > DQL, >> > > > > > > > > > > > > > > > > > > or >> > > > > > > > > > > > > > > > > > > > > DML >> > > > > > > > > > > > > > > > > > > > > > > > > > > statements that >> > reference a >> > > > > > specific >> > > > > > > > > > > Catalog, >> > > > > > > > > > > > > the >> > > > > > > > > > > > > > > > > Catalog >> > > > > > > > > > > > > > > > > > > > > > instance >> > > > > > > > > > > > > > > > > > > > > > > > > > > will be initialized >> if it >> > > has >> > > > > not >> > > > > > > > been >> > > > > > > > > > > > > > initialized >> > > > > > > > > > > > > > > > yet. >> > > > > > > > > > > > > > > > > > If >> > > > > > > > > > > > > > > > > > > > the >> > > > > > > > > > > > > > > > > > > > > > > > > > > initialization process >> > > fails, >> > > > > > these >> > > > > > > > > > > > statements >> > > > > > > > > > > > > > will >> > > > > > > > > > > > > > > > not >> > > > > > > > > > > > > > > > > > be >> > > > > > > > > > > > > > > > > > > > > > executed >> > > > > > > > > > > > > > > > > > > > > > > > > > > successfully. >> > > > > > > > > > > > > > > > > > > > > > > > > > > >> > > > > > > > > > > > > > > > > > > > > > > > > > > > nt. The Map<String, >> > > > Catalog> >> > > > > > > > catalogs >> > > > > > > > > > and >> > > > > > > > > > > > > > > > > CatalogStore >> > > > > > > > > > > > > > > > > > > > > > > catalogstore >> > > > > > > > > > > > > > > > > > > > > > > > > in >> > > > > > > > > > > > > > > > > > > > > > > > > > > the CatalogManager all >> > have >> > > > the >> > > > > > same >> > > > > > > > > > > catalog >> > > > > > > > > > > > > > name, >> > > > > > > > > > > > > > > > but >> > > > > > > > > > > > > > > > > > > > > > correponding >> > > > > > > > > > > > > > > > > > > > > > > > to >> > > > > > > > > > > > > > > > > > > > > > > > > > > different catalog >> > > instances. >> > > > > > > > > > > > > > > > > > > > > > > > > > > >> > > > > > > > > > > > > > > > > > > > > > > > > > > This issue can be >> > resolved >> > > by >> > > > > > > > referring >> > > > > > > > > > to >> > > > > > > > > > > > the >> > > > > > > > > > > > > > > > previous >> > > > > > > > > > > > > > > > > > > > > > responses. >> > > > > > > > > > > > > > > > > > > > > > > > The >> > > > > > > > > > > > > > > > > > > > > > > > > > > key principle is that >> the >> > > > > Catalog >> > > > > > > > that >> > > > > > > > > > has >> > > > > > > > > > > > been >> > > > > > > > > > > > > > > most >> > > > > > > > > > > > > > > > > > > recently >> > > > > > > > > > > > > > > > > > > > > > used >> > > > > > > > > > > > > > > > > > > > > > > > > > > will be given priority >> > for >> > > > > > subsequent >> > > > > > > > > > use. >> > > > > > > > > > > > > > > > > > > > > > > > > > > >> > > > > > > > > > > > > > > > > > > > > > > > > > > On Sun, Apr 2, 2023 at >> > > > 10:58 PM >> > > > > > > > Xianxun >> > > > > > > > > > Ye >> > > > > > > > > > > < >> > > > > > > > > > > > > > > > > > > > > > > yesorno828...@gmail.com> >> > > > > > > > > > > > > > > > > > > > > > > > > > > wrote: >> > > > > > > > > > > > > > > > > > > > > > > > > > > > >> > > > > > > > > > > > > > > > > > > > > > > > > > > > Hi Feng, >> > > > > > > > > > > > > > > > > > > > > > > > > > > > >> > > > > > > > > > > > > > > > > > > > > > > > > > > > Thanks for driving >> this >> > > > Flip, >> > > > > > I do >> > > > > > > > > > > believe >> > > > > > > > > > > > > this >> > > > > > > > > > > > > > > > Flip >> > > > > > > > > > > > > > > > > > > could >> > > > > > > > > > > > > > > > > > > > be >> > > > > > > > > > > > > > > > > > > > > > > > helpful >> > > > > > > > > > > > > > > > > > > > > > > > > > > for users. The firm I >> > work >> > > > for >> > > > > > also >> > > > > > > > > > > manages a >> > > > > > > > > > > > > lot >> > > > > > > > > > > > > > > of >> > > > > > > > > > > > > > > > > > > > catalogs, >> > > > > > > > > > > > > > > > > > > > > > and >> > > > > > > > > > > > > > > > > > > > > > > > the >> > > > > > > > > > > > > > > > > > > > > > > > > > > submission of tasks >> > becomes >> > > > > slow >> > > > > > > > > because >> > > > > > > > > > of >> > > > > > > > > > > > > > > loading a >> > > > > > > > > > > > > > > > > > > number >> > > > > > > > > > > > > > > > > > > > of >> > > > > > > > > > > > > > > > > > > > > > > > > catalogs. >> > > > > > > > > > > > > > > > > > > > > > > > > > > We obtain the >> catalogs in >> > > the >> > > > > > user's >> > > > > > > > > > Flink >> > > > > > > > > > > > SQL >> > > > > > > > > > > > > > > > through >> > > > > > > > > > > > > > > > > > > > regular >> > > > > > > > > > > > > > > > > > > > > > > > > expression >> > > > > > > > > > > > > > > > > > > > > > > > > > > to avoid loading all >> > > catalogs >> > > > > to >> > > > > > > > > improve >> > > > > > > > > > > the >> > > > > > > > > > > > > > speed >> > > > > > > > > > > > > > > of >> > > > > > > > > > > > > > > > > > task >> > > > > > > > > > > > > > > > > > > > > > > > submission. >> > > > > > > > > > > > > > > > > > > > > > > > > > > After reading >> flip-295, I >> > > > have >> > > > > > some >> > > > > > > > > > > > questions: >> > > > > > > > > > > > > > > > > > > > > > > > > > > > >> > > > > > > > > > > > > > > > > > > > > > > > > > > > 1. When creating a >> > > catalog >> > > > > with >> > > > > > > > > CREATE >> > > > > > > > > > > > > CATALOG, >> > > > > > > > > > > > > > > the >> > > > > > > > > > > > > > > > > > > > > > asynchronous >> > > > > > > > > > > > > > > > > > > > > > > > > > > registration method is >> > used >> > > > by >> > > > > > > > default. >> > > > > > > > > > > What >> > > > > > > > > > > > if >> > > > > > > > > > > > > > > > > > > asynchronous >> > > > > > > > > > > > > > > > > > > > > > > > > registration >> > > > > > > > > > > > > > > > > > > > > > > > > > > failed? And how to >> > > implement >> > > > > > > > > asynchronous >> > > > > > > > > > > > > > > > registration? >> > > > > > > > > > > > > > > > > > > > > > > > > > > > >> > > > > > > > > > > > > > > > > > > > > > > > > > > > 2. I also have the >> same >> > > > > > question >> > > > > > > > with >> > > > > > > > > > > > > Shammon’s >> > > > > > > > > > > > > > > > first >> > > > > > > > > > > > > > > > > > > > > comment. >> > > > > > > > > > > > > > > > > > > > > > > The >> > > > > > > > > > > > > > > > > > > > > > > > > > > Map<String, Catalog> >> > > catalogs >> > > > > and >> > > > > > > > > > > > CatalogStore >> > > > > > > > > > > > > > > > > > catalogstore >> > > > > > > > > > > > > > > > > > > > in >> > > > > > > > > > > > > > > > > > > > > > the >> > > > > > > > > > > > > > > > > > > > > > > > > > > CatalogManager all >> have >> > the >> > > > > same >> > > > > > > > > catalog >> > > > > > > > > > > > name, >> > > > > > > > > > > > > > but >> > > > > > > > > > > > > > > > > > > > correponding >> > > > > > > > > > > > > > > > > > > > > > to >> > > > > > > > > > > > > > > > > > > > > > > > > > > different catalog >> > > instances. >> > > > > For >> > > > > > > > > example: >> > > > > > > > > > > > > > > catalog1-> >> > > > > > > > > > > > > > > > > > > > > jdbcCatalog >> > > > > > > > > > > > > > > > > > > > > > in >> > > > > > > > > > > > > > > > > > > > > > > > the >> > > > > > > > > > > > > > > > > > > > > > > > > > > catalogs, but >> catalog1 -> >> > > > > > hiveCatalog >> > > > > > > > > in >> > > > > > > > > > > the >> > > > > > > > > > > > > > > > > > catalogstore. >> > > > > > > > > > > > > > > > > > > > > Would >> > > > > > > > > > > > > > > > > > > > > > > this >> > > > > > > > > > > > > > > > > > > > > > > > > > case >> > > > > > > > > > > > > > > > > > > > > > > > > > > happen? Maybe we >> should >> > > > define >> > > > > > > > > `catalogs` >> > > > > > > > > > > and >> > > > > > > > > > > > > > > > > > > `catalogstore` >> > > > > > > > > > > > > > > > > > > > > more >> > > > > > > > > > > > > > > > > > > > > > > > > > clearly. >> > > > > > > > > > > > > > > > > > > > > > > > > > > > >> > > > > > > > > > > > > > > > > > > > > > > > > > > > >> > > > > > > > > > > > > > > > > > > > > > > > > > > > Best regards, >> > > > > > > > > > > > > > > > > > > > > > > > > > > > >> > > > > > > > > > > > > > > > > > > > > > > > > > > > Xianxun >> > > > > > > > > > > > > > > > > > > > > > > > > > > > >> > > > > > > > > > > > > > > > > > > > > > > > > > > > > 2023年3月31日 >> 11:13,Hang >> > > > Ruan >> > > > > < >> > > > > > > > > > > > > > > > ruanhang1...@gmail.com >> > > > > > > > > > > > > > > > > > >> > > > > > > > > > > > > > > > > > > 写道: >> > > > > > > > > > > > > > > > > > > > > > > > > > > > > >> > > > > > > > > > > > > > > > > > > > > > > > > > > > > MemoryCatalogStore >> > > > > > > > > > > > > > > > > > > > > > > > > > > > >> > > > > > > > > > > > > > > > > > > > > > > > > > > > >> > > > > > > > > > > > > > > > > > > > > > > > > > > >> > > > > > > > > > > > > > > > > > > > > > > > > > >> > > > > > > > > > > > > > > > > > > > > > > > > >> > > > > > > > > > > > > > > > > > > > > > > > >> > > > > > > > > > > > > > > > > > > > > > > >> > > > > > > > > > > > > > > > > > > > > > >> > > > > > > > > > > > > > > > > > > > > >> > > > > > > > > > > > > > > > > > > > >> > > > > > > > > > > > > > > > > > > >> > > > > > > > > > > > > > > > > > >> > > > > > > > > > > > > > > > > >> > > > > > > > > > > > > > > > >> > > > > > > > > > > > > > > >> > > > > > > > > > > > > > >> > > > > > > > > > > > > >> > > > > > > > > > > > > >> > > > > > > > > > > > > >> > > > > > > > > > > > > >> > > > > > > > > > > > >> > > > > > > > > > > >> > > > > > > > > > >> > > > > > > > > >> > > > > > > > >> > > > > > >> > > > > >> > > > >> > > >> > >> >