mirror of
https://gitee.com/milvus-io/milvus.git
synced 2025-12-07 01:28:27 +08:00
100 lines
2.6 KiB
Go
100 lines
2.6 KiB
Go
package writenode
|
|
|
|
import (
|
|
"fmt"
|
|
"strconv"
|
|
"sync"
|
|
|
|
"github.com/zilliztech/milvus-distributed/internal/errors"
|
|
)
|
|
|
|
type collectionReplica interface {
|
|
|
|
// collection
|
|
getCollectionNum() int
|
|
addCollection(collectionID UniqueID, schemaBlob string) error
|
|
removeCollection(collectionID UniqueID) error
|
|
getCollectionByID(collectionID UniqueID) (*Collection, error)
|
|
getCollectionByName(collectionName string) (*Collection, error)
|
|
hasCollection(collectionID UniqueID) bool
|
|
}
|
|
|
|
type collectionReplicaImpl struct {
|
|
mu sync.RWMutex
|
|
collections []*Collection
|
|
}
|
|
|
|
//----------------------------------------------------------------------------------------------------- collection
|
|
func (colReplica *collectionReplicaImpl) getCollectionNum() int {
|
|
colReplica.mu.RLock()
|
|
defer colReplica.mu.RUnlock()
|
|
|
|
return len(colReplica.collections)
|
|
}
|
|
|
|
func (colReplica *collectionReplicaImpl) addCollection(collectionID UniqueID, schemaBlob string) error {
|
|
colReplica.mu.Lock()
|
|
defer colReplica.mu.Unlock()
|
|
|
|
var newCollection = newCollection(collectionID, schemaBlob)
|
|
colReplica.collections = append(colReplica.collections, newCollection)
|
|
fmt.Println("yyy, create collection: ", newCollection.Name())
|
|
|
|
return nil
|
|
}
|
|
|
|
func (colReplica *collectionReplicaImpl) removeCollection(collectionID UniqueID) error {
|
|
fmt.Println("drop collection:", collectionID)
|
|
colReplica.mu.Lock()
|
|
defer colReplica.mu.Unlock()
|
|
|
|
tmpCollections := make([]*Collection, 0)
|
|
for _, col := range colReplica.collections {
|
|
if col.ID() != collectionID {
|
|
tmpCollections = append(tmpCollections, col)
|
|
} else {
|
|
fmt.Println("yyy, drop collection name: ", col.Name())
|
|
}
|
|
}
|
|
colReplica.collections = tmpCollections
|
|
return nil
|
|
}
|
|
|
|
func (colReplica *collectionReplicaImpl) getCollectionByID(collectionID UniqueID) (*Collection, error) {
|
|
colReplica.mu.RLock()
|
|
defer colReplica.mu.RUnlock()
|
|
|
|
for _, collection := range colReplica.collections {
|
|
if collection.ID() == collectionID {
|
|
return collection, nil
|
|
}
|
|
}
|
|
|
|
return nil, errors.New("cannot find collection, id = " + strconv.FormatInt(collectionID, 10))
|
|
}
|
|
|
|
func (colReplica *collectionReplicaImpl) getCollectionByName(collectionName string) (*Collection, error) {
|
|
colReplica.mu.RLock()
|
|
defer colReplica.mu.RUnlock()
|
|
|
|
for _, collection := range colReplica.collections {
|
|
if collection.Name() == collectionName {
|
|
return collection, nil
|
|
}
|
|
}
|
|
|
|
return nil, errors.New("Cannot found collection: " + collectionName)
|
|
}
|
|
|
|
func (colReplica *collectionReplicaImpl) hasCollection(collectionID UniqueID) bool {
|
|
colReplica.mu.RLock()
|
|
defer colReplica.mu.RUnlock()
|
|
|
|
for _, col := range colReplica.collections {
|
|
if col.ID() == collectionID {
|
|
return true
|
|
}
|
|
}
|
|
return false
|
|
}
|