Skip to content

Commit

Permalink
Merge pull request #23 from andy89923/fix/charging-postone
Browse files Browse the repository at this point in the history
Fix: ratingGroup map with smPolicyId and refactor allocation and release
  • Loading branch information
ianchen0119 authored Mar 22, 2024
2 parents 1efa781 + 0f2b533 commit 4bca4e6
Show file tree
Hide file tree
Showing 2 changed files with 36 additions and 11 deletions.
3 changes: 3 additions & 0 deletions internal/context/ue.go
Original file line number Diff line number Diff line change
Expand Up @@ -36,6 +36,9 @@ type UeContext struct {
AppSessionIdStore *AppSessionIdStore
PolicyDataSubscriptionStore *models.PolicyDataSubscription
PolicyDataChangeStore *models.PolicyDataChangeNotification

// ChargingRatingGroup
RatingGroupData map[string][]int32 // use smPolicyId(ue.Supi-pduSessionId) as key
}

type UeAMPolicyData struct {
Expand Down
44 changes: 33 additions & 11 deletions internal/sbi/producer/smpolicy.go
Original file line number Diff line number Diff line change
Expand Up @@ -270,13 +270,16 @@ func createSMPolicyProcedure(request models.SmPolicyContextData) (
}
util.SetPccRuleRelatedData(&decision, pcc, nil, nil, chgData, nil)

chargingBsonM := bson.M{
"ratingGroup": chgData.RatingGroup,
}
logger.SmPolicyLog.Traceln("put ratingGroup to MongoDB")
if _, err = mongoapi.RestfulAPIPutOne(chargingDataColl, filterCharging, chargingBsonM, queryStrength); err != nil {
chargingInterface["ratingGroup"] = chgData.RatingGroup
logger.SmPolicyLog.Tracef("put ratingGroup[%+v] for [%+v] to MongoDB", chgData.RatingGroup, ue.Supi)
if _, err = mongoapi.RestfulAPIPutOne(
chargingDataColl, chargingInterface, chargingInterface, queryStrength); err != nil {
logger.SmPolicyLog.Errorf("Fail to put charging data to mongoDB err: %+v", err)
}
if ue.RatingGroupData == nil {
ue.RatingGroupData = make(map[string][]int32)
}
ue.RatingGroupData[smPolicyID] = append(ue.RatingGroupData[smPolicyID], chgData.RatingGroup)

smPolicyData.ChargingIdGenerator++
}
Expand Down Expand Up @@ -329,8 +332,10 @@ func createSMPolicyProcedure(request models.SmPolicyContextData) (
}, "")

filterCharging := bson.M{
"ueId": ue.Supi, "snssai": util.SnssaiModelsToHex(*request.SliceInfo),
"dnn": request.Dnn, "filter": val,
"ueId": ue.Supi,
"snssai": util.SnssaiModelsToHex(*request.SliceInfo),
"dnn": request.Dnn,
"filter": val,
}
var chargingInterface map[string]interface{}
chargingInterface, err = mongoapi.RestfulAPIGetOne(chargingDataColl, filterCharging, 2)
Expand Down Expand Up @@ -363,15 +368,19 @@ func createSMPolicyProcedure(request models.SmPolicyContextData) (
decision.ChgDecs = make(map[string]*models.ChargingData)
}

chargingBsonM := bson.M{
"ratingGroup": chgData.RatingGroup,
}
if _, err = mongoapi.RestfulAPIPutOne(chargingDataColl, filterCharging, chargingBsonM, queryStrength); err != nil {
chargingInterface["ratingGroup"] = chgData.RatingGroup
logger.SmPolicyLog.Tracef("put ratingGroup[%+v] for [%+v] to MongoDB", chgData.RatingGroup, ue.Supi)
if _, err = mongoapi.RestfulAPIPutOne(
chargingDataColl, chargingInterface, chargingInterface, queryStrength); err != nil {
logger.SmPolicyLog.Errorf("Fail to put charging data to mongoDB err: %+v", err)
} else {
util.SetPccRuleRelatedData(&decision, pccRule, nil, nil, chgData, nil)
smPolicyData.ChargingIdGenerator++
}
if ue.RatingGroupData == nil {
ue.RatingGroupData = make(map[string][]int32)
}
ue.RatingGroupData[smPolicyID] = append(ue.RatingGroupData[smPolicyID], chgData.RatingGroup)
}
qosRef := strconv.Itoa(int(flowRule["qosRef"].(float64)))
util.SetPccRuleRelatedByQosRef(&decision, pccRule, qosRef)
Expand Down Expand Up @@ -542,6 +551,19 @@ func deleteSmPolicyContextProcedure(smPolicyID string) *models.ProblemDetails {
logger.SmPolicyLog.Tracef("SMPolicy[%s] DELETE Related AppSession[%s]", smPolicyID, appSessionID)
}
}

for _, ratingGroup := range ue.RatingGroupData[smPolicyID] {
pcfSelf.RatingGroupIdGenerator.FreeID(int64(ratingGroup))

filterCharging := bson.M{
"ratingGroup": ratingGroup,
}
err := mongoapi.RestfulAPIDeleteMany(chargingDataColl, filterCharging)
if err != nil {
logger.SmPolicyLog.Errorf("Fail to delete charging data, ratingGroup: %+v, err: %+v", ratingGroup, err)
}
}
delete(ue.RatingGroupData, smPolicyID)
return nil
}

Expand Down

0 comments on commit 4bca4e6

Please sign in to comment.