Skip to content

Commit ca63e21

Browse files
committed
Not4Review debugging
1 parent d880861 commit ca63e21

File tree

1 file changed

+105
-57
lines changed

1 file changed

+105
-57
lines changed

Server/src/redis/MsgBusImpl_redis.cpp

Lines changed: 105 additions & 57 deletions
Original file line numberDiff line numberDiff line change
@@ -102,89 +102,137 @@ void MsgBusImpl_redis::update_Peer(obj_bgp_peer &peer, obj_peer_up_event *up, ob
102102
/**
103103
* Abstract method Implementation - See MsgBusInterface.hpp for details
104104
*/
105-
void MsgBusImpl_redis::update_unicastPrefix(obj_bgp_peer &peer, vector<obj_rib> &rib,
106-
obj_path_attr *attr, unicast_prefix_action_code code) {
107-
if (attr == NULL)
105+
void MsgBusImpl_redis::update_unicastPrefix(obj_bgp_peer &peer,
106+
std::vector<obj_rib> &rib,
107+
obj_path_attr *attr,
108+
unicast_prefix_action_code code)
109+
{
110+
// Only require attr for ADD, not for DEL
111+
if (code == UNICAST_PREFIX_ACTION_ADD && attr == NULL) {
112+
LOG_INFO("MsgBusImpl_redis update_unicastPrefix: ADD requested but attr == NULL (peer=%s) — ignoring", peer.peer_addr);
108113
return;
114+
}
115+
116+
const char* actionStr = (code == UNICAST_PREFIX_ACTION_ADD) ? "add" : "del";
117+
118+
// Timestamp, like Kafka path
119+
std::string ts;
120+
getTimestamp(peer.timestamp_secs, peer.timestamp_us, ts);
109121

110-
vector<string> del_keys;
111-
string neigh = peer.peer_addr;
122+
// Optional hashes (parity with Kafka; computed/available in caller or elsewhere)
123+
std::string path_hash_str, peer_hash_str, router_hash_str;
124+
if (attr) hash_toStr(attr->hash_id, path_hash_str);
125+
hash_toStr(peer.hash_id, peer_hash_str);
126+
hash_toStr(peer.router_hash_id, router_hash_str);
112127

113-
for (size_t i = 0; i < rib.size(); i++) {
114-
// Loop through the vector array of rib entries
115-
vector<swss::FieldValueTuple> addFieldValues;
116-
addFieldValues.reserve(MAX_ATTRIBUTES_COUNT);
128+
LOG_INFO("MsgBusImpl_redis update_unicastPrefix[start] action=%s peer=%s as=%u ts=%s rib_size=%zu isAdjIn=%d isPrePolicy=%d",
129+
actionStr, peer.peer_addr, peer.peer_as, ts.c_str(), rib.size(),
130+
(int)peer.isAdjIn, (int)peer.isPrePolicy);
117131

118-
// rib table schema as BGP_RIB_OUT_TABLE|192.181.168.0/25|10.0.0.59
119-
vector<string> keys;
120-
string redisMgr_pfx = rib[i].prefix;
132+
std::vector<std::string> del_keys;
133+
del_keys.reserve(rib.size());
134+
135+
const std::string neigh = peer.peer_addr;
136+
size_t add_count = 0, del_count = 0;
137+
138+
for (size_t i = 0; i < rib.size(); ++i) {
139+
// Key parts: "prefix/len" + neighbor
140+
std::string redisMgr_pfx = rib[i].prefix;
121141
redisMgr_pfx += "/";
122-
redisMgr_pfx += to_string(rib[i].prefix_len);
123-
keys.reserve(MAX_ATTRIBUTES_COUNT);
142+
redisMgr_pfx += std::to_string(rib[i].prefix_len);
143+
144+
std::vector<std::string> keys;
145+
keys.reserve(2);
124146
keys.emplace_back(redisMgr_pfx);
125-
keys.emplace_back(peer.peer_addr);
147+
keys.emplace_back(neigh);
126148

127-
switch (code) {
149+
// RIB hash (if present on the entry)
150+
std::string rib_hash_str;
151+
hash_toStr(rib[i].hash_id, rib_hash_str); // safe even if zeros
152+
153+
LOG_INFO("MsgBusImpl_redis RIB[%zu] prefix=%s/%d isIPv4=%d path_id=%u labels=%s rib_hash=%s",
154+
i, rib[i].prefix, rib[i].prefix_len, (int)rib[i].isIPv4,
155+
(unsigned)rib[i].path_id, rib[i].labels, rib_hash_str.c_str());
128156

157+
switch (code) {
129158
case UNICAST_PREFIX_ACTION_ADD:
130159
{
131-
addFieldValues.emplace_back(make_pair("origin", string(attr->origin)));
132-
addFieldValues.emplace_back(make_pair("as_path", attr->as_path));
133-
stringstream as_path_count;
134-
as_path_count << attr->as_path_count;
135-
addFieldValues.emplace_back(make_pair("as_path_count", as_path_count.str()));
136-
stringstream origin_as;
137-
origin_as << attr->origin_as;
138-
addFieldValues.emplace_back(make_pair("origin_as", origin_as.str()));
139-
addFieldValues.emplace_back(make_pair("next_hop", string(attr->next_hop)));
140-
stringstream local_pref;
141-
local_pref << attr->local_pref;
142-
addFieldValues.emplace_back(make_pair("local_pref", local_pref.str()));
143-
addFieldValues.emplace_back(make_pair("community_list", attr->community_list));
144-
addFieldValues.emplace_back(make_pair("ext_community_list", attr->ext_community_list));
145-
addFieldValues.emplace_back(make_pair("large_community_list", attr->large_community_list));
146-
addFieldValues.emplace_back(make_pair("originator_id", string(attr->originator_id)));
147-
148-
for (const auto& fieldValue : addFieldValues) {
149-
const std::string& field = std::get<0>(fieldValue);
150-
const std::string& value = std::get<1>(fieldValue);
151-
DEBUG("MsgBusImpl_redis update_unicastPrefix field = %s, value = %s", field.c_str(), value.c_str());
152-
}
153-
if(peer.isAdjIn)
154-
{
155-
redisMgr_.WriteBMPTable(BMP_TABLE_RIB_IN, keys, addFieldValues);
160+
std::vector<swss::FieldValueTuple> fvs;
161+
fvs.reserve(32);
162+
163+
fvs.emplace_back(std::make_pair("prefix", std::string(rib[i].prefix)));
164+
fvs.emplace_back(std::make_pair("prefix_len", std::to_string(rib[i].prefix_len)));
165+
166+
fvs.emplace_back(std::make_pair("origin", std::string(attr->origin)));
167+
fvs.emplace_back(std::make_pair("as_path", attr->as_path));
168+
fvs.emplace_back(std::make_pair("as_path_count", std::to_string(attr->as_path_count)));
169+
fvs.emplace_back(std::make_pair("origin_as", std::to_string(attr->origin_as)));
170+
fvs.emplace_back(std::make_pair("next_hop", std::string(attr->next_hop)));
171+
fvs.emplace_back(std::make_pair("med", std::to_string(attr->med)));
172+
fvs.emplace_back(std::make_pair("local_pref", std::to_string(attr->local_pref)));
173+
fvs.emplace_back(std::make_pair("aggregator", std::string(attr->aggregator)));
174+
fvs.emplace_back(std::make_pair("community_list", attr->community_list));
175+
fvs.emplace_back(std::make_pair("ext_community_list", attr->ext_community_list));
176+
fvs.emplace_back(std::make_pair("cluster_list", attr->cluster_list));
177+
fvs.emplace_back(std::make_pair("atomic_agg", std::to_string(attr->atomic_agg)));
178+
fvs.emplace_back(std::make_pair("nexthop_isIPv4", std::to_string((int)attr->nexthop_isIPv4)));
179+
fvs.emplace_back(std::make_pair("originator_id", std::string(attr->originator_id)));
180+
fvs.emplace_back(std::make_pair("large_community_list",attr->large_community_list));
181+
182+
// RIB-derived
183+
fvs.emplace_back(std::make_pair("path_id", std::to_string(rib[i].path_id)));
184+
fvs.emplace_back(std::make_pair("labels", std::string(rib[i].labels)));
185+
fvs.emplace_back(std::make_pair("isIPv4", std::to_string((int)rib[i].isIPv4)));
186+
187+
// Peer/context
188+
fvs.emplace_back(std::make_pair("peer_as", std::to_string(peer.peer_as)));
189+
fvs.emplace_back(std::make_pair("isPrePolicy", std::to_string((int)peer.isPrePolicy)));
190+
fvs.emplace_back(std::make_pair("isAdjIn", std::to_string((int)peer.isAdjIn)));
191+
192+
193+
// Existing DEBUG per field (retain or drop)
194+
for (const auto& fv : fvs) {
195+
LOG_INFO("MsgBusImpl_redis update_unicastPrefix field = %s, value = %s",
196+
std::get<0>(fv).c_str(), std::get<1>(fv).c_str());
156197
}
198+
199+
const char* table = peer.isAdjIn ? BMP_TABLE_RIB_IN : BMP_TABLE_RIB_OUT;
200+
const std::string full_key = std::string(table)
201+
+ redisMgr_.GetKeySeparator() + redisMgr_pfx
202+
+ redisMgr_.GetKeySeparator() + neigh;
203+
204+
LOG_INFO("MsgBusImpl_redis ADD -> table=%s key=%s fields_count=%zu", table, full_key.c_str(), fvs.size());
205+
206+
if (peer.isAdjIn)
207+
redisMgr_.WriteBMPTable(BMP_TABLE_RIB_IN, keys, fvs);
157208
else
158-
{
159-
redisMgr_.WriteBMPTable(BMP_TABLE_RIB_OUT, keys, addFieldValues);
160-
}
161-
}
162-
break;
209+
redisMgr_.WriteBMPTable(BMP_TABLE_RIB_OUT, keys, fvs);
210+
211+
++add_count;
212+
} break;
163213

164214
case UNICAST_PREFIX_ACTION_DEL:
165215
{
166-
string com_key;
167-
if(peer.isAdjIn)
168-
{
169-
com_key = BMP_TABLE_RIB_IN;
170-
}
171-
else
172-
{
173-
com_key = BMP_TABLE_RIB_OUT;
174-
}
216+
std::string com_key = peer.isAdjIn ? BMP_TABLE_RIB_IN : BMP_TABLE_RIB_OUT;
175217
com_key += redisMgr_.GetKeySeparator();
176218
com_key += redisMgr_pfx;
177219
com_key += redisMgr_.GetKeySeparator();
178220
com_key += neigh;
221+
222+
LOG_INFO("DEL -> key=%s", com_key.c_str());
179223
del_keys.push_back(com_key);
180-
}
181-
break;
224+
++del_count;
225+
} break;
182226
}
183227
}
184228

185229
if (!del_keys.empty()) {
230+
LOG_INFO("RemoveEntityFromBMPTable count=%zu", del_keys.size());
186231
redisMgr_.RemoveEntityFromBMPTable(del_keys);
187232
}
233+
234+
LOG_INFO("MsgBusImpl_redis end update_unicastPrefix[done] action=%s rib_size=%zu adds=%zu dels=%zu peer=%s as=%u ts=%s",
235+
actionStr, rib.size(), add_count, del_count, peer.peer_addr, peer.peer_as, ts.c_str());
188236
}
189237

190238

0 commit comments

Comments
 (0)