Skip to content

Releases: openBackhaul/MicroWaveDeviceInventory

Specification of MicroWaveDeviceInventory v2.1.0

16 Mar 09:41
eb6847c

Choose a tag to compare

This release adds the following changes:

  • a configurable list of attributes/subclasses to be excluded from the quality measurement process
  • different approach for deriving the deviceType (use equipment-augment/device-model-name instead of air-interface-capability information and regex), vendor mapping adjusted accordingly
  • adds the timestamp of the last complete ControlConstruct update to the respective ControlConstruct

For more details, see issue collection MWDI v2.1.0_spec.

Implementation of MicroWaveDeviceInventory v2.0.1.f_impl

20 Jan 13:12
ce9a5ed

Choose a tag to compare

S.No Issue Number Status
1 #1501 Fixed
2 #1464 Fixed
3 #1350 Fixed
4 #1349 Fixed
5 #1348 Fixed
6 #1347 Fixed
7 #1082 Fixed
8 #1065 Fixed
9 #1057 Fixed
10 #901 Fixed
11 #1504 Fixed
12 #1503 Fixed
13 #1501 Fixed
14 #1500 Fixed
15 #1498 Fixed
16 #1494 Fixed
17 #1377 Fixed
18 #1505 Fixed
19 #1048 Fixed
20 #1507 Fixed
21 #1494 Fixed
22 #923 Fixed

Fix for the performance problem :

Reference : #1505 (comment)
Node.js executes JavaScript on a single thread. So, our REST server and the 4 high-CPU tasks share the same event loop.
When those CPU-intensive tasks run, they block the event loop, preventing it from quickly handling incoming HTTP requests.
As a result, API responses slow down because the event loop is busy processing the continuous cyclic operations instead of processing REST requests.
So , we made all the 4 high-CPU tasks run in a separate worker thread(means allocated with its own heap space , event loop). Bussiness logic for this application remains the same where as each background task run as a separate thread inside a single application.

MWDI – Current State, Challenges, and v2.0.1 Enhancements

Current Production State (MWDI v1.2.0)

  • MWDI v1.2.0 is currently running in production.
  • Configured with a sliding window size of 700.
  • The application consists of:
    • REST Interface (asynchronous, event‑driven)
    • Background Sliding Window Process (continuous)

Performance Snapshot

  • Cache updates complete in around 3 hours (approximately 38K devices processed).
  • When REST traffic increases, overall performance degrades.
  • Notification Processing Disabled
    • v1.2.0 and earlier versions could not handle notification load.
    • Therefore, notification processing is disabled in production.

New Features Introduced in v2.0.1

Version 2.0.1 introduces multiple new background processes:

1. Kafka Consumer

  • Consumes messages from Kafka topics.
  • Continuous background process.

2. DeviceMetaDataList Update Process

  • Periodic background process.

3. Cache Quality Measurement

  • Periodic background task to evaluate cache health.

Total Processes in v2.0.1

  • REST Server
  • 2 Periodic High‑CPU Tasks
  • 2 Continuous High‑CPU Tasks

Total: 5 parallel processes


Root Cause Analysis (Node.js Limitation)

As referenced in:
#1505 (comment)

Key points:

  • Node.js executes JavaScript on a single thread.
  • All processes share the same event loop:
    • REST Server
    • 2 periodic high‑CPU tasks
    • 2 continuous high‑CPU background tasks

Impact

  • CPU‑intensive background loops block the event loop.
  • Incoming HTTP requests slow down significantly.
  • REST APIs become slow or unresponsive under load.

In traditional multithreaded environments (e.g., Java), such tasks would naturally run on separate threads, avoiding contention.


Solution Approach in v2.0.1.f – Worker Threads

To overcome Node.js event loop limitations:

  • Worker Threads introduced for all background tasks.
  • Each background process receives:
    • Its own execution thread
    • Its own heap memory
    • No contention with REST APIs

Expected Outcome

  • REST APIs remain responsive.
  • Background processing runs independently.
  • Overall throughput and stability improve.

This solution must be validated in pre‑production with ~40K devices to confirm real‑world performance gains.


Key Challenges Faced During Development

1. Notification Processing Was Never Tested in Production

  • Disabled from day one due to performance issues.
  • Notification processing logic was untested.
  • The real bottleneck existed inside the application’s notification processing loop.
  • Required a complete rewrite (currently under testing).

2. Large Effort Estimation Gap

  • Kafka integration + total redesign of notification processing.
  • Initial estimates did not account for this complexity.

Testing Constraints

  • Development and test environments initially lacked notification simulation.
  • Multiple test builds were released for partial functionality testing in pre‑prod:
    • test_alarm_fix_1_v2.0.1
    • test_slidingW_analysis_1_v2.0.1
    • test_slidingwindow_analysis_2_v2.0.1
    • test_slidingwindow_analysis_3_v2.0.1
  • Pre‑production environment could not be disturbed.
  • Testing limited to:
    • Master Controller‑3
    • Up to 17k devices

Summary

  • v1.2.0 limitations stem from single‑threaded execution and disabled notification handling.
  • v2.0.1 introduces multiple high‑CPU background processes, revealing Node.js scalability limits.
  • v2.0.1.f addresses these challenges using Worker Threads, properly isolating workloads.
  • The solution is architecturally sound but needs large‑scale pre‑production validation.
  • Significant development effort was required due to:
    • Missing load simulation environments
    • Necessary redesign of core processing logic
    • MWDI being a mega service (not a microservice) - long‑term fixes require breaking it into smaller, isolated applications to eliminate scalability bottlenecks.

Specification of MicroWaveDeviceInventory v2.0.1

05 Jan 15:45
032ba8b

Choose a tag to compare

MWDI v2.0.1 spec

This specification contains updates and fixes for findings from implementation of MWDI 2.0.0_spec.

Issue collection:
The list of changes can be found in issue collection MWDI v2.0.1_spec


What's Changed

Read more

Implementation of MicroWaveDeviceInventory v2.0.1.e (for Defne's Master Thesis)

10 Oct 12:52
9020a17

Choose a tag to compare

Fixed Issues :

Alarm related issues

#1472
#901

Others

#1464
#1490
#1491
#1455

Upcoming release :

During our analysis of various cache update-related issues, we identified a common underlying cause: concurrency.
To address this, we are implementing a generic solution in the upcoming package that will handle concurrency more effectively across the system.

What's Changed

New Contributors

Full Changelog: v2.0.1.d_impl...v2.0.1.e_impl

Implementation of MicroWaveDeviceInventory v2.0.1.d (for Defne's Master Thesis)

23 Sep 11:44

Choose a tag to compare

Implementation of MicroWaveDeviceInventory v2.0.1.c (for Defne's Master Thesis)

01 Sep 10:31
6f3b04e

Choose a tag to compare

Following are the solved issues ,
#1387
#1386
#1388
#1451
#1449

What's Changed

Full Changelog: v2.0.1.b_impl...v2.0.1.c_impl

Implementation of MicroWaveDeviceInventory v2.0.1.b (for Defne's Master Thesis)

29 Aug 05:45

Choose a tag to compare

Following are the solved issues ,
#1444
#1440
#1439
#1437
#1433
#1430

What's Changed

Full Changelog: v2.0.1.a_impl...v2.0.1.b_impl

Implementation of MicroWaveDeviceInventory v2.0.1.a (for Defne's Master Thesis)

22 Aug 15:32

Choose a tag to compare

This release consists of the changes required for Defne's Master Thesis that comprises of including Kafka into the existing MWDI's architecture.
Following are the solved issues ,

What's Changed

New Contributors

Full Changelog: 1.1.2.k_impl...v2.0.1.a_impl

Release note of MWDI v1.2.2-hotfix2_impl

04 Aug 19:17
9519e7f

Choose a tag to compare

Release note for MWDI v1.2.2-hotfix2_impl

Ticket closed or mitigated
#1350 - Missing OAM_PATH_CONTROLLER_ATTRIBUTE_* Constants in configConstants.js
#1048 - Performance]Observing slowness in retrieving the cache APIs when MWDI APIs are queried continuously by other application

Analyzed but not MWDI bug:
#1105 - Observing error message from ELK when bulk controller notification is triggered

Release note of MWDI v1.2.2-hotfix.1_impl

10 Jul 14:44

Choose a tag to compare

Release note for MWDI v1.2.2-hotfix.1_impl

Please read carefully the notes below

Ticket closed:
#772 -[Data] Cache air-interface capability value and live air-interface capability value are not same
#853 - [Data] /core-model-1-4:network-control-domain=cache/control-construct=/equipment=/actual-equipment not working in tag test_v1.1.2
#901 - [NotificationService] Cleared alarm notification is not updating the cache - To be validated
#989 - [Subscription] Unable to end the subscription in MWDI
#1001 - [NotificationService] Observing 409 error from /v1/regard-device-object-creation/deletion
#1004 - [LinkService] GET /core-model-1-4:network-control-domain=cache/link={uuid}/link-port={localId} does not return data (500)
#1050 - tag_1.1.2h:Observing 500 Internal server error with Object Deletion
#1051 - tag_1.1.2h: Link port creation fails with 500 response
#1054 - Device is cache is not available in ELK whereas device connected and Live is requested successfully
#1092 - /v1/regard-device-attribute-value-change - value not updating in MWDI cache - To be validated
#1107 - Observing 500 Internal server error when POST:/v1/provide-list-of-parallel-links

Ticket to be closed or addressed properly:
#974 - [Ops] observing Bad request error message in docker logs without any information on what caused bad request. - This is not an issue, just reporting in the log that issue is in the requestor App that is asking for information that doesn't exist. Exception is handled properly
#981 - [BasicService] /v1/inform-about-application returns the wrong release number - This issue cannot be validated in this release, since is build on 1.2.1 not in 1.1.2.
#1112 - Observing 502 BadGateway from NDL "/v1/provide-inventory-of-device" - Not a MWDI problem, SW is working as expecting, rejecting request with wrong or special chars
#1135 - Observing 500 for GET ​/core-model-1-4:network-control-domain=cache​/control-construct={mountName} - Not a SW fault, is validation file that doesn't match with Control construct coming from ODL
#1168 - Observing 500 Internal server error when we invoke POST:/core-model-1-4:network-control-domain=cache/link={uuid} - Not a MWDI problem, SW is working as expecting, rejecting request with wrong or special chars