diff --git a/apier/v1/aliases.go b/apier/v1/aliases.go index 4f8c9b193..34c55e8c8 100644 --- a/apier/v1/aliases.go +++ b/apier/v1/aliases.go @@ -20,7 +20,6 @@ package v1 import ( "errors" - "log" "github.com/cgrates/cgrates/engine" "github.com/cgrates/cgrates/utils" @@ -75,7 +74,7 @@ func (self *ApierV1) RemRatingSubjectAliases(tenantRatingSubject engine.TenantRa return utils.NewErrServerError(err) } var ignr string - log.Print("RVAL: ", reverseAliases) + // log.Print("RVAL: ", reverseAliases) for _, aliass := range reverseAliases { for _, alias := range aliass { if alias.Tenant != tenantRatingSubject.Tenant { diff --git a/console/aliases_reverse_remove.go b/console/aliases_reverse_remove.go deleted file mode 100644 index 9b177859f..000000000 --- a/console/aliases_reverse_remove.go +++ /dev/null @@ -1,63 +0,0 @@ -/* -Rating system designed to be used in VoIP Carriers World -Copyright (C) 2012-2015 ITsysCOM - -This program is free software: you can redistribute it and/or modify -it under the terms of the GNU General Public License as published by -the Free Software Foundation, either version 3 of the License, or -(at your option) any later version. - -This program is distributed in the hope that it will be useful, -but WITHOUT ANY WARRANTY; without even the implied warranty of -MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -GNU General Public License for more details. - -You should have received a copy of the GNU General Public License -along with this program. If not, see -*/ - -package console - -import "github.com/cgrates/cgrates/engine" - -func init() { - c := &CmdRemoveReverseAliases{ - name: "aliases_reverse_remove", - rpcMethod: "AliasesV1.RemoveReverseAlias", - rpcParams: &engine.AttrReverseAlias{}, - } - commands[c.Name()] = c - c.CommandExecuter = &CommandExecuter{c} -} - -// Commander implementation -type CmdRemoveReverseAliases struct { - name string - rpcMethod string - rpcParams *engine.AttrReverseAlias - *CommandExecuter -} - -func (self *CmdRemoveReverseAliases) Name() string { - return self.name -} - -func (self *CmdRemoveReverseAliases) RpcMethod() string { - return self.rpcMethod -} - -func (self *CmdRemoveReverseAliases) RpcParams(reset bool) interface{} { - if reset || self.rpcParams == nil { - self.rpcParams = &engine.AttrReverseAlias{} - } - return self.rpcParams -} - -func (self *CmdRemoveReverseAliases) PostprocessRpcParams() error { - return nil -} - -func (self *CmdRemoveReverseAliases) RpcResult() interface{} { - var s string - return &s -} diff --git a/engine/aliases.go b/engine/aliases.go index 93563b0bc..8dfc48081 100644 --- a/engine/aliases.go +++ b/engine/aliases.go @@ -6,7 +6,6 @@ import ( "strings" "sync" - "github.com/cgrates/cgrates/cache2go" "github.com/cgrates/cgrates/utils" "github.com/cgrates/rpcclient" ) @@ -174,6 +173,10 @@ func (am *AliasHandler) SetAlias(attr *AttrAddAlias, reply *string) error { *reply = err.Error() return err } + if err := am.accountingDb.SetReverseAlias(attr.Alias); err != nil { + *reply = err.Error() + return err + } } else { for _, value := range attr.Alias.Values { found := false @@ -203,11 +206,15 @@ func (am *AliasHandler) SetAlias(attr *AttrAddAlias, reply *string) error { *reply = err.Error() return err } - // FIXME!!!! - err := am.accountingDb.UpdateReverseAlias(oldAlias, oldAlias) - if err != nil { + if err := am.accountingDb.SetReverseAlias(oldAlias); err != nil { + *reply = err.Error() return err } + //FIXME: optimize by creating better update reverse alias + /*err := am.accountingDb.UpdateReverseAlias(oldAlias, oldAlias) + if err != nil { + return err + }*/ } *reply = utils.OK @@ -225,29 +232,6 @@ func (am *AliasHandler) RemoveAlias(al *Alias, reply *string) error { return nil } -func (am *AliasHandler) RemoveReverseAlias(attr *AttrReverseAlias, reply *string) error { - am.mu.Lock() - defer am.mu.Unlock() - rKey := utils.REVERSE_ALIASES_PREFIX + attr.Alias + attr.Target + attr.Context - if x, ok := cache2go.Get(rKey); ok { - existingKeys := x.(map[interface{}]struct{}) - for iKey := range existingKeys { - key := iKey.(string) - // get destination id - elems := strings.Split(key, utils.CONCATENATED_KEY_SEP) - if len(elems) > 0 { - key = strings.Join(elems[:len(elems)-1], utils.CONCATENATED_KEY_SEP) - } - if err := am.accountingDb.RemoveAlias(key); err != nil { - *reply = err.Error() - return err - } - } - } - *reply = utils.OK - return nil -} - func (am *AliasHandler) GetAlias(al *Alias, result *Alias) error { am.mu.RLock() defer am.mu.RUnlock() @@ -265,10 +249,9 @@ func (am *AliasHandler) GetReverseAlias(attr *AttrReverseAlias, result *map[stri am.mu.Lock() defer am.mu.Unlock() aliases := make(map[string][]*Alias) - rKey := utils.REVERSE_ALIASES_PREFIX + attr.Alias + attr.Target + attr.Context - if x, ok := cache2go.Get(rKey); ok { - existingKeys := x.(map[string]struct{}) - for key := range existingKeys { + rKey := attr.Alias + attr.Target + attr.Context + if ids, err := am.accountingDb.GetReverseAlias(rKey, false); err == nil { + for _, key := range ids { // get destination id elems := strings.Split(key, utils.CONCATENATED_KEY_SEP) var destID string diff --git a/engine/storage_redis.go b/engine/storage_redis.go index 4af98318c..6188d6d23 100644 --- a/engine/storage_redis.go +++ b/engine/storage_redis.go @@ -726,12 +726,11 @@ func (rs *RedisStorage) GetReverseAlias(reverseID string, skipCache bool) (ids [ return nil, utils.ErrNotFound } } - var values []string - if values, err = rs.db.Cmd("SMEMBERS", key).List(); len(values) == 0 || err != nil { + if ids, err = rs.db.Cmd("SMEMBERS", key).List(); len(ids) == 0 || err != nil { cache2go.Set(key, nil) return nil, utils.ErrNotFound } - cache2go.Set(key, values) + cache2go.Set(key, ids) return } @@ -787,7 +786,9 @@ func (rs *RedisStorage) RemoveAlias(id string) (err error) { } func (rs *RedisStorage) UpdateReverseAlias(oldAl, newAl *Alias) error { - + // FIXME: thi can be optimized + cache2go.RemPrefixKey(utils.REVERSE_ALIASES_PREFIX) + rs.SetReverseAlias(newAl) return nil }