minor bug fix in RDS_ACTIONS and minor change to procedure queue system

This commit is contained in:
Infineon\StieberD 2025-03-31 17:31:32 -07:00
parent 59c07b1a8b
commit 2ff9dfb0b5
2 changed files with 23 additions and 15 deletions

View File

@ -955,11 +955,11 @@ WRITE_RECORD:
WMIKeys = {WM_IN_KEY} WMIKeys = {WM_IN_KEY}
For each WMIKey in WMIKeys using @VM setting vPos For each WMIKey in WMIKeys using @VM setting vPos
CassNo = Field(WMIKey, '*', 3) CassNo = Field(WMIKey, '*', 3)
Service_Services('PostProcedure', 'SCHEDULE_SERVICES':@VM:'MarkCassProcessed':@VM:WONo:@VM:CassNo:@VM:DatetimeOut) Service_Services('PostProcedure', 'SCHEDULE_SERVICES', 'MarkCassProcessed':@VM:WONo:@VM:CassNo:@VM:DatetimeOut)
Next WMIKey Next WMIKey
end else end else
CassNo = Record<RDS_CASS_NO$> CassNo = Record<RDS_CASS_NO$>
Service_Services('PostProcedure', 'SCHEDULE_SERVICES':@VM:'MarkCassProcessed':@VM:WONo:@VM:CassNo:@VM:DatetimeOut) Service_Services('PostProcedure', 'SCHEDULE_SERVICES', 'MarkCassProcessed':@VM:WONo:@VM:CassNo:@VM:DatetimeOut)
end end
end end
@ -1043,3 +1043,4 @@ Restore_System_Variables:
return return

View File

@ -155,13 +155,17 @@ end service
Service ProcessProcedureQueue() Service ProcessProcedureQueue()
// Loop through the procedure queue until we can find a process request that is not yet locked
// (i.e., already being crunched on by another engine). Process that one request and then end.
Open 'PROC_QUEUE' to hProcQueue then Open 'PROC_QUEUE' to hProcQueue then
Select hProcQueue Select hProcQueue
EOF = False$ EOF = False$
Done = False$
Loop Loop
ReadNext RequestKeyID else EOF = True$ ReadNext RequestKeyID else EOF = True$
Until EOF Until EOF or Done
Lock hProcQueue, RequestKeyID then Lock hProcQueue, RequestKeyID then
Done = True$
Database_Services('GetKeyIDLock', 'PROC_QUEUE', RequestKeyId) Database_Services('GetKeyIDLock', 'PROC_QUEUE', RequestKeyId)
RequestRow = Database_Services('ReadDataRow', 'PROC_QUEUE', RequestKeyID) RequestRow = Database_Services('ReadDataRow', 'PROC_QUEUE', RequestKeyID)
If RequestRow NE '' then If RequestRow NE '' then
@ -184,22 +188,25 @@ Service ProcessProcedureQueue()
Case NumArguments EQ 7 ; Call @Procedure(ProcParams(1), ProcParams(2), ProcParams(3), ProcParams(4), ProcParams(5), ProcParams(6), ProcParams(7)) Case NumArguments EQ 7 ; Call @Procedure(ProcParams(1), ProcParams(2), ProcParams(3), ProcParams(4), ProcParams(5), ProcParams(6), ProcParams(7))
Case NumArguments EQ 8 ; Call @Procedure(ProcParams(1), ProcParams(2), ProcParams(3), ProcParams(4), ProcParams(5), ProcParams(6), ProcParams(7), ProcParams(8)) Case NumArguments EQ 8 ; Call @Procedure(ProcParams(1), ProcParams(2), ProcParams(3), ProcParams(4), ProcParams(5), ProcParams(6), ProcParams(7), ProcParams(8))
Case NumArguments EQ 9 ; Call @Procedure(ProcParams(1), ProcParams(2), ProcParams(3), ProcParams(4), ProcParams(5), ProcParams(6), ProcParams(7), ProcParams(8), ProcParams(9)) Case NumArguments EQ 9 ; Call @Procedure(ProcParams(1), ProcParams(2), ProcParams(3), ProcParams(4), ProcParams(5), ProcParams(6), ProcParams(7), ProcParams(8), ProcParams(9))
Case NumArguments EQ 10 ; Call @Procedure(ProcParams(1), ProcParams(2), ProcParams(3), ProcParams(4), ProcParams(5), ProcParams(6), ProcParams(7), ProcParams(8), ProcParams(9), ProcParams(10)) Case NumArguments EQ 10 ; Call @Procedure(ProcParams(1), ProcParams(2), ProcParams(3), ProcParams(4), ProcParams(5), ProcParams(6), ProcParams(7), ProcParams(8), ProcParams(9), ProcParams(10))
Case Otherwise$ ; Call @Procedure(ProcParams(1), ProcParams(2), ProcParams(3), ProcParams(4), ProcParams(5), ProcParams(6), ProcParams(7), ProcParams(8), ProcParams(9), ProcParams(10), ProcParams(11)) Case NumArguments EQ 11 ; Call @Procedure(ProcParams(1), ProcParams(2), ProcParams(3), ProcParams(4), ProcParams(5), ProcParams(6), ProcParams(7), ProcParams(8), ProcParams(9), ProcParams(10), ProcParams(11))
Case Otherwise$
Error_Services('Add', 'Error in ':Service:' service. More than 11 arguments are not currently supported.')
End Case End Case
end end
end If Error_Services('NoError') then
If Error_Services('NoError') then Database_Services('DeleteDataRow', 'PROC_QUEUE', RequestKeyId, True$, False$) ; // This call will release the lock
Database_Services('DeleteDataRow', 'PROC_QUEUE', RequestKeyId, True$, False$) end else
RequestRow<PROC_QUEUE.LAST_ATTEMPT_DTM$> = DateTime()
RequestRow<PROC_QUEUE.ERROR$> = Error_Services('GetMessage')
Database_Services('WriteDataRow', 'PROC_QUEUE', RequestKeyID, RequestRow, True$, False$, False$) ; // This call will release the lock
end
end else end else
RequestRow<PROC_QUEUE.LAST_ATTEMPT_DTM$> = DateTime() // Empty request, so delete it from the queue
RequestRow<PROC_QUEUE.ERROR$> = Error_Services('GetMessage') Database_Services('DeleteDataRow', 'PROC_QUEUE', RequestKeyId, True$, False$) ; // This call will release the lock
Database_Services('WriteDataRow', 'PROC_QUEUE', RequestKeyID, RequestRow, True$, False$, True$)
end end
Unlock hProcQueue, RequestKeyID else Null
end end
Repeat Repeat
end end
end service end service