Current state: Disccusion completed
ISSUE: https://github.com/milvus-io/milvus/issues/17131
PRs: TODO
Keywords: Collection Alias, Atomic Switching
Released: TODO
RootCoordinator
, Proxy
, and all the key components, CollectionName
and CollectionAlias
are equal. MetaTable.GetCollectionByName(collectionName string, ts typeutil.Timestamp)
can receive CollectionAlias
and return corresponding CollectionInfo.
CollectionAlias
∧ CollectionName
= ∅ . CollectionAlias
cannot collide with existing CollectionName
s.CollectionAlias
works as an extra pointer to the existing collection in the RootCoordinator
, we can implement collection hot reloading at a low cost.AddAlias
, DropAlias
and AlterAlias
, the change of relationship between alias and collection should not affect the operations online, i.e. these operations shoud use the relationship when the task begin to excute.AddAlias
, DropAlias
and AlterAlias
, all proxy should receive the change in the same timestamp to ensure the atomicity between the proxy cache and the rootcoord data.collection
if the collection
is referenced by an alias
, which can simplify the operation and make it easier to ensure the atomicity property about alias changes.Metatable
now add ts2alias2name
and newestAliasTs
member variablestype immutablemap_string2string struct{ storemap map[string]string } func (imstr2str * immutablemap_string2string) get(key string) (string, error){ rstr,ok := imstr2str.storemap[key] if(!ok){ return nil, fmt.Errorf("key not exist") } return rstr, nil } func (imstr2str * immutablemap_string2string) put(key string, val string) (string, error){ return nil, fmt.Errorf("not allowed put in immutablemap") } type metatable struct{ ... ts2alias2name map[Timestamp]immutablemap_string2string newestAliasTs Timestamp ... } |