Project

General

Profile

1
<workflow-app xmlns="uri:oozie:workflow:0.4" name="mainworkflows_metadataextraction_cached">
2
	
3
	<parameters>
4
		<property>
5
			<name>input</name>
6
			<description>input document content directory</description>
7
		</property>
8
		<property>
9
			<name>output_root</name>
10
			<description>metadata extraction output directory</description>
11
		</property>
12
		<property>
13
			<name>excluded_ids</name>
14
			<value>$UNDEFINED$</value>
15
			<description>list of content identifiers excluded from metadataextraction processing</description>
16
		</property>
17
		<property>
18
			<name>content_connection_timeout</name>
19
			<value>60000</value>
20
			<description>streaming content connection timeout</description>
21
		</property>
22
		<property>
23
			<name>content_read_timeout</name>
24
			<value>60000</value>
25
			<description>streaming content read timeout</description>
26
		</property>
27
		<property>
28
			<name>zk_session_timeout</name>
29
			<value>60000</value>
30
			<description>zookeeper session timeout when handling locks</description>
31
		</property>
32
		<property>
33
			<name>default_cache_location</name>
34
			<value>/cache/metadataextraction</value>
35
			<description>default cache location stored in HDFS</description>
36
		</property>
37
		<property>
38
			<name>mapred_max_split_size</name>
39
			<value>50000</value>
40
			<description>maximum input data split size, required by streaming version reading DocumentContentUrl to split input data into more chunks</description>
41
		</property>
42
		<property>
43
			<name>output_name_meta</name>
44
			<value>meta</value>
45
			<description>metadata output subdirectory name</description>
46
		</property>
47
		<property>
48
			<name>output_name_plaintext</name>
49
			<value>plaintext</value>
50
			<description>plaintext output subdirectory name</description>
51
		</property>
52
	</parameters>
53

    
54
	<global>
55
        <job-tracker>${jobTracker}</job-tracker>
56
        <name-node>${nameNode}</name-node>
57
        <configuration>
58
            <property>
59
                <name>mapred.job.queue.name</name>
60
                <value>${queueName}</value>
61
            </property>
62
		</configuration>
63
	</global>
64

    
65
	<start to="check_input_isempty" />
66
	
67
	<action name='check_input_isempty'>
68
		<java>
69
			<main-class>eu.dnetlib.iis.core.java.ProcessWrapper</main-class>
70
			<arg>eu.dnetlib.iis.common.utils.EmptyDatastoreVerifierProcess</arg>
71
			<arg>-SworkingDir=${workingDir}</arg>
72
			<arg>-Iinput=${input}</arg>
73
			<capture-output />
74
		</java>
75
		<ok to="decision_is_intput_empty" />
76
		<error to="fail" />
77
	</action>
78

    
79
	<decision name="decision_is_intput_empty">
80
        <switch>
81
        	<!-- skipping metadataextraction merging process -->
82
            <case to="get-existing-cache-id">${wf:actionData('check_input_isempty')['isEmpty'] eq "false"}</case>
83
            <default to="generate-empty-output"/>
84
        </switch>
85
    </decision>
86

    
87
	<action name="generate-empty-output">
88
        <java>
89
			<prepare>
90
				<!-- notice: directory have to aligned with skipped action output -->
91
				<delete path="${nameNode}${output_root}" />
92
				<mkdir path="${nameNode}${output_root}" />
93
			</prepare>
94
            <main-class>eu.dnetlib.iis.core.java.ProcessWrapper</main-class>
95
			<arg>eu.dnetlib.iis.core.java.jsonworkflownodes.Producer</arg>
96
            <arg>-C{meta,
97
				eu.dnetlib.iis.metadataextraction.schemas.ExtractedDocumentMetadata,
98
				eu/dnetlib/iis/mainworkflows/data/empty.json}</arg>
99
			<arg>-C{plaintext,
100
				eu.dnetlib.iis.metadataextraction.schemas.DocumentText,
101
			eu/dnetlib/iis/mainworkflows/data/empty.json}</arg>
102
            <arg>-SworkingDir=${workingDir}</arg>
103
            <arg>-Ometa=${output_root}/${output_name_meta}</arg>
104
            <arg>-Oplaintext=${output_root}/${output_name_plaintext}</arg>
105
        </java>
106
        <ok to="end"/>
107
        <error to="fail"/>
108
    </action>
109

    
110
	<action name='get-existing-cache-id'>
111
		<java>
112
			<main-class>eu.dnetlib.iis.core.java.ProcessWrapper</main-class>
