Modified copy and delete record to sql routines to lock the queue record before attempting to prevent long running copy or delete calls form being processed more than once and wasting resources.
This commit is contained in:
@ -1,6 +1,4 @@
|
||||
Compile subroutine Copy_Backlog_Records_To_SQL(VOID)
|
||||
#pragma precomp SRP_PreCompiler
|
||||
|
||||
/*****************************************************************************\
|
||||
This is a utility function. For each record found in SQL_BACKLOG, it makes
|
||||
sure the identified record is copied to SQL. Then the backlog record is
|
||||
@ -10,95 +8,97 @@ Compile subroutine Copy_Backlog_Records_To_SQL(VOID)
|
||||
-------
|
||||
08/10/2010 KRF Original Programmer
|
||||
\*****************************************************************************/
|
||||
|
||||
#pragma precomp SRP_PreCompiler
|
||||
$Insert APP_INSERTS
|
||||
|
||||
Declare subroutine Copy_Record_To_SQL, Delete_Record_From_SQL, SRP_TcpClient, Copy_Pending_Records_To_Sql
|
||||
Declare function GetTickCount, Database_Services, SRP_TcpClient, Datetime, Environment_Services
|
||||
|
||||
hSysLists = Database_Services('GetTableHandle', 'SYSLISTS')
|
||||
Lock hSysLists, 'Copy_Backlog_Records_To_SQL' then
|
||||
Main:
|
||||
|
||||
hSysLists = Database_Services('GetTableHandle', 'SYSLISTS')
|
||||
Lock hSysLists, 'Copy_Backlog_Records_To_SQL' then
|
||||
|
||||
Copy_Pending_Records_To_Sql()
|
||||
Copy_Pending_Records_To_Sql()
|
||||
|
||||
CurrDtm = Datetime()
|
||||
TablesToSkip = Database_Services('ReadDataRow', 'APP_INFO', 'SQL_TABLES_TO_SKIP')
|
||||
NonCriticalTables = Database_Services('ReadDataRow', 'APP_INFO', 'NONCRITICAL_SQL_TABLES')
|
||||
|
||||
Open "SQL_PENDING" to pTable then
|
||||
|
||||
Open "SQL_BACKLOG" to hTable then
|
||||
ClearSelect
|
||||
Select hTable
|
||||
Done = 0
|
||||
Loop
|
||||
ReadNext Key else Done = 1
|
||||
Command = ''
|
||||
Skip = False$
|
||||
Until Done
|
||||
Table = Key[1, "*"]
|
||||
Locate Table in TablesToSkip by "AL" using "," setting ListPos then
|
||||
Delete hTable, Key else null
|
||||
end else
|
||||
Locate Table in NonCriticalTables using @FM setting Dummy then
|
||||
ID = Key[Col2() + 1, Len(Key)]
|
||||
|
||||
Read Dummy From pTable, Key then
|
||||
Skip = True$
|
||||
end
|
||||
|
||||
If Skip EQ False$ then
|
||||
Begin Case
|
||||
Case ID[-7, 7] EQ "*DELETE"
|
||||
ID[-7, 7] = ""
|
||||
Command := 'RUN DELETE_RECORD_FROM_SQL ':Quote(Table):', ':Quote(ID):', 1, ':Quote(Key)
|
||||
Write CurrDtm to pTable, Key then Delete hTable, Key
|
||||
Case ID[-6, 6] EQ "*WRITE"
|
||||
ID[-6, 6] = ""
|
||||
Command := 'RUN COPY_RECORD_TO_SQL ':Quote(Table):', ':Quote(ID):', 1, ':Quote(Key)
|
||||
Write CurrDtm to pTable, Key then Delete hTable, Key
|
||||
End Case
|
||||
end else
|
||||
// This record is already being processed and we don't need to process it multiple times.
|
||||
Delete hTable, Key else null
|
||||
end
|
||||
end else
|
||||
TempKey = Key
|
||||
TempKey[1, Len(Table) + 1] = ''
|
||||
TransTime = TempKey[-1, 'B*']
|
||||
TempKey[-1, Neg(Len(TransTime) + 1)] = ''
|
||||
TransDate = TempKey[-1, 'B*']
|
||||
TempKey[-1, Neg(Len(TransDate) + 1)] = ''
|
||||
Process = TempKey[-1, 'B*']
|
||||
TempKey[-1, Neg(Len(Process) + 1)] = ''
|
||||
ID = TempKey
|
||||
If Process EQ 'DELETE' then
|
||||
pKey = Key
|
||||
Command := 'RUN DELETE_RECORD_FROM_SQL ':Quote(Table):', ':Quote(ID):', 1, ':Quote(pKey)
|
||||
Write CurrDtm to pTable, pKey then Delete hTable, Key
|
||||
end else
|
||||
pKey = Key
|
||||
Command := 'RUN COPY_RECORD_TO_SQL ':Quote(Table):', ':Quote(ID):', 1, ':Quote(pKey)
|
||||
Write CurrDtm to pTable, pKey then Delete hTable, Key
|
||||
end
|
||||
end
|
||||
CurrDtm = Datetime()
|
||||
TablesToSkip = Database_Services('ReadDataRow', 'APP_INFO', 'SQL_TABLES_TO_SKIP')
|
||||
NonCriticalTables = Database_Services('ReadDataRow', 'APP_INFO', 'NONCRITICAL_SQL_TABLES')
|
||||
|
||||
Open "SQL_PENDING" to pTable then
|
||||
|
||||
Open "SQL_BACKLOG" to hTable then
|
||||
ClearSelect
|
||||
Select hTable
|
||||
Done = 0
|
||||
Loop
|
||||
ReadNext Key else Done = 1
|
||||
Command = ''
|
||||
Skip = False$
|
||||
Until Done
|
||||
Table = Key[1, "*"]
|
||||
Locate Table in TablesToSkip by "AL" using "," setting ListPos then
|
||||
Delete hTable, Key else null
|
||||
end else
|
||||
Locate Table in NonCriticalTables using @FM setting Dummy then
|
||||
ID = Key[Col2() + 1, Len(Key)]
|
||||
|
||||
Read Dummy From pTable, Key then
|
||||
Skip = True$
|
||||
end
|
||||
|
||||
If Skip EQ False$ then
|
||||
Begin Case
|
||||
Case ID[-7, 7] EQ "*DELETE"
|
||||
ID[-7, 7] = ""
|
||||
Command := 'RUN DELETE_RECORD_FROM_SQL ':Quote(Table):', ':Quote(ID):', 1, ':Quote(Key)
|
||||
Write CurrDtm to pTable, Key then Delete hTable, Key
|
||||
Case ID[-6, 6] EQ "*WRITE"
|
||||
ID[-6, 6] = ""
|
||||
Command := 'RUN COPY_RECORD_TO_SQL ':Quote(Table):', ':Quote(ID):', 1, ':Quote(Key)
|
||||
Write CurrDtm to pTable, Key then Delete hTable, Key
|
||||
End Case
|
||||
end else
|
||||
// This record is already being processed and we don't need to process it multiple times.
|
||||
Delete hTable, Key else null
|
||||
end
|
||||
end else
|
||||
TempKey = Key
|
||||
TempKey[1, Len(Table) + 1] = ''
|
||||
TransTime = TempKey[-1, 'B*']
|
||||
TempKey[-1, Neg(Len(TransTime) + 1)] = ''
|
||||
TransDate = TempKey[-1, 'B*']
|
||||
TempKey[-1, Neg(Len(TransDate) + 1)] = ''
|
||||
Process = TempKey[-1, 'B*']
|
||||
TempKey[-1, Neg(Len(Process) + 1)] = ''
|
||||
ID = TempKey
|
||||
If Process EQ 'DELETE' then
|
||||
pKey = Key
|
||||
Command := 'RUN DELETE_RECORD_FROM_SQL ':Quote(Table):', ':Quote(ID):', 1, ':Quote(pKey)
|
||||
Write CurrDtm to pTable, pKey then Delete hTable, Key
|
||||
end else
|
||||
pKey = Key
|
||||
Command := 'RUN COPY_RECORD_TO_SQL ':Quote(Table):', ':Quote(ID):', 1, ':Quote(pKey)
|
||||
Write CurrDtm to pTable, pKey then Delete hTable, Key
|
||||
end
|
||||
end
|
||||
|
||||
If Skip EQ False$ then
|
||||
TcpClientHandle = 0
|
||||
ServerIP = Environment_Services('GetApplicationRootIP')
|
||||
Convert '\' to '' in ServerIP
|
||||
If SRP_TcpClient(TcpClientHandle, 'CONNECT', ServerIP, '20779') then
|
||||
SRP_TcpClient(TcpClientHandle, 'SEND_SES', Command)
|
||||
SRP_TcpClient(TcpClientHandle, 'CLOSE_SES')
|
||||
end
|
||||
end
|
||||
end
|
||||
Repeat
|
||||
end
|
||||
end
|
||||
Unlock hSysLists, 'Copy_Backlog_Records_To_SQL' else Null
|
||||
end
|
||||
If Skip EQ False$ then
|
||||
TcpClientHandle = 0
|
||||
ServerIP = Environment_Services('GetApplicationRootIP')
|
||||
ServerPort = Environment_Services('GetScrapeServerPort')
|
||||
Convert '\' to '' in ServerIP
|
||||
If SRP_TcpClient(TcpClientHandle, 'CONNECT', ServerIP, ServerPort) then
|
||||
SRP_TcpClient(TcpClientHandle, 'SEND_SES', Command)
|
||||
SRP_TcpClient(TcpClientHandle, 'CLOSE_SES')
|
||||
end
|
||||
end
|
||||
end
|
||||
Repeat
|
||||
end
|
||||
end
|
||||
Unlock hSysLists, 'Copy_Backlog_Records_To_SQL' else Null
|
||||
end
|
||||
|
||||
Return
|
||||
|
||||
|
||||
|
Reference in New Issue
Block a user