Class | OpenWFE::DefaultWfidGenerator |
In: |
lib/openwfe/expool/wfidgen.rb
|
Parent: | Service |
This default wfid generator outputs a long integer as a String. The last given id (in order to prevent clocks being put back) is stored in the work directory in the file "wfidgen.last"
# File lib/openwfe/expool/wfidgen.rb, line 57 57: def initialize (service_name, application_context) 58: 59: super 60: 61: @last = -1 62: @mutex = Mutex.new 63: 64: @last_fn = get_work_directory + '/wfidgen.last' 65: 66: load_last() 67: 68: ensure_last_f 69: end
This method is called by OpenWFE::split_wfid() when it has detected a wfid following this ‘defaut’ scheme.
# File lib/openwfe/expool/wfidgen.rb, line 111 111: def self.split_wfid (wfid) 112: 113: r = [] 114: 0.upto(wfid.length-1) do |i| 115: r << wfid[i, 1] 116: end 117: 118: r 119: end
Returns a new workflow instance id
The launchitem parameter is not used by this generator.
# File lib/openwfe/expool/wfidgen.rb, line 76 76: def generate (launchitem=nil) 77: 78: wfid = nil 79: 80: @mutex.synchronize do 81: wfid = now 82: wfid = @last + 1 if wfid <= @last 83: @last = wfid 84: save_last 85: end 86: 87: to_string(wfid) 88: end
Is a simple call to OpenWFE::split_wfid()
# File lib/openwfe/expool/wfidgen.rb, line 102 102: def split_wfid (wfid) 103: 104: OpenWFE.split_wfid(wfid) 105: end
Stops this service. In this particular implementation, makes sure the "wfidgen.last" file is closed.
# File lib/openwfe/expool/wfidgen.rb, line 126 126: def stop 127: 128: #linfo { "stop() stopping '#{@service_name}'" } 129: @last_f.close if @last_f 130: end
The actual job of turning the numeric result into a String. This method is overriden in extension of this class.
# File lib/openwfe/expool/wfidgen.rb, line 94 94: def to_string (numeric_id) 95: 96: numeric_id.to_s 97: end
# File lib/openwfe/expool/wfidgen.rb, line 134 134: def ensure_last_f 135: if (not @last_f) or @last_f.closed? 136: begin 137: @last_f = File.open(@last_fn, "w+") 138: rescue Exception => e 139: lwarn do 140: "new() failed to open #{@last_fn}, "+ 141: "continuing anyway...\n"+ 142: OpenWFE::exception_to_s(e) 143: end 144: end 145: end 146: end
# File lib/openwfe/expool/wfidgen.rb, line 160 160: def load_last 161: @mutex.synchronize do 162: 163: if File.exist?(@last_fn) 164: begin 165: s = File.open(@last_fn, "r") do |f| 166: f.readline 167: end 168: @last = Integer(s) 169: #puts @last 170: rescue Exception => e 171: #puts 172: #puts e.to_s 173: end 174: end 175: 176: n = now 177: 178: @last = n if (not @last) or (@last < n) 179: end 180: end
# File lib/openwfe/expool/wfidgen.rb, line 148 148: def now 149: wfid = Time.now.to_f * 1000 * 10 150: wfid.to_i 151: end