113
			<arg>eu.dnetlib.iis.common.cache.CacheMetadataManagingProcess</arg>
114
			<arg>-SworkingDir=${workingDir}</arg>
115
			<arg>-Pdefault_cache_location=${default_cache_location}</arg>
116
			<arg>-Pmode=read_current_id</arg>
117
			<capture-output />
118
		</java>
119
		<ok to="decision-is-cache-empty" />
120
		<error to="fail" />
121
	</action>
122

    
123
	<decision name="decision-is-cache-empty">
124
        <switch>
125
            <case to="metadata_extractor_on_full_input">${wf:actionData('get-existing-cache-id')['cache_id'] eq "$UNDEFINED$"}</case>
126
            <default to="transformer_metadataextraction_skip_extracted"/>
127
        </switch>
128
    </decision>
129
	
130
	<!-- end of cache based processing block, cache was provided as an input -->
131
	<action name="transformer_metadataextraction_skip_extracted">
132
		<sub-workflow>
133
            <app-path>${wf:appPath()}/transformers_metadataextraction_skip_extracted</app-path>
134
            <propagate-configuration/>
135
            <configuration>
136
            	<property>
137
                    <name>workingDir</name>
138
                    <value>${workingDir}/transformers_metadataextraction_skip_extracted/working_dir</value>
139
                </property>
140
                <property>
141
					<name>input_document_content</name>
142
					<value>${input}</value>
143
				</property>
144
				<property>
145
					<name>input_document_text</name>
146
					<value>${default_cache_location}/${wf:actionData('get-existing-cache-id')['cache_id']}/plaintext</value>
147
				</property>
148
				<property>
149
					<name>input_document_meta</name>
150
					<value>${default_cache_location}/${wf:actionData('get-existing-cache-id')['cache_id']}/meta</value>
151
				</property>
152
				<property>
153
					<name>output_document_content</name>
154
					<value>${workingDir}/transformers_metadataextraction_skip_extracted/tobeprocessed_content</value>
155
				</property>
156
				<property>
157
					<name>output_document_text</name>
158
					<value>${workingDir}/transformers_metadataextraction_skip_extracted/tobereturned_text</value>
159
				</property>
160
				<property>
161
					<name>output_document_meta</name>
162
					<value>${workingDir}/transformers_metadataextraction_skip_extracted/tobereturned_meta</value>
163
				</property>
164
                
165
            </configuration>
166
        </sub-workflow>
167
		<ok to="metadata_extractor_on_filtered_input"/>
168
		<error to="fail" />
169
	</action>
170
	
171
	<action name="metadata_extractor_on_filtered_input">
172
		<sub-workflow>
173
            <app-path>${wf:appPath()}/metadata_extractor</app-path>
174
            <propagate-configuration/>
175
            <configuration>
176
            	<property>
177
					<name>processing_mode</name>
178
					<value>StreamingMetadataExtractorMapper</value>
179
				</property>
180
				<property>
181
					<name>inputport_classname</name>
182
					<value>eu.dnetlib.iis.importer.auxiliary.schemas.DocumentContentUrl</value>
183
				</property>
184
            	<property>
185
                    <name>workingDir</name>
186
                    <value>${workingDir}/metadata_extractor/working_dir</value>
187
                </property>
188
            	<property>
189
					<name>input</name>
190
					<value>${workingDir}/transformers_metadataextraction_skip_extracted/tobeprocessed_content</value>
191
				</property>
192
				<property>
193
					<name>excluded_ids</name>
194
					<value>${excluded_ids}</value>
195
				</property>
196
				<property>
197
				    <name>content_connection_timeout</name>
198
				   <value>${content_connection_timeout}</value>
199
				</property>
200
				<property>
201
				    <name>content_read_timeout</name>
202
				   <value>${content_read_timeout}</value>
203
				</property>
204
				<property>
205
					<name>mapred_max_split_size</name>
206
					<value>${mapred_max_split_size}</value>
207
				</property>
208
				<property>
209
					<name>output_name_meta</name>
210
					<value>${output_name_meta}</value>
211
				</property>
212
				<property>
213
					<name>output_name_plaintext</name>
214
					<value>${output_name_plaintext}</value>
215
				</property>
216
				<property>
217
					<name>output_root</name>
218
					<value>${workingDir}/metadata_extractor/output_root</value>
219
				</property>
220
            </configuration>
221
        </sub-workflow>
222
		<ok to="merge_outputs"/>
223
		<error to="fail" />
