03-26-2021 08:30 AM
My HA app needs to reconstruct the internal data structure keeping information about ongoing operations. That structure stores CiscoCalls, CiscoTerminalConnections and CallControlConnection.
These objects cannot pass my system boundary, so if the "other instance" needs to take over, it only has ids and needs to fetch the information again from its own CiscoProvider.
Any ideas on how to best do that? when I look at what the CiscoProvider can do, I'm already a bit stuck. e.g. there's no getCall that takes the global call Id, instead I also need to know the callManagerId (where do I get this from?).
Likewise, what do I bet store to recover the CiscoTerminalConections and CallControlConnection on the remote end?
03-26-2021 12:08 PM
Sorry this is a bit of a contrived example, but should demonstrate how to go to<->from call, globalcallID+callManagerId, provider:
((CiscoProvider) call.getProvider()).getCall(call.getCallID().getGlobalCallID(),call.getCallID().getCallManagerID())
If both your primary and secondary providers are using the same users and monitoring the same addresses, etc., then you should be able to enumerate everything (including CiscoTerminalConnections and CallControlConnections) down from the provider, at minimum. I would also think the secondary app would be written in such a way as to be 'mirroring' its internal structures in real-time based on the call events, which should be identical to the events seen by the primary - in which case I'm not sure why you would need to reconstruct your data structures..?
So, two instances are kept identical internally by virtue of the read-only events/data, where only one at a time (based on your failover algorithm) gets to actually affect positive operations...
03-28-2021 06:48 AM
My scenario is based on the call transfer scenario we discussed last August. Inbound call to CTI RP, the RP blasts out a bunch of outbound calls, and the first one gets transfered into the inbound call by means of a CTI Port. Both instances obviously know the inbound call, and they have the info who should get the outbound calls, but these outbound calls, while the secondary instance can fetch them, it won't "have" them because it's the primary that initiates that. I have a distributed cache to keep things in sync, but Cisco* objects can't pass that object boundary, so I need to store something another instance can use to get the Cisco* objects again. Not sure I see another approach of doing that.
I've already tests that I get the calls from the Provider using the two parameter getCall (which works), so I know I can put the global callid and callmanagerId into that structure and get calls from it. I was concerned about any of these potentially changing when also looking at CTI Manager redundancy (when I'm doing things myself so I can switch over fast - another discussion we had last August), If that's not a problem, it shouldn't be hard to put this all in place.
Discover and save your favorite ideas. Come back to expert answers, step-by-step guides, recent topics, and more.
New here? Get started with these tips. How to use Community New member guide