Fixes #895, Closes #3252 - OTRS import control on thread, offset and limit.

This commit is contained in:
Thorsten Eckel 2020-10-22 15:38:34 +02:00
parent 66c0c4f513
commit 0c15baee7f

View file

@ -29,7 +29,15 @@ module Import
extend Import::OTRS::Diff extend Import::OTRS::Diff
extend self extend self
def start # Start import with specific parameters.
# Useful for debug and continuing from breakpoint of last not success import
#
# @example
# Import::OTRS::start() - Nomrmal usage
#
# Import::OTRS::start(thread: 1, offset: 1000) - Run the task in Single-Thread and start from offset 1000
def start(args = {})
log 'Start import...' log 'Start import...'
checks checks
@ -42,7 +50,7 @@ module Import
customer_user customer_user
threaded_import('Ticket') threaded_import('Ticket', args)
true true
end end
@ -72,8 +80,9 @@ module Import
end end
def threaded_import(remote_object, args = {}) def threaded_import(remote_object, args = {})
thread_count = args[:threads] || 8 thread_count = args[:threads] || 8
limit = args[:limit] || 20 limit = args[:limit] || 20
start_offset_base = args[:offset] || 0
Thread.abort_on_exception = true Thread.abort_on_exception = true
threads = {} threads = {}
@ -94,7 +103,7 @@ module Import
# get the offset for the current thread and loop count # get the offset for the current thread and loop count
thread_offset_base = (Thread.current[:thread_no] - 1) * limit thread_offset_base = (Thread.current[:thread_no] - 1) * limit
thread_step = thread_count * limit thread_step = thread_count * limit
offset = Thread.current[:loop_count] * thread_step + thread_offset_base offset = Thread.current[:loop_count] * thread_step + thread_offset_base + start_offset_base
break if !imported?( break if !imported?(
remote_object: remote_object, remote_object: remote_object,