224
	</action>
225

    
226
    <fork name="merge_outputs">
227
    	<path start="transformers_common_union_plaintext_merge_outputs"/>
228
        <path start="transformers_common_union_meta_merge_outputs"/>
229
    </fork>
230
    
231
    <action name="transformers_common_union_plaintext_merge_outputs">
232
		<sub-workflow>
233
            <app-path>${wf:appPath()}/transformers_common_union</app-path>
234
            <propagate-configuration/>
235
            <configuration>
236
            	<property>
237
					<name>input_a</name>
238
					<value>${workingDir}/transformers_metadataextraction_skip_extracted/tobereturned_text</value>
239
				</property>
240
				<property>
241
					<name>input_b</name>
242
					<value>${workingDir}/metadata_extractor/output_root/plaintext</value>
243
				</property>
244
				<property>
245
					<name>output</name>
246
					<value>${output_root}/plaintext</value>
247
				</property>
248
				<property>
249
					<name>schema</name>
250
					<value>eu.dnetlib.iis.metadataextraction.schemas.DocumentText</value>
251
				</property>
252
            </configuration>
253
        </sub-workflow>
254
		<ok to="merge_joining"/>
255
		<error to="fail" />
256
	</action>
257
    
258
    <action name="transformers_common_union_meta_merge_outputs">
259
		<sub-workflow>
260
            <app-path>${wf:appPath()}/transformers_common_union</app-path>
261
            <propagate-configuration/>
262
            <configuration>
263
            	<property>
264
					<name>input_a</name>
265
					<value>${workingDir}/transformers_metadataextraction_skip_extracted/tobereturned_meta</value>
266
				</property>
267
				<property>
268
					<name>input_b</name>
269
					<value>${workingDir}/metadata_extractor/output_root/meta</value>
270
				</property>
271
				<property>
272
					<name>output</name>
273
					<value>${output_root}/meta</value>
274
				</property>
275
				<property>
276
					<name>schema</name>
277
					<value>eu.dnetlib.iis.metadataextraction.schemas.ExtractedDocumentMetadata</value>
278
				</property>
279
            </configuration>
280
        </sub-workflow>
281
		<ok to="merge_joining"/>
282
		<error to="fail" />
283
	</action>
284
    
285
    <join name="merge_joining" to="check_metadataextraction_output_meta_isempty"/>
286
    
287
    <action name='check_metadataextraction_output_meta_isempty'>
288
		<java>
289
			<main-class>eu.dnetlib.iis.core.java.ProcessWrapper</main-class>
290
			<arg>eu.dnetlib.iis.common.utils.EmptyDatastoreVerifierProcess</arg>
291
			<arg>-SworkingDir=${workingDir}</arg>
292
			<arg>-Iinput=${workingDir}/metadata_extractor/output_root/meta</arg>
293
			<capture-output />
294
		</java>
295
		<ok to="check_metadataextraction_output_plaintext_isempty" />
296
		<error to="fail" />
297
	</action>
298
    
299
    <action name='check_metadataextraction_output_plaintext_isempty'>
300
		<java>
301
			<main-class>eu.dnetlib.iis.core.java.ProcessWrapper</main-class>
302
			<arg>eu.dnetlib.iis.common.utils.EmptyDatastoreVerifierProcess</arg>
303
			<arg>-SworkingDir=${workingDir}</arg>
304
			<arg>-Iinput=${workingDir}/metadata_extractor/output_root/plaintext</arg>
305
			<capture-output />
306
		</java>
307
		<ok to="decision-is-metadataextraction-output-empty" />
308
		<error to="fail" />
309
	</action>
310
    
311
    <decision name="decision-is-metadataextraction-output-empty">
312
        <switch>
313
        	<!-- skipping metadataextraction merging process -->
314
            <case to="obtain-lock_for_merging">${wf:actionData('check_metadataextraction_output_plaintext_isempty')['isEmpty'] eq "false" or wf:actionData('check_metadataextraction_output_meta_isempty')['isEmpty'] eq "false"}</case>
315
            <default to="end"/>
316
        </switch>
317
    </decision>
318
    
319
    <action name="obtain-lock_for_merging">
320
        <java>
321
			<main-class>eu.dnetlib.iis.core.java.ProcessWrapper</main-class>
322
			<arg>eu.dnetlib.iis.common.lock.LockManagingProcess</arg>
323
            <arg>-SworkingDir=${workingDir}</arg>
324
            <arg>-Pzk_session_timeout=${zk_session_timeout}</arg>
