Skip to content

Commit 4dab0c3

Browse files
authored
make reset crm polling interval effective immediately (sonic-net#451)
1 parent 5643178 commit 4dab0c3

File tree

5 files changed

+50
-35
lines changed

5 files changed

+50
-35
lines changed

orchagent/crmorch.cpp

+7-5
Original file line numberDiff line numberDiff line change
@@ -149,7 +149,8 @@ const map<string, CrmResourceType> crmUsedCntsTableMap =
149149
CrmOrch::CrmOrch(DBConnector *db, string tableName):
150150
Orch(db, tableName),
151151
m_countersDb(new DBConnector(COUNTERS_DB, DBConnector::DEFAULT_UNIXSOCKET, 0)),
152-
m_countersCrmTable(new Table(m_countersDb.get(), COUNTERS_CRM_TABLE))
152+
m_countersCrmTable(new Table(m_countersDb.get(), COUNTERS_CRM_TABLE)),
153+
m_timer(new SelectableTimer(timespec { .tv_sec = CRM_POLLING_INTERVAL_DEFAULT, .tv_nsec = 0 }))
153154
{
154155
SWSS_LOG_ENTER();
155156

@@ -160,11 +161,9 @@ CrmOrch::CrmOrch(DBConnector *db, string tableName):
160161
m_resourcesMap.emplace(res.first, CrmResourceEntry(res.second, CRM_THRESHOLD_TYPE_DEFAULT, CRM_THRESHOLD_LOW_DEFAULT, CRM_THRESHOLD_HIGH_DEFAULT));
161162
}
162163

163-
auto interv = timespec { .tv_sec = CRM_POLLING_INTERVAL_DEFAULT, .tv_nsec = 0 };
164-
auto timer = new SelectableTimer(interv);
165-
auto executor = new ExecutableTimer(timer, this);
164+
auto executor = new ExecutableTimer(m_timer.get(), this);
166165
Orch::addExecutor("CRM_COUNTERS_POLL", executor);
167-
timer->start();
166+
m_timer->start();
168167
}
169168

170169
CrmOrch::CrmResourceEntry::CrmResourceEntry(string name, CrmThresholdType thresholdType, uint32_t lowThreshold, uint32_t highThreshold):
@@ -236,6 +235,9 @@ void CrmOrch::handleSetCommand(const string& key, const vector<FieldValueTuple>&
236235
if (field == CRM_POLLING_INTERVAL)
237236
{
238237
m_pollingInterval = chrono::seconds(to_uint<uint32_t>(value));
238+
auto interv = timespec { .tv_sec = m_pollingInterval.count(), .tv_nsec = 0 };
239+
m_timer->setInterval(interv);
240+
m_timer->reset();
239241
}
240242
else if (crmThreshTypeResMap.find(field) != crmThreshTypeResMap.end())
241243
{

orchagent/crmorch.h

+1
Original file line numberDiff line numberDiff line change
@@ -52,6 +52,7 @@ class CrmOrch : public Orch
5252
private:
5353
shared_ptr<DBConnector> m_countersDb = nullptr;
5454
shared_ptr<Table> m_countersCrmTable = nullptr;
55+
shared_ptr<SelectableTimer> m_timer = nullptr;
5556

5657
struct CrmResourceCounter
5758
{

orchagent/orch.cpp

+11
Original file line numberDiff line numberDiff line change
@@ -375,6 +375,17 @@ void Orch::addExecutor(string executorName, Executor* executor)
375375
std::forward_as_tuple(executor));
376376
}
377377

378+
Executor *Orch::getExecutor(string executorName)
379+
{
380+
auto it = m_consumerMap.find(executorName);
381+
if (it != m_consumerMap.end())
382+
{
383+
return it->second.get();
384+
}
385+
386+
return NULL;
387+
}
388+
378389
void Orch2::doTask(Consumer &consumer)
379390
{
380391
SWSS_LOG_ENTER();

orchagent/orch.h

+1
Original file line numberDiff line numberDiff line change
@@ -162,6 +162,7 @@ class Orch
162162

163163
/* Note: consumer will be owned by this class */
164164
void addExecutor(string executorName, Executor* executor);
165+
Executor *getExecutor(string executorName);
165166
private:
166167
void addConsumer(DBConnector *db, string tableName);
167168
};

tests/test_crm.py

+30-30
Original file line numberDiff line numberDiff line change
@@ -45,7 +45,7 @@ def test_CrmFdbEntry(dvs):
4545

4646
setReadOnlyAttr(dvs, 'SAI_OBJECT_TYPE_SWITCH', 'SAI_SWITCH_ATTR_AVAILABLE_FDB_ENTRY', '1000')
4747

48-
time.sleep(5*60)
48+
time.sleep(2)
4949

5050
# get counters
5151
used_counter = getCrmCounterValue(dvs, 'STATS', 'crm_stats_fdb_entry_used')
@@ -72,7 +72,7 @@ def test_CrmFdbEntry(dvs):
7272
# update available counter
7373
setReadOnlyAttr(dvs, 'SAI_OBJECT_TYPE_SWITCH', 'SAI_SWITCH_ATTR_AVAILABLE_FDB_ENTRY', '999')
7474

75-
time.sleep(1)
75+
time.sleep(2)
7676

7777
# get counters
7878
new_used_counter = getCrmCounterValue(dvs, 'STATS', 'crm_stats_fdb_entry_used')
@@ -84,7 +84,7 @@ def test_CrmFdbEntry(dvs):
8484
# update available counter
8585
setReadOnlyAttr(dvs, 'SAI_OBJECT_TYPE_SWITCH', 'SAI_SWITCH_ATTR_AVAILABLE_FDB_ENTRY', '1000')
8686

87-
time.sleep(1)
87+
time.sleep(2)
8888

8989
# get counters
9090
new_avail_counter = getCrmCounterValue(dvs, 'STATS', 'crm_stats_fdb_entry_available')
@@ -107,7 +107,7 @@ def test_CrmIpv4Route(dvs):
107107
ps = swsscommon.ProducerStateTable(db, "ROUTE_TABLE")
108108
fvs = swsscommon.FieldValuePairs([("nexthop","10.0.0.1"), ("ifname", "Ethernet0")])
109109

110-
time.sleep(5*60)
110+
time.sleep(2)
111111

112112
# get counters
113113
used_counter = getCrmCounterValue(dvs, 'STATS', 'crm_stats_ipv4_route_used')
@@ -117,7 +117,7 @@ def test_CrmIpv4Route(dvs):
117117
ps.set("2.2.2.0/24", fvs)
118118
setReadOnlyAttr(dvs, 'SAI_OBJECT_TYPE_SWITCH', 'SAI_SWITCH_ATTR_AVAILABLE_IPV4_ROUTE_ENTRY', '999')
119119

120-
time.sleep(1)
120+
time.sleep(2)
121121

122122
# get counters
123123
new_used_counter = getCrmCounterValue(dvs, 'STATS', 'crm_stats_ipv4_route_used')
@@ -131,7 +131,7 @@ def test_CrmIpv4Route(dvs):
131131
dvs.runcmd("ip neigh del 10.0.0.1 lladdr 11:22:33:44:55:66 dev Ethernet0")
132132
setReadOnlyAttr(dvs, 'SAI_OBJECT_TYPE_SWITCH', 'SAI_SWITCH_ATTR_AVAILABLE_IPV4_ROUTE_ENTRY', '1000')
133133

134-
time.sleep(1)
134+
time.sleep(2)
135135

136136
# get counters
137137
new_used_counter = getCrmCounterValue(dvs, 'STATS', 'crm_stats_ipv4_route_used')
@@ -163,7 +163,7 @@ def test_CrmIpv6Route(dvs):
163163
ps = swsscommon.ProducerStateTable(db, "ROUTE_TABLE")
164164
fvs = swsscommon.FieldValuePairs([("nexthop","fc00::2"), ("ifname", "Ethernet0")])
165165

166-
time.sleep(5*60)
166+
time.sleep(2)
167167

168168
# get counters
169169
used_counter = getCrmCounterValue(dvs, 'STATS', 'crm_stats_ipv6_route_used')
@@ -173,7 +173,7 @@ def test_CrmIpv6Route(dvs):
173173
ps.set("2001::/64", fvs)
174174
setReadOnlyAttr(dvs, 'SAI_OBJECT_TYPE_SWITCH', 'SAI_SWITCH_ATTR_AVAILABLE_IPV6_ROUTE_ENTRY', '999')
175175

176-
time.sleep(1)
176+
time.sleep(2)
177177

178178
# get counters
179179
new_used_counter = getCrmCounterValue(dvs, 'STATS', 'crm_stats_ipv6_route_used')
@@ -187,7 +187,7 @@ def test_CrmIpv6Route(dvs):
187187
dvs.runcmd("ip -6 neigh del fc00::2 lladdr 11:22:33:44:55:66 dev Ethernet0")
188188
setReadOnlyAttr(dvs, 'SAI_OBJECT_TYPE_SWITCH', 'SAI_SWITCH_ATTR_AVAILABLE_IPV6_ROUTE_ENTRY', '1000')
189189

190-
time.sleep(1)
190+
time.sleep(2)
191191

192192
# get counters
193193
new_used_counter = getCrmCounterValue(dvs, 'STATS', 'crm_stats_ipv6_route_used')
@@ -205,7 +205,7 @@ def test_CrmIpv4Nexthop(dvs):
205205

206206
setReadOnlyAttr(dvs, 'SAI_OBJECT_TYPE_SWITCH', 'SAI_SWITCH_ATTR_AVAILABLE_IPV4_NEXTHOP_ENTRY', '1000')
207207

208-
time.sleep(5*60)
208+
time.sleep(2)
209209

210210
# get counters
211211
used_counter = getCrmCounterValue(dvs, 'STATS', 'crm_stats_ipv4_nexthop_used')
@@ -215,7 +215,7 @@ def test_CrmIpv4Nexthop(dvs):
215215
dvs.runcmd("ip neigh replace 10.0.0.1 lladdr 11:22:33:44:55:66 dev Ethernet0")
216216
setReadOnlyAttr(dvs, 'SAI_OBJECT_TYPE_SWITCH', 'SAI_SWITCH_ATTR_AVAILABLE_IPV4_NEXTHOP_ENTRY', '999')
217217

218-
time.sleep(1)
218+
time.sleep(2)
219219

220220
# get counters
221221
new_used_counter = getCrmCounterValue(dvs, 'STATS', 'crm_stats_ipv4_nexthop_used')
@@ -228,7 +228,7 @@ def test_CrmIpv4Nexthop(dvs):
228228
dvs.runcmd("ip neigh del 10.0.0.1 lladdr 11:22:33:44:55:66 dev Ethernet0")
229229
setReadOnlyAttr(dvs, 'SAI_OBJECT_TYPE_SWITCH', 'SAI_SWITCH_ATTR_AVAILABLE_IPV4_NEXTHOP_ENTRY', '1000')
230230

231-
time.sleep(1)
231+
time.sleep(2)
232232

233233
# get counters
234234
new_used_counter = getCrmCounterValue(dvs, 'STATS', 'crm_stats_ipv4_nexthop_used')
@@ -250,7 +250,7 @@ def test_CrmIpv6Nexthop(dvs):
250250

251251
setReadOnlyAttr(dvs, 'SAI_OBJECT_TYPE_SWITCH', 'SAI_SWITCH_ATTR_AVAILABLE_IPV6_NEXTHOP_ENTRY', '1000')
252252

253-
time.sleep(5*60)
253+
time.sleep(2)
254254

255255
# get counters
256256
used_counter = getCrmCounterValue(dvs, 'STATS', 'crm_stats_ipv6_nexthop_used')
@@ -260,7 +260,7 @@ def test_CrmIpv6Nexthop(dvs):
260260
dvs.runcmd("ip -6 neigh replace fc00::2 lladdr 11:22:33:44:55:66 dev Ethernet0")
261261
setReadOnlyAttr(dvs, 'SAI_OBJECT_TYPE_SWITCH', 'SAI_SWITCH_ATTR_AVAILABLE_IPV6_NEXTHOP_ENTRY', '999')
262262

263-
time.sleep(1)
263+
time.sleep(2)
264264

265265
# get counters
266266
new_used_counter = getCrmCounterValue(dvs, 'STATS', 'crm_stats_ipv6_nexthop_used')
@@ -273,7 +273,7 @@ def test_CrmIpv6Nexthop(dvs):
273273
dvs.runcmd("ip -6 neigh del fc00::2 lladdr 11:22:33:44:55:66 dev Ethernet0")
274274
setReadOnlyAttr(dvs, 'SAI_OBJECT_TYPE_SWITCH', 'SAI_SWITCH_ATTR_AVAILABLE_IPV6_NEXTHOP_ENTRY', '1000')
275275

276-
time.sleep(1)
276+
time.sleep(2)
277277

278278
# get counters
279279
new_used_counter = getCrmCounterValue(dvs, 'STATS', 'crm_stats_ipv6_nexthop_used')
@@ -291,7 +291,7 @@ def test_CrmIpv4Neighbor(dvs):
291291

292292
setReadOnlyAttr(dvs, 'SAI_OBJECT_TYPE_SWITCH', 'SAI_SWITCH_ATTR_AVAILABLE_IPV4_NEIGHBOR_ENTRY', '1000')
293293

294-
time.sleep(5*60)
294+
time.sleep(2)
295295

296296
# get counters
297297
used_counter = getCrmCounterValue(dvs, 'STATS', 'crm_stats_ipv4_neighbor_used')
@@ -301,7 +301,7 @@ def test_CrmIpv4Neighbor(dvs):
301301
dvs.runcmd("ip neigh replace 10.0.0.1 lladdr 11:22:33:44:55:66 dev Ethernet0")
302302
setReadOnlyAttr(dvs, 'SAI_OBJECT_TYPE_SWITCH', 'SAI_SWITCH_ATTR_AVAILABLE_IPV4_NEIGHBOR_ENTRY', '999')
303303

304-
time.sleep(1)
304+
time.sleep(2)
305305

306306
# get counters
307307
new_used_counter = getCrmCounterValue(dvs, 'STATS', 'crm_stats_ipv4_neighbor_used')
@@ -314,7 +314,7 @@ def test_CrmIpv4Neighbor(dvs):
314314
dvs.runcmd("ip neigh del 10.0.0.1 lladdr 11:22:33:44:55:66 dev Ethernet0")
315315
setReadOnlyAttr(dvs, 'SAI_OBJECT_TYPE_SWITCH', 'SAI_SWITCH_ATTR_AVAILABLE_IPV4_NEIGHBOR_ENTRY', '1000')
316316

317-
time.sleep(1)
317+
time.sleep(2)
318318

319319
# get counters
320320
new_used_counter = getCrmCounterValue(dvs, 'STATS', 'crm_stats_ipv4_neighbor_used')
@@ -336,7 +336,7 @@ def test_CrmIpv6Neighbor(dvs):
336336

337337
setReadOnlyAttr(dvs, 'SAI_OBJECT_TYPE_SWITCH', 'SAI_SWITCH_ATTR_AVAILABLE_IPV6_NEIGHBOR_ENTRY', '1000')
338338

339-
time.sleep(5*60)
339+
time.sleep(2)
340340

341341
# get counters
342342
used_counter = getCrmCounterValue(dvs, 'STATS', 'crm_stats_ipv6_neighbor_used')
@@ -346,7 +346,7 @@ def test_CrmIpv6Neighbor(dvs):
346346
dvs.runcmd("ip -6 neigh replace fc00::2 lladdr 11:22:33:44:55:66 dev Ethernet0")
347347
setReadOnlyAttr(dvs, 'SAI_OBJECT_TYPE_SWITCH', 'SAI_SWITCH_ATTR_AVAILABLE_IPV6_NEIGHBOR_ENTRY', '999')
348348

349-
time.sleep(1)
349+
time.sleep(2)
350350

351351
# get counters
352352
new_used_counter = getCrmCounterValue(dvs, 'STATS', 'crm_stats_ipv6_neighbor_used')
@@ -359,7 +359,7 @@ def test_CrmIpv6Neighbor(dvs):
359359
dvs.runcmd("ip -6 neigh del fc00::2 lladdr 11:22:33:44:55:66 dev Ethernet0")
360360
setReadOnlyAttr(dvs, 'SAI_OBJECT_TYPE_SWITCH', 'SAI_SWITCH_ATTR_AVAILABLE_IPV6_NEIGHBOR_ENTRY', '1000')
361361

362-
time.sleep(1)
362+
time.sleep(2)
363363

364364
# get counters
365365
new_used_counter = getCrmCounterValue(dvs, 'STATS', 'crm_stats_ipv6_neighbor_used')
@@ -386,7 +386,7 @@ def test_CrmNexthopGroup(dvs):
386386
ps = swsscommon.ProducerStateTable(db, "ROUTE_TABLE")
387387
fvs = swsscommon.FieldValuePairs([("nexthop","10.0.0.1,10.0.0.3"), ("ifname", "Ethernet0,Ethernet4")])
388388

389-
time.sleep(5*60)
389+
time.sleep(2)
390390

391391
# get counters
392392
used_counter = getCrmCounterValue(dvs, 'STATS', 'crm_stats_nexthop_group_used')
@@ -396,7 +396,7 @@ def test_CrmNexthopGroup(dvs):
396396
ps.set("2.2.2.0/24", fvs)
397397
setReadOnlyAttr(dvs, 'SAI_OBJECT_TYPE_SWITCH', 'SAI_SWITCH_ATTR_AVAILABLE_NEXT_HOP_GROUP_ENTRY', '999')
398398

399-
time.sleep(1)
399+
time.sleep(2)
400400

401401
# get counters
402402
new_used_counter = getCrmCounterValue(dvs, 'STATS', 'crm_stats_nexthop_group_used')
@@ -411,7 +411,7 @@ def test_CrmNexthopGroup(dvs):
411411
dvs.runcmd("ip neigh del 10.0.0.3 lladdr 11:22:33:44:55:66 dev Ethernet4")
412412
setReadOnlyAttr(dvs, 'SAI_OBJECT_TYPE_SWITCH', 'SAI_SWITCH_ATTR_AVAILABLE_NEXT_HOP_GROUP_ENTRY', '1000')
413413

414-
time.sleep(1)
414+
time.sleep(2)
415415

416416
# get counters
417417
new_used_counter = getCrmCounterValue(dvs, 'STATS', 'crm_stats_nexthop_group_used')
@@ -438,7 +438,7 @@ def test_CrmNexthopGroupMember(dvs):
438438
ps = swsscommon.ProducerStateTable(db, "ROUTE_TABLE")
439439
fvs = swsscommon.FieldValuePairs([("nexthop","10.0.0.1,10.0.0.3"), ("ifname", "Ethernet0,Ethernet4")])
440440

441-
time.sleep(5*60)
441+
time.sleep(2)
442442

443443
# get counters
444444
used_counter = getCrmCounterValue(dvs, 'STATS', 'crm_stats_nexthop_group_member_used')
@@ -448,7 +448,7 @@ def test_CrmNexthopGroupMember(dvs):
448448
ps.set("2.2.2.0/24", fvs)
449449
setReadOnlyAttr(dvs, 'SAI_OBJECT_TYPE_SWITCH', 'SAI_SWITCH_ATTR_AVAILABLE_NEXT_HOP_GROUP_MEMBER_ENTRY', '998')
450450

451-
time.sleep(1)
451+
time.sleep(2)
452452

453453
# get counters
454454
new_used_counter = getCrmCounterValue(dvs, 'STATS', 'crm_stats_nexthop_group_member_used')
@@ -463,7 +463,7 @@ def test_CrmNexthopGroupMember(dvs):
463463
dvs.runcmd("ip neigh del 10.0.0.3 lladdr 11:22:33:44:55:66 dev Ethernet4")
464464
setReadOnlyAttr(dvs, 'SAI_OBJECT_TYPE_SWITCH', 'SAI_SWITCH_ATTR_AVAILABLE_NEXT_HOP_GROUP_MEMBER_ENTRY', '1000')
465465

466-
time.sleep(1)
466+
time.sleep(2)
467467

468468
# get counters
469469
new_used_counter = getCrmCounterValue(dvs, 'STATS', 'crm_stats_nexthop_group_member_used')
@@ -492,7 +492,7 @@ def test_CrmAcl(dvs):
492492
fvs = swsscommon.FieldValuePairs([("priority", "55"), ("PACKET_ACTION", "FORWARD"), ("L4_SRC_PORT", "65000")])
493493
rtbl.set("test|acl_test_rule", fvs)
494494

495-
time.sleep(5*60)
495+
time.sleep(2)
496496

497497
table_used_counter = getCrmCounterValue(dvs, 'ACL_STATS:INGRESS:PORT', 'crm_stats_acl_table_used')
498498
assert table_used_counter == 1
@@ -511,7 +511,7 @@ def test_CrmAcl(dvs):
511511
# remove ACL rule
512512
rtbl._del("test|acl_test_rule")
513513

514-
time.sleep(1)
514+
time.sleep(2)
515515

516516
entry_used_counter = getCrmCounterValue(dvs, key, 'crm_stats_acl_entry_used')
517517
assert entry_used_counter == 0
@@ -522,7 +522,7 @@ def test_CrmAcl(dvs):
522522
# remove ACL table
523523
ttbl._del("test")
524524

525-
time.sleep(1)
525+
time.sleep(2)
526526

527527
table_used_counter = getCrmCounterValue(dvs, 'ACL_STATS:INGRESS:PORT', 'crm_stats_acl_table_used')
528528
assert table_used_counter == 0

0 commit comments

Comments
 (0)