Reputation: 13
I am trying to migrate from WSO2 CEP 3.1.0 to WSO2 CEP 4.0.0.
I have converted an existing execution plan to the new SiddhiQL syntax:
@Plan:name('occurredFailure')
@Import('responseTimeStream:1.0.0')
define stream responseTimeStream (service string, responseTime int);
@Import('queryTimeStream:1.0.0')
define stream queryTimeStream (service string, queryTime int);
@Export('occurredFailureStream:1.0.0')
define stream occurredFailureStream (service string, cause string);
define table slowestQueryTimeTable (service string, slowestQueryTime int);
from responseTimeStream[responseTime == 0]
select service, 'noResponse' as cause
insert into occurredFailureStream;
from queryTimeStream[queryTime >= 5000]
select service, 'queryTimeout' as cause
insert into occurredFailureStream;
from queryTimeStream[not((service == slowestQueryTimeTable.service) in slowestQueryTimeTable)]
select service, queryTime as slowestQueryTime
insert into slowestQueryTimeTable;
from queryTimeStream[(service == slowestQueryTimeTable.service and queryTime <= slowestQueryTimeTable.slowestQueryTime) in slowestQueryTimeTable]
select service, queryTime as slowestQueryTime
update slowestQueryTimeTable
on queryTimeStream.service == slowestQueryTimeTable.service;
from responseTimeStream[(service == slowestQueryTimeTable.service and responseTime >= slowestQueryTimeTable.slowestQueryTime) in slowestQueryTimeTable]
select service, 'responseTimeAboveQueryTime' as cause
insert into occurredFailureStream;
Unfortunately, when I try to validate the query expressions, WSO2 CEP 4.0.0 throws the following exception:
Cannot create update for table 'slowestQueryTimeTable', Stream with reference : queryTimeStream not found in execution plan "occurredFailure"
The error message is not really useful, since if I delete the table 'slowestQueryTimeTable' and any expressions related to it, the remaining query expressions are successfully validated, which means that the stream 'queryTimeStream' is indeed found.
Could you help me debugging this exception?
Upvotes: 0
Views: 160
Reputation: 912
Here the issue is at the query
from queryTimeStream[(service == slowestQueryTimeTable.service and queryTime <= slowestQueryTimeTable.slowestQueryTime) in slowestQueryTimeTable]
select service, queryTime as slowestQueryTime
update slowestQueryTimeTable
on queryTimeStream.service == slowestQueryTimeTable.service;
You should not use queryTimeStream
in the update condition as the output data is not from queryTimeStream
. Update the query as below
from queryTimeStream[(service == slowestQueryTimeTable.service and queryTime <= slowestQueryTimeTable.slowestQueryTime) in slowestQueryTimeTable]
select service, queryTime as slowestQueryTime
update slowestQueryTimeTable
on service == slowestQueryTimeTable.service;
Upvotes: 1