in vermeer/apps/structure/graph_meta.go [852:954]
func (ep *EdgeProperties) load(wg *sync.WaitGroup, meta GraphMeta, dir string) {
defer wg.Done()
tt := time.Now()
inEdgeProperty := make(map[string]*VValues)
ww := sync.WaitGroup{}
rwLock := sync.RWMutex{}
for k, v := range meta.InEdgesProperty {
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.TwoDimSliceInt32, 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.TwoDimSliceFloat32, 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.TwoDimSliceString, 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()
inEdgeProperty[kk] = vValues
rwLock.Unlock()
}(&ww, k, v)
}
ww.Wait()
*ep = inEdgeProperty
logrus.Debugf("Deserialize InEdgesProperty cost=%v", time.Since(tt))
}