325
            <arg>-Pnode_id=${default_cache_location}</arg>
326
            <arg>-Pmode=obtain</arg>
327
        </java>
328
        <ok to="get-new-cache-id_for_merging"/>
329
        <error to="release-lock-and-fail"/>
330
    </action>
331
    
332
    <action name='get-new-cache-id_for_merging'>
333
		<java>
334
			<main-class>eu.dnetlib.iis.core.java.ProcessWrapper</main-class>
335
			<arg>eu.dnetlib.iis.common.cache.CacheMetadataManagingProcess</arg>
336
			<arg>-SworkingDir=${workingDir}</arg>
337
			<arg>-Pdefault_cache_location=${default_cache_location}</arg>
338
			<arg>-Pmode=generate_new_id</arg>
339
			<capture-output />
340
		</java>
341
		<ok to="prepare_cache_for_merging" />
342
		<error to="release-lock-and-fail" />
343
	</action>
344
    
345
    <action name="prepare_cache_for_merging">
346
        <fs>
347
            <mkdir path="${nameNode}${default_cache_location}/${wf:actionData('get-new-cache-id_for_merging')['cache_id']}" />
348
        </fs>
349
        <ok to="merge_cache"/>
350
        <error to="release-lock-and-fail"/>
351
    </action>
352
    
353
    <fork name="merge_cache">
354
    	<path start="transformers_common_union_plaintext_merge_cache"/>
355
        <path start="transformers_common_union_meta_merge_cache"/>
356
    </fork>
357
    
358
    <action name="transformers_common_union_plaintext_merge_cache">
359
		<sub-workflow>
360
            <app-path>${wf:appPath()}/transformers_common_union</app-path>
361
            <propagate-configuration/>
362
            <configuration>
363
            	<property>
364
					<name>input_a</name>
365
					<value>${default_cache_location}/${wf:actionData('get-existing-cache-id')['cache_id']}/plaintext</value>
366
				</property>
367
				<property>
368
					<name>input_b</name>
369
					<value>${workingDir}/metadata_extractor/output_root/plaintext</value>
370
				</property>
371
				<property>
372
					<name>output</name>
373
					<value>${default_cache_location}/${wf:actionData('get-new-cache-id_for_merging')['cache_id']}/plaintext</value>
374
				</property>
375
				<property>
376
					<name>schema</name>
377
					<value>eu.dnetlib.iis.metadataextraction.schemas.DocumentText</value>
378
				</property>
379
            </configuration>
380
        </sub-workflow>
381
		<ok to="joining-merge_cache"/>
382
		<error to="fail-merge_cache-temp_files_cleanup" />
383
	</action>
384
    
385
    <action name="transformers_common_union_meta_merge_cache">
386
		<sub-workflow>
387
            <app-path>${wf:appPath()}/transformers_common_union</app-path>
388
            <propagate-configuration/>
389
            <configuration>
390
            	<property>
391
					<name>input_a</name>
392
					<value>${default_cache_location}/${wf:actionData('get-existing-cache-id')['cache_id']}/meta</value>
393
				</property>
394
				<property>
395
					<name>input_b</name>
396
					<value>${workingDir}/metadata_extractor/output_root/meta</value>
397
				</property>
398
				<property>
399
					<name>output</name>
400
					<value>${default_cache_location}/${wf:actionData('get-new-cache-id_for_merging')['cache_id']}/meta</value>
401
				</property>
402
				<property>
403
					<name>schema</name>
404
					<value>eu.dnetlib.iis.metadataextraction.schemas.ExtractedDocumentMetadata</value>
405
				</property>
406
            </configuration>
407
        </sub-workflow>
408
		<ok to="joining-merge_cache"/>
409
		<error to="fail-merge_cache-temp_files_cleanup" />
410
	</action>
411

    
412
	<action name="fail-merge_cache-temp_files_cleanup">
413
        <fs>
414
            <delete path="${nameNode}${default_cache_location}/${wf:actionData('get-new-cache-id_for_merging')['cache_id']}" />
415
        </fs>
416
        <ok to="release-lock-and-fail"/>
417
        <error to="release-lock-and-fail"/>
418
    </action>
419
	
420
	<join name="joining-merge_cache" to="write-new-cache-id_for_merging"/>
421
	
422
	<action name='write-new-cache-id_for_merging'>
423
		<java>
424
			<main-class>eu.dnetlib.iis.core.java.ProcessWrapper</main-class>
425
			<arg>eu.dnetlib.iis.common.cache.CacheMetadataManagingProcess</arg>
426
			<arg>-SworkingDir=${workingDir}</arg>
427
			<arg>-Pdefault_cache_location=${default_cache_location}</arg>
428
			<arg>-Pmode=write_id</arg>
429
			<arg>-Pid=${wf:actionData('get-new-cache-id_for_merging')['cache_id']}</arg>
430
			<capture-output />
431
		</java>
432
		<ok to="release-lock-and-end" />
433
		<error to="fail-merge_cache-temp_files_cleanup" />
434
	</action>
435
	
436
	<!-- end of cache based processing block, cache was provided as an input -->
437
    
438
    <!-- full input processing block, no cache was provided as an input -->
439
    <action name="metadata_extractor_on_full_input">
440
		<sub-workflow>
441
            <app-path>${wf:appPath()}/metadata_extractor</app-path>
442
            <propagate-configuration/>
443
            <configuration>
444
            	<property>
445
					<name>processing_mode</name>
446
					<value>StreamingMetadataExtractorMapper</value>
447
				</property>
448
				<property>
449
					<name>inputport_classname</name>
450
					<value>eu.dnetlib.iis.importer.auxiliary.schemas.DocumentContentUrl</value>
451
				</property>
452
            	<property>
453
                    <name>workingDir</name>
454
                    <value>${workingDir}/metadata_extractor/working_dir</value>
455
                </property>
456
            	<property>
457
					<name>input</name>
458
					<value>${input}</value>
459
				</property>
460
				<property>
461
					<name>excluded_ids</name>
462
					<value>${excluded_ids}</value>
463
				</property>
464
				<property>
465
				    <name>content_connection_timeout</name>
466
				   <value>${content_connection_timeout}</value>
467
				</property>
468
				<property>
469
				    <name>content_read_timeout</name>
470
				   <value>${content_read_timeout}</value>
471
				</property>
472
				<property>
473
					<name>mapred_max_split_size</name>
474
					<value>${mapred_max_split_size}</value>
475
				</property>
476
				<property>
477
					<name>output_name_meta</name>
478
					<value>${output_name_meta}</value>
479
				</property>
480
				<property>
481
					<name>output_name_plaintext</name>
482
					<value>${output_name_plaintext}</value>
483
				</property>
484
				<property>
485
					<name>output_root</name>
486
					<value>${output_root}</value>
487
				</property>
488
            </configuration>
489
        </sub-workflow>
490
		<ok to="obtain-lock_for_initializing"/>
491
		<error to="fail" />
492
	</action>
493
    
494
    <action name="obtain-lock_for_initializing">
495
        <java>
496
			<main-class>eu.dnetlib.iis.core.java.ProcessWrapper</main-class>
497
			<arg>eu.dnetlib.iis.common.lock.LockManagingProcess</arg>
498
            <arg>-SworkingDir=${workingDir}</arg>
499
            <arg>-Pzk_session_timeout=${zk_session_timeout}</arg>
500
            <arg>-Pnode_id=${default_cache_location}</arg>
501
            <arg>-Pmode=obtain</arg>
502
        </java>
503
        <ok to="get-new-cache-id_for_initializing"/>
504
        <error to="release-lock-and-fail"/>
505
    </action>
506
    
507
    <action name='get-new-cache-id_for_initializing'>
508
		<java>
509
			<main-class>eu.dnetlib.iis.core.java.ProcessWrapper</main-class>
510
			<arg>eu.dnetlib.iis.common.cache.CacheMetadataManagingProcess</arg>
511
			<arg>-SworkingDir=${workingDir}</arg>
512
			<arg>-Pdefault_cache_location=${default_cache_location}</arg>
513
			<arg>-Pmode=generate_new_id</arg>
514
			<capture-output />
515
		</java>
516
		<ok to="prepare_cache_for_initializing" />
517
		<error to="release-lock-and-fail" />
518
	</action>
519
    
520
    <action name="prepare_cache_for_initializing">
521
        <fs>
522
            <mkdir path="${nameNode}${default_cache_location}/${wf:actionData('get-new-cache-id_for_initializing')['cache_id']}" />
523
        </fs>
524
        <ok to="initialize_cache"/>
525
        <error to="release-lock-and-fail"/>
526
    </action>
527
    
528
    <fork name="initialize_cache">
529
    	<path start="initialize_plaintext_cache"/>
530
        <path start="initialize_meta_cache"/>
531
    </fork>
532
    
533
    <action name="initialize_plaintext_cache">
534
       <distcp xmlns="uri:oozie:distcp-action:0.1">
535
       	   <job-tracker>${jobTracker}</job-tracker>
536
           <name-node>${nameNode}</name-node>
537
           <configuration>
538
               <property>
539
                   <name>mapred.job.queue.name</name>
540
                   <value>${queueName}</value>
541
               </property>
542
           </configuration>
543
           <arg>${nameNode}${output_root}/plaintext</arg>
544
           <arg>${nameNode}${default_cache_location}/${wf:actionData('get-new-cache-id_for_initializing')['cache_id']}/plaintext</arg>
545
           </distcp>
546
       <ok to="joining-initialize_cache"/>
547
       <error to="fail-initialize_cache-temp_files_cleanup"/>
548
	</action>
549
   
550
	<action name="initialize_meta_cache">
551
       <distcp xmlns="uri:oozie:distcp-action:0.1">
552
       	   <job-tracker>${jobTracker}</job-tracker>
553
           <name-node>${nameNode}</name-node>
554
           <configuration>
555
               <property>
556
                   <name>mapred.job.queue.name</name>
557
                   <value>${queueName}</value>
558
               </property>
559
           </configuration>
560
           <arg>${nameNode}${output_root}/meta</arg>
561
           <arg>${nameNode}${default_cache_location}/${wf:actionData('get-new-cache-id_for_initializing')['cache_id']}/meta</arg>
562
           </distcp>
563
       <ok to="joining-initialize_cache"/>
564
       <error to="fail-initialize_cache-temp_files_cleanup"/>
565
	</action>
566
	
567
	<action name="fail-initialize_cache-temp_files_cleanup">
568
        <fs>
569
            <delete path="${nameNode}${default_cache_location}/${wf:actionData('get-new-cache-id_for_initializing')['cache_id']}" />
570
        </fs>
571
        <ok to="release-lock-and-fail"/>
572
        <error to="release-lock-and-fail"/>
573
    </action>
574
	
575
	<join name="joining-initialize_cache" to="write-new-cache-id_for_initializing"/>
576
	
577
	<action name='write-new-cache-id_for_initializing'>
578
		<java>
579
			<main-class>eu.dnetlib.iis.core.java.ProcessWrapper</main-class>
580
			<arg>eu.dnetlib.iis.common.cache.CacheMetadataManagingProcess</arg>
581
			<arg>-SworkingDir=${workingDir}</arg>
582
			<arg>-Pdefault_cache_location=${default_cache_location}</arg>
583
			<arg>-Pmode=write_id</arg>
584
			<arg>-Pid=${wf:actionData('get-new-cache-id_for_initializing')['cache_id']}</arg>
585
			<capture-output />
586
		</java>
587
		<ok to="release-lock-and-end" />
588
		<error to="fail-initialize_cache-temp_files_cleanup" />
589
	</action>
590
	
591
    <!-- end of full input processing block, no cache was provided as an input -->
592
    
593
    <!-- lock releasing actions -->
594
    <action name="release-lock-and-fail">
595
        <java>
596
			<main-class>eu.dnetlib.iis.core.java.ProcessWrapper</main-class>
597
			<arg>eu.dnetlib.iis.common.lock.LockManagingProcess</arg>
598
            <arg>-SworkingDir=${workingDir}</arg>
599
            <arg>-Pzk_session_timeout=${zk_session_timeout}</arg>
600
            <arg>-Pnode_id=${default_cache_location}</arg>
601
            <arg>-Pmode=release</arg>
602
        </java>
603
        <ok to="fail"/>
604
        <error to="fail"/>
605
    </action>
606
    
607
    <action name="release-lock-and-end">
608
        <java>
609
			<main-class>eu.dnetlib.iis.core.java.ProcessWrapper</main-class>
610
			<arg>eu.dnetlib.iis.common.lock.LockManagingProcess</arg>
611
            <arg>-SworkingDir=${workingDir}</arg>
612
            <arg>-Pzk_session_timeout=${zk_session_timeout}</arg>
613
            <arg>-Pnode_id=${default_cache_location}</arg>
614
            <arg>-Pmode=release</arg>
615
        </java>
616
        <ok to="end"/>
617
        <error to="fail"/>
618
    </action>
619
    <!-- end of lock releasing actions -->
620
    
621
	<kill name="fail">
622
		<message>Unfortunately, the process failed -- error message:
623
			[${wf:errorMessage(wf:lastErrorNode())}]</message>
624
	</kill>
625
	<end name="end" />
626
</workflow-app>
(2-2/2)