diff options
author | Justin Clark-Casey (justincc) | 2012-04-17 00:02:58 +0100 |
---|---|---|
committer | Justin Clark-Casey (justincc) | 2012-04-17 00:02:58 +0100 |
commit | f213f55586b9af66955fdfccdd50237febaf98ca (patch) | |
tree | ae9e2e5c41efb7ec78e960ae0f09aa882f708066 /OpenSim/Region/UserStatistics/WebStatsModule.cs | |
parent | Add GroupPosition and GetWorldPosition() checks to TestGetRootPartPosition() (diff) | |
download | opensim-SC-f213f55586b9af66955fdfccdd50237febaf98ca.zip opensim-SC-f213f55586b9af66955fdfccdd50237febaf98ca.tar.gz opensim-SC-f213f55586b9af66955fdfccdd50237febaf98ca.tar.bz2 opensim-SC-f213f55586b9af66955fdfccdd50237febaf98ca.tar.xz |
Fix bug in WebStatsModule where an exception would always be output on update if the user teleported to another region on that simulator.
This was because update was looking for an existing stats record unique in session id, agent id and region id.
But if the user teleports to another region then region id changes.
WebStatsModule promptly doesn't find the existing record and tries to insert a new one, but only session id is the primary key and that's still the same, which makes things go bang.
This makes the update search only on the unique session id.
This is only an issue with simulators that have multiple regions where the webstats module is enabled.
Diffstat (limited to '')
-rw-r--r-- | OpenSim/Region/UserStatistics/WebStatsModule.cs | 15 |
1 files changed, 10 insertions, 5 deletions
diff --git a/OpenSim/Region/UserStatistics/WebStatsModule.cs b/OpenSim/Region/UserStatistics/WebStatsModule.cs index b9ba4bc..dbe9b3f 100644 --- a/OpenSim/Region/UserStatistics/WebStatsModule.cs +++ b/OpenSim/Region/UserStatistics/WebStatsModule.cs | |||
@@ -446,7 +446,7 @@ namespace OpenSim.Region.UserStatistics | |||
446 | { | 446 | { |
447 | // m_log.DebugFormat("[WEB STATS MODULE]: Received viewer starts report from {0}", agentID); | 447 | // m_log.DebugFormat("[WEB STATS MODULE]: Received viewer starts report from {0}", agentID); |
448 | 448 | ||
449 | UpdateUserStats(ParseViewerStats(request,agentID), dbConn); | 449 | UpdateUserStats(ParseViewerStats(request, agentID), dbConn); |
450 | 450 | ||
451 | return String.Empty; | 451 | return String.Empty; |
452 | } | 452 | } |
@@ -654,8 +654,6 @@ namespace OpenSim.Region.UserStatistics | |||
654 | updatecmd.Parameters.Add(new SqliteParameter(":f_send_packet", uid.session_data.f_send_packet)); | 654 | updatecmd.Parameters.Add(new SqliteParameter(":f_send_packet", uid.session_data.f_send_packet)); |
655 | 655 | ||
656 | updatecmd.Parameters.Add(new SqliteParameter(":session_key", uid.session_data.session_id.ToString())); | 656 | updatecmd.Parameters.Add(new SqliteParameter(":session_key", uid.session_data.session_id.ToString())); |
657 | updatecmd.Parameters.Add(new SqliteParameter(":agent_key", uid.session_data.agent_id.ToString())); | ||
658 | updatecmd.Parameters.Add(new SqliteParameter(":region_key", uid.session_data.region_id.ToString())); | ||
659 | 657 | ||
660 | // m_log.DebugFormat("[WEB STATS MODULE]: Database stats update for {0}", uid.session_data.agent_id); | 658 | // m_log.DebugFormat("[WEB STATS MODULE]: Database stats update for {0}", uid.session_data.agent_id); |
661 | 659 | ||
@@ -667,11 +665,18 @@ namespace OpenSim.Region.UserStatistics | |||
667 | 665 | ||
668 | updatecmd.CommandText = SQL_STATS_TABLE_INSERT; | 666 | updatecmd.CommandText = SQL_STATS_TABLE_INSERT; |
669 | 667 | ||
668 | // StringBuilder parameters = new StringBuilder(); | ||
669 | // SqliteParameterCollection spc = updatecmd.Parameters; | ||
670 | // foreach (SqliteParameter sp in spc) | ||
671 | // parameters.AppendFormat("{0}={1},", sp.ParameterName, sp.Value); | ||
672 | // | ||
673 | // m_log.DebugFormat("[WEB STATS MODULE]: Parameters {0}", parameters); | ||
674 | |||
670 | try | 675 | try |
671 | { | 676 | { |
672 | updatecmd.ExecuteNonQuery(); | 677 | updatecmd.ExecuteNonQuery(); |
673 | } | 678 | } |
674 | catch (Exception e) | 679 | catch (SqliteExecutionException e) |
675 | { | 680 | { |
676 | m_log.WarnFormat( | 681 | m_log.WarnFormat( |
677 | "[WEB STATS MODULE]: failed to write stats for {0}, storage Execution Exception {1}{2}", | 682 | "[WEB STATS MODULE]: failed to write stats for {0}, storage Execution Exception {1}{2}", |
@@ -801,7 +806,7 @@ set session_id=:session_id, | |||
801 | f_off_circuit=:f_off_circuit, | 806 | f_off_circuit=:f_off_circuit, |
802 | f_resent=:f_resent, | 807 | f_resent=:f_resent, |
803 | f_send_packet=:f_send_packet | 808 | f_send_packet=:f_send_packet |
804 | WHERE session_id=:session_key AND agent_id=:agent_key AND region_id=:region_key"; | 809 | WHERE session_id=:session_key"; |
805 | #endregion | 810 | #endregion |
806 | } | 811 | } |
807 | 812 | ||