This feature keeps entries updated in the external session tracking database .
The external session tracking database entries for an access leg are set to expire automatically. To guard against expiring entries too soon, this feature periodically refreshes the entries when SIP activity is detected on the leg. This feature also updates the database entries when the session’s held status changes.
Feature cheat sheet
B2BUA Instance | Originating / Terminating | Point(s) in Session Plan | Network Operator Data | Subscriber Data | Stateful or Stateless | POJO or SBB Feature | Other notes |
---|---|---|---|---|---|---|---|
SCC |
Both Originating and Terminating |
SIP Access PartyRequest, SIP Mid Session Party Request, SIP Mid Session Party Response, |
None |
None |
Stateful |
POJO |
Sets a session output variable. |
Prerequisite features
-
-
The configuration of the SessionRefresh feature is used to determine when to refresh the database entries.
-
Session input and output variables
Session input variables
Session State variable name | Type | Comments |
---|---|---|
ExternalSessionTrackingActive |
Boolean |
Set by the SCCDetermineExternalSessionTracking feature |
ASURI |
String |
Set by the SCCDetermineSessionType feature |
ExternalSessionTrackingKeys |
Set<String> |
Set by the SCCDetermineExternalSessionTracking feature |
AccessLegMediaFeatureTags |
Set<String> |
Set by the SCCBindEnhancedSRVCC or TrackSessionPreAnswer features |
HeldStatusChanged |
Boolean |
Set by the DetectHoldResume feature, triggers a database update if |
LastHeldTime |
Long |
Set by the DetectHoldResume feature |
SessionIsHeld |
Boolean |
Set by the DetectHoldResume feature |
Statistics
TrackSessionRefresh statistics are tracked by the volte.sentinel.sip SBB
and can be found under the following parameter set in REM:
SLEE-Usage → volte.sentinel.sip service → volte.sentinel.sip SBB → feature → TrackSessionRefresh
or with rhino-stats:
"SLEE-Usage.Services.ServiceID[name=volte.sentinel.sip,vendor=OpenCloud,version=2.7.0].SbbID[name=volte.sentinel.sip,vendor=OpenCloud,version=2.7.0].feature.TrackSessionRefresh"
Name | Description |
---|---|
Started |
Incremented each time the feature runs |
FailedToStart |
Incremented when a fatal error occurs before feature execution |
IssuedWarning |
Incremented when a non-fatal error occurs during feature execution |
FailedDuringExecution |
Incremented when a fatal error occurs during feature execution |
TimedOut |
Incremented when feature execution does not complete within a reasonable time frame |
TrackedDialogRefreshStarted |
Incremented when the feature starts a TrackedDialog Cassandra refresh |
TrackedDialogRefreshSuccess |
Incremented when a TrackedDialog refresh returns successfully from Cassandra |
TrackedDialogRefreshError |
Incremented when a TrackedDialog refresh fails with a Cassandra error |
TrackedDialogRefreshTimeout |
Incremented when a TrackedDialog refresh fails with a Cassandra timeout |
CassandraAsyncQueryTimeSuccess |
Samples the elapsed time between starting a query and a success response arriving from Cassandra |
CassandraAsyncQueryTimeFailure |
Samples the elapsed time between starting a query and a failure response arriving from Cassandra |
Behaviour
The TrackSessionRefresh
feature keeps entries updated in the Cassandra external session tracking table.
These entries are added with a Time-To-Live (TTL), so will automatically expire at some point, ensuring the table does not fill up with out of date sessions.
This feature ensures the Cassandra TTLs are refreshed on access leg sessions that are still active, so they don’t expire too soon.
In addition, the feature also updates the tracked session entries when the call’s held status changes. See Hold and resume procedures below.
The feature only runs when the session state variable ExternalSessionTrackingActive
is true
,
as determined by the SCCDetermineExternalSessionTracking feature.
Determining the Cassandra TTL to use
The Cassandra TTL for tracked sessions is derived from the SessionRefresh feature’s configuration.
The SessionRefresh feature’s RefreshPeriod
parameter specifies the time (in seconds) after which feature will send a session refresh request (re-INVITE) to keep the session open.
So a request will be sent on the session at least this often.
The TrackSessionRefresh
feature uses the value RefreshPeriod ✕ 1.5
as the Cassandra TTL.
Call setup procedures
The feature is first triggered by the initial ACK request during call setup (originating and terminating), at the SipAccess_PartyRequest
execution point.
It updates the tracked dialog entries (created by TrackSessionPreAnswer) with state=ACTIVE
and a new TTL.
The LastTrackSessionRefreshTime
and TrackedSessionDialogID
session state variables are set at this point.
Mid-call procedures
The feature is triggered on the SipMidSession_PartyRequest
and SipMidSession_PartyResponse
execution points.
However no action will be performed if the tracked session database entries have been refreshed recently, to avoid unnecessary database queries.
To determine if a refresh is necessary, the feature calculates how much time has passed since LastTrackSessionRefreshTime
.
If the elapsed time is more than halfway through the TTL period, or within 60s of the TTL expiry time, then a refresh is initiated.
The refresh operation reads the access leg’s entry in the trackeddialog
table, then updates this entry and any related trackeddialogkeys
entries with a new TTL, but otherwise unchanged.
Hold and resume procedures
If the DetectHoldResume feature indicates that the call’s held status has changed, this triggers an immediate refresh of the tracked session entries.
The TrackSessionRefresh
feature checks if the HeldStatusChanged
flag is set in session state, and if so, updates the tracked session entries with the current held status.
End-of-call procedures
The feature takes no action at the end of the call.
A separate feature, DeleteTrackedSession, runs at the SipEndSession
execution point to remove the database entries.
If this feature was not triggered for any reason, the entries would expire naturally at the end of the TTL period.