@@ -50,6 +50,7 @@ const int k_GC_MESSAGES_BATCH_SIZE = 1000; // how many to process in one run
50
50
// CREATORS
51
51
InMemoryStorage::InMemoryStorage (const bmqt::Uri& uri,
52
52
const mqbu::StorageKey& queueKey,
53
+ mqbi::Domain* domain,
53
54
int partitionId,
54
55
const mqbconfm::Domain& config,
55
56
mqbu::CapacityMeter* parentCapacityMeter,
@@ -72,8 +73,11 @@ InMemoryStorage::InMemoryStorage(const bmqt::Uri& uri,
72
73
.addMilliseconds(config.deduplicationTimeMs())
73
74
.totalNanoseconds(),
74
75
allocatorStore ? allocatorStore->get(" Handles" ) : d_allocator_p)
76
+ , d_queueStats_sp(
77
+ bsl::allocate_shared<mqbstat::QueueStatsDomain>(d_allocator_p))
75
78
, d_virtualStorageCatalog(
76
79
this ,
80
+ d_queueStats_sp,
77
81
allocatorStore ? allocatorStore->get (" VirtualHandles" ) : d_allocator_p)
78
82
, d_ttlSeconds(config.messageTtl())
79
83
, d_isEmpty(1 )
@@ -82,6 +86,7 @@ InMemoryStorage::InMemoryStorage(const bmqt::Uri& uri,
82
86
{
83
87
BSLS_ASSERT_SAFE (0 <= d_ttlSeconds); // Broadcast queues can use 0 for TTL
84
88
89
+ d_queueStats_sp->initialize (d_uri, domain);
85
90
d_virtualStorageCatalog.setDefaultRda (config.maxDeliveryAttempts ());
86
91
87
92
if (isProxy ()) {
@@ -132,6 +137,8 @@ void InMemoryStorage::setQueue(mqbi::Queue* queue)
132
137
// Update queue stats if a queue has been associated with the storage.
133
138
134
139
if (queue) {
140
+ queue->setStats (d_queueStats_sp);
141
+
135
142
const bsls::Types::Int64 numMessage = numMessages (
136
143
mqbu::StorageKey::k_NULL_KEY);
137
144
const bsls::Types::Int64 numByte = numBytes (
@@ -234,13 +241,10 @@ InMemoryStorage::put(mqbi::StorageMessageAttributes* attributes,
234
241
235
242
d_currentlyAutoConfirming = bmqt::MessageGUID ();
236
243
237
- if (queue ()) {
238
- queue ()
239
- ->stats ()
240
- ->onEvent <mqbstat::QueueStatsDomain::EventType::e_ADD_MESSAGE>(
244
+ d_queueStats_sp
245
+ ->onEvent <mqbstat::QueueStatsDomain::EventType::e_ADD_MESSAGE>(
241
246
242
- msgSize);
243
- }
247
+ msgSize);
244
248
245
249
d_isEmpty.storeRelaxed (0 );
246
250
@@ -332,11 +336,10 @@ InMemoryStorage::releaseRef(const bmqt::MessageGUID& guid)
332
336
d_capacityMeter.remove (1 , msgLen);
333
337
if (queue ()) {
334
338
queue ()->queueEngine ()->beforeMessageRemoved (guid);
335
- queue ()
336
- ->stats ()
337
- ->onEvent <mqbstat::QueueStatsDomain::EventType::e_DEL_MESSAGE>(
338
- msgLen);
339
339
}
340
+ d_queueStats_sp
341
+ ->onEvent <mqbstat::QueueStatsDomain::EventType::e_DEL_MESSAGE>(
342
+ msgLen);
340
343
341
344
// There is not really a need to remove the guid from all virtual
342
345
// storages, because we can be here only if guid doesn't exist in
@@ -347,13 +350,9 @@ InMemoryStorage::releaseRef(const bmqt::MessageGUID& guid)
347
350
348
351
d_items.erase (it);
349
352
350
- if (queue ()) {
351
- queue ()
352
- ->stats ()
353
- ->onEvent <
354
- mqbstat::QueueStatsDomain::EventType::e_UPDATE_HISTORY>(
355
- d_items.historySize ());
356
- }
353
+ d_queueStats_sp
354
+ ->onEvent <mqbstat::QueueStatsDomain::EventType::e_UPDATE_HISTORY>(
355
+ d_items.historySize ());
357
356
358
357
return mqbi::StorageResult::e_ZERO_REFERENCES; // RETURN
359
358
}
@@ -378,16 +377,11 @@ InMemoryStorage::remove(const bmqt::MessageGUID& msgGUID, int* msgSize)
378
377
// Update resource usage
379
378
d_capacityMeter.remove (1 , msgLen);
380
379
381
- if (queue ()) {
382
- queue ()
383
- ->stats ()
384
- ->onEvent <mqbstat::QueueStatsDomain::EventType::e_DEL_MESSAGE>(
385
- msgLen);
386
- queue ()
387
- ->stats ()
388
- ->onEvent <mqbstat::QueueStatsDomain::EventType::e_UPDATE_HISTORY>(
389
- d_items.historySize ());
390
- }
380
+ d_queueStats_sp
381
+ ->onEvent <mqbstat::QueueStatsDomain::EventType::e_DEL_MESSAGE>(msgLen);
382
+ d_queueStats_sp
383
+ ->onEvent <mqbstat::QueueStatsDomain::EventType::e_UPDATE_HISTORY>(
384
+ d_items.historySize ());
391
385
392
386
if (msgSize) {
393
387
*msgSize = msgLen;
@@ -410,11 +404,8 @@ InMemoryStorage::removeAll(const mqbu::StorageKey& appKey)
410
404
d_items.clear ();
411
405
d_capacityMeter.clear ();
412
406
413
- if (queue ()) {
414
- queue ()
415
- ->stats ()
416
- ->onEvent <mqbstat::QueueStatsDomain::EventType::e_PURGE>(0 );
417
- }
407
+ d_queueStats_sp
408
+ ->onEvent <mqbstat::QueueStatsDomain::EventType::e_PURGE>(0 );
418
409
419
410
d_isEmpty.storeRelaxed (1 );
420
411
@@ -440,12 +431,9 @@ InMemoryStorage::removeAll(const mqbu::StorageKey& appKey)
440
431
d_isEmpty.storeRelaxed (1 );
441
432
}
442
433
443
- if (queue ()) {
444
- queue ()
445
- ->stats ()
446
- ->onEvent <mqbstat::QueueStatsDomain::EventType::e_UPDATE_HISTORY>(
447
- d_items.historySize ());
448
- }
434
+ d_queueStats_sp
435
+ ->onEvent <mqbstat::QueueStatsDomain::EventType::e_UPDATE_HISTORY>(
436
+ d_items.historySize ());
449
437
450
438
return mqbi::StorageResult::e_SUCCESS;
451
439
}
@@ -483,11 +471,10 @@ int InMemoryStorage::gcExpiredMessages(
483
471
d_capacityMeter.remove (1 , msgLen);
484
472
if (queue ()) {
485
473
queue ()->queueEngine ()->beforeMessageRemoved (cit->first );
486
- queue ()
487
- ->stats ()
488
- ->onEvent <mqbstat::QueueStatsDomain::EventType::e_DEL_MESSAGE>(
489
- msgLen);
490
474
}
475
+ d_queueStats_sp
476
+ ->onEvent <mqbstat::QueueStatsDomain::EventType::e_DEL_MESSAGE>(
477
+ msgLen);
491
478
492
479
// Remove message from all virtual storages and the physical (this)
493
480
// storage.
@@ -496,13 +483,11 @@ int InMemoryStorage::gcExpiredMessages(
496
483
++numMsgsDeleted;
497
484
}
498
485
499
- if (queue () && (numMsgsDeleted > 0 )) {
500
- queue ()
501
- ->stats ()
486
+ if (numMsgsDeleted > 0 ) {
487
+ d_queueStats_sp
502
488
->onEvent <mqbstat::QueueStatsDomain::EventType::e_GC_MESSAGE>(
503
489
numMsgsDeleted);
504
- queue ()
505
- ->stats ()
490
+ d_queueStats_sp
506
491
->onEvent <mqbstat::QueueStatsDomain::EventType::e_UPDATE_HISTORY>(
507
492
d_items.historySize ());
508
493
}
@@ -519,12 +504,9 @@ bool InMemoryStorage::gcHistory()
519
504
bool hasMoreToGc = d_items.gc (bmqsys::Time::highResolutionTimer (),
520
505
k_GC_MESSAGES_BATCH_SIZE);
521
506
522
- if (queue ()) {
523
- queue ()
524
- ->stats ()
525
- ->onEvent <mqbstat::QueueStatsDomain::EventType::e_UPDATE_HISTORY>(
526
- d_items.historySize ());
527
- }
507
+ d_queueStats_sp
508
+ ->onEvent <mqbstat::QueueStatsDomain::EventType::e_UPDATE_HISTORY>(
509
+ d_items.historySize ());
528
510
529
511
return hasMoreToGc;
530
512
}
0 commit comments