113: WHERE run_id = p_run_id
114: AND bundle_id = p_bundle_id;
115: BEGIN
116: fnd_oam_debug.log(2, l_ctxt, 'ENTER');
117: x_return_status := FND_API.G_RET_STS_ERROR;
118: x_return_msg := '';
119:
120: -- first validate the run
121: IF NOT FND_OAM_DSCRAM_RUNS_PKG.VALIDATE_START_EXECUTION(p_run_id,
161: END IF;
162:
163: --success
164: fnd_oam_debug.log(2, l_ctxt, 'EXIT');
165: x_return_status := FND_API.G_RET_STS_SUCCESS;
166: RETURN TRUE;
167: EXCEPTION
168: WHEN OTHERS THEN
169: x_return_msg := 'Unhandled Exception: (Code('||SQLCODE||'), Message("'||SQLERRM||'"))';
167: EXCEPTION
168: WHEN OTHERS THEN
169: x_return_msg := 'Unhandled Exception: (Code('||SQLCODE||'), Message("'||SQLERRM||'"))';
170: fnd_oam_debug.log(6, l_ctxt, x_return_msg);
171: x_return_status := FND_API.G_RET_STS_UNEXP_ERROR;
172: fnd_oam_debug.log(2, l_ctxt, 'EXIT');
173: RETURN FALSE;
174: END;
175:
194: SELECT bundle_status
195: FROM fnd_oam_dscram_bundles
196: WHERE bundle_id = b_bundle_info.bundle_id;
197: BEGIN
198: x_return_status := FND_API.G_RET_STS_ERROR;
199: x_return_msg := '';
200:
201: -- make sure the state's initialized
202: IF NOT b_bundle_info.initialized THEN
233: fnd_oam_debug.log(1, l_ctxt, x_return_msg);
234: END IF;
235: RETURN FALSE;
236: END IF;
237: x_return_status := FND_API.G_RET_STS_SUCCESS;
238: ELSE
239: x_return_status := b_bundle_info.last_validation_ret_sts;
240: END IF;
241:
255:
256: --success
257: b_bundle_info.last_validation_ret_sts := x_return_status;
258: b_bundle_info.last_validated := SYSDATE;
259: RETURN (x_return_status = FND_API.G_RET_STS_SUCCESS);
260: EXCEPTION
261: WHEN OTHERS THEN
262: x_return_msg := 'Unhandled Exception: (Code('||SQLCODE||'), Message("'||SQLERRM||'"))';
263: fnd_oam_debug.log(6, l_ctxt, x_return_msg);
260: EXCEPTION
261: WHEN OTHERS THEN
262: x_return_msg := 'Unhandled Exception: (Code('||SQLCODE||'), Message("'||SQLERRM||'"))';
263: fnd_oam_debug.log(6, l_ctxt, x_return_msg);
264: x_return_status := FND_API.G_RET_STS_UNEXP_ERROR;
265: b_bundle_info.last_validation_ret_sts := x_return_status;
266: b_bundle_info.last_validated := SYSDATE;
267: RETURN FALSE;
268: END;
296: l_return_status VARCHAR2(6);
297: l_return_msg VARCHAR2(4000);
298: BEGIN
299: fnd_oam_debug.log(2, l_ctxt, 'ENTER');
300: x_return_status := FND_API.G_RET_STS_ERROR;
301: x_return_msg := '';
302:
303: -- assign the worker to the run first
304: -- first validate the run
304: -- first validate the run
305: FND_OAM_DSCRAM_RUNS_PKG.ASSIGN_WORKER_TO_RUN(p_run_id,
306: l_return_status,
307: l_return_msg);
308: IF l_return_status <> FND_API.G_RET_STS_SUCCESS THEN
309: x_return_status := l_return_status;
310: x_return_msg := '[Assigning Worker to Run Failed]:('||l_return_msg||')';
311: fnd_oam_debug.log(6, l_ctxt, x_return_msg);
312: fnd_oam_debug.log(2, l_ctxt, 'EXIT');
360: x_stat_id => l_stat_id);
361: --update the status
362: UPDATE fnd_oam_dscram_bundles
363: SET bundle_status = FND_OAM_DSCRAM_UTILS_PKG.G_STATUS_PROCESSING,
364: STATS_FINISHED = FND_API.G_FALSE
365: WHERE bundle_id = p_bundle_id;
366: ELSE
367: --the bundle isn't processing but somebody's set it to processing, this shouldn't happen
368: x_return_msg := 'Bundle Status ('||l_status||') is not in-progress but the number of workers assigned('||l_workers_assigned||') is nonzero.';
403: --now call run API for initializing arg context, needs to occur after the bundle is
404: --initialized to allow per-worker args to print correctly here.
405: FND_OAM_DSCRAM_RUNS_PKG.INITIALIZE_RUN_ARG_CONTEXT(l_return_status,
406: l_return_msg);
407: IF l_return_status <> FND_API.G_RET_STS_SUCCESS THEN
408: b_bundle_info.initialized := FALSE;
409: x_return_status := l_return_status;
410: x_return_msg := l_return_msg;
411: fnd_oam_debug.log(2, l_ctxt, 'EXIT');
415: fnd_oam_debug.log(1, l_ctxt, 'Worker Assigned.');
416: fnd_oam_debug.log(1, l_ctxt, 'Worker ID: '||px_worker_id);
417: fnd_oam_debug.log(1, l_ctxt, 'Default Batch Size: '||l_batch_size);
418:
419: x_return_status := FND_API.G_RET_STS_SUCCESS;
420: fnd_oam_debug.log(2, l_ctxt, 'EXIT');
421: EXCEPTION
422: WHEN OTHERS THEN
423: x_return_status := FND_API.G_RET_STS_UNEXP_ERROR;
419: x_return_status := FND_API.G_RET_STS_SUCCESS;
420: fnd_oam_debug.log(2, l_ctxt, 'EXIT');
421: EXCEPTION
422: WHEN OTHERS THEN
423: x_return_status := FND_API.G_RET_STS_UNEXP_ERROR;
424: x_return_msg := 'Unhandled Exception: (Code('||SQLCODE||'), Message("'||SQLERRM||'"))';
425: fnd_oam_debug.log(6, l_ctxt, x_return_msg);
426: fnd_oam_debug.log(2, l_ctxt, 'EXIT');
427: ROLLBACK;
504: fnd_oam_debug.log(2, l_ctxt, 'EXIT');
505: EXCEPTION
506: WHEN OTHERS THEN
507: x_final_status := FND_OAM_DSCRAM_UTILS_PKG.G_STATUS_ERROR_UNKNOWN;
508: x_final_ret_sts := FND_API.G_RET_STS_UNEXP_ERROR;
509: fnd_oam_debug.log(6, l_ctxt, 'Unhandled Exception: (Code('||SQLCODE||'), Message("'||SQLERRM||'"))');
510: fnd_oam_debug.log(2, l_ctxt, 'EXIT');
511: ROLLBACK;
512: END;
562: l_return_msg VARCHAR2(4000);
563: l_temp VARCHAR2(30);
564: BEGIN
565: fnd_oam_debug.log(2, l_ctxt, 'ENTER');
566: x_return_status := FND_API.G_RET_STS_ERROR;
567: x_return_msg := '';
568:
569: -- do an initial validation of the bundle
570: IF NOT VALIDATE_START_EXECUTION(p_run_id,
586: p_bundle_id,
587: px_worker_id,
588: l_return_status,
589: l_return_msg);
590: IF l_return_status <> FND_API.G_RET_STS_SUCCESS THEN
591: x_return_status := l_return_status;
592: x_return_msg := '[Bundle Worker Assignment Failed]:('||l_return_msg||')';
593: fnd_oam_debug.log(1, l_ctxt, x_return_msg);
594: fnd_oam_debug.log(2, l_ctxt, 'EXIT');
614: END IF;
615:
616: --at this point, we're assigned so we need to issue a complete before returning.
617: --this means no quick returns, so we hit the complete after the loop.
618: l_return_status := FND_API.G_RET_STS_SUCCESS;
619: l_completed_status := FND_OAM_DSCRAM_UTILS_PKG.G_STATUS_PROCESSED;
620:
621: -- we're in, start pulling tasks and executing them.
622: <
627: l_return_status,
628: l_return_msg);
629: IF l_return_status = FND_OAM_DSCRAM_UTILS_PKG.G_RET_STS_EMPTY THEN
630: --the bundle is processed when a requery of task queue is empty
631: l_return_status := FND_API.G_RET_STS_SUCCESS;
632: EXIT outer;
633: ELSIF l_return_status <> FND_API.G_RET_STS_SUCCESS THEN
634: l_completed_status := FND_OAM_DSCRAM_UTILS_PKG.G_STATUS_ERROR_UNKNOWN;
635: x_return_msg := '[Fetch Next Task Failed]:('||l_return_msg||')';
629: IF l_return_status = FND_OAM_DSCRAM_UTILS_PKG.G_RET_STS_EMPTY THEN
630: --the bundle is processed when a requery of task queue is empty
631: l_return_status := FND_API.G_RET_STS_SUCCESS;
632: EXIT outer;
633: ELSIF l_return_status <> FND_API.G_RET_STS_SUCCESS THEN
634: l_completed_status := FND_OAM_DSCRAM_UTILS_PKG.G_STATUS_ERROR_UNKNOWN;
635: x_return_msg := '[Fetch Next Task Failed]:('||l_return_msg||')';
636: fnd_oam_debug.log(6, l_ctxt, x_return_msg);
637: EXIT outer;
657: --the bundle is busy and we should pause before restarting the outer loop.
658: fnd_oam_debug.log(1, l_ctxt, '[Inner Fetch Empty, Waiting for a progress alert]');
659: FND_OAM_DSCRAM_UTILS_PKG.WAIT_FOR_PROGRESS_ALERT;
660: EXIT inner;
661: ELSIF l_return_status <> FND_API.G_RET_STS_SUCCESS THEN
662: l_completed_status := FND_OAM_DSCRAM_UTILS_PKG.G_STATUS_ERROR_UNKNOWN;
663: x_return_msg := '[Inner Fetch Next Task Failed]:('||l_return_msg||')';
664: fnd_oam_debug.log(6, l_ctxt, x_return_msg);
665: EXIT outer;
671: l_return_msg);
672: IF l_return_status = FND_OAM_DSCRAM_UTILS_PKG.G_RET_STS_FULL THEN
673: --continue to the next inner loop iteration for the next fetch
674: null;
675: ELSIF l_return_status <> FND_API.G_RET_STS_SUCCESS AND
676: l_return_status <> FND_OAM_DSCRAM_UTILS_PKG.G_RET_STS_PROCESSED AND
677: l_return_status <> FND_OAM_DSCRAM_UTILS_PKG.G_RET_STS_SKIPPED THEN
678: HANDLE_FAILED_TASK(l_task_id,
679: l_return_status,
689: --success means jump to the outer loop
690: EXIT inner;
691: END IF;
692: END LOOP inner;
693: ELSIF l_return_status <> FND_API.G_RET_STS_SUCCESS AND
694: l_return_status <> FND_OAM_DSCRAM_UTILS_PKG.G_RET_STS_PROCESSED AND
695: l_return_status <> FND_OAM_DSCRAM_UTILS_PKG.G_RET_STS_SKIPPED THEN
696: HANDLE_FAILED_TASK(l_task_id,
697: l_return_status,
703: --after every task evaluation, check on the bundle and its parent run.
704: --tell it to requery if the child's execution came back non-successful since this should
705: --be pretty uncommon and will help detect when a child has seen a stop in a parent such as
706: --this bundle.
707: IF NOT VALIDATE_CONTINUED_EXECUTION((l_return_status <> FND_API.G_RET_STS_SUCCESS),
708: TRUE,
709: l_return_status,
710: l_return_msg) THEN
711: --complete the bundle based on what validate found
730: fnd_oam_debug.log(2, l_ctxt, 'EXIT');
731: EXCEPTION
732: WHEN OTHERS THEN
733: COMPLETE_BUNDLE(FND_OAM_DSCRAM_UTILS_PKG.G_STATUS_ERROR_UNKNOWN,
734: FND_API.G_RET_STS_UNEXP_ERROR,
735: l_completed_status,
736: x_return_status);
737: x_return_msg := 'Unhandled Exception: [Code('||SQLCODE||'), Message("'||SQLERRM||'")]';
738: fnd_oam_debug.log(6, l_ctxt, x_return_msg);
760: BEGIN
761: fnd_oam_debug.log(2, l_ctxt, 'ENTER');
762:
763: --default to success if there's no bundles for this host
764: x_return_status := FND_API.G_RET_STS_SUCCESS;
765: x_return_msg := '';
766:
767: --query the host name
768: SELECT UPPER(host_name)
785: l_bundle_ids(k),
786: px_worker_id,
787: x_return_status,
788: x_return_msg);
789: IF x_return_status IN (FND_API.G_RET_STS_SUCCESS,
790: FND_OAM_DSCRAM_UTILS_PKG.G_RET_STS_PROCESSED,
791: FND_OAM_DSCRAM_UTILS_PKG.G_RET_STS_FULL,
792: FND_OAM_DSCRAM_UTILS_PKG.G_RET_STS_SKIPPED) THEN
793: --override the output status to success if it's a success-like status
790: FND_OAM_DSCRAM_UTILS_PKG.G_RET_STS_PROCESSED,
791: FND_OAM_DSCRAM_UTILS_PKG.G_RET_STS_FULL,
792: FND_OAM_DSCRAM_UTILS_PKG.G_RET_STS_SKIPPED) THEN
793: --override the output status to success if it's a success-like status
794: x_return_status := FND_API.G_RET_STS_SUCCESS;
795: ELSE
796: --if we didn't succeed, exit early
797: EXIT;
798: END IF;
802:
803: fnd_oam_debug.log(2, l_ctxt, 'EXIT');
804: EXCEPTION
805: WHEN OTHERS THEN
806: x_return_status := FND_API.G_RET_STS_UNEXP_ERROR;
807: x_return_msg := 'Unhandled Exception: [Code('||SQLCODE||'), Message("'||SQLERRM||'")]';
808: fnd_oam_debug.log(6, l_ctxt, x_return_msg);
809: fnd_oam_debug.log(2, l_ctxt, 'EXIT');
810: END;