Search code examples
fiwarefiware-orion

FIWARE's subscription do not notify


I have multiple subscriptions to different entities, and at some random time one of the subscriptions stops being notified.

This is because the lastNotification attribute is set in the future. Here is an example :

 curl 'http://localhost:1026/v2/subscriptions/xxxxxxxxxxxxxxx'

{
    "id": "xxxxxxxxxxxxxxx",
    ...
    "status": "active",
    ...
    "notification": {
        "timesSent": 1316413,
        "lastNotification": "2021-01-20T18:33:39.000Z",
        ...
        "lastFailure": "2021-01-18T12:11:26.000Z",
        "lastFailureReason": "Timeout was reached",
        "lastSuccess": "2021-01-20T17:12:09.000Z",
        "lastSuccessCode": 204
    }
}

In this example, lastNotification is ahead of time. It is not until 2021-01-20T18: 33: 39.000Z for the subscription to be notified again.

I tried to modify lastNotification in the mongo database but that does not change it. Looks like the value 2021-01-20T18: 33: 39.000Z is cached.


Solution

  • The field lastFailureReason specifies the reason of the last notification failure associated to that subscription. The diagnose notification reception problems section in the documentation explains possible causes for "Timeout was reached". It makes sense to have this fail randomly if your network connection is somehow unstable.

    With regards to timestamping in the future (no matter if it happens for lastNotification, lastFailure or lastSuccess) is pretty weird and probably not associated to Orion Context Broker operation. Orion takes timestamp from internal clock of the system where it is running, so maybe your system clock is set in the future.

    Except if you run Orion Context Broker with -noCache (which in general is not recommended), subscriptions are cached. Thus, if you "hack" them in the DB you will not see the effect until next cache refresh (refreshes takes place at regular intervals, defined by -subCacheIval parameter).