web stats

Mirth Connect

Dashboard Channel Status on top - stopping one channel changes statuses of all the other channels below it.

Details

  • Type: Bug Bug
  • Status: Closed Closed
  • Priority: Minor Minor
  • Resolution: Fixed
  • Affects Version/s: 1.7.1, 1.8.0
  • Fix Version/s: 1.8.2
  • Component/s: Administrator, Server
  • Labels:
    None
  • Operating System:
    Windows XP

Description

On the dashboard, stop a channel. For example, once stopped, the channel's status changes to Not Polling. and it also changes the statuses of all other channels below it to Not Polling, even though they still seem to correctly operate and their statuses then change accordingly.

Activity

Hide
Christopher Ro added a comment -
Fixed Dashboard status update issues for VM connector (Channel Reader).
Show
Christopher Ro added a comment - Fixed Dashboard status update issues for VM connector (Channel Reader).
Hide
Jacob Brauer added a comment -
Looks like it might not be a bug with the Statuses, but actually a bug with the PollingMessageReceiver. If you stop a File reader, the PollingMessageReceiver calls the following line twice:

ControllerFactory.getFactory().createMonitoringController().updateStatus(connector, connectorType, Event.DISCONNECTED);

The first time is with the LAST Channel Reader as the connector, and the second time is with the proper File Reader connector as the connector. This doesn't hurt anything besides the connector status, which gets resolved with the next message that comes in.
Show
Jacob Brauer added a comment - Looks like it might not be a bug with the Statuses, but actually a bug with the PollingMessageReceiver. If you stop a File reader, the PollingMessageReceiver calls the following line twice: ControllerFactory.getFactory().createMonitoringController().updateStatus(connector, connectorType, Event.DISCONNECTED); The first time is with the LAST Channel Reader as the connector, and the second time is with the proper File Reader connector as the connector. This doesn't hurt anything besides the connector status, which gets resolved with the next message that comes in.
Hide
Jacob Brauer added a comment -
Here are some notes from Alberto about the issue:

"It's because how the MonitorController searchs the channelId with the component name.

BTW I've made an in-deep search, and I've conclude than this is because the endopints definded in the incoming router in the mule-config.xml lacks the connector attribute.

IE: This is how a MLLP endpoint is defined:

<endpoint address="mllp://127.0.0.1:6635"
                     connector="74df15f7-12e7-47f5-a74b-707fe2415492_source_connector"
                     synchronous="true"
                     transformers="(...)"
/>

And this is how an incoming VM is defined:


    <endpoint address="vm://74df15f7-12e7-47f5-a74b-707fe2415492"
transformers="(....)"/>

When Mule builds the endpoints from ints attributes. In this process, when the connector does not exists, it tries to find one. For VMConnector, it seems than the last developed is assigned to the endoint.

Based on this, all VMReceivers are assigend to the last VMConnecetor created (!!!!!!) So to "solve" it, it's as simple as add this attribute when creating mule-config.xml

But this can't be as there is no connector defined for VMReaders.

So, IMHO I see the next options:

*) Remove the line from the PoolingMessage. The simplest one.

or:

*) Change MonitorController to instead using the connectorName, use the channelId. This implies to change some callers, but I think this is the real solution.

or:

*) Create a VMConnector for each VMReceiver in the mule-config, and add the connectorName propertie to this endpints."
Show
Jacob Brauer added a comment - Here are some notes from Alberto about the issue: "It's because how the MonitorController searchs the channelId with the component name. BTW I've made an in-deep search, and I've conclude than this is because the endopints definded in the incoming router in the mule-config.xml lacks the connector attribute. IE: This is how a MLLP endpoint is defined: <endpoint address="mllp://127.0.0.1:6635"                      connector="74df15f7-12e7-47f5-a74b-707fe2415492_source_connector"                      synchronous="true"                      transformers="(...)" /> And this is how an incoming VM is defined:     <endpoint address="vm://74df15f7-12e7-47f5-a74b-707fe2415492" transformers="(....)"/> When Mule builds the endpoints from ints attributes. In this process, when the connector does not exists, it tries to find one. For VMConnector, it seems than the last developed is assigned to the endoint. Based on this, all VMReceivers are assigend to the last VMConnecetor created (!!!!!!) So to "solve" it, it's as simple as add this attribute when creating mule-config.xml But this can't be as there is no connector defined for VMReaders. So, IMHO I see the next options: *) Remove the line from the PoolingMessage. The simplest one. or: *) Change MonitorController to instead using the connectorName, use the channelId. This implies to change some callers, but I think this is the real solution. or: *) Create a VMConnector for each VMReceiver in the mule-config, and add the connectorName propertie to this endpints."
Hide
Jacob Brauer added a comment -
Commented out the updateStatus line in the PollingMessageReceiver because other channels could share the same VMConnector and change their status.
Show
Jacob Brauer added a comment - Commented out the updateStatus line in the PollingMessageReceiver because other channels could share the same VMConnector and change their status.

People

Vote (0)
Watch (0)

Dates

  • Created:
    Updated:
    Resolved: