Hi, Feng. I reviewed this FLIP again and found some little places that may need to optimize.
1. `CatalogDescriptor` may need a private constructor. 2. The method `initCatalog` in `CatalogManager` is not introduced. Best, Hang Feng Jin <jinfeng1...@gmail.com> 于2023年6月6日周二 21:17写道: > Hi Leonard, > > Thanks for your reply. > > > 1. a How to construct a CatalogDescriptor ? > > I think it would be helpful to add a method for constructing a > CatalogDescriptor, as you mentioned in 1.c. I will update the documentation > later. > > > 1.b How to visit the fields ? Could we use Configuration instead of > Map<String, String> ? > > I believe that the use of Map<String, String> options is only intended for > creating a catalog and not for accessing internal parameters. > > Since all of the relevant parameters for CREATE CATALOG are also stored in > Map<String, String> options, my understanding is that using Map<String, > String> options should suffice. > > Here is the implementation of execute CREATE CATALOG statement. > ```java > private TableResultInternal createCatalog(CreateCatalogOperation operation) > { > String exMsg = getDDLOpExecuteErrorMsg(operation.asSummaryString()); > try { > String catalogName = operation.getCatalogName(); > Map<String, String> properties = operation.getProperties(); > > Catalog catalog = > FactoryUtil.createCatalog( > catalogName, > properties, > tableConfig, > resourceManager.getUserClassLoader()); > catalogManager.registerCatalog(catalogName, catalog); > > return TableResultImpl.TABLE_RESULT_OK; > } catch (CatalogException e) { > throw new ValidationException(exMsg, e); > } > } > ``` > > > > 2. Do we have plan to offer a default CatalogStore if user didn’t config > this? > > Yes, the in-memory catalogStore will be used as the default CatalogStore > even if the user has not configured one > > > Best, > Feng > > > On Tue, Jun 6, 2023 at 8:02 PM Leonard Xu <xbjt...@gmail.com> wrote: > > > Hi, Feng > > > > Sorry for reply late, but I’ve some comments about the FLIP > > > > > > 1. The introduced Public class CatalogDescriptor seems missed some > > necessary component > > a) How to construct a CatalogDescriptor ? > > b) How to visit the fields ? Could we use Configuration instead of > > Map<String, String> ? > > c) Could we offer a built-in factory method to build a > CatalogDescriptor > > like > > public static CatalogDescriptor of(String catalogName, Configuration > > configuration) > > > > 2. The FLIP said “By default, there are two built-in CatalogStores > > available: the In-Memory CatalogStore and the File CatalogStore” , > > Do we have plan to offer a default CatalogStore if user didn’t config > > this? IIUC, users can obtains the benefits from lazy catalog > > initialization If > > we have a default catalogstore even it is in-memory. > > > > Best, > > Leonard > > > > > > > > > On Jun 6, 2023, at 7:08 PM, Feng Jin <jinfeng1...@gmail.com> wrote: > > > > > > 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 > > >>>>>>>>>>>>>>>>>>>>>>>>>>>>>> > > >>>>>>>>>>>>>>>>>>>>>>>>>>>>>> > > >>>>>>>>>>>>>>>>>>>>>>>>>>>>> > > >>>>>>>>>>>>>>>>>>>>>>>>>>>> > > >>>>>>>>>>>>>>>>>>>>>>>>>>> > > >>>>>>>>>>>>>>>>>>>>>>>>>> > > >>>>>>>>>>>>>>>>>>>>>>>>> > > >>>>>>>>>>>>>>>>>>>>>>>> > > >>>>>>>>>>>>>>>>>>>>>>> > > >>>>>>>>>>>>>>>>>>>>>> > > >>>>>>>>>>>>>>>>>>>>> > > >>>>>>>>>>>>>>>>>>>> > > >>>>>>>>>>>>>>>>>>> > > >>>>>>>>>>>>>>>>>> > > >>>>>>>>>>>>>>>>> > > >>>>>>>>>>>>>>>> > > >>>>>>>>>>>>>>> > > >>>>>>>>>>>>>>> > > >>>>>>>>>>>>>>> > > >>>>>>>>>>>>>>> > > >>>>>>>>>>>>>> > > >>>>>>>>>>>>> > > >>>>>>>>>>>> > > >>>>>>>>>>> > > >>>>>>>>>> > > >>>>>>>> > > >>>>>>> > > >>>>>> > > >>>>> > > >>>> > > >>> > > >> > > > > >