Skip to content
DataMiner DoJo

More results...

Generic selectors
Exact matches only
Search in title
Search in content
Post Type Selectors
Search in posts
Search in pages
Search in posts
Search in pages
Log in
Menu
  • Blog
  • Questions
  • Learning
    • E-learning Courses
    • Open Classroom Training
    • Certification
      • DataMiner Fundamentals
      • DataMiner Configurator
      • DataMiner Automation
      • Scripts & Connectors Developer: HTTP Basics
      • Scripts & Connectors Developer: SNMP Basics
      • Visual Overview – Level 1
      • Verify a certificate
    • Tutorials
    • Video Library
    • Books We Like
    • >> Go to DataMiner Docs
  • Expert Center
    • Solutions & Use Cases
      • Solutions
      • Use Case Library
    • Markets & Industries
      • Media production
      • Government & defense
      • Content distribution
      • Service providers
      • Partners
      • OSS/BSS
    • DataMiner Insights
      • Security
      • System Architecture
      • DataMiner Releases & Updates
    • Agile
      • Agile Webspace
      • Everything Agile
        • The Agile Manifesto
        • Best Practices
        • Retro Recipes
      • Methodologies
        • The Scrum Framework
        • Kanban
        • Extreme Programming
      • Roles
        • The Product Owner
        • The Agile Coach
        • The Quality & UX Coach (QX)
    • DataMiner DevOps Professional Program
  • Downloads
  • More
    • Feature Suggestions
    • Climb the leaderboard!
    • Swag Shop
    • Contact
      • General Inquiries
      • DataMiner DevOps Support
      • Commercial Requests
    • Global Feedback Survey
  • PARTNERS
    • All Partners
    • Technology Partners
    • Strategic Partner Program
    • Deal Registration
  • >> Go to dataminer.services

Dataminer notifiy and parameter usage

346 views4th December 2024DataMiner externalparameter interelement NotifyDataMiner
3
Jordan Draper102 28th November 2024 0 Comments

Hi,
I am looking at improving stability and reliability in our dataminer implementation. Currently we seem to be experiencing some dataloss and deadlocking occasionally during high resource utilization periods when sending data from one element to another element. It's an inconsistent issue so I'm looking broadly across our solution to try see what can be improved to reduce this. Please could I get some info on the following questions:

Question 1: For each element we have a single parameter existing that is responsible for all incoming data from external elements. Would we benefit from creating one I/O parameter for each other element instead of multiple writing to the same parameter?

Question 2: When the external elements write to the parameter, for our implementation they are currently using the "NotifyDataMiner" method, would we benefit from switching to "NotifyDataMinerQueued"? I don't think the docs are clear enough on the differences. Does the underlying dataminer protocol already queue some stuff even when not using the queued version of the function? A bit more context on the pros/cons of using these different methods would be very helpful.

Question 3: When data is being queued on dataminer parameters, is there configuration somewhere that defines the buffer depth and queue behaviour?

Links below for methods referenced in question 2
NotifyDataMiner(int, object, object) - Method NotifyDataMiner | DataMiner Docs
NotifyDataMinerQueued(int, object, object) - Method NotifyDataMinerQueued | DataMiner Docs

Thank you!

Simon Vandamme [SLC] [DevOps Advocate] Answered question 4th December 2024

1 Answer

  • Active
  • Voted
  • Newest
  • Oldest
0
Simon Vandamme [SLC] [DevOps Advocate]942 Posted 4th December 2024 1 Comment

Hi Jordan, thank you for this interesting question.

Question 1:

By default, this would not help as, by default, QAction executions are synchronous, only one can run at a time. It could potentially help if each parameter would trigger its own QAction on which you would be adding the queued option. Keep in mind this means several QActions might be running in parallel, meaning you'll need to be sure your code is thread-safe and add some locking if there is a chance that multiple QActions end up interacting with the same protocol parameters. Note that you also need to be very careful that when using the queued option, not only other QActions can run in parallel but also a second instance of the same QAction can also run before the first instance of it is finished and your QAction run will not block subsequent sets on that parameter.

Let's say param 1 triggers QAction 1 which is not queued. If in your code you set that param 1 to A, first QAction instance will start executing. If you right after set that same parameter to value B, such set will wait until your first QAction execution is finished. This mean that when into your QAction 1, you can the protocol.GetParameter method on parameter 1, you are guaranteed to receive value A. Then only when first instance of QAction 1 is finished, the parameter will be set to B and second run of QAction 1 will start.

Let's say param 1 triggers QAction 1 which is queued now. If in your code you set that param 1 to A and then to B, first QAction instance will start executing but your second set to value B will not wait. Meaning that when in first QAction run, you do a GetParameter call on parameter 1, it might already be at value B while you would probably hope to get A. The second run of that QAction will then probably again get value B unless some other sets to it where executed in the meantime.

Question 2:

I agree the docs should be improved there, we'll look into that. The difference is that NotifyDataMiner is synchronous, meaning that when you call it, your code will wait for the set to be finished, you'll typically use this one if you require subsequent code to be executed only when the set fully went through. While the NotifyDataMinerQueued is asynchronous, your call will directly be added to a queue and your code will continue to execute while the set is likely not yet processed, this will typically be preferred if subsequent code does not rely on the fact the set fully went through.

Question 3:

No, the queue will always behave as a queue => FIFO, and there is currently no configuration regarding the buffer depth. There is currently no max depth defined for it.

Extra info:

Note that instead of using those NotifyDataMiner calls, I would advise you to use following NuGet package: NuGet Gallery | Skyline.DataMiner.Core.DataMinerSystem.Protocol 1.1.2.1. The NotifyDataMiner are low level calls which typically will keep the same implementation to keep backward compatibility. The NuGet package mentioned above is high level api containing some safeguards and is maintained to insure best performance. Over time, the same call might be adapted to use newer low level calls for performance or any other reasons.
You'll find more info on how to use it there: Class library introduction | DataMiner Docs

Hope this helps, let us know if you need more.

Simon Vandamme [SLC] [DevOps Advocate] Edited comment 4th December 2024
Simon Vandamme [SLC] [DevOps Advocate] commented 4th December 2024

Here is a quick and dirty sample code on how to set a parameter using the NuGet package:

var dma = protocol.GetDms().GetAgent(1);
var element = dma.GetElement("");
var param = element.GetStandaloneParameter<string>(5);
param.SetValue("");

Please login to be able to comment or post an answer.

My DevOps rank

DevOps Members get more insights on their profile page.

My user earnings

0 Dojo credits

Spend your credits in our swag shop.

0 Reputation points

Boost your reputation, climb the leaderboard.

Promo banner DataMiner DevOps Professiona Program
DataMiner Integration Studio (DIS)
Empower Katas

Recent questions

Invoke HTTP Session from QAction 0 Answers | 0 Votes
Masked alarmes permission management 0 Answers | 0 Votes
Remove all Widgets from Section 2 Answers | 4 Votes

Question Tags

adl2099 (115) alarm (62) Alarm Console (82) alarms (100) alarm template (83) Automation (223) automation scipt (111) Automation script (167) backup (71) Cassandra (180) Connector (109) Correlation (69) Correlation rule (52) Cube (151) Dashboard (194) Dashboards (188) database (83) DataMiner Cube (57) DIS (81) DMS (71) DOM (140) driver (65) DVE (56) Elastic (83) Elasticsearch (115) elements (80) Failover (104) GQI (159) HTTP (76) IDP (74) LCA (152) low code app (166) low code apps (93) lowcodeapps (75) MySQL (53) protocol (203) QAction (83) security (88) SNMP (86) SRM (337) table (54) trending (87) upgrade (62) Visio (539) Visual Overview (345)
Privacy Policy • Terms & Conditions • Contact

© 2025 Skyline Communications. All rights reserved.

DOJO Q&A widget

Can't find what you need?

? Explore the Q&A DataMiner Docs

[ Placeholder content for popup link ] WordPress Download Manager - Best Download Management Plugin