Unverified Commit 70d3b918 authored by Omid Azizi's avatar Omid Azizi Committed by Copybara
Browse files

ConnTrackers: Set conn_id earlier for CONN_TRACE consistency


Summary: ConnID should be set as soon as the ConnTracker is created to avoid CONN_TRACEs with upid=0.

Test Plan: Manually checked the CONN_TRACE logs.

Reviewers: #stirling, yzhao

Reviewed By: #stirling, yzhao

Subscribers: yzhao
Signed-off-by: default avatarOmid Azizi <oazizi@pixielabs.ai>

Differential Revision: https://phab.corp.pixielabs.ai/D10842

GitOrigin-RevId: d11ace03d65615ddd91d5d3827546d5f3db46717
parent 9235dbcd
release/vizier/v0.11.7 release/vizier/v0.11.6 release/vizier/v0.11.5 release/vizier/v0.11.4 release/vizier/v0.11.3 release/vizier/v0.11.2 release/vizier/v0.11.1 release/vizier/v0.11.0 release/vizier/v0.10.22 release/vizier/v0.10.21 release/vizier/v0.10.20 release/vizier/v0.10.19 release/vizier/v0.10.18 release/vizier/v0.10.17 release/vizier/v0.10.16 release/vizier/v0.10.15 release/vizier/v0.10.14 release/vizier/v0.10.13 release/operator/v0.0.30 release/operator/v0.0.29 release/operator/v0.0.28 release/operator/v0.0.27 release/operator/v0.0.26 release/operator/v0.0.25 release/operator/v0.0.24 release/operator/v0.0.23 release/operator/v0.0.22 release/operator/v0.0.21 release/operator/v0.0.20 release/cloud/prod/1658198111 release/cloud/prod/1658185818 release/cloud/prod/1658183222 release/cloud/prod/1657740688 release/cloud/prod/1657049209 release/cloud/prod/1656629056 release/cloud/prod/1656527373 release/cloud/prod/1656452950 release/cloud/prod/1655997138 release/cloud/prod/1655226092 release/cloud/prod/1654806360 release/cloud/prod/1654144074 release/cloud/prod/1654133791 release/cloud/prod/1652313416 release/cloud/prod/1652304483 release/cloud/prod/1652214656 release/cloud/prod/1651864223 release/cloud/prod/1651799821 release/cloud/prod/1651704659 release/cloud/prod/1651616922 release/cloud/prod/1650645384 release/cloud/prod/1650480744 release/cloud/prod/1650306041 release/cloud/prod/1650056868 release/cloud/prod/1650039340 release/cloud/prod/1649978499 release/cloud/prod/1649797942 release/cloud/prod/1649787581 release/cloud/prod/1649269698 release/cloud/prod/1649107437 release/cloud/prod/1648586238 release/cloud/prod/1647992139 release/cloud/prod/1647379907 release/cloud/prod/1646182041 release/cli/v0.7.16 release/cli/v0.7.15 release/cli/v0.7.14 release/cli/v0.7.13 release/cli/v0.7.12 release/cli/v0.7.11 release/cli/v0.7.10 release/cli/v0.7.9 release/cli/v0.7.8 release/cli/v0.7.7 release/cli/v0.7.6 release/cli/v0.7.5
No related merge requests found
Showing with 15 additions and 18 deletions
+15 -18
...@@ -355,13 +355,13 @@ class ConnTracker : NotCopyMoveable { ...@@ -355,13 +355,13 @@ class ConnTracker : NotCopyMoveable {
DataStream* resp_data(); DataStream* resp_data();
/** /**
* @return Returns the latest timestamp of all BPF events received by this tracker (using BPF * Returns the latest timestamp of all BPF events received by this tracker (using BPF
* timestamp). * timestamp).
*/ */
uint64_t last_bpf_timestamp_ns() { return last_bpf_timestamp_ns_; } uint64_t last_bpf_timestamp_ns() { return last_bpf_timestamp_ns_; }
/** /**
* @return Returns the a timestamp the last time an event was added to this tracker (using * Returns the a timestamp the last time an event was added to this tracker (using
* steady_clock). * steady_clock).
*/ */
std::chrono::time_point<std::chrono::steady_clock> last_update_timestamp() { std::chrono::time_point<std::chrono::steady_clock> last_update_timestamp() {
......
...@@ -29,24 +29,22 @@ namespace stirling { ...@@ -29,24 +29,22 @@ namespace stirling {
// ConnTrackerGenerations // ConnTrackerGenerations
//----------------------------------------------------------------------------- //-----------------------------------------------------------------------------
std::pair<ConnTracker*, bool> ConnTrackerGenerations::GetOrCreate(uint64_t tsid, std::pair<ConnTracker*, bool> ConnTrackerGenerations::GetOrCreate(conn_id_t conn_id,
ConnTrackerPool* tracker_pool) { ConnTrackerPool* tracker_pool) {
std::unique_ptr<ConnTracker>& conn_tracker_ptr = generations_[tsid]; std::unique_ptr<ConnTracker>& conn_tracker_ptr = generations_[conn_id.tsid];
bool created = false; bool created = false;
// If conn_trackers[conn_id.tsid] does not exist, a new one will be created in the map.
// New trackers always have TSID == 0, while BPF should never generate a TSID of zero,
// so we use this as a way of detecting new trackers.
if (conn_tracker_ptr == nullptr) { if (conn_tracker_ptr == nullptr) {
conn_tracker_ptr = tracker_pool->Pop(); conn_tracker_ptr = tracker_pool->Pop();
created = true; created = true;
conn_tracker_ptr->SetConnID(conn_id);
// If there is a another generation for this conn map key, // If there is a another generation for this conn map key,
// one of them needs to be marked for death. // one of them needs to be marked for death.
if (oldest_generation_ != nullptr) { if (oldest_generation_ != nullptr) {
// If the inserted conn_tracker is not the last generation, then mark it for death. // If the inserted conn_tracker is not the last generation, then mark it for death.
// This can happen because the events draining from the perf buffers are not ordered. // This can happen because the events draining from the perf buffers are not ordered.
if (tsid < oldest_generation_->conn_id().tsid) { if (conn_id.tsid < oldest_generation_->conn_id().tsid) {
VLOG(1) << "Marking for death because not last generation."; VLOG(1) << "Marking for death because not last generation.";
conn_tracker_ptr->MarkForDeath(); conn_tracker_ptr->MarkForDeath();
} else { } else {
...@@ -118,12 +116,11 @@ ConnTracker& ConnTrackersManager::GetOrCreateConnTracker(struct conn_id_t conn_i ...@@ -118,12 +116,11 @@ ConnTracker& ConnTrackersManager::GetOrCreateConnTracker(struct conn_id_t conn_i
DCHECK_NE(conn_map_key, 0) << "Connection map key cannot be 0, pid must be wrong"; DCHECK_NE(conn_map_key, 0) << "Connection map key cannot be 0, pid must be wrong";
ConnTrackerGenerations& conn_trackers = conn_id_tracker_generations_[conn_map_key]; ConnTrackerGenerations& conn_trackers = conn_id_tracker_generations_[conn_map_key];
auto [conn_tracker_ptr, created] = conn_trackers.GetOrCreate(conn_id.tsid, &trackers_pool_); auto [conn_tracker_ptr, created] = conn_trackers.GetOrCreate(conn_id, &trackers_pool_);
if (created) { if (created) {
active_trackers_.push_back(conn_tracker_ptr); active_trackers_.push_back(conn_tracker_ptr);
conn_tracker_ptr->manager_ = this; conn_tracker_ptr->manager_ = this;
conn_tracker_ptr->SetConnID(conn_id);
stats_.Increment(StatKey::kTotal); stats_.Increment(StatKey::kTotal);
stats_.Increment(StatKey::kCreated); stats_.Increment(StatKey::kCreated);
......
...@@ -50,7 +50,7 @@ class ConnTrackerGenerations { ...@@ -50,7 +50,7 @@ class ConnTrackerGenerations {
* *
* @return The pointer to the conn_tracker and whether the tracker was newly created. * @return The pointer to the conn_tracker and whether the tracker was newly created.
*/ */
std::pair<ConnTracker*, bool> GetOrCreate(uint64_t tsid, ConnTrackerPool* tracker_pool); std::pair<ConnTracker*, bool> GetOrCreate(conn_id_t conn_id, ConnTrackerPool* tracker_pool);
/** /**
* Return true if a ConnTracker created at the specified time stamp exists. * Return true if a ConnTracker created at the specified time stamp exists.
......
...@@ -122,13 +122,13 @@ class ConnTrackerGenerationsTest : public ::testing::Test { ...@@ -122,13 +122,13 @@ class ConnTrackerGenerationsTest : public ::testing::Test {
} }
std::pair<ConnTracker*, bool> GetOrCreateTracker(uint64_t tsid) { std::pair<ConnTracker*, bool> GetOrCreateTracker(uint64_t tsid) {
auto [tracker, created] = tracker_gens_.GetOrCreate(tsid, &tracker_pool); struct conn_id_t conn_id = {};
if (created) { conn_id.upid.pid = 1;
struct conn_id_t conn_id = {}; conn_id.upid.start_time_ticks = 1;
conn_id.tsid = tsid; conn_id.fd = 1;
tracker->SetConnID(conn_id); conn_id.tsid = tsid;
}
return {tracker, created}; return tracker_gens_.GetOrCreate(conn_id, &tracker_pool);
} }
int CleanupTrackers() { int CleanupTrackers() {
......
Supports Markdown
0% or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment