in vermeer/apps/structure/graph_meta.go [748:850]
func (vp *VertexProperties) load(wg *sync.WaitGroup, meta GraphMeta, dir string) {
defer wg.Done()
tt := time.Now()
vertexProperty := make(map[string]*VValues)
ww := sync.WaitGroup{}
rwLock := sync.RWMutex{}
for k, v := range meta.VertexProperty {
ww.Add(1)
go func(wg *sync.WaitGroup, kk string, vv serialize.PartsMeta) {
defer wg.Done()
vValues := new(VValues)
vValues.VType = ValueType(vv.ValueType)
switch vValues.VType {
case ValueTypeInt32:
{
partsNum := vv.PartNum
p := make([]serialize.SliceInt32, partsNum)
w := sync.WaitGroup{}
for i := 0; i < partsNum; i++ {
fileName := path.Join(dir, vv.FilePrefix) + strconv.Itoa(i)
w.Add(1)
go DeserializeFromFile(&p[i], fileName, &w)
}
w.Wait()
length := 0
for _, s := range p {
length += len(s)
}
values := make([]serialize.SInt32, length)
offset := 0
for _, s := range p {
n := copy(values[offset:], s)
offset += n
}
vValues.Values = values
}
case ValueTypeFloat32:
{
partsNum := vv.PartNum
p := make([]serialize.SliceFloat32, partsNum)
w := sync.WaitGroup{}
for i := 0; i < partsNum; i++ {
fileName := path.Join(dir, vv.FilePrefix) + strconv.Itoa(i)
w.Add(1)
go DeserializeFromFile(&p[i], fileName, &w)
}
w.Wait()
length := 0
for _, s := range p {
length += len(s)
}
values := make([]serialize.SFloat32, length)
offset := 0
for _, s := range p {
n := copy(values[offset:], s)
offset += n
}
vValues.Values = values
}
case ValueTypeString:
{
partsNum := vv.PartNum
p := make([]serialize.SliceString, partsNum)
w := sync.WaitGroup{}
for i := 0; i < partsNum; i++ {
fileName := path.Join(dir, vv.FilePrefix) + strconv.Itoa(i)
w.Add(1)
go DeserializeFromFile(&p[i], fileName, &w)
}
w.Wait()
length := 0
for _, s := range p {
length += len(s)
}
values := make([]serialize.SString, length)
offset := 0
for _, s := range p {
n := copy(values[offset:], s)
offset += n
}
vValues.Values = values
}
}
rwLock.Lock()
vertexProperty[kk] = vValues
rwLock.Unlock()
}(&ww, k, v)
}
ww.Wait()
*vp = vertexProperty
logrus.Debugf("Deserialize VertexProperty cost=%v", time.Since(tt))
}