safeguard agains nil unit counters

This commit is contained in:
Radu Ioan Fericean
2015-11-08 15:12:08 +02:00
parent 73685bb336
commit 300c405697
5 changed files with 10 additions and 38 deletions

View File

@@ -355,7 +355,9 @@ func resetCountersAction(ub *Account, sq *StatsQueueTriggered, a *Action, acs Ac
if ub == nil {
return errors.New("nil user balance")
}
ub.UnitCounters.resetCounters(a)
if ub.UnitCounters != nil {
ub.UnitCounters.resetCounters(a)
}
return
}
@@ -404,7 +406,7 @@ func genericReset(ub *Account) error {
for k, _ := range ub.BalanceMap {
ub.BalanceMap[k] = BalanceChain{&Balance{Value: 0}}
}
ub.UnitCounters = make(UnitCounters, 0)
ub.InitCounters()
ub.ResetActionTriggers(nil)
return nil
}

View File

@@ -456,18 +456,6 @@ func (ms *MapStorage) GetAccount(key string) (ub *Account, err error) {
}
func (ms *MapStorage) SetAccount(ub *Account) (err error) {
// never override existing account with an empty one
// UPDATE: if all balances expired and were clean it makes
// sense to write empty balance map
if len(ub.BalanceMap) == 0 {
if ac, err := ms.GetAccount(ub.Id); err == nil && !ac.allBalancesExpired() {
ac.ActionTriggers = ub.ActionTriggers
ac.UnitCounters = ub.UnitCounters
ac.AllowNegative = ub.AllowNegative
ac.Disabled = ub.Disabled
ub = ac
}
}
result, err := ms.ms.Marshal(ub)
ms.dict[utils.ACCOUNT_PREFIX+ub.Id] = result
return

View File

@@ -732,18 +732,6 @@ func (ms *MongoStorage) GetAccount(key string) (result *Account, err error) {
}
func (ms *MongoStorage) SetAccount(acc *Account) error {
// never override existing account with an empty one
// UPDATE: if all balances expired and were cleaned it makes
// sense to write empty balance map
if len(acc.BalanceMap) == 0 {
if ac, err := ms.GetAccount(acc.Id); err == nil && !ac.allBalancesExpired() {
ac.ActionTriggers = acc.ActionTriggers
ac.UnitCounters = acc.UnitCounters
ac.AllowNegative = acc.AllowNegative
ac.Disabled = acc.Disabled
acc = ac
}
}
_, err := ms.db.C(colAcc).Upsert(bson.M{"id": acc.Id}, acc)
return err
}

View File

@@ -555,18 +555,6 @@ func (rs *RedisStorage) GetAccount(key string) (ub *Account, err error) {
}
func (rs *RedisStorage) SetAccount(ub *Account) (err error) {
// never override existing account with an empty one
// UPDATE: if all balances expired and were cleaned it makes
// sense to write empty balance map
if len(ub.BalanceMap) == 0 {
if ac, err := rs.GetAccount(ub.Id); err == nil && !ac.allBalancesExpired() {
ac.ActionTriggers = ub.ActionTriggers
ac.UnitCounters = ub.UnitCounters
ac.AllowNegative = ub.AllowNegative
ac.Disabled = ub.Disabled
ub = ac
}
}
result, err := rs.ms.Marshal(ub)
err = rs.db.Set(utils.ACCOUNT_PREFIX+ub.Id, result)
return

View File

@@ -31,6 +31,9 @@ type UnitCounters []*UnitCounter
func (ucs UnitCounters) addUnits(amount float64, kind string, cc *CallCost, b *Balance) {
for _, uc := range ucs {
if uc == nil { // safeguard
continue
}
if uc.BalanceType != kind {
continue
}
@@ -53,6 +56,9 @@ func (ucs UnitCounters) addUnits(amount float64, kind string, cc *CallCost, b *B
func (ucs UnitCounters) resetCounters(a *Action) {
for _, uc := range ucs {
if uc == nil { // safeguard
continue
}
if a != nil && a.BalanceType != "" && a.BalanceType != uc.BalanceType {
continue
}