BigTable: consistent keys in notional response
commit-id:4d124e7c
This commit is contained in:
parent
fa1252ace4
commit
24053368d5
|
@ -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}
|
||||
}
|
||||
}
|
||||
|
|
Loading…
Reference in New Issue