Warning: message-spool operational status is not AD-Active - solace

I am using Solace VMR community edition version 8.1
Whenever I try to create a topic or queue on the VMR the warning message shows up.
I have tried following the guide on
http://docs.solace.com/Configuring-and-Managing-Routers/Configuring-Guaranteed-Msging.htm
but there is no command for allow-guaranteed-message-receive.
I have also tried to using SolAdmin to add the topic and error message says "unable to complete request because router is not active for Guaranteed Delivery"
This was working fine when I used version 8.0 on another machine. Is it due to the version update or something else?

You can view the state of the message-spool in SolAdmin by navigating to the 'Message Spool Configuration' view on the 'General' tab. The Operational Status of the message-spool must be AD-Active in order to use guaranteed messaging or to create a queue or topic endpoint.
If the operational status is showing as AD-Disabled, this means the message-spool has been administratively disabled. You can change this by selecting 'Manage Message Spool Status' from the drop down menu on the right and clicking the gear. There will be a pop up where you can enable the message spool.
If the operational status is showing AD-NotReady, you can scroll down to see the 'Last Failure Reason' which will give you more information about why the message-spool is not ready to become active.
By default when you initialize a new VMR in version 8.1, the message-spool will be AD-Active if the VMR was configured correctly.

Related

#Solace - Implementing DR for solace Java JMS publisher

I have an existing application which was running on solace jar v7.1.2 execute in pub/sub mode. Now we have upgraded to v10.1.1 and as part of implementing DR setup(Disaster Recovery), I have added one more host in the configuration with comma separated.
The application could connect to the primary host successfully, but during the switch-over, (ie from primary to DR) the application had failed to connect and i have received the below error. It connects to DR host if I restart my application.
com.solacesystems.jcsmp.JCSMPErrorResponseException: 400: Unknown Flow Name [Subcode:55]
at com.solacesystems.jcsmp.impl.flow.PubFlowManager.doPubAssuredCtrl(PubFlowManager.java:266)
at com.solacesystems.jcsmp.impl.flow.PubFlowManager.notifyReconnected(PubFlowManager.java:452)
at com.solacesystems.jcsmp.protocol.impl.TcpClientChannel$ClientChannelReconnect.call(TcpClientChannel.java:2097)
... 5 more
|EAI-000376|||ERROR| |EAI-000376 JMS Exception occurred, Description: `Error sending message - unknown flow name ((JCSMPTransportException)
Need help to understand if we need to have some configuration to do the reconnect to the DR host for a smooth switch over.
In Solace JMS API versions earlier than 7.1.2.226, any sessions on which the clients have published Guaranteed messages will be destroyed after a DR switch‑over. To indicate the disconnect and loss of publisher flow the JMS API will generate this exception. Upon receiving these exceptions, the client application should create a new session. After a new session is established, the client application can republish any Guaranteed messages that had been sent but not acked on the previous session, as these message might not have been persisted and replicated.
However, this behavior was improved in version 7.1.2.226 and later so that the API handles this transparently. It is no longer required to implement code to catch this exception. Can you please verify that the application is not using an API earlier 7.1.2.226? This can be done by enabling debug-level logs.
As Alexandra pointed out, when using guaranteed messaging, as of version 7.1.2 the Solace JMS API guarantees delivery even in the case of failover. It is normal to receive INFO-level log messages that say "Error Response (400) - Unknown Flow Name", this does not indicate a problem, but exceptions (with stack traces) are a problem and indicate that delivery is not guaranteed.
Background: if the connection between the client and the broker (on the Solace server) is terminated unexpectedly, the broker maintains the flow state — but only for three minutes. The state is also copied to the HA mate broker to support failover (but not to the replication mate). If the client reconnects within three minutes, it can resume where it left off. If it reconnects after three minutes, the server will respond with the following (which will be echoed to the logs):
2019-01-04 10:00:59,999 INFO [com.solacesystems.jcsmp.impl.flow.PubFlowManager] (Context_2_Thread_reconnect_service) Error Response (400) - Unknown Flow Name
2019-01-04 10:00:59,999 INFO [com.solacesystems.jcsmp.impl.PubADManager] (Context_2_Thread_reconnect_service) Unknown Publisher Flow (flowId=36) recovered: 1 messages renumbered and resent (lastMessageIdSent =0)
That's okay: the client JMS library will automatically resend whatever messages are necessary, so guaranteed messaging is still guaranteed.
Also, just to confirm, the jar name indicates the version, so sol-jms-10.1.1.jar uses version 10.1.1.

Google iot core connection status

I am using Google IOT core with mongoose os. I wanted to update device connection status to firestore. But i am unable to find event which reports mqtt connection status to pub/sub like when device disconnects or reconnect i.e if device is offline or not.
I am stuck on this problem for days.Any help will be appreciated
Update
As #devunwired mentioned in this response it is now possible to monitor Stackdriver logs for disconnect events. You must have at a minimum enabled INFO level logging on your project in IoT Core > Registries > [your registry] > Edit Registry > Select "Info" log level > Click save.
Original Response
There are a few values you can look at that are tracked in device configuration metadata that you could use to know when a device last was online:
Last Configuration Send time - sent anytime your device connects /
configuration is posted
Last Event Time - Last time an event was sent from the device
Last State Time - Last time state was sent from the device
Last Heartbeat time - Last time MQTT heartbeat was sent
To get you started, here is an example using API explorer that you can fill-in with your project ID, region, registry, and device to query for a specific device's metadata.
For 1...3 you have control over these through device manager and by publishing data. MQTT heartbeat is updated if your device sends an MQTT_PINGREQ message during the "ping period" without other messages getting sent.
At any rate, you could use any of these update time values to see the last time a device was online / functioning. You could query the states of your devices after listing the devices in a registry and could update a Firebase RTDB periodically if that's how you want to report (e.g. using AppEngine TaskQueue). Note that you also just can get these "last connected" values from the Google Cloud Console.
It was said before but we don't have an event for disconnect, just configuration ack, which generally is the connection event. If you want to share state between a device and the device manager, use state messages.
Unfortunately, there's no built in way to do this right now as there aren't events on this state.
However, you could implement a hack by sending a message on connect/disconnect from the device that you have a Cloud Function subscribed to the Pub/Sub topic listening for. It's not perfect as it would fail in the case where the device disconnected unexpectedly.
There currently is no way to do this, that i've been able to find (a year later after this original post). I posted a question here on SO regarding this as well, with more details and link to example code I had to use for handling this:
Google Core IoT Device Offline Event or Connection Status
The AWS IoT platform publishes messages on a special MQTT topic (prefixed with $aws) when your device connects/disconnects. You can easily use these to monitor these events - however, you should be aware that the MQTT protocol is designed to be robust to a poor networking conditions and the broker on the AWS side probably doesn't think it's a bit deal to disconnect a client. The broker expects that the client will just reconnect and queue messages for a moment during that process (which can be a big deal on a microcontroller).
All that being said, the AWS topics you would watch are:
$aws/events/presence/connected/{clientId}
and
$aws/events/presence/disconnected/{clientId}
and the documentation for these (and other) lifecycle events are located: https://docs.aws.amazon.com/iot/latest/developerguide/life-cycle-events.html

NewRelic - monitoring process

Any idea if we can monitor a particular process in NewRelic whether it's running or not running?
I see that once we get to the detail of the server, we can see each process's status but my exact requirement is to get notification if the process in the server is running or not.
Use Newrelic Infrastructure option
After you add it to your server:
enter Infrastructure menu
Goto settings -> Alerts and add alert:
select process running alert type and the process you want to monitor
choose Trigger an alert when no processes are running
add policy with your email to get notify

Enabling CSA in hostapd

I am using hostapd_cli(http://www.freebsd.org/cgi/man.cgi?query=hostapd_cli&sektion=8) to interact with my hostapd to change the channel. I am using "chan_switch" command to switch channels.
But this command gets failed with "CSA is not supported" as the error message. Any inputs on how I should go about solving this issue would be greatly appreciated.
CSA is Channel Switch Announcement; which goes inside the beacon to let connected station know that AP is changing the channel. For this things to work device/hw/firmware should able to configure CSA-IE.
In your case, either the device doesn't support CSA or it supports it but have not notified the same in its capabilities.
If you just want to change the channel, which will make stations connected to disconnect first and then reconnect, then you can just change the 'channel' field in hostapd.conf and just reload by 'kill -1'.
As per your question, I have tried chan_switch using hostapd_cli without killing hostapd. All you need to do is update your backports version, in my case, I am using backports-4.2.6-1. Just build it and then you can try chan_switch if channel switch is possible it should give OK message else FAIL. I have tried it with more than 10 interfaces at the same time and I was able to change the channel. Attached a screen shot for reference.
Hope this helps..!!]1

Deleting messages from Exchange IMAP mailbox on iPhone

I have a secondary Exchange mailbox configured on my iPhone using IMAP. This all appears to work fine except when a message is deleted on the phone, it still shows normally in Outlook. It does not seem to matter what I set the "remove deleted messages" setting to on the phone.
I understand this is due to a combination of the phone not expunging the deleted messages and Exchange showing deleted but not expunged messages in Outlook.
I'm looking for an automated solution to this that does not have a large delay between deleting the message on the phone and it disappearing in Outlook. The message should also show in the Deleted Items when deleted from the phone.
I've thought about creating a background process which connects to the mailbox via IMAP and sits in IDLE mode until there's a deleted message in the folder. It will then expunge the folder and return to IDLE mode. This wouldn't work with more than one folder (without multiple instances) but it would probably do the job.
Any recommendations on an easily scriptable tool or library that supports IMAP IDLE?
I can wholeheartedly recommend writing such a process with a simple Perl client using the Mail::MAPClient module.
#!/usr/bin/perl -w
use strict;
use Mail::IMAPClient;
# returns an unconnected Mail::IMAPClient object:
my $imap = Mail::IMAPClient->new(
Server => $host,
User => $id,
Password=> $pass,
) or die "Cannot connect to $host as $id: $#";
$imap->expunge();
This can then be run from the crontab or some other scheduler.

Resources