BigTable: consistent keys in notional response

commit-id:4d124e7c
This commit is contained in:
justinschuldt 2021-12-13 12:19:45 -06:00 committed by Leopold Schabel
parent fa1252ace4
commit 24053368d5
1 changed files with 40 additions and 4 deletions

View File

@ -209,6 +209,31 @@ func transferredSinceDate(tbl *bigtable.Table, ctx context.Context, prefix strin
}
}
// create a set of chainIDs, the union of source and destination chains,
// to ensure the result objects all have the same keys.
seenChainSet := map[string]bool{}
for leaving, dests := range result {
seenChainSet[leaving] = true
for dest := range dests {
seenChainSet[dest] = true
}
}
// make sure the root of the map has all the chainIDs
for chain := range seenChainSet {
if _, ok := result[chain]; !ok {
result[chain] = map[string]map[string]float64{"*": {"*": 0}}
}
}
// make sure that each chain at the root (leaving) as a key (destination) for each chain
for leaving, dests := range result {
for chain := range seenChainSet {
// check that date has all the chains
if _, ok := dests[chain]; !ok {
result[leaving][chain] = map[string]float64{"*": 0}
}
}
}
return result
}
@ -252,16 +277,27 @@ func transfersForInterval(tbl *bigtable.Table, ctx context.Context, prefix strin
result["*"]["*"]["*"] = result["*"]["*"]["*"] + row.Notional
}
// create a set of all the keys from all dates/chains, to ensure the result objects all have the same keys.
// create a set of chainIDs, the union of source and destination chains,
// to ensure the result objects all have the same keys.
seenChainSet := map[string]bool{}
for leaving := range result {
for leaving, dests := range result {
seenChainSet[leaving] = true
for dest := range dests {
seenChainSet[dest] = true
}
}
for leaving := range result {
// make sure the root of the map has all the chainIDs
for chain := range seenChainSet {
if _, ok := result[chain]; !ok {
result[chain] = map[string]map[string]float64{"*": {"*": 0}}
}
}
// make sure that each chain at the root (leaving) as a key (destination) for each chain
for leaving, dests := range result {
for chain := range seenChainSet {
// check that date has all the chains
if _, ok := result[leaving][chain]; !ok {
if _, ok := dests[chain]; !ok {
result[leaving][chain] = map[string]float64{"*": 0}
}
}