author | Ginnie Wray<virginia.wray@oracle.com> |
Tue, 19 Jun 2012 12:18:37 -0600 | |
changeset 1717 | 10cb4d15a248 |
parent 1418 | 8e9701e2c0f3 |
permissions | -rw-r--r-- |
947
29603af1b942
6999599 Missing shebang lines in python modules leads to incorrect dependency generation
Keith Mitchell <keith.mitchell@oracle.com>
parents:
922
diff
changeset
|
1 |
#!/usr/bin/python |
909
ab25dde8919d
16323 Implement Install Execution Engine
Karen Tung <karen.tung@oracle.com>
parents:
diff
changeset
|
2 |
# |
ab25dde8919d
16323 Implement Install Execution Engine
Karen Tung <karen.tung@oracle.com>
parents:
diff
changeset
|
3 |
# CDDL HEADER START |
ab25dde8919d
16323 Implement Install Execution Engine
Karen Tung <karen.tung@oracle.com>
parents:
diff
changeset
|
4 |
# |
ab25dde8919d
16323 Implement Install Execution Engine
Karen Tung <karen.tung@oracle.com>
parents:
diff
changeset
|
5 |
# The contents of this file are subject to the terms of the |
ab25dde8919d
16323 Implement Install Execution Engine
Karen Tung <karen.tung@oracle.com>
parents:
diff
changeset
|
6 |
# Common Development and Distribution License (the "License"). |
ab25dde8919d
16323 Implement Install Execution Engine
Karen Tung <karen.tung@oracle.com>
parents:
diff
changeset
|
7 |
# You may not use this file except in compliance with the License. |
ab25dde8919d
16323 Implement Install Execution Engine
Karen Tung <karen.tung@oracle.com>
parents:
diff
changeset
|
8 |
# |
ab25dde8919d
16323 Implement Install Execution Engine
Karen Tung <karen.tung@oracle.com>
parents:
diff
changeset
|
9 |
# You can obtain a copy of the license at usr/src/OPENSOLARIS.LICENSE |
ab25dde8919d
16323 Implement Install Execution Engine
Karen Tung <karen.tung@oracle.com>
parents:
diff
changeset
|
10 |
# or http://www.opensolaris.org/os/licensing. |
ab25dde8919d
16323 Implement Install Execution Engine
Karen Tung <karen.tung@oracle.com>
parents:
diff
changeset
|
11 |
# See the License for the specific language governing permissions |
ab25dde8919d
16323 Implement Install Execution Engine
Karen Tung <karen.tung@oracle.com>
parents:
diff
changeset
|
12 |
# and limitations under the License. |
ab25dde8919d
16323 Implement Install Execution Engine
Karen Tung <karen.tung@oracle.com>
parents:
diff
changeset
|
13 |
# |
ab25dde8919d
16323 Implement Install Execution Engine
Karen Tung <karen.tung@oracle.com>
parents:
diff
changeset
|
14 |
# When distributing Covered Code, include this CDDL HEADER in each |
ab25dde8919d
16323 Implement Install Execution Engine
Karen Tung <karen.tung@oracle.com>
parents:
diff
changeset
|
15 |
# file and include the License file at usr/src/OPENSOLARIS.LICENSE. |
ab25dde8919d
16323 Implement Install Execution Engine
Karen Tung <karen.tung@oracle.com>
parents:
diff
changeset
|
16 |
# If applicable, add the following below this CDDL HEADER, with the |
ab25dde8919d
16323 Implement Install Execution Engine
Karen Tung <karen.tung@oracle.com>
parents:
diff
changeset
|
17 |
# fields enclosed by brackets "[]" replaced with your own identifying |
ab25dde8919d
16323 Implement Install Execution Engine
Karen Tung <karen.tung@oracle.com>
parents:
diff
changeset
|
18 |
# information: Portions Copyright [yyyy] [name of copyright owner] |
ab25dde8919d
16323 Implement Install Execution Engine
Karen Tung <karen.tung@oracle.com>
parents:
diff
changeset
|
19 |
# |
ab25dde8919d
16323 Implement Install Execution Engine
Karen Tung <karen.tung@oracle.com>
parents:
diff
changeset
|
20 |
# CDDL HEADER END |
ab25dde8919d
16323 Implement Install Execution Engine
Karen Tung <karen.tung@oracle.com>
parents:
diff
changeset
|
21 |
# |
ab25dde8919d
16323 Implement Install Execution Engine
Karen Tung <karen.tung@oracle.com>
parents:
diff
changeset
|
22 |
|
ab25dde8919d
16323 Implement Install Execution Engine
Karen Tung <karen.tung@oracle.com>
parents:
diff
changeset
|
23 |
# |
1717
10cb4d15a248
7066254 Problem with install/logging
Ginnie Wray<virginia.wray@oracle.com>
parents:
1418
diff
changeset
|
24 |
# Copyright (c) 2010, 2012, Oracle and/or its affiliates. All rights reserved. |
909
ab25dde8919d
16323 Implement Install Execution Engine
Karen Tung <karen.tung@oracle.com>
parents:
diff
changeset
|
25 |
# |
ab25dde8919d
16323 Implement Install Execution Engine
Karen Tung <karen.tung@oracle.com>
parents:
diff
changeset
|
26 |
|
ab25dde8919d
16323 Implement Install Execution Engine
Karen Tung <karen.tung@oracle.com>
parents:
diff
changeset
|
27 |
''' |
ab25dde8919d
16323 Implement Install Execution Engine
Karen Tung <karen.tung@oracle.com>
parents:
diff
changeset
|
28 |
Class representing the Installation Execution Engine |
ab25dde8919d
16323 Implement Install Execution Engine
Karen Tung <karen.tung@oracle.com>
parents:
diff
changeset
|
29 |
''' |
ab25dde8919d
16323 Implement Install Execution Engine
Karen Tung <karen.tung@oracle.com>
parents:
diff
changeset
|
30 |
|
ab25dde8919d
16323 Implement Install Execution Engine
Karen Tung <karen.tung@oracle.com>
parents:
diff
changeset
|
31 |
import decimal |
1290
cfaa7349f221
7004000 Install engine enhancement to save original args/kwargs list before calling checkpoint's execute
Karen Tung <Karen.Tung@oracle.com>
parents:
1151
diff
changeset
|
32 |
import glob |
909
ab25dde8919d
16323 Implement Install Execution Engine
Karen Tung <karen.tung@oracle.com>
parents:
diff
changeset
|
33 |
import imp |
ab25dde8919d
16323 Implement Install Execution Engine
Karen Tung <karen.tung@oracle.com>
parents:
diff
changeset
|
34 |
import inspect |
ab25dde8919d
16323 Implement Install Execution Engine
Karen Tung <karen.tung@oracle.com>
parents:
diff
changeset
|
35 |
import logging |
ab25dde8919d
16323 Implement Install Execution Engine
Karen Tung <karen.tung@oracle.com>
parents:
diff
changeset
|
36 |
import os |
ab25dde8919d
16323 Implement Install Execution Engine
Karen Tung <karen.tung@oracle.com>
parents:
diff
changeset
|
37 |
import shutil |
ab25dde8919d
16323 Implement Install Execution Engine
Karen Tung <karen.tung@oracle.com>
parents:
diff
changeset
|
38 |
import string |
ab25dde8919d
16323 Implement Install Execution Engine
Karen Tung <karen.tung@oracle.com>
parents:
diff
changeset
|
39 |
import tempfile |
ab25dde8919d
16323 Implement Install Execution Engine
Karen Tung <karen.tung@oracle.com>
parents:
diff
changeset
|
40 |
import threading |
913
83925e67521c
6996397 InstallEngine missing import of warnings module
Karen Tung <karen.tung@oracle.com>
parents:
909
diff
changeset
|
41 |
import warnings |
909
ab25dde8919d
16323 Implement Install Execution Engine
Karen Tung <karen.tung@oracle.com>
parents:
diff
changeset
|
42 |
|
ab25dde8919d
16323 Implement Install Execution Engine
Karen Tung <karen.tung@oracle.com>
parents:
diff
changeset
|
43 |
import osol_install.errsvc as errsvc |
ab25dde8919d
16323 Implement Install Execution Engine
Karen Tung <karen.tung@oracle.com>
parents:
diff
changeset
|
44 |
import osol_install.liberrsvc as liberrsvc |
ab25dde8919d
16323 Implement Install Execution Engine
Karen Tung <karen.tung@oracle.com>
parents:
diff
changeset
|
45 |
|
ab25dde8919d
16323 Implement Install Execution Engine
Karen Tung <karen.tung@oracle.com>
parents:
diff
changeset
|
46 |
from logging import CRITICAL, ERROR, WARNING, INFO, DEBUG, NOTSET |
ab25dde8919d
16323 Implement Install Execution Engine
Karen Tung <karen.tung@oracle.com>
parents:
diff
changeset
|
47 |
|
ab25dde8919d
16323 Implement Install Execution Engine
Karen Tung <karen.tung@oracle.com>
parents:
diff
changeset
|
48 |
from osol_install.install_utils import get_argspec |
ab25dde8919d
16323 Implement Install Execution Engine
Karen Tung <karen.tung@oracle.com>
parents:
diff
changeset
|
49 |
from solaris_install.data_object import DataObject |
ab25dde8919d
16323 Implement Install Execution Engine
Karen Tung <karen.tung@oracle.com>
parents:
diff
changeset
|
50 |
from solaris_install.data_object.cache import DataObjectCache |
ab25dde8919d
16323 Implement Install Execution Engine
Karen Tung <karen.tung@oracle.com>
parents:
diff
changeset
|
51 |
from solaris_install.engine.checkpoint_data import CheckpointData |
ab25dde8919d
16323 Implement Install Execution Engine
Karen Tung <karen.tung@oracle.com>
parents:
diff
changeset
|
52 |
from solaris_install.logger import InstallLogger, LogInitError, \ |
1717
10cb4d15a248
7066254 Problem with install/logging
Ginnie Wray<virginia.wray@oracle.com>
parents:
1418
diff
changeset
|
53 |
INSTALL_LOGGER_NAME |
1070
ef77609251f5
7021591 provide an implementation of TI/TD based on CUD
Drew Fisher <drew.fisher@oracle.com>
parents:
948
diff
changeset
|
54 |
from solaris_install.target.logical import Filesystem |
909
ab25dde8919d
16323 Implement Install Execution Engine
Karen Tung <karen.tung@oracle.com>
parents:
diff
changeset
|
55 |
|
ab25dde8919d
16323 Implement Install Execution Engine
Karen Tung <karen.tung@oracle.com>
parents:
diff
changeset
|
56 |
LOGGER = None |
ab25dde8919d
16323 Implement Install Execution Engine
Karen Tung <karen.tung@oracle.com>
parents:
diff
changeset
|
57 |
|
ab25dde8919d
16323 Implement Install Execution Engine
Karen Tung <karen.tung@oracle.com>
parents:
diff
changeset
|
58 |
|
ab25dde8919d
16323 Implement Install Execution Engine
Karen Tung <karen.tung@oracle.com>
parents:
diff
changeset
|
59 |
class EngineError(StandardError): |
ab25dde8919d
16323 Implement Install Execution Engine
Karen Tung <karen.tung@oracle.com>
parents:
diff
changeset
|
60 |
'''Base class for engine specific errors''' |
ab25dde8919d
16323 Implement Install Execution Engine
Karen Tung <karen.tung@oracle.com>
parents:
diff
changeset
|
61 |
pass |
ab25dde8919d
16323 Implement Install Execution Engine
Karen Tung <karen.tung@oracle.com>
parents:
diff
changeset
|
62 |
|
ab25dde8919d
16323 Implement Install Execution Engine
Karen Tung <karen.tung@oracle.com>
parents:
diff
changeset
|
63 |
|
ab25dde8919d
16323 Implement Install Execution Engine
Karen Tung <karen.tung@oracle.com>
parents:
diff
changeset
|
64 |
class RollbackError(EngineError): |
ab25dde8919d
16323 Implement Install Execution Engine
Karen Tung <karen.tung@oracle.com>
parents:
diff
changeset
|
65 |
'''Error during an attempt to rollback''' |
ab25dde8919d
16323 Implement Install Execution Engine
Karen Tung <karen.tung@oracle.com>
parents:
diff
changeset
|
66 |
_MSG = "Cannot rollback to '%s' checkpoint: %s" |
ab25dde8919d
16323 Implement Install Execution Engine
Karen Tung <karen.tung@oracle.com>
parents:
diff
changeset
|
67 |
|
ab25dde8919d
16323 Implement Install Execution Engine
Karen Tung <karen.tung@oracle.com>
parents:
diff
changeset
|
68 |
def __init__(self, cp_name, reason): |
ab25dde8919d
16323 Implement Install Execution Engine
Karen Tung <karen.tung@oracle.com>
parents:
diff
changeset
|
69 |
msg = RollbackError._MSG % (cp_name, reason) |
ab25dde8919d
16323 Implement Install Execution Engine
Karen Tung <karen.tung@oracle.com>
parents:
diff
changeset
|
70 |
self.checkpoint = cp_name |
ab25dde8919d
16323 Implement Install Execution Engine
Karen Tung <karen.tung@oracle.com>
parents:
diff
changeset
|
71 |
EngineError.__init__(self, msg) |
ab25dde8919d
16323 Implement Install Execution Engine
Karen Tung <karen.tung@oracle.com>
parents:
diff
changeset
|
72 |
|
ab25dde8919d
16323 Implement Install Execution Engine
Karen Tung <karen.tung@oracle.com>
parents:
diff
changeset
|
73 |
|
ab25dde8919d
16323 Implement Install Execution Engine
Karen Tung <karen.tung@oracle.com>
parents:
diff
changeset
|
74 |
class SingletonError(EngineError): |
ab25dde8919d
16323 Implement Install Execution Engine
Karen Tung <karen.tung@oracle.com>
parents:
diff
changeset
|
75 |
'''Occurs when one attempts to instantiate a second singleton''' |
ab25dde8919d
16323 Implement Install Execution Engine
Karen Tung <karen.tung@oracle.com>
parents:
diff
changeset
|
76 |
pass |
ab25dde8919d
16323 Implement Install Execution Engine
Karen Tung <karen.tung@oracle.com>
parents:
diff
changeset
|
77 |
|
ab25dde8919d
16323 Implement Install Execution Engine
Karen Tung <karen.tung@oracle.com>
parents:
diff
changeset
|
78 |
|
ab25dde8919d
16323 Implement Install Execution Engine
Karen Tung <karen.tung@oracle.com>
parents:
diff
changeset
|
79 |
class UsageError(EngineError): |
ab25dde8919d
16323 Implement Install Execution Engine
Karen Tung <karen.tung@oracle.com>
parents:
diff
changeset
|
80 |
'''General usage error for an engine call''' |
ab25dde8919d
16323 Implement Install Execution Engine
Karen Tung <karen.tung@oracle.com>
parents:
diff
changeset
|
81 |
pass |
ab25dde8919d
16323 Implement Install Execution Engine
Karen Tung <karen.tung@oracle.com>
parents:
diff
changeset
|
82 |
|
ab25dde8919d
16323 Implement Install Execution Engine
Karen Tung <karen.tung@oracle.com>
parents:
diff
changeset
|
83 |
|
ab25dde8919d
16323 Implement Install Execution Engine
Karen Tung <karen.tung@oracle.com>
parents:
diff
changeset
|
84 |
class NoCacheError(RollbackError, IOError): |
ab25dde8919d
16323 Implement Install Execution Engine
Karen Tung <karen.tung@oracle.com>
parents:
diff
changeset
|
85 |
'''Error during rollback - can't find the DOC''' |
ab25dde8919d
16323 Implement Install Execution Engine
Karen Tung <karen.tung@oracle.com>
parents:
diff
changeset
|
86 |
def __init__(self, cp_name, cache_path): |
ab25dde8919d
16323 Implement Install Execution Engine
Karen Tung <karen.tung@oracle.com>
parents:
diff
changeset
|
87 |
self.cache_path = cache_path |
ab25dde8919d
16323 Implement Install Execution Engine
Karen Tung <karen.tung@oracle.com>
parents:
diff
changeset
|
88 |
RollbackError.__init__(self, cp_name, |
ab25dde8919d
16323 Implement Install Execution Engine
Karen Tung <karen.tung@oracle.com>
parents:
diff
changeset
|
89 |
"Cache does not exist at path: %s" % cache_path) |
ab25dde8919d
16323 Implement Install Execution Engine
Karen Tung <karen.tung@oracle.com>
parents:
diff
changeset
|
90 |
|
ab25dde8919d
16323 Implement Install Execution Engine
Karen Tung <karen.tung@oracle.com>
parents:
diff
changeset
|
91 |
|
ab25dde8919d
16323 Implement Install Execution Engine
Karen Tung <karen.tung@oracle.com>
parents:
diff
changeset
|
92 |
class ChkptRegistrationError(EngineError): |
ab25dde8919d
16323 Implement Install Execution Engine
Karen Tung <karen.tung@oracle.com>
parents:
diff
changeset
|
93 |
'''Error occur while trying to register a checkpoint''' |
ab25dde8919d
16323 Implement Install Execution Engine
Karen Tung <karen.tung@oracle.com>
parents:
diff
changeset
|
94 |
pass |
ab25dde8919d
16323 Implement Install Execution Engine
Karen Tung <karen.tung@oracle.com>
parents:
diff
changeset
|
95 |
|
ab25dde8919d
16323 Implement Install Execution Engine
Karen Tung <karen.tung@oracle.com>
parents:
diff
changeset
|
96 |
|
ab25dde8919d
16323 Implement Install Execution Engine
Karen Tung <karen.tung@oracle.com>
parents:
diff
changeset
|
97 |
class UnknownChkptError(UsageError): |
ab25dde8919d
16323 Implement Install Execution Engine
Karen Tung <karen.tung@oracle.com>
parents:
diff
changeset
|
98 |
'''Error occurs when attempting to access a checkpoint that doesn't |
ab25dde8919d
16323 Implement Install Execution Engine
Karen Tung <karen.tung@oracle.com>
parents:
diff
changeset
|
99 |
exist''' |
ab25dde8919d
16323 Implement Install Execution Engine
Karen Tung <karen.tung@oracle.com>
parents:
diff
changeset
|
100 |
pass |
ab25dde8919d
16323 Implement Install Execution Engine
Karen Tung <karen.tung@oracle.com>
parents:
diff
changeset
|
101 |
|
ab25dde8919d
16323 Implement Install Execution Engine
Karen Tung <karen.tung@oracle.com>
parents:
diff
changeset
|
102 |
|
ab25dde8919d
16323 Implement Install Execution Engine
Karen Tung <karen.tung@oracle.com>
parents:
diff
changeset
|
103 |
class NoDatasetError(UsageError): |
ab25dde8919d
16323 Implement Install Execution Engine
Karen Tung <karen.tung@oracle.com>
parents:
diff
changeset
|
104 |
'''ZFS dataset is not specified.''' |
ab25dde8919d
16323 Implement Install Execution Engine
Karen Tung <karen.tung@oracle.com>
parents:
diff
changeset
|
105 |
pass |
ab25dde8919d
16323 Implement Install Execution Engine
Karen Tung <karen.tung@oracle.com>
parents:
diff
changeset
|
106 |
|
ab25dde8919d
16323 Implement Install Execution Engine
Karen Tung <karen.tung@oracle.com>
parents:
diff
changeset
|
107 |
|
ab25dde8919d
16323 Implement Install Execution Engine
Karen Tung <karen.tung@oracle.com>
parents:
diff
changeset
|
108 |
class FileNotFoundError(UsageError): |
ab25dde8919d
16323 Implement Install Execution Engine
Karen Tung <karen.tung@oracle.com>
parents:
diff
changeset
|
109 |
''' The specified zfs dataset is not found, or |
ab25dde8919d
16323 Implement Install Execution Engine
Karen Tung <karen.tung@oracle.com>
parents:
diff
changeset
|
110 |
no DataObjectCache snapshot exist in the provided ZFS dataset. |
ab25dde8919d
16323 Implement Install Execution Engine
Karen Tung <karen.tung@oracle.com>
parents:
diff
changeset
|
111 |
''' |
ab25dde8919d
16323 Implement Install Execution Engine
Karen Tung <karen.tung@oracle.com>
parents:
diff
changeset
|
112 |
pass |
ab25dde8919d
16323 Implement Install Execution Engine
Karen Tung <karen.tung@oracle.com>
parents:
diff
changeset
|
113 |
|
ab25dde8919d
16323 Implement Install Execution Engine
Karen Tung <karen.tung@oracle.com>
parents:
diff
changeset
|
114 |
|
ab25dde8919d
16323 Implement Install Execution Engine
Karen Tung <karen.tung@oracle.com>
parents:
diff
changeset
|
115 |
class EngineData(DataObject): |
ab25dde8919d
16323 Implement Install Execution Engine
Karen Tung <karen.tung@oracle.com>
parents:
diff
changeset
|
116 |
'''Root node below DataObjectCache for storing all install |
ab25dde8919d
16323 Implement Install Execution Engine
Karen Tung <karen.tung@oracle.com>
parents:
diff
changeset
|
117 |
engine related data |
ab25dde8919d
16323 Implement Install Execution Engine
Karen Tung <karen.tung@oracle.com>
parents:
diff
changeset
|
118 |
''' |
ab25dde8919d
16323 Implement Install Execution Engine
Karen Tung <karen.tung@oracle.com>
parents:
diff
changeset
|
119 |
|
ab25dde8919d
16323 Implement Install Execution Engine
Karen Tung <karen.tung@oracle.com>
parents:
diff
changeset
|
120 |
def __init__(self): |
ab25dde8919d
16323 Implement Install Execution Engine
Karen Tung <karen.tung@oracle.com>
parents:
diff
changeset
|
121 |
DataObject.__init__(self, InstallEngine.ENGINE_DOC_ROOT) |
ab25dde8919d
16323 Implement Install Execution Engine
Karen Tung <karen.tung@oracle.com>
parents:
diff
changeset
|
122 |
|
ab25dde8919d
16323 Implement Install Execution Engine
Karen Tung <karen.tung@oracle.com>
parents:
diff
changeset
|
123 |
def to_xml(self): |
ab25dde8919d
16323 Implement Install Execution Engine
Karen Tung <karen.tung@oracle.com>
parents:
diff
changeset
|
124 |
''' This internal engine info node will not be saved to XML ''' |
ab25dde8919d
16323 Implement Install Execution Engine
Karen Tung <karen.tung@oracle.com>
parents:
diff
changeset
|
125 |
return None |
ab25dde8919d
16323 Implement Install Execution Engine
Karen Tung <karen.tung@oracle.com>
parents:
diff
changeset
|
126 |
|
ab25dde8919d
16323 Implement Install Execution Engine
Karen Tung <karen.tung@oracle.com>
parents:
diff
changeset
|
127 |
@classmethod |
ab25dde8919d
16323 Implement Install Execution Engine
Karen Tung <karen.tung@oracle.com>
parents:
diff
changeset
|
128 |
def from_xml(cls, xml_node): |
ab25dde8919d
16323 Implement Install Execution Engine
Karen Tung <karen.tung@oracle.com>
parents:
diff
changeset
|
129 |
''' This internal engine info node will not be read from XML ''' |
ab25dde8919d
16323 Implement Install Execution Engine
Karen Tung <karen.tung@oracle.com>
parents:
diff
changeset
|
130 |
return None |
ab25dde8919d
16323 Implement Install Execution Engine
Karen Tung <karen.tung@oracle.com>
parents:
diff
changeset
|
131 |
|
ab25dde8919d
16323 Implement Install Execution Engine
Karen Tung <karen.tung@oracle.com>
parents:
diff
changeset
|
132 |
@classmethod |
ab25dde8919d
16323 Implement Install Execution Engine
Karen Tung <karen.tung@oracle.com>
parents:
diff
changeset
|
133 |
def can_handle(cls, xml_node): |
ab25dde8919d
16323 Implement Install Execution Engine
Karen Tung <karen.tung@oracle.com>
parents:
diff
changeset
|
134 |
''' This internal engine info node will not be read from XML ''' |
ab25dde8919d
16323 Implement Install Execution Engine
Karen Tung <karen.tung@oracle.com>
parents:
diff
changeset
|
135 |
return False |
ab25dde8919d
16323 Implement Install Execution Engine
Karen Tung <karen.tung@oracle.com>
parents:
diff
changeset
|
136 |
|
ab25dde8919d
16323 Implement Install Execution Engine
Karen Tung <karen.tung@oracle.com>
parents:
diff
changeset
|
137 |
|
ab25dde8919d
16323 Implement Install Execution Engine
Karen Tung <karen.tung@oracle.com>
parents:
diff
changeset
|
138 |
class InstallEngine(object): |
ab25dde8919d
16323 Implement Install Execution Engine
Karen Tung <karen.tung@oracle.com>
parents:
diff
changeset
|
139 |
''' Install execution engine ''' |
ab25dde8919d
16323 Implement Install Execution Engine
Karen Tung <karen.tung@oracle.com>
parents:
diff
changeset
|
140 |
|
ab25dde8919d
16323 Implement Install Execution Engine
Karen Tung <karen.tung@oracle.com>
parents:
diff
changeset
|
141 |
CP_THREAD = "CheckpointThread" |
ab25dde8919d
16323 Implement Install Execution Engine
Karen Tung <karen.tung@oracle.com>
parents:
diff
changeset
|
142 |
EXEC_FAILED = "Execution Failed" |
ab25dde8919d
16323 Implement Install Execution Engine
Karen Tung <karen.tung@oracle.com>
parents:
diff
changeset
|
143 |
EXEC_SUCCESS = "Execution Successful" |
ab25dde8919d
16323 Implement Install Execution Engine
Karen Tung <karen.tung@oracle.com>
parents:
diff
changeset
|
144 |
EXEC_CANCELED = "Execution Canceled" |
ab25dde8919d
16323 Implement Install Execution Engine
Karen Tung <karen.tung@oracle.com>
parents:
diff
changeset
|
145 |
CP_INIT_FAILED = "Checkpoint Initialization Failed" |
ab25dde8919d
16323 Implement Install Execution Engine
Karen Tung <karen.tung@oracle.com>
parents:
diff
changeset
|
146 |
FATAL_INTERNAL = "InstallEngineInternal" |
ab25dde8919d
16323 Implement Install Execution Engine
Karen Tung <karen.tung@oracle.com>
parents:
diff
changeset
|
147 |
TMP_CACHE_ENV = "TEMP_DOC_DIR" |
ab25dde8919d
16323 Implement Install Execution Engine
Karen Tung <karen.tung@oracle.com>
parents:
diff
changeset
|
148 |
TMP_CACHE_PATH_ROOT_DEFAULT = "/var/run/install_engine" |
ab25dde8919d
16323 Implement Install Execution Engine
Karen Tung <karen.tung@oracle.com>
parents:
diff
changeset
|
149 |
TMP_CACHE_PATH_PREFIX = "engine." |
ab25dde8919d
16323 Implement Install Execution Engine
Karen Tung <karen.tung@oracle.com>
parents:
diff
changeset
|
150 |
CACHE_FILE_NAME_PREFIX = ".data_cache." |
ab25dde8919d
16323 Implement Install Execution Engine
Karen Tung <karen.tung@oracle.com>
parents:
diff
changeset
|
151 |
CACHE_FILE_NAME = CACHE_FILE_NAME_PREFIX + "%(checkpoint)s" |
ab25dde8919d
16323 Implement Install Execution Engine
Karen Tung <karen.tung@oracle.com>
parents:
diff
changeset
|
152 |
SNAPSHOT_NAME = ".step_%(checkpoint)s" |
1290
cfaa7349f221
7004000 Install engine enhancement to save original args/kwargs list before calling checkpoint's execute
Karen Tung <Karen.Tung@oracle.com>
parents:
1151
diff
changeset
|
153 |
CP_COMPLETED_SUFFIX = "-completed" |
909
ab25dde8919d
16323 Implement Install Execution Engine
Karen Tung <karen.tung@oracle.com>
parents:
diff
changeset
|
154 |
ENGINE_DOC_ROOT = "Engine-DOC-Root-Node" |
ab25dde8919d
16323 Implement Install Execution Engine
Karen Tung <karen.tung@oracle.com>
parents:
diff
changeset
|
155 |
|
ab25dde8919d
16323 Implement Install Execution Engine
Karen Tung <karen.tung@oracle.com>
parents:
diff
changeset
|
156 |
NUM_CALLBACK_ARGS = 2 |
ab25dde8919d
16323 Implement Install Execution Engine
Karen Tung <karen.tung@oracle.com>
parents:
diff
changeset
|
157 |
|
1350
025c6311d0d9
7071386 Improve progress reporting for text installer and GUI installer
Karen Tung <Karen.Tung@oracle.com>
parents:
1308
diff
changeset
|
158 |
# progress ratio for the preparing to execute checkpoints |
025c6311d0d9
7071386 Improve progress reporting for text installer and GUI installer
Karen Tung <Karen.Tung@oracle.com>
parents:
1308
diff
changeset
|
159 |
EXEC_PREP_RATIO = 0.05 |
025c6311d0d9
7071386 Improve progress reporting for text installer and GUI installer
Karen Tung <Karen.Tung@oracle.com>
parents:
1308
diff
changeset
|
160 |
EXEC_PREP_RATIO_DECIMAL = decimal.Decimal(str(EXEC_PREP_RATIO)) |
025c6311d0d9
7071386 Improve progress reporting for text installer and GUI installer
Karen Tung <Karen.Tung@oracle.com>
parents:
1308
diff
changeset
|
161 |
PREP_MSG = "Preparing for Installation" |
025c6311d0d9
7071386 Improve progress reporting for text installer and GUI installer
Karen Tung <Karen.Tung@oracle.com>
parents:
1308
diff
changeset
|
162 |
|
909
ab25dde8919d
16323 Implement Install Execution Engine
Karen Tung <karen.tung@oracle.com>
parents:
diff
changeset
|
163 |
_instance = None |
ab25dde8919d
16323 Implement Install Execution Engine
Karen Tung <karen.tung@oracle.com>
parents:
diff
changeset
|
164 |
|
ab25dde8919d
16323 Implement Install Execution Engine
Karen Tung <karen.tung@oracle.com>
parents:
diff
changeset
|
165 |
class _PseudoThread(threading.Thread): |
ab25dde8919d
16323 Implement Install Execution Engine
Karen Tung <karen.tung@oracle.com>
parents:
diff
changeset
|
166 |
''' thread used for execute_checkpoints() for the blocking case ''' |
ab25dde8919d
16323 Implement Install Execution Engine
Karen Tung <karen.tung@oracle.com>
parents:
diff
changeset
|
167 |
start = threading.Thread.run |
ab25dde8919d
16323 Implement Install Execution Engine
Karen Tung <karen.tung@oracle.com>
parents:
diff
changeset
|
168 |
|
1717
10cb4d15a248
7066254 Problem with install/logging
Ginnie Wray<virginia.wray@oracle.com>
parents:
1418
diff
changeset
|
169 |
def __new__(cls, default_log, loglevel=None, debug=False, |
10cb4d15a248
7066254 Problem with install/logging
Ginnie Wray<virginia.wray@oracle.com>
parents:
1418
diff
changeset
|
170 |
exclusive_rw=False, dataset=None, stop_on_error=True): |
909
ab25dde8919d
16323 Implement Install Execution Engine
Karen Tung <karen.tung@oracle.com>
parents:
diff
changeset
|
171 |
|
ab25dde8919d
16323 Implement Install Execution Engine
Karen Tung <karen.tung@oracle.com>
parents:
diff
changeset
|
172 |
if InstallEngine._instance is None: |
ab25dde8919d
16323 Implement Install Execution Engine
Karen Tung <karen.tung@oracle.com>
parents:
diff
changeset
|
173 |
return object.__new__(cls) |
ab25dde8919d
16323 Implement Install Execution Engine
Karen Tung <karen.tung@oracle.com>
parents:
diff
changeset
|
174 |
else: |
ab25dde8919d
16323 Implement Install Execution Engine
Karen Tung <karen.tung@oracle.com>
parents:
diff
changeset
|
175 |
raise SingletonError("InstallEngine instance already exists", |
ab25dde8919d
16323 Implement Install Execution Engine
Karen Tung <karen.tung@oracle.com>
parents:
diff
changeset
|
176 |
InstallEngine._instance) |
ab25dde8919d
16323 Implement Install Execution Engine
Karen Tung <karen.tung@oracle.com>
parents:
diff
changeset
|
177 |
|
1717
10cb4d15a248
7066254 Problem with install/logging
Ginnie Wray<virginia.wray@oracle.com>
parents:
1418
diff
changeset
|
178 |
def __init__(self, default_log, loglevel=None, debug=False, |
10cb4d15a248
7066254 Problem with install/logging
Ginnie Wray<virginia.wray@oracle.com>
parents:
1418
diff
changeset
|
179 |
exclusive_rw=False, dataset=None, stop_on_error=True): |
909
ab25dde8919d
16323 Implement Install Execution Engine
Karen Tung <karen.tung@oracle.com>
parents:
diff
changeset
|
180 |
''' Initializes the InstallEngine |
ab25dde8919d
16323 Implement Install Execution Engine
Karen Tung <karen.tung@oracle.com>
parents:
diff
changeset
|
181 |
|
ab25dde8919d
16323 Implement Install Execution Engine
Karen Tung <karen.tung@oracle.com>
parents:
diff
changeset
|
182 |
Input: |
1717
10cb4d15a248
7066254 Problem with install/logging
Ginnie Wray<virginia.wray@oracle.com>
parents:
1418
diff
changeset
|
183 |
- default_log: Required. The location of the default log for |
10cb4d15a248
7066254 Problem with install/logging
Ginnie Wray<virginia.wray@oracle.com>
parents:
1418
diff
changeset
|
184 |
the application. |
1418
8e9701e2c0f3
7033339 - Be able to specify logfile name when instantiate InstallLogger
Ginnie Wray<virginia.wray@oracle.com>
parents:
1350
diff
changeset
|
185 |
|
909
ab25dde8919d
16323 Implement Install Execution Engine
Karen Tung <karen.tung@oracle.com>
parents:
diff
changeset
|
186 |
- loglevel: Optional. Defaults to None. |
ab25dde8919d
16323 Implement Install Execution Engine
Karen Tung <karen.tung@oracle.com>
parents:
diff
changeset
|
187 |
Logging level to use for everything: application, |
ab25dde8919d
16323 Implement Install Execution Engine
Karen Tung <karen.tung@oracle.com>
parents:
diff
changeset
|
188 |
engine and checkpoints. This value is used while instantiating |
ab25dde8919d
16323 Implement Install Execution Engine
Karen Tung <karen.tung@oracle.com>
parents:
diff
changeset
|
189 |
the logger. If not specified, the default logging level for the |
ab25dde8919d
16323 Implement Install Execution Engine
Karen Tung <karen.tung@oracle.com>
parents:
diff
changeset
|
190 |
logging service is used. |
ab25dde8919d
16323 Implement Install Execution Engine
Karen Tung <karen.tung@oracle.com>
parents:
diff
changeset
|
191 |
|
ab25dde8919d
16323 Implement Install Execution Engine
Karen Tung <karen.tung@oracle.com>
parents:
diff
changeset
|
192 |
- Debug: Optional. Default to false. |
ab25dde8919d
16323 Implement Install Execution Engine
Karen Tung <karen.tung@oracle.com>
parents:
diff
changeset
|
193 |
If true, copies of DataObjectCache snapshot will not be |
ab25dde8919d
16323 Implement Install Execution Engine
Karen Tung <karen.tung@oracle.com>
parents:
diff
changeset
|
194 |
removed from the directory defined to store temporary snapshots |
ab25dde8919d
16323 Implement Install Execution Engine
Karen Tung <karen.tung@oracle.com>
parents:
diff
changeset
|
195 |
of DataObjectCache. |
ab25dde8919d
16323 Implement Install Execution Engine
Karen Tung <karen.tung@oracle.com>
parents:
diff
changeset
|
196 |
|
1717
10cb4d15a248
7066254 Problem with install/logging
Ginnie Wray<virginia.wray@oracle.com>
parents:
1418
diff
changeset
|
197 |
- exclusive_rw: Optional. Default to false. |
10cb4d15a248
7066254 Problem with install/logging
Ginnie Wray<virginia.wray@oracle.com>
parents:
1418
diff
changeset
|
198 |
If true, causes the default log file to be opened with exclusive |
10cb4d15a248
7066254 Problem with install/logging
Ginnie Wray<virginia.wray@oracle.com>
parents:
1418
diff
changeset
|
199 |
read/write privileges and restrictive access to the file. |
10cb4d15a248
7066254 Problem with install/logging
Ginnie Wray<virginia.wray@oracle.com>
parents:
1418
diff
changeset
|
200 |
|
909
ab25dde8919d
16323 Implement Install Execution Engine
Karen Tung <karen.tung@oracle.com>
parents:
diff
changeset
|
201 |
- Dataset: Optional. Default to None. |
ab25dde8919d
16323 Implement Install Execution Engine
Karen Tung <karen.tung@oracle.com>
parents:
diff
changeset
|
202 |
ZFS Dataset to be used by the engine to create ZFS snapshots |
ab25dde8919d
16323 Implement Install Execution Engine
Karen Tung <karen.tung@oracle.com>
parents:
diff
changeset
|
203 |
and DataObjectCache snapshots for supporting stop and resume. |
ab25dde8919d
16323 Implement Install Execution Engine
Karen Tung <karen.tung@oracle.com>
parents:
diff
changeset
|
204 |
This value can be set at a later time, if not set here. |
ab25dde8919d
16323 Implement Install Execution Engine
Karen Tung <karen.tung@oracle.com>
parents:
diff
changeset
|
205 |
Value of ZFS dataset specified will not be validated here to |
ab25dde8919d
16323 Implement Install Execution Engine
Karen Tung <karen.tung@oracle.com>
parents:
diff
changeset
|
206 |
ensure it exists. If dataset does not exist at this point, |
ab25dde8919d
16323 Implement Install Execution Engine
Karen Tung <karen.tung@oracle.com>
parents:
diff
changeset
|
207 |
it will not be created. |
ab25dde8919d
16323 Implement Install Execution Engine
Karen Tung <karen.tung@oracle.com>
parents:
diff
changeset
|
208 |
|
ab25dde8919d
16323 Implement Install Execution Engine
Karen Tung <karen.tung@oracle.com>
parents:
diff
changeset
|
209 |
- stop_on_error: Optional. Default to True. |
ab25dde8919d
16323 Implement Install Execution Engine
Karen Tung <karen.tung@oracle.com>
parents:
diff
changeset
|
210 |
This flag controls whether checkpoint execution should continue |
ab25dde8919d
16323 Implement Install Execution Engine
Karen Tung <karen.tung@oracle.com>
parents:
diff
changeset
|
211 |
if a checkpoint fails. This value can be set at a later time, |
ab25dde8919d
16323 Implement Install Execution Engine
Karen Tung <karen.tung@oracle.com>
parents:
diff
changeset
|
212 |
if not set here. |
ab25dde8919d
16323 Implement Install Execution Engine
Karen Tung <karen.tung@oracle.com>
parents:
diff
changeset
|
213 |
|
ab25dde8919d
16323 Implement Install Execution Engine
Karen Tung <karen.tung@oracle.com>
parents:
diff
changeset
|
214 |
Output: |
ab25dde8919d
16323 Implement Install Execution Engine
Karen Tung <karen.tung@oracle.com>
parents:
diff
changeset
|
215 |
None |
ab25dde8919d
16323 Implement Install Execution Engine
Karen Tung <karen.tung@oracle.com>
parents:
diff
changeset
|
216 |
|
ab25dde8919d
16323 Implement Install Execution Engine
Karen Tung <karen.tung@oracle.com>
parents:
diff
changeset
|
217 |
Raises: |
ab25dde8919d
16323 Implement Install Execution Engine
Karen Tung <karen.tung@oracle.com>
parents:
diff
changeset
|
218 |
None |
ab25dde8919d
16323 Implement Install Execution Engine
Karen Tung <karen.tung@oracle.com>
parents:
diff
changeset
|
219 |
''' |
ab25dde8919d
16323 Implement Install Execution Engine
Karen Tung <karen.tung@oracle.com>
parents:
diff
changeset
|
220 |
InstallEngine._instance = self |
ab25dde8919d
16323 Implement Install Execution Engine
Karen Tung <karen.tung@oracle.com>
parents:
diff
changeset
|
221 |
|
ab25dde8919d
16323 Implement Install Execution Engine
Karen Tung <karen.tung@oracle.com>
parents:
diff
changeset
|
222 |
# Logging must be instantiated before instantiating the DataObjectCache |
ab25dde8919d
16323 Implement Install Execution Engine
Karen Tung <karen.tung@oracle.com>
parents:
diff
changeset
|
223 |
# because data object cache might need to make logging calls. |
1717
10cb4d15a248
7066254 Problem with install/logging
Ginnie Wray<virginia.wray@oracle.com>
parents:
1418
diff
changeset
|
224 |
self._init_logging(default_log, loglevel, exclusive_rw) |
909
ab25dde8919d
16323 Implement Install Execution Engine
Karen Tung <karen.tung@oracle.com>
parents:
diff
changeset
|
225 |
|
ab25dde8919d
16323 Implement Install Execution Engine
Karen Tung <karen.tung@oracle.com>
parents:
diff
changeset
|
226 |
# initialize the data object cache |
ab25dde8919d
16323 Implement Install Execution Engine
Karen Tung <karen.tung@oracle.com>
parents:
diff
changeset
|
227 |
self.data_object_cache = DataObjectCache() |
ab25dde8919d
16323 Implement Install Execution Engine
Karen Tung <karen.tung@oracle.com>
parents:
diff
changeset
|
228 |
|
ab25dde8919d
16323 Implement Install Execution Engine
Karen Tung <karen.tung@oracle.com>
parents:
diff
changeset
|
229 |
self.debug = debug |
ab25dde8919d
16323 Implement Install Execution Engine
Karen Tung <karen.tung@oracle.com>
parents:
diff
changeset
|
230 |
self._dataset = None |
ab25dde8919d
16323 Implement Install Execution Engine
Karen Tung <karen.tung@oracle.com>
parents:
diff
changeset
|
231 |
self.dataset = dataset |
ab25dde8919d
16323 Implement Install Execution Engine
Karen Tung <karen.tung@oracle.com>
parents:
diff
changeset
|
232 |
self.stop_on_error = stop_on_error |
ab25dde8919d
16323 Implement Install Execution Engine
Karen Tung <karen.tung@oracle.com>
parents:
diff
changeset
|
233 |
self.__currently_executing = None |
ab25dde8919d
16323 Implement Install Execution Engine
Karen Tung <karen.tung@oracle.com>
parents:
diff
changeset
|
234 |
|
1121
670325895b19
7004610 Update Text Installer to use CUD
Karen Tung <karen.tung@oracle.com>
parents:
1096
diff
changeset
|
235 |
# Use 8 decimal precision for progress. Using less precision |
670325895b19
7004610 Update Text Installer to use CUD
Karen Tung <karen.tung@oracle.com>
parents:
1096
diff
changeset
|
236 |
# will cause problems when the estimated progress for some |
670325895b19
7004610 Update Text Installer to use CUD
Karen Tung <karen.tung@oracle.com>
parents:
1096
diff
changeset
|
237 |
# checkpoints are drastically different than the others. |
670325895b19
7004610 Update Text Installer to use CUD
Karen Tung <karen.tung@oracle.com>
parents:
1096
diff
changeset
|
238 |
# Always round down while calculating the progress ratios |
670325895b19
7004610 Update Text Installer to use CUD
Karen Tung <karen.tung@oracle.com>
parents:
1096
diff
changeset
|
239 |
d_context = decimal.Context(prec=8, rounding=decimal.ROUND_DOWN) |
909
ab25dde8919d
16323 Implement Install Execution Engine
Karen Tung <karen.tung@oracle.com>
parents:
diff
changeset
|
240 |
decimal.setcontext(d_context) |
ab25dde8919d
16323 Implement Install Execution Engine
Karen Tung <karen.tung@oracle.com>
parents:
diff
changeset
|
241 |
self.__current_completed = decimal.Decimal("0") |
ab25dde8919d
16323 Implement Install Execution Engine
Karen Tung <karen.tung@oracle.com>
parents:
diff
changeset
|
242 |
|
ab25dde8919d
16323 Implement Install Execution Engine
Karen Tung <karen.tung@oracle.com>
parents:
diff
changeset
|
243 |
self.__blocking_results = None |
ab25dde8919d
16323 Implement Install Execution Engine
Karen Tung <karen.tung@oracle.com>
parents:
diff
changeset
|
244 |
self.__resume_exec_cp_ok = True |
ab25dde8919d
16323 Implement Install Execution Engine
Karen Tung <karen.tung@oracle.com>
parents:
diff
changeset
|
245 |
self._checkpoints = [] |
ab25dde8919d
16323 Implement Install Execution Engine
Karen Tung <karen.tung@oracle.com>
parents:
diff
changeset
|
246 |
self.checkpoint_thread = None |
ab25dde8919d
16323 Implement Install Execution Engine
Karen Tung <karen.tung@oracle.com>
parents:
diff
changeset
|
247 |
self._tmp_cache_path = None |
ab25dde8919d
16323 Implement Install Execution Engine
Karen Tung <karen.tung@oracle.com>
parents:
diff
changeset
|
248 |
self._checkpoint_lock = threading.Lock() |
ab25dde8919d
16323 Implement Install Execution Engine
Karen Tung <karen.tung@oracle.com>
parents:
diff
changeset
|
249 |
self._cancel_event = threading.Event() |
ab25dde8919d
16323 Implement Install Execution Engine
Karen Tung <karen.tung@oracle.com>
parents:
diff
changeset
|
250 |
|
ab25dde8919d
16323 Implement Install Execution Engine
Karen Tung <karen.tung@oracle.com>
parents:
diff
changeset
|
251 |
# The following will be set to True anytime a ZFS snapshot call is made |
ab25dde8919d
16323 Implement Install Execution Engine
Karen Tung <karen.tung@oracle.com>
parents:
diff
changeset
|
252 |
self.zfs_snapshots_modifed = False |
ab25dde8919d
16323 Implement Install Execution Engine
Karen Tung <karen.tung@oracle.com>
parents:
diff
changeset
|
253 |
|
1350
025c6311d0d9
7071386 Improve progress reporting for text installer and GUI installer
Karen Tung <Karen.Tung@oracle.com>
parents:
1308
diff
changeset
|
254 |
# in the process of preparing for execution |
025c6311d0d9
7071386 Improve progress reporting for text installer and GUI installer
Karen Tung <Karen.Tung@oracle.com>
parents:
1308
diff
changeset
|
255 |
self.exec_prep = False |
025c6311d0d9
7071386 Improve progress reporting for text installer and GUI installer
Karen Tung <Karen.Tung@oracle.com>
parents:
1308
diff
changeset
|
256 |
|
909
ab25dde8919d
16323 Implement Install Execution Engine
Karen Tung <karen.tung@oracle.com>
parents:
diff
changeset
|
257 |
def __del__(self): |
ab25dde8919d
16323 Implement Install Execution Engine
Karen Tung <karen.tung@oracle.com>
parents:
diff
changeset
|
258 |
if self._tmp_cache_path is not None and not self.debug: |
ab25dde8919d
16323 Implement Install Execution Engine
Karen Tung <karen.tung@oracle.com>
parents:
diff
changeset
|
259 |
shutil.rmtree(self._tmp_cache_path, ignore_errors=True) |
ab25dde8919d
16323 Implement Install Execution Engine
Karen Tung <karen.tung@oracle.com>
parents:
diff
changeset
|
260 |
self._tmp_cache_path = None |
ab25dde8919d
16323 Implement Install Execution Engine
Karen Tung <karen.tung@oracle.com>
parents:
diff
changeset
|
261 |
|
1717
10cb4d15a248
7066254 Problem with install/logging
Ginnie Wray<virginia.wray@oracle.com>
parents:
1418
diff
changeset
|
262 |
def _init_logging(self, default_log, loglevel, exclusive_rw): |
909
ab25dde8919d
16323 Implement Install Execution Engine
Karen Tung <karen.tung@oracle.com>
parents:
diff
changeset
|
263 |
''' Initialize logging and set the loglevel if provided ''' |
ab25dde8919d
16323 Implement Install Execution Engine
Karen Tung <karen.tung@oracle.com>
parents:
diff
changeset
|
264 |
logging.setLoggerClass(InstallLogger) |
ab25dde8919d
16323 Implement Install Execution Engine
Karen Tung <karen.tung@oracle.com>
parents:
diff
changeset
|
265 |
global LOGGER |
1418
8e9701e2c0f3
7033339 - Be able to specify logfile name when instantiate InstallLogger
Ginnie Wray<virginia.wray@oracle.com>
parents:
1350
diff
changeset
|
266 |
LOGGER = InstallLogger.manager.getLogger(INSTALL_LOGGER_NAME, |
1717
10cb4d15a248
7066254 Problem with install/logging
Ginnie Wray<virginia.wray@oracle.com>
parents:
1418
diff
changeset
|
267 |
log=default_log, level=loglevel, exclusive_rw=exclusive_rw) |
909
ab25dde8919d
16323 Implement Install Execution Engine
Karen Tung <karen.tung@oracle.com>
parents:
diff
changeset
|
268 |
InstallLogger.ENGINE = self |
1717
10cb4d15a248
7066254 Problem with install/logging
Ginnie Wray<virginia.wray@oracle.com>
parents:
1418
diff
changeset
|
269 |
|
909
ab25dde8919d
16323 Implement Install Execution Engine
Karen Tung <karen.tung@oracle.com>
parents:
diff
changeset
|
270 |
if not isinstance(LOGGER, InstallLogger): |
ab25dde8919d
16323 Implement Install Execution Engine
Karen Tung <karen.tung@oracle.com>
parents:
diff
changeset
|
271 |
# Occurs if some module has called logging.getLogger prior to |
ab25dde8919d
16323 Implement Install Execution Engine
Karen Tung <karen.tung@oracle.com>
parents:
diff
changeset
|
272 |
# this function being run. As this means we don't have control |
ab25dde8919d
16323 Implement Install Execution Engine
Karen Tung <karen.tung@oracle.com>
parents:
diff
changeset
|
273 |
# over the logger associated with INSTALL_LOGGER_NAME, there's |
ab25dde8919d
16323 Implement Install Execution Engine
Karen Tung <karen.tung@oracle.com>
parents:
diff
changeset
|
274 |
# a programming error and we need to abort |
ab25dde8919d
16323 Implement Install Execution Engine
Karen Tung <karen.tung@oracle.com>
parents:
diff
changeset
|
275 |
raise LogInitError("Wrong logger class: got %s, expected %s" % |
ab25dde8919d
16323 Implement Install Execution Engine
Karen Tung <karen.tung@oracle.com>
parents:
diff
changeset
|
276 |
(LOGGER.__class__, InstallLogger)) |
ab25dde8919d
16323 Implement Install Execution Engine
Karen Tung <karen.tung@oracle.com>
parents:
diff
changeset
|
277 |
|
ab25dde8919d
16323 Implement Install Execution Engine
Karen Tung <karen.tung@oracle.com>
parents:
diff
changeset
|
278 |
@classmethod |
ab25dde8919d
16323 Implement Install Execution Engine
Karen Tung <karen.tung@oracle.com>
parents:
diff
changeset
|
279 |
def get_instance(cls): |
ab25dde8919d
16323 Implement Install Execution Engine
Karen Tung <karen.tung@oracle.com>
parents:
diff
changeset
|
280 |
'''Returns the InstallEngine singleton''' |
ab25dde8919d
16323 Implement Install Execution Engine
Karen Tung <karen.tung@oracle.com>
parents:
diff
changeset
|
281 |
if cls._instance is None: |
ab25dde8919d
16323 Implement Install Execution Engine
Karen Tung <karen.tung@oracle.com>
parents:
diff
changeset
|
282 |
raise SingletonError("%s not yet initialized" % cls) |
ab25dde8919d
16323 Implement Install Execution Engine
Karen Tung <karen.tung@oracle.com>
parents:
diff
changeset
|
283 |
|
ab25dde8919d
16323 Implement Install Execution Engine
Karen Tung <karen.tung@oracle.com>
parents:
diff
changeset
|
284 |
return cls._instance |
ab25dde8919d
16323 Implement Install Execution Engine
Karen Tung <karen.tung@oracle.com>
parents:
diff
changeset
|
285 |
|
ab25dde8919d
16323 Implement Install Execution Engine
Karen Tung <karen.tung@oracle.com>
parents:
diff
changeset
|
286 |
@property |
ab25dde8919d
16323 Implement Install Execution Engine
Karen Tung <karen.tung@oracle.com>
parents:
diff
changeset
|
287 |
def dataset(self): |
ab25dde8919d
16323 Implement Install Execution Engine
Karen Tung <karen.tung@oracle.com>
parents:
diff
changeset
|
288 |
''' Returns the ZFS dataset to used for stop/resume ''' |
ab25dde8919d
16323 Implement Install Execution Engine
Karen Tung <karen.tung@oracle.com>
parents:
diff
changeset
|
289 |
return self._dataset |
ab25dde8919d
16323 Implement Install Execution Engine
Karen Tung <karen.tung@oracle.com>
parents:
diff
changeset
|
290 |
|
ab25dde8919d
16323 Implement Install Execution Engine
Karen Tung <karen.tung@oracle.com>
parents:
diff
changeset
|
291 |
@dataset.setter |
ab25dde8919d
16323 Implement Install Execution Engine
Karen Tung <karen.tung@oracle.com>
parents:
diff
changeset
|
292 |
def dataset(self, dataset): |
ab25dde8919d
16323 Implement Install Execution Engine
Karen Tung <karen.tung@oracle.com>
parents:
diff
changeset
|
293 |
''' Sets the dataset to be used for stop/resume ''' |
1070
ef77609251f5
7021591 provide an implementation of TI/TD based on CUD
Drew Fisher <drew.fisher@oracle.com>
parents:
948
diff
changeset
|
294 |
if dataset is not None and not isinstance(dataset, Filesystem): |
ef77609251f5
7021591 provide an implementation of TI/TD based on CUD
Drew Fisher <drew.fisher@oracle.com>
parents:
948
diff
changeset
|
295 |
dataset = Filesystem(dataset) |
909
ab25dde8919d
16323 Implement Install Execution Engine
Karen Tung <karen.tung@oracle.com>
parents:
diff
changeset
|
296 |
self._dataset = dataset |
ab25dde8919d
16323 Implement Install Execution Engine
Karen Tung <karen.tung@oracle.com>
parents:
diff
changeset
|
297 |
|
ab25dde8919d
16323 Implement Install Execution Engine
Karen Tung <karen.tung@oracle.com>
parents:
diff
changeset
|
298 |
def register_checkpoint(self, checkpoint_name, module_path, |
ab25dde8919d
16323 Implement Install Execution Engine
Karen Tung <karen.tung@oracle.com>
parents:
diff
changeset
|
299 |
checkpoint_class_name, insert_before=None, |
ab25dde8919d
16323 Implement Install Execution Engine
Karen Tung <karen.tung@oracle.com>
parents:
diff
changeset
|
300 |
loglevel=None, args=(), kwargs=None): |
ab25dde8919d
16323 Implement Install Execution Engine
Karen Tung <karen.tung@oracle.com>
parents:
diff
changeset
|
301 |
'''Input: |
ab25dde8919d
16323 Implement Install Execution Engine
Karen Tung <karen.tung@oracle.com>
parents:
diff
changeset
|
302 |
* checkpoint_name(required): Name used for referring to the |
ab25dde8919d
16323 Implement Install Execution Engine
Karen Tung <karen.tung@oracle.com>
parents:
diff
changeset
|
303 |
checkpoint after registration. This name must be unique among |
ab25dde8919d
16323 Implement Install Execution Engine
Karen Tung <karen.tung@oracle.com>
parents:
diff
changeset
|
304 |
the list of registered checkpoints. Furthermore, |
ab25dde8919d
16323 Implement Install Execution Engine
Karen Tung <karen.tung@oracle.com>
parents:
diff
changeset
|
305 |
checkpoint names are restricted to have only |
ab25dde8919d
16323 Implement Install Execution Engine
Karen Tung <karen.tung@oracle.com>
parents:
diff
changeset
|
306 |
ASCII letters, numbers, dots, dashes and underscore. |
ab25dde8919d
16323 Implement Install Execution Engine
Karen Tung <karen.tung@oracle.com>
parents:
diff
changeset
|
307 |
Length of the name must be less than 256 characters. |
ab25dde8919d
16323 Implement Install Execution Engine
Karen Tung <karen.tung@oracle.com>
parents:
diff
changeset
|
308 |
|
ab25dde8919d
16323 Implement Install Execution Engine
Karen Tung <karen.tung@oracle.com>
parents:
diff
changeset
|
309 |
* module_path (required): Path of the module containing the |
ab25dde8919d
16323 Implement Install Execution Engine
Karen Tung <karen.tung@oracle.com>
parents:
diff
changeset
|
310 |
checkpoint implementation. Value provided will be used in the |
ab25dde8919d
16323 Implement Install Execution Engine
Karen Tung <karen.tung@oracle.com>
parents:
diff
changeset
|
311 |
Python imp.find_module() call. If a relative path is provided, |
ab25dde8919d
16323 Implement Install Execution Engine
Karen Tung <karen.tung@oracle.com>
parents:
diff
changeset
|
312 |
it must be resolvable by the PYTHONPATH. If a full path is |
ab25dde8919d
16323 Implement Install Execution Engine
Karen Tung <karen.tung@oracle.com>
parents:
diff
changeset
|
313 |
provided and the path is outside of |
ab25dde8919d
16323 Implement Install Execution Engine
Karen Tung <karen.tung@oracle.com>
parents:
diff
changeset
|
314 |
the python sys.path, the ImportWarning will be raised. |
ab25dde8919d
16323 Implement Install Execution Engine
Karen Tung <karen.tung@oracle.com>
parents:
diff
changeset
|
315 |
|
ab25dde8919d
16323 Implement Install Execution Engine
Karen Tung <karen.tung@oracle.com>
parents:
diff
changeset
|
316 |
* checkpoint_class_name(required): a string specifying the |
ab25dde8919d
16323 Implement Install Execution Engine
Karen Tung <karen.tung@oracle.com>
parents:
diff
changeset
|
317 |
class name of the checkpoint object to be instantiated. |
ab25dde8919d
16323 Implement Install Execution Engine
Karen Tung <karen.tung@oracle.com>
parents:
diff
changeset
|
318 |
|
ab25dde8919d
16323 Implement Install Execution Engine
Karen Tung <karen.tung@oracle.com>
parents:
diff
changeset
|
319 |
* args (optional): One or more arguments can be specified for the |
ab25dde8919d
16323 Implement Install Execution Engine
Karen Tung <karen.tung@oracle.com>
parents:
diff
changeset
|
320 |
constructor of the checkpoint object. The order in which the |
ab25dde8919d
16323 Implement Install Execution Engine
Karen Tung <karen.tung@oracle.com>
parents:
diff
changeset
|
321 |
arguments are specified will be the order in which they are |
ab25dde8919d
16323 Implement Install Execution Engine
Karen Tung <karen.tung@oracle.com>
parents:
diff
changeset
|
322 |
passed. By default, no arguments are passed. |
ab25dde8919d
16323 Implement Install Execution Engine
Karen Tung <karen.tung@oracle.com>
parents:
diff
changeset
|
323 |
|
ab25dde8919d
16323 Implement Install Execution Engine
Karen Tung <karen.tung@oracle.com>
parents:
diff
changeset
|
324 |
* insert_before(optional): Insert this checkpoint before the |
ab25dde8919d
16323 Implement Install Execution Engine
Karen Tung <karen.tung@oracle.com>
parents:
diff
changeset
|
325 |
named checkpoint. The named checkpoint must have been |
ab25dde8919d
16323 Implement Install Execution Engine
Karen Tung <karen.tung@oracle.com>
parents:
diff
changeset
|
326 |
previously registered, and it must have not been executed. |
ab25dde8919d
16323 Implement Install Execution Engine
Karen Tung <karen.tung@oracle.com>
parents:
diff
changeset
|
327 |
Even though this argument comes after the *args parameter, |
ab25dde8919d
16323 Implement Install Execution Engine
Karen Tung <karen.tung@oracle.com>
parents:
diff
changeset
|
328 |
it will not be passed into the constructor of the checkpoint |
ab25dde8919d
16323 Implement Install Execution Engine
Karen Tung <karen.tung@oracle.com>
parents:
diff
changeset
|
329 |
object. Because Python does not allow keyword arguments to |
ab25dde8919d
16323 Implement Install Execution Engine
Karen Tung <karen.tung@oracle.com>
parents:
diff
changeset
|
330 |
appear before arguments, it has to come after the args parameter. |
ab25dde8919d
16323 Implement Install Execution Engine
Karen Tung <karen.tung@oracle.com>
parents:
diff
changeset
|
331 |
|
ab25dde8919d
16323 Implement Install Execution Engine
Karen Tung <karen.tung@oracle.com>
parents:
diff
changeset
|
332 |
* Log level for checkpoint(optional): If the application wants to |
ab25dde8919d
16323 Implement Install Execution Engine
Karen Tung <karen.tung@oracle.com>
parents:
diff
changeset
|
333 |
use a different log level for the checkpoint, it can specify |
ab25dde8919d
16323 Implement Install Execution Engine
Karen Tung <karen.tung@oracle.com>
parents:
diff
changeset
|
334 |
it using the keyword argument loglevel=<log_level>. The |
ab25dde8919d
16323 Implement Install Execution Engine
Karen Tung <karen.tung@oracle.com>
parents:
diff
changeset
|
335 |
log level specified must be valid for the log service. |
ab25dde8919d
16323 Implement Install Execution Engine
Karen Tung <karen.tung@oracle.com>
parents:
diff
changeset
|
336 |
The value specified in the loglevel keyword will be used by |
ab25dde8919d
16323 Implement Install Execution Engine
Karen Tung <karen.tung@oracle.com>
parents:
diff
changeset
|
337 |
the engine as part of setup prior to a checkpoint's execution. |
ab25dde8919d
16323 Implement Install Execution Engine
Karen Tung <karen.tung@oracle.com>
parents:
diff
changeset
|
338 |
The loglevel keyword argument will not get passed into the |
ab25dde8919d
16323 Implement Install Execution Engine
Karen Tung <karen.tung@oracle.com>
parents:
diff
changeset
|
339 |
constructor of the checkpoint. |
ab25dde8919d
16323 Implement Install Execution Engine
Karen Tung <karen.tung@oracle.com>
parents:
diff
changeset
|
340 |
|
ab25dde8919d
16323 Implement Install Execution Engine
Karen Tung <karen.tung@oracle.com>
parents:
diff
changeset
|
341 |
* kwargs(optional): One or more keyword arguments can be |
ab25dde8919d
16323 Implement Install Execution Engine
Karen Tung <karen.tung@oracle.com>
parents:
diff
changeset
|
342 |
specified for the constructor of the checkpoint object. |
ab25dde8919d
16323 Implement Install Execution Engine
Karen Tung <karen.tung@oracle.com>
parents:
diff
changeset
|
343 |
The order in which the keyword arguments are specified will |
ab25dde8919d
16323 Implement Install Execution Engine
Karen Tung <karen.tung@oracle.com>
parents:
diff
changeset
|
344 |
be the order in which they are passed. By default, no keyword |
ab25dde8919d
16323 Implement Install Execution Engine
Karen Tung <karen.tung@oracle.com>
parents:
diff
changeset
|
345 |
arguments are passed. |
ab25dde8919d
16323 Implement Install Execution Engine
Karen Tung <karen.tung@oracle.com>
parents:
diff
changeset
|
346 |
|
ab25dde8919d
16323 Implement Install Execution Engine
Karen Tung <karen.tung@oracle.com>
parents:
diff
changeset
|
347 |
Output: |
ab25dde8919d
16323 Implement Install Execution Engine
Karen Tung <karen.tung@oracle.com>
parents:
diff
changeset
|
348 |
None |
ab25dde8919d
16323 Implement Install Execution Engine
Karen Tung <karen.tung@oracle.com>
parents:
diff
changeset
|
349 |
|
ab25dde8919d
16323 Implement Install Execution Engine
Karen Tung <karen.tung@oracle.com>
parents:
diff
changeset
|
350 |
Raise: |
ab25dde8919d
16323 Implement Install Execution Engine
Karen Tung <karen.tung@oracle.com>
parents:
diff
changeset
|
351 |
* ImportError: Error in finding the specified module or |
ab25dde8919d
16323 Implement Install Execution Engine
Karen Tung <karen.tung@oracle.com>
parents:
diff
changeset
|
352 |
checkpoint object in the module. |
ab25dde8919d
16323 Implement Install Execution Engine
Karen Tung <karen.tung@oracle.com>
parents:
diff
changeset
|
353 |
|
ab25dde8919d
16323 Implement Install Execution Engine
Karen Tung <karen.tung@oracle.com>
parents:
diff
changeset
|
354 |
* ChkptRegistrationError: This error will be raised for the |
ab25dde8919d
16323 Implement Install Execution Engine
Karen Tung <karen.tung@oracle.com>
parents:
diff
changeset
|
355 |
any problem with registering the checkpoint. The error message |
ab25dde8919d
16323 Implement Install Execution Engine
Karen Tung <karen.tung@oracle.com>
parents:
diff
changeset
|
356 |
will indicate the exact cause of the problem. |
ab25dde8919d
16323 Implement Install Execution Engine
Karen Tung <karen.tung@oracle.com>
parents:
diff
changeset
|
357 |
|
ab25dde8919d
16323 Implement Install Execution Engine
Karen Tung <karen.tung@oracle.com>
parents:
diff
changeset
|
358 |
* UnknownChkptError: Name specified in insert_before argument |
ab25dde8919d
16323 Implement Install Execution Engine
Karen Tung <karen.tung@oracle.com>
parents:
diff
changeset
|
359 |
is not found. |
ab25dde8919d
16323 Implement Install Execution Engine
Karen Tung <karen.tung@oracle.com>
parents:
diff
changeset
|
360 |
|
ab25dde8919d
16323 Implement Install Execution Engine
Karen Tung <karen.tung@oracle.com>
parents:
diff
changeset
|
361 |
* ChkptExecutedError: The checkpoint specified in the |
ab25dde8919d
16323 Implement Install Execution Engine
Karen Tung <karen.tung@oracle.com>
parents:
diff
changeset
|
362 |
insert_before argument has been executed. |
ab25dde8919d
16323 Implement Install Execution Engine
Karen Tung <karen.tung@oracle.com>
parents:
diff
changeset
|
363 |
|
ab25dde8919d
16323 Implement Install Execution Engine
Karen Tung <karen.tung@oracle.com>
parents:
diff
changeset
|
364 |
* ValueError: Provided loglevel is not valid. |
ab25dde8919d
16323 Implement Install Execution Engine
Karen Tung <karen.tung@oracle.com>
parents:
diff
changeset
|
365 |
|
ab25dde8919d
16323 Implement Install Execution Engine
Karen Tung <karen.tung@oracle.com>
parents:
diff
changeset
|
366 |
* ImportWarning: The provide module path from which the module |
ab25dde8919d
16323 Implement Install Execution Engine
Karen Tung <karen.tung@oracle.com>
parents:
diff
changeset
|
367 |
will be imported is outside of sys.path. |
ab25dde8919d
16323 Implement Install Execution Engine
Karen Tung <karen.tung@oracle.com>
parents:
diff
changeset
|
368 |
''' |
ab25dde8919d
16323 Implement Install Execution Engine
Karen Tung <karen.tung@oracle.com>
parents:
diff
changeset
|
369 |
|
ab25dde8919d
16323 Implement Install Execution Engine
Karen Tung <karen.tung@oracle.com>
parents:
diff
changeset
|
370 |
# Checkpoint registration can not happen while checkpoint's execution |
ab25dde8919d
16323 Implement Install Execution Engine
Karen Tung <karen.tung@oracle.com>
parents:
diff
changeset
|
371 |
# is in progress. Make sure we are not in the middle of |
ab25dde8919d
16323 Implement Install Execution Engine
Karen Tung <karen.tung@oracle.com>
parents:
diff
changeset
|
372 |
# executing checkpoints |
ab25dde8919d
16323 Implement Install Execution Engine
Karen Tung <karen.tung@oracle.com>
parents:
diff
changeset
|
373 |
if self._is_executing_checkpoints(): |
ab25dde8919d
16323 Implement Install Execution Engine
Karen Tung <karen.tung@oracle.com>
parents:
diff
changeset
|
374 |
raise ChkptRegistrationError("Checkpoint registration is " |
ab25dde8919d
16323 Implement Install Execution Engine
Karen Tung <karen.tung@oracle.com>
parents:
diff
changeset
|
375 |
"not allowed during checkpoint execution.") |
ab25dde8919d
16323 Implement Install Execution Engine
Karen Tung <karen.tung@oracle.com>
parents:
diff
changeset
|
376 |
|
ab25dde8919d
16323 Implement Install Execution Engine
Karen Tung <karen.tung@oracle.com>
parents:
diff
changeset
|
377 |
if checkpoint_name is None: |
ab25dde8919d
16323 Implement Install Execution Engine
Karen Tung <karen.tung@oracle.com>
parents:
diff
changeset
|
378 |
raise ChkptRegistrationError("checkpoint_name must be specified.") |
ab25dde8919d
16323 Implement Install Execution Engine
Karen Tung <karen.tung@oracle.com>
parents:
diff
changeset
|
379 |
|
ab25dde8919d
16323 Implement Install Execution Engine
Karen Tung <karen.tung@oracle.com>
parents:
diff
changeset
|
380 |
if (len(checkpoint_name)) < 1 or (len(checkpoint_name) > 256): |
ab25dde8919d
16323 Implement Install Execution Engine
Karen Tung <karen.tung@oracle.com>
parents:
diff
changeset
|
381 |
raise ChkptRegistrationError("Length of checkpoint_name must be " |
ab25dde8919d
16323 Implement Install Execution Engine
Karen Tung <karen.tung@oracle.com>
parents:
diff
changeset
|
382 |
"between 1-256 characters.") |
ab25dde8919d
16323 Implement Install Execution Engine
Karen Tung <karen.tung@oracle.com>
parents:
diff
changeset
|
383 |
|
ab25dde8919d
16323 Implement Install Execution Engine
Karen Tung <karen.tung@oracle.com>
parents:
diff
changeset
|
384 |
# Verify checkpoint names are restricted to have only |
ab25dde8919d
16323 Implement Install Execution Engine
Karen Tung <karen.tung@oracle.com>
parents:
diff
changeset
|
385 |
# ASCII letters, numbers, dots, dashes and underscore. |
ab25dde8919d
16323 Implement Install Execution Engine
Karen Tung <karen.tung@oracle.com>
parents:
diff
changeset
|
386 |
allowed = set(string.ascii_letters + string.digits + '.' + '-' + '_') |
ab25dde8919d
16323 Implement Install Execution Engine
Karen Tung <karen.tung@oracle.com>
parents:
diff
changeset
|
387 |
if set(checkpoint_name) > allowed: |
ab25dde8919d
16323 Implement Install Execution Engine
Karen Tung <karen.tung@oracle.com>
parents:
diff
changeset
|
388 |
raise ChkptRegistrationError("checkpoint_name is restricted to " |
ab25dde8919d
16323 Implement Install Execution Engine
Karen Tung <karen.tung@oracle.com>
parents:
diff
changeset
|
389 |
"have only ASCII letters, numbers, " |
ab25dde8919d
16323 Implement Install Execution Engine
Karen Tung <karen.tung@oracle.com>
parents:
diff
changeset
|
390 |
"dots, dashes and underscore.") |
ab25dde8919d
16323 Implement Install Execution Engine
Karen Tung <karen.tung@oracle.com>
parents:
diff
changeset
|
391 |
|
ab25dde8919d
16323 Implement Install Execution Engine
Karen Tung <karen.tung@oracle.com>
parents:
diff
changeset
|
392 |
if (module_path is None) or (module_path == ""): |
ab25dde8919d
16323 Implement Install Execution Engine
Karen Tung <karen.tung@oracle.com>
parents:
diff
changeset
|
393 |
raise ChkptRegistrationError("module_path must not be " + |
ab25dde8919d
16323 Implement Install Execution Engine
Karen Tung <karen.tung@oracle.com>
parents:
diff
changeset
|
394 |
str(module_path)) |
ab25dde8919d
16323 Implement Install Execution Engine
Karen Tung <karen.tung@oracle.com>
parents:
diff
changeset
|
395 |
|
ab25dde8919d
16323 Implement Install Execution Engine
Karen Tung <karen.tung@oracle.com>
parents:
diff
changeset
|
396 |
if (checkpoint_class_name is None) or (checkpoint_class_name == ""): |
ab25dde8919d
16323 Implement Install Execution Engine
Karen Tung <karen.tung@oracle.com>
parents:
diff
changeset
|
397 |
raise ChkptRegistrationError("checkpoint_class_name must not be " + |
ab25dde8919d
16323 Implement Install Execution Engine
Karen Tung <karen.tung@oracle.com>
parents:
diff
changeset
|
398 |
str(checkpoint_class_name)) |
ab25dde8919d
16323 Implement Install Execution Engine
Karen Tung <karen.tung@oracle.com>
parents:
diff
changeset
|
399 |
|
ab25dde8919d
16323 Implement Install Execution Engine
Karen Tung <karen.tung@oracle.com>
parents:
diff
changeset
|
400 |
LOGGER.debug("Engine registering:") |
ab25dde8919d
16323 Implement Install Execution Engine
Karen Tung <karen.tung@oracle.com>
parents:
diff
changeset
|
401 |
LOGGER.debug("name: " + str(checkpoint_name)) |
ab25dde8919d
16323 Implement Install Execution Engine
Karen Tung <karen.tung@oracle.com>
parents:
diff
changeset
|
402 |
LOGGER.debug("module_path: " + str(module_path)) |
ab25dde8919d
16323 Implement Install Execution Engine
Karen Tung <karen.tung@oracle.com>
parents:
diff
changeset
|
403 |
LOGGER.debug("checkpoint_class_name: " + str(checkpoint_class_name)) |
ab25dde8919d
16323 Implement Install Execution Engine
Karen Tung <karen.tung@oracle.com>
parents:
diff
changeset
|
404 |
LOGGER.debug("args: " + str(args)) |
ab25dde8919d
16323 Implement Install Execution Engine
Karen Tung <karen.tung@oracle.com>
parents:
diff
changeset
|
405 |
LOGGER.debug("kwargs: " + str(kwargs)) |
ab25dde8919d
16323 Implement Install Execution Engine
Karen Tung <karen.tung@oracle.com>
parents:
diff
changeset
|
406 |
LOGGER.debug("insert_before: " + str(insert_before)) |
ab25dde8919d
16323 Implement Install Execution Engine
Karen Tung <karen.tung@oracle.com>
parents:
diff
changeset
|
407 |
LOGGER.debug("log_level: " + str(loglevel)) |
ab25dde8919d
16323 Implement Install Execution Engine
Karen Tung <karen.tung@oracle.com>
parents:
diff
changeset
|
408 |
LOGGER.debug("=============================") |
ab25dde8919d
16323 Implement Install Execution Engine
Karen Tung <karen.tung@oracle.com>
parents:
diff
changeset
|
409 |
|
ab25dde8919d
16323 Implement Install Execution Engine
Karen Tung <karen.tung@oracle.com>
parents:
diff
changeset
|
410 |
# Go through list of existing checkpoints, and make sure the name |
ab25dde8919d
16323 Implement Install Execution Engine
Karen Tung <karen.tung@oracle.com>
parents:
diff
changeset
|
411 |
# has not already been used, and insert_before value, if defined, |
ab25dde8919d
16323 Implement Install Execution Engine
Karen Tung <karen.tung@oracle.com>
parents:
diff
changeset
|
412 |
# has not been executed. |
ab25dde8919d
16323 Implement Install Execution Engine
Karen Tung <karen.tung@oracle.com>
parents:
diff
changeset
|
413 |
|
ab25dde8919d
16323 Implement Install Execution Engine
Karen Tung <karen.tung@oracle.com>
parents:
diff
changeset
|
414 |
insert_index = len(self._checkpoints) |
ab25dde8919d
16323 Implement Install Execution Engine
Karen Tung <karen.tung@oracle.com>
parents:
diff
changeset
|
415 |
for cp in self._checkpoints: |
ab25dde8919d
16323 Implement Install Execution Engine
Karen Tung <karen.tung@oracle.com>
parents:
diff
changeset
|
416 |
if (cp.name == checkpoint_name): |
ab25dde8919d
16323 Implement Install Execution Engine
Karen Tung <karen.tung@oracle.com>
parents:
diff
changeset
|
417 |
raise ChkptRegistrationError(checkpoint_name + |
ab25dde8919d
16323 Implement Install Execution Engine
Karen Tung <karen.tung@oracle.com>
parents:
diff
changeset
|
418 |
" has already been used.") |
ab25dde8919d
16323 Implement Install Execution Engine
Karen Tung <karen.tung@oracle.com>
parents:
diff
changeset
|
419 |
|
ab25dde8919d
16323 Implement Install Execution Engine
Karen Tung <karen.tung@oracle.com>
parents:
diff
changeset
|
420 |
if (cp.name == insert_before): |
ab25dde8919d
16323 Implement Install Execution Engine
Karen Tung <karen.tung@oracle.com>
parents:
diff
changeset
|
421 |
if cp.completed: |
ab25dde8919d
16323 Implement Install Execution Engine
Karen Tung <karen.tung@oracle.com>
parents:
diff
changeset
|
422 |
raise ChkptRegistrationError(insert_before + |
ab25dde8919d
16323 Implement Install Execution Engine
Karen Tung <karen.tung@oracle.com>
parents:
diff
changeset
|
423 |
" has been executed.") |
ab25dde8919d
16323 Implement Install Execution Engine
Karen Tung <karen.tung@oracle.com>
parents:
diff
changeset
|
424 |
else: |
ab25dde8919d
16323 Implement Install Execution Engine
Karen Tung <karen.tung@oracle.com>
parents:
diff
changeset
|
425 |
insert_index = self._checkpoints.index(cp) |
ab25dde8919d
16323 Implement Install Execution Engine
Karen Tung <karen.tung@oracle.com>
parents:
diff
changeset
|
426 |
|
ab25dde8919d
16323 Implement Install Execution Engine
Karen Tung <karen.tung@oracle.com>
parents:
diff
changeset
|
427 |
if (insert_before is not None and |
ab25dde8919d
16323 Implement Install Execution Engine
Karen Tung <karen.tung@oracle.com>
parents:
diff
changeset
|
428 |
insert_index == len(self._checkpoints)): |
ab25dde8919d
16323 Implement Install Execution Engine
Karen Tung <karen.tung@oracle.com>
parents:
diff
changeset
|
429 |
|
ab25dde8919d
16323 Implement Install Execution Engine
Karen Tung <karen.tung@oracle.com>
parents:
diff
changeset
|
430 |
raise ChkptRegistrationError("insert_before checkpoint: " + \ |
ab25dde8919d
16323 Implement Install Execution Engine
Karen Tung <karen.tung@oracle.com>
parents:
diff
changeset
|
431 |
insert_before + "is not a valid checkpoint") |
ab25dde8919d
16323 Implement Install Execution Engine
Karen Tung <karen.tung@oracle.com>
parents:
diff
changeset
|
432 |
|
ab25dde8919d
16323 Implement Install Execution Engine
Karen Tung <karen.tung@oracle.com>
parents:
diff
changeset
|
433 |
if module_path.startswith('/'): |
ab25dde8919d
16323 Implement Install Execution Engine
Karen Tung <karen.tung@oracle.com>
parents:
diff
changeset
|
434 |
mod_name = os.path.basename(module_path) |
ab25dde8919d
16323 Implement Install Execution Engine
Karen Tung <karen.tung@oracle.com>
parents:
diff
changeset
|
435 |
mod_path = os.path.dirname(module_path) |
ab25dde8919d
16323 Implement Install Execution Engine
Karen Tung <karen.tung@oracle.com>
parents:
diff
changeset
|
436 |
else: |
ab25dde8919d
16323 Implement Install Execution Engine
Karen Tung <karen.tung@oracle.com>
parents:
diff
changeset
|
437 |
mod_name = module_path |
ab25dde8919d
16323 Implement Install Execution Engine
Karen Tung <karen.tung@oracle.com>
parents:
diff
changeset
|
438 |
mod_path = None |
ab25dde8919d
16323 Implement Install Execution Engine
Karen Tung <karen.tung@oracle.com>
parents:
diff
changeset
|
439 |
|
ab25dde8919d
16323 Implement Install Execution Engine
Karen Tung <karen.tung@oracle.com>
parents:
diff
changeset
|
440 |
chkp_data = CheckpointData(checkpoint_name, mod_name, mod_path, |
ab25dde8919d
16323 Implement Install Execution Engine
Karen Tung <karen.tung@oracle.com>
parents:
diff
changeset
|
441 |
checkpoint_class_name, loglevel, |
ab25dde8919d
16323 Implement Install Execution Engine
Karen Tung <karen.tung@oracle.com>
parents:
diff
changeset
|
442 |
args, kwargs) |
ab25dde8919d
16323 Implement Install Execution Engine
Karen Tung <karen.tung@oracle.com>
parents:
diff
changeset
|
443 |
|
ab25dde8919d
16323 Implement Install Execution Engine
Karen Tung <karen.tung@oracle.com>
parents:
diff
changeset
|
444 |
chkp_data.validate_checkpoint_info() |
ab25dde8919d
16323 Implement Install Execution Engine
Karen Tung <karen.tung@oracle.com>
parents:
diff
changeset
|
445 |
|
ab25dde8919d
16323 Implement Install Execution Engine
Karen Tung <karen.tung@oracle.com>
parents:
diff
changeset
|
446 |
self._checkpoints.insert(insert_index, chkp_data) |
ab25dde8919d
16323 Implement Install Execution Engine
Karen Tung <karen.tung@oracle.com>
parents:
diff
changeset
|
447 |
|
ab25dde8919d
16323 Implement Install Execution Engine
Karen Tung <karen.tung@oracle.com>
parents:
diff
changeset
|
448 |
LOGGER.debug("Current checkpoint list:") |
ab25dde8919d
16323 Implement Install Execution Engine
Karen Tung <karen.tung@oracle.com>
parents:
diff
changeset
|
449 |
if LOGGER.isEnabledFor(logging.DEBUG): |
ab25dde8919d
16323 Implement Install Execution Engine
Karen Tung <karen.tung@oracle.com>
parents:
diff
changeset
|
450 |
for cp in self._checkpoints: |
ab25dde8919d
16323 Implement Install Execution Engine
Karen Tung <karen.tung@oracle.com>
parents:
diff
changeset
|
451 |
LOGGER.debug("\t" + str(cp)) |
ab25dde8919d
16323 Implement Install Execution Engine
Karen Tung <karen.tung@oracle.com>
parents:
diff
changeset
|
452 |
|
ab25dde8919d
16323 Implement Install Execution Engine
Karen Tung <karen.tung@oracle.com>
parents:
diff
changeset
|
453 |
def execute_checkpoints(self, start_from=None, pause_before=None, |
ab25dde8919d
16323 Implement Install Execution Engine
Karen Tung <karen.tung@oracle.com>
parents:
diff
changeset
|
454 |
dry_run=False, callback=None): |
ab25dde8919d
16323 Implement Install Execution Engine
Karen Tung <karen.tung@oracle.com>
parents:
diff
changeset
|
455 |
''' Execute all checkpoints in registration order, from start_from to |
ab25dde8919d
16323 Implement Install Execution Engine
Karen Tung <karen.tung@oracle.com>
parents:
diff
changeset
|
456 |
pause_before. The checkpoint specified at pause_before is not |
ab25dde8919d
16323 Implement Install Execution Engine
Karen Tung <karen.tung@oracle.com>
parents:
diff
changeset
|
457 |
executed. |
ab25dde8919d
16323 Implement Install Execution Engine
Karen Tung <karen.tung@oracle.com>
parents:
diff
changeset
|
458 |
|
ab25dde8919d
16323 Implement Install Execution Engine
Karen Tung <karen.tung@oracle.com>
parents:
diff
changeset
|
459 |
Input: |
ab25dde8919d
16323 Implement Install Execution Engine
Karen Tung <karen.tung@oracle.com>
parents:
diff
changeset
|
460 |
|
ab25dde8919d
16323 Implement Install Execution Engine
Karen Tung <karen.tung@oracle.com>
parents:
diff
changeset
|
461 |
* start_from: optional. name of the checkpoint to start |
ab25dde8919d
16323 Implement Install Execution Engine
Karen Tung <karen.tung@oracle.com>
parents:
diff
changeset
|
462 |
execution from. If start_from is None or not specified, |
ab25dde8919d
16323 Implement Install Execution Engine
Karen Tung <karen.tung@oracle.com>
parents:
diff
changeset
|
463 |
the engine will look up the first unexecuted checkpoint |
ab25dde8919d
16323 Implement Install Execution Engine
Karen Tung <karen.tung@oracle.com>
parents:
diff
changeset
|
464 |
and start from there. If given, and start_from is a |
ab25dde8919d
16323 Implement Install Execution Engine
Karen Tung <karen.tung@oracle.com>
parents:
diff
changeset
|
465 |
previously completed checkpoint, the engine will rollback |
ab25dde8919d
16323 Implement Install Execution Engine
Karen Tung <karen.tung@oracle.com>
parents:
diff
changeset
|
466 |
to that state before execution (reverting both the persistent |
ab25dde8919d
16323 Implement Install Execution Engine
Karen Tung <karen.tung@oracle.com>
parents:
diff
changeset
|
467 |
DOC and ZFS dataset, if set, in the process) |
ab25dde8919d
16323 Implement Install Execution Engine
Karen Tung <karen.tung@oracle.com>
parents:
diff
changeset
|
468 |
|
ab25dde8919d
16323 Implement Install Execution Engine
Karen Tung <karen.tung@oracle.com>
parents:
diff
changeset
|
469 |
* pause_before: optional. Name of checkpoint to stop execution at. |
ab25dde8919d
16323 Implement Install Execution Engine
Karen Tung <karen.tung@oracle.com>
parents:
diff
changeset
|
470 |
If pause_before is None or not specified, execution will |
ab25dde8919d
16323 Implement Install Execution Engine
Karen Tung <karen.tung@oracle.com>
parents:
diff
changeset
|
471 |
continue until all registered checkpoints are executed. |
ab25dde8919d
16323 Implement Install Execution Engine
Karen Tung <karen.tung@oracle.com>
parents:
diff
changeset
|
472 |
|
ab25dde8919d
16323 Implement Install Execution Engine
Karen Tung <karen.tung@oracle.com>
parents:
diff
changeset
|
473 |
* dry_run: optional. This flag will be passed to the execute() |
ab25dde8919d
16323 Implement Install Execution Engine
Karen Tung <karen.tung@oracle.com>
parents:
diff
changeset
|
474 |
function of the checkpoint. It is up to the checkpoint to |
ab25dde8919d
16323 Implement Install Execution Engine
Karen Tung <karen.tung@oracle.com>
parents:
diff
changeset
|
475 |
interpret this flag. |
ab25dde8919d
16323 Implement Install Execution Engine
Karen Tung <karen.tung@oracle.com>
parents:
diff
changeset
|
476 |
|
ab25dde8919d
16323 Implement Install Execution Engine
Karen Tung <karen.tung@oracle.com>
parents:
diff
changeset
|
477 |
* Callback: optional. function to call immediately before the |
ab25dde8919d
16323 Implement Install Execution Engine
Karen Tung <karen.tung@oracle.com>
parents:
diff
changeset
|
478 |
thread executing checkpoints exits. If a callback function is |
ab25dde8919d
16323 Implement Install Execution Engine
Karen Tung <karen.tung@oracle.com>
parents:
diff
changeset
|
479 |
provided, execute_checkpoints() will return immediately after |
ab25dde8919d
16323 Implement Install Execution Engine
Karen Tung <karen.tung@oracle.com>
parents:
diff
changeset
|
480 |
all preparation for executing checkpoints are completed. |
ab25dde8919d
16323 Implement Install Execution Engine
Karen Tung <karen.tung@oracle.com>
parents:
diff
changeset
|
481 |
If a callback function is not provided, the execute_checkpoints() |
ab25dde8919d
16323 Implement Install Execution Engine
Karen Tung <karen.tung@oracle.com>
parents:
diff
changeset
|
482 |
function will not return until the thread executing |
ab25dde8919d
16323 Implement Install Execution Engine
Karen Tung <karen.tung@oracle.com>
parents:
diff
changeset
|
483 |
checkpoints exits. |
ab25dde8919d
16323 Implement Install Execution Engine
Karen Tung <karen.tung@oracle.com>
parents:
diff
changeset
|
484 |
|
ab25dde8919d
16323 Implement Install Execution Engine
Karen Tung <karen.tung@oracle.com>
parents:
diff
changeset
|
485 |
Output: |
ab25dde8919d
16323 Implement Install Execution Engine
Karen Tung <karen.tung@oracle.com>
parents:
diff
changeset
|
486 |
* If a callback function is provided, this function |
ab25dde8919d
16323 Implement Install Execution Engine
Karen Tung <karen.tung@oracle.com>
parents:
diff
changeset
|
487 |
returns nothing. The provided callback |
ab25dde8919d
16323 Implement Install Execution Engine
Karen Tung <karen.tung@oracle.com>
parents:
diff
changeset
|
488 |
function will be called with status and failed_checkpoint_list |
ab25dde8919d
16323 Implement Install Execution Engine
Karen Tung <karen.tung@oracle.com>
parents:
diff
changeset
|
489 |
information as specified below. |
ab25dde8919d
16323 Implement Install Execution Engine
Karen Tung <karen.tung@oracle.com>
parents:
diff
changeset
|
490 |
|
ab25dde8919d
16323 Implement Install Execution Engine
Karen Tung <karen.tung@oracle.com>
parents:
diff
changeset
|
491 |
* A tuple (status, failed_checkpoint_list) is returned if |
ab25dde8919d
16323 Implement Install Execution Engine
Karen Tung <karen.tung@oracle.com>
parents:
diff
changeset
|
492 |
a callback function is not provided when the function is called. |
ab25dde8919d
16323 Implement Install Execution Engine
Karen Tung <karen.tung@oracle.com>
parents:
diff
changeset
|
493 |
|
ab25dde8919d
16323 Implement Install Execution Engine
Karen Tung <karen.tung@oracle.com>
parents:
diff
changeset
|
494 |
> status: indicates whether all checkpoints are executed |
ab25dde8919d
16323 Implement Install Execution Engine
Karen Tung <karen.tung@oracle.com>
parents:
diff
changeset
|
495 |
successfully. It will have a value of |
ab25dde8919d
16323 Implement Install Execution Engine
Karen Tung <karen.tung@oracle.com>
parents:
diff
changeset
|
496 |
InstallEngine.EXEC_SUCCESS, InstallEngine.EXEC_FAILED or |
ab25dde8919d
16323 Implement Install Execution Engine
Karen Tung <karen.tung@oracle.com>
parents:
diff
changeset
|
497 |
InstallEngine.EXEC_CANCELED or InstallEngine.CP_INIT_FAILED |
ab25dde8919d
16323 Implement Install Execution Engine
Karen Tung <karen.tung@oracle.com>
parents:
diff
changeset
|
498 |
|
ab25dde8919d
16323 Implement Install Execution Engine
Karen Tung <karen.tung@oracle.com>
parents:
diff
changeset
|
499 |
> failed_checkpoint_list: The name(s) of checkpoints failed |
ab25dde8919d
16323 Implement Install Execution Engine
Karen Tung <karen.tung@oracle.com>
parents:
diff
changeset
|
500 |
if status is InstallEngine.EXEC_FAILED or |
ab25dde8919d
16323 Implement Install Execution Engine
Karen Tung <karen.tung@oracle.com>
parents:
diff
changeset
|
501 |
InstallEngine.CP_INIT_FAILED. The |
ab25dde8919d
16323 Implement Install Execution Engine
Karen Tung <karen.tung@oracle.com>
parents:
diff
changeset
|
502 |
exception(s) raised by checkpoint's methods |
ab25dde8919d
16323 Implement Install Execution Engine
Karen Tung <karen.tung@oracle.com>
parents:
diff
changeset
|
503 |
are stored in the errsvc. The application should look |
ab25dde8919d
16323 Implement Install Execution Engine
Karen Tung <karen.tung@oracle.com>
parents:
diff
changeset
|
504 |
up exception associated with the failed checkpoints using |
ab25dde8919d
16323 Implement Install Execution Engine
Karen Tung <karen.tung@oracle.com>
parents:
diff
changeset
|
505 |
the checkpoint name. |
ab25dde8919d
16323 Implement Install Execution Engine
Karen Tung <karen.tung@oracle.com>
parents:
diff
changeset
|
506 |
|
ab25dde8919d
16323 Implement Install Execution Engine
Karen Tung <karen.tung@oracle.com>
parents:
diff
changeset
|
507 |
Raise: |
ab25dde8919d
16323 Implement Install Execution Engine
Karen Tung <karen.tung@oracle.com>
parents:
diff
changeset
|
508 |
* UnknownCheckpointError: Name specified in start_from or |
ab25dde8919d
16323 Implement Install Execution Engine
Karen Tung <karen.tung@oracle.com>
parents:
diff
changeset
|
509 |
pause_before argument is not found |
ab25dde8919d
16323 Implement Install Execution Engine
Karen Tung <karen.tung@oracle.com>
parents:
diff
changeset
|
510 |
|
ab25dde8919d
16323 Implement Install Execution Engine
Karen Tung <karen.tung@oracle.com>
parents:
diff
changeset
|
511 |
* CheckpointOrderError: 2 conditions can cause this error: |
ab25dde8919d
16323 Implement Install Execution Engine
Karen Tung <karen.tung@oracle.com>
parents:
diff
changeset
|
512 |
1) There are unexecuted checkpoints before the start_from |
ab25dde8919d
16323 Implement Install Execution Engine
Karen Tung <karen.tung@oracle.com>
parents:
diff
changeset
|
513 |
checkpoint. |
ab25dde8919d
16323 Implement Install Execution Engine
Karen Tung <karen.tung@oracle.com>
parents:
diff
changeset
|
514 |
2) start_from checkpoint is not before pause_at checkpoint. |
ab25dde8919d
16323 Implement Install Execution Engine
Karen Tung <karen.tung@oracle.com>
parents:
diff
changeset
|
515 |
''' |
ab25dde8919d
16323 Implement Install Execution Engine
Karen Tung <karen.tung@oracle.com>
parents:
diff
changeset
|
516 |
|
ab25dde8919d
16323 Implement Install Execution Engine
Karen Tung <karen.tung@oracle.com>
parents:
diff
changeset
|
517 |
blocking = callback is None |
ab25dde8919d
16323 Implement Install Execution Engine
Karen Tung <karen.tung@oracle.com>
parents:
diff
changeset
|
518 |
|
ab25dde8919d
16323 Implement Install Execution Engine
Karen Tung <karen.tung@oracle.com>
parents:
diff
changeset
|
519 |
if blocking: |
ab25dde8919d
16323 Implement Install Execution Engine
Karen Tung <karen.tung@oracle.com>
parents:
diff
changeset
|
520 |
callback = self.__blocking_callback |
ab25dde8919d
16323 Implement Install Execution Engine
Karen Tung <karen.tung@oracle.com>
parents:
diff
changeset
|
521 |
thread_cls = InstallEngine._PseudoThread |
ab25dde8919d
16323 Implement Install Execution Engine
Karen Tung <karen.tung@oracle.com>
parents:
diff
changeset
|
522 |
else: |
ab25dde8919d
16323 Implement Install Execution Engine
Karen Tung <karen.tung@oracle.com>
parents:
diff
changeset
|
523 |
thread_cls = threading.Thread |
ab25dde8919d
16323 Implement Install Execution Engine
Karen Tung <karen.tung@oracle.com>
parents:
diff
changeset
|
524 |
|
ab25dde8919d
16323 Implement Install Execution Engine
Karen Tung <karen.tung@oracle.com>
parents:
diff
changeset
|
525 |
self._check_callback(callback) |
ab25dde8919d
16323 Implement Install Execution Engine
Karen Tung <karen.tung@oracle.com>
parents:
diff
changeset
|
526 |
|
ab25dde8919d
16323 Implement Install Execution Engine
Karen Tung <karen.tung@oracle.com>
parents:
diff
changeset
|
527 |
if (start_from and |
ab25dde8919d
16323 Implement Install Execution Engine
Karen Tung <karen.tung@oracle.com>
parents:
diff
changeset
|
528 |
(self.get_cp_data(start_from) != self.get_first_incomplete())): |
ab25dde8919d
16323 Implement Install Execution Engine
Karen Tung <karen.tung@oracle.com>
parents:
diff
changeset
|
529 |
self._rollback(start_from) |
ab25dde8919d
16323 Implement Install Execution Engine
Karen Tung <karen.tung@oracle.com>
parents:
diff
changeset
|
530 |
checkpoint_data_list = self.get_exec_list(start_from, pause_before) |
ab25dde8919d
16323 Implement Install Execution Engine
Karen Tung <karen.tung@oracle.com>
parents:
diff
changeset
|
531 |
|
ab25dde8919d
16323 Implement Install Execution Engine
Karen Tung <karen.tung@oracle.com>
parents:
diff
changeset
|
532 |
if len(checkpoint_data_list) == 0: |
ab25dde8919d
16323 Implement Install Execution Engine
Karen Tung <karen.tung@oracle.com>
parents:
diff
changeset
|
533 |
# unable to find any checkpoint to execute |
ab25dde8919d
16323 Implement Install Execution Engine
Karen Tung <karen.tung@oracle.com>
parents:
diff
changeset
|
534 |
warnings.warn("No checkpoint will be executed based on " |
ab25dde8919d
16323 Implement Install Execution Engine
Karen Tung <karen.tung@oracle.com>
parents:
diff
changeset
|
535 |
"specified criteria.") |
ab25dde8919d
16323 Implement Install Execution Engine
Karen Tung <karen.tung@oracle.com>
parents:
diff
changeset
|
536 |
return (InstallEngine.EXEC_SUCCESS, []) |
ab25dde8919d
16323 Implement Install Execution Engine
Karen Tung <karen.tung@oracle.com>
parents:
diff
changeset
|
537 |
|
ab25dde8919d
16323 Implement Install Execution Engine
Karen Tung <karen.tung@oracle.com>
parents:
diff
changeset
|
538 |
if LOGGER.isEnabledFor(DEBUG): |
ab25dde8919d
16323 Implement Install Execution Engine
Karen Tung <karen.tung@oracle.com>
parents:
diff
changeset
|
539 |
LOGGER.debug("Engine will be executing following checkpoints:") |
ab25dde8919d
16323 Implement Install Execution Engine
Karen Tung <karen.tung@oracle.com>
parents:
diff
changeset
|
540 |
for cp in checkpoint_data_list: |
ab25dde8919d
16323 Implement Install Execution Engine
Karen Tung <karen.tung@oracle.com>
parents:
diff
changeset
|
541 |
LOGGER.debug("\t" + str(cp)) |
ab25dde8919d
16323 Implement Install Execution Engine
Karen Tung <karen.tung@oracle.com>
parents:
diff
changeset
|
542 |
|
1350
025c6311d0d9
7071386 Improve progress reporting for text installer and GUI installer
Karen Tung <Karen.Tung@oracle.com>
parents:
1308
diff
changeset
|
543 |
thread_args = (checkpoint_data_list, dry_run, callback) |
909
ab25dde8919d
16323 Implement Install Execution Engine
Karen Tung <karen.tung@oracle.com>
parents:
diff
changeset
|
544 |
LOGGER.debug("Spawning InstallEngine execution thread") |
ab25dde8919d
16323 Implement Install Execution Engine
Karen Tung <karen.tung@oracle.com>
parents:
diff
changeset
|
545 |
thread = thread_cls(target=self._execute_checkpoints, |
ab25dde8919d
16323 Implement Install Execution Engine
Karen Tung <karen.tung@oracle.com>
parents:
diff
changeset
|
546 |
name=InstallEngine.CP_THREAD, |
ab25dde8919d
16323 Implement Install Execution Engine
Karen Tung <karen.tung@oracle.com>
parents:
diff
changeset
|
547 |
args=thread_args) |
ab25dde8919d
16323 Implement Install Execution Engine
Karen Tung <karen.tung@oracle.com>
parents:
diff
changeset
|
548 |
self.checkpoint_thread = thread |
ab25dde8919d
16323 Implement Install Execution Engine
Karen Tung <karen.tung@oracle.com>
parents:
diff
changeset
|
549 |
thread.start() |
ab25dde8919d
16323 Implement Install Execution Engine
Karen Tung <karen.tung@oracle.com>
parents:
diff
changeset
|
550 |
|
ab25dde8919d
16323 Implement Install Execution Engine
Karen Tung <karen.tung@oracle.com>
parents:
diff
changeset
|
551 |
if not blocking: |
ab25dde8919d
16323 Implement Install Execution Engine
Karen Tung <karen.tung@oracle.com>
parents:
diff
changeset
|
552 |
return |
ab25dde8919d
16323 Implement Install Execution Engine
Karen Tung <karen.tung@oracle.com>
parents:
diff
changeset
|
553 |
|
ab25dde8919d
16323 Implement Install Execution Engine
Karen Tung <karen.tung@oracle.com>
parents:
diff
changeset
|
554 |
if self.__blocking_results[0] == InstallEngine.FATAL_INTERNAL: |
ab25dde8919d
16323 Implement Install Execution Engine
Karen Tung <karen.tung@oracle.com>
parents:
diff
changeset
|
555 |
errs = errsvc.get_errors_by_mod_id(InstallEngine.FATAL_INTERNAL) |
ab25dde8919d
16323 Implement Install Execution Engine
Karen Tung <karen.tung@oracle.com>
parents:
diff
changeset
|
556 |
raise errs[0] |
ab25dde8919d
16323 Implement Install Execution Engine
Karen Tung <karen.tung@oracle.com>
parents:
diff
changeset
|
557 |
|
ab25dde8919d
16323 Implement Install Execution Engine
Karen Tung <karen.tung@oracle.com>
parents:
diff
changeset
|
558 |
self.checkpoint_thread = None |
ab25dde8919d
16323 Implement Install Execution Engine
Karen Tung <karen.tung@oracle.com>
parents:
diff
changeset
|
559 |
return self.__blocking_results |
ab25dde8919d
16323 Implement Install Execution Engine
Karen Tung <karen.tung@oracle.com>
parents:
diff
changeset
|
560 |
|
ab25dde8919d
16323 Implement Install Execution Engine
Karen Tung <karen.tung@oracle.com>
parents:
diff
changeset
|
561 |
def resume_execute_checkpoints(self, start_from, pause_before=None, |
ab25dde8919d
16323 Implement Install Execution Engine
Karen Tung <karen.tung@oracle.com>
parents:
diff
changeset
|
562 |
dry_run=False, callback=None): |
ab25dde8919d
16323 Implement Install Execution Engine
Karen Tung <karen.tung@oracle.com>
parents:
diff
changeset
|
563 |
'''This function provides out-of-process resume functionality to |
ab25dde8919d
16323 Implement Install Execution Engine
Karen Tung <karen.tung@oracle.com>
parents:
diff
changeset
|
564 |
applications. It will roll back the ZFS dataset and restore the DOC |
ab25dde8919d
16323 Implement Install Execution Engine
Karen Tung <karen.tung@oracle.com>
parents:
diff
changeset
|
565 |
state to its condition just prior to the given "start_from" checkpoint. |
ab25dde8919d
16323 Implement Install Execution Engine
Karen Tung <karen.tung@oracle.com>
parents:
diff
changeset
|
566 |
|
ab25dde8919d
16323 Implement Install Execution Engine
Karen Tung <karen.tung@oracle.com>
parents:
diff
changeset
|
567 |
This function may only be run once per-process. Subsequent calls |
ab25dde8919d
16323 Implement Install Execution Engine
Karen Tung <karen.tung@oracle.com>
parents:
diff
changeset
|
568 |
should be done via the execute_checkpoints() function, which allows |
ab25dde8919d
16323 Implement Install Execution Engine
Karen Tung <karen.tung@oracle.com>
parents:
diff
changeset
|
569 |
for in-process resume. |
ab25dde8919d
16323 Implement Install Execution Engine
Karen Tung <karen.tung@oracle.com>
parents:
diff
changeset
|
570 |
|
ab25dde8919d
16323 Implement Install Execution Engine
Karen Tung <karen.tung@oracle.com>
parents:
diff
changeset
|
571 |
All parameters are identical to those from |
ab25dde8919d
16323 Implement Install Execution Engine
Karen Tung <karen.tung@oracle.com>
parents:
diff
changeset
|
572 |
InstallEngine.execute_checkpoints. |
ab25dde8919d
16323 Implement Install Execution Engine
Karen Tung <karen.tung@oracle.com>
parents:
diff
changeset
|
573 |
|
ab25dde8919d
16323 Implement Install Execution Engine
Karen Tung <karen.tung@oracle.com>
parents:
diff
changeset
|
574 |
In addition to the exceptions from InstallEngine.exeucute_checkpoints, |
ab25dde8919d
16323 Implement Install Execution Engine
Karen Tung <karen.tung@oracle.com>
parents:
diff
changeset
|
575 |
this function also raises the following exceptions. |
ab25dde8919d
16323 Implement Install Execution Engine
Karen Tung <karen.tung@oracle.com>
parents:
diff
changeset
|
576 |
|
ab25dde8919d
16323 Implement Install Execution Engine
Karen Tung <karen.tung@oracle.com>
parents:
diff
changeset
|
577 |
Raise: |
ab25dde8919d
16323 Implement Install Execution Engine
Karen Tung <karen.tung@oracle.com>
parents:
diff
changeset
|
578 |
* RuntimeError: Unable to perform resume |
ab25dde8919d
16323 Implement Install Execution Engine
Karen Tung <karen.tung@oracle.com>
parents:
diff
changeset
|
579 |
* UsageError: checkpoint specified is unresumable |
ab25dde8919d
16323 Implement Install Execution Engine
Karen Tung <karen.tung@oracle.com>
parents:
diff
changeset
|
580 |
''' |
ab25dde8919d
16323 Implement Install Execution Engine
Karen Tung <karen.tung@oracle.com>
parents:
diff
changeset
|
581 |
|
ab25dde8919d
16323 Implement Install Execution Engine
Karen Tung <karen.tung@oracle.com>
parents:
diff
changeset
|
582 |
if not self.__resume_exec_cp_ok: |
ab25dde8919d
16323 Implement Install Execution Engine
Karen Tung <karen.tung@oracle.com>
parents:
diff
changeset
|
583 |
raise RuntimeError("InstallEngine.resume_execute_checkpoints" |
ab25dde8919d
16323 Implement Install Execution Engine
Karen Tung <karen.tung@oracle.com>
parents:
diff
changeset
|
584 |
" may only be run once") |
ab25dde8919d
16323 Implement Install Execution Engine
Karen Tung <karen.tung@oracle.com>
parents:
diff
changeset
|
585 |
|
ab25dde8919d
16323 Implement Install Execution Engine
Karen Tung <karen.tung@oracle.com>
parents:
diff
changeset
|
586 |
if self.zfs_snapshots_modifed: |
1096
d795f8b803de
7036478 Additional slim_code_cleaness failures after TI/TD CUD putback
Mary Ding <mary.ding@oracle.com>
parents:
1073
diff
changeset
|
587 |
raise RuntimeError("ZFS snapshot has been modified for this " |
909
ab25dde8919d
16323 Implement Install Execution Engine
Karen Tung <karen.tung@oracle.com>
parents:
diff
changeset
|
588 |
"session. Unable to resume execute checkpoints") |
ab25dde8919d
16323 Implement Install Execution Engine
Karen Tung <karen.tung@oracle.com>
parents:
diff
changeset
|
589 |
|
ab25dde8919d
16323 Implement Install Execution Engine
Karen Tung <karen.tung@oracle.com>
parents:
diff
changeset
|
590 |
resumable = self.get_resumable_checkpoints() |
ab25dde8919d
16323 Implement Install Execution Engine
Karen Tung <karen.tung@oracle.com>
parents:
diff
changeset
|
591 |
if start_from not in resumable: |
1121
670325895b19
7004610 Update Text Installer to use CUD
Karen Tung <karen.tung@oracle.com>
parents:
1096
diff
changeset
|
592 |
raise UsageError("'%s' is not a resumable checkpoint" % start_from) |
909
ab25dde8919d
16323 Implement Install Execution Engine
Karen Tung <karen.tung@oracle.com>
parents:
diff
changeset
|
593 |
|
1290
cfaa7349f221
7004000 Install engine enhancement to save original args/kwargs list before calling checkpoint's execute
Karen Tung <Karen.Tung@oracle.com>
parents:
1151
diff
changeset
|
594 |
self._rollback(start_from, resumable_cp_list=resumable) |
909
ab25dde8919d
16323 Implement Install Execution Engine
Karen Tung <karen.tung@oracle.com>
parents:
diff
changeset
|
595 |
|
ab25dde8919d
16323 Implement Install Execution Engine
Karen Tung <karen.tung@oracle.com>
parents:
diff
changeset
|
596 |
self.__resume_exec_cp_ok = False |
ab25dde8919d
16323 Implement Install Execution Engine
Karen Tung <karen.tung@oracle.com>
parents:
diff
changeset
|
597 |
return self.execute_checkpoints(start_from=start_from, dry_run=dry_run, |
ab25dde8919d
16323 Implement Install Execution Engine
Karen Tung <karen.tung@oracle.com>
parents:
diff
changeset
|
598 |
pause_before=pause_before, |
ab25dde8919d
16323 Implement Install Execution Engine
Karen Tung <karen.tung@oracle.com>
parents:
diff
changeset
|
599 |
callback=callback) |
ab25dde8919d
16323 Implement Install Execution Engine
Karen Tung <karen.tung@oracle.com>
parents:
diff
changeset
|
600 |
|
ab25dde8919d
16323 Implement Install Execution Engine
Karen Tung <karen.tung@oracle.com>
parents:
diff
changeset
|
601 |
def get_resumable_checkpoints(self): |
ab25dde8919d
16323 Implement Install Execution Engine
Karen Tung <karen.tung@oracle.com>
parents:
diff
changeset
|
602 |
''' Description: InstallEngine.dataset property must be set |
ab25dde8919d
16323 Implement Install Execution Engine
Karen Tung <karen.tung@oracle.com>
parents:
diff
changeset
|
603 |
before calling this function. This function loads the |
ab25dde8919d
16323 Implement Install Execution Engine
Karen Tung <karen.tung@oracle.com>
parents:
diff
changeset
|
604 |
DataObjectCache snapshot from the ZFS dataset, and determine |
ab25dde8919d
16323 Implement Install Execution Engine
Karen Tung <karen.tung@oracle.com>
parents:
diff
changeset
|
605 |
which of the currently registered checkpoints are resumable. |
ab25dde8919d
16323 Implement Install Execution Engine
Karen Tung <karen.tung@oracle.com>
parents:
diff
changeset
|
606 |
|
ab25dde8919d
16323 Implement Install Execution Engine
Karen Tung <karen.tung@oracle.com>
parents:
diff
changeset
|
607 |
Output: |
ab25dde8919d
16323 Implement Install Execution Engine
Karen Tung <karen.tung@oracle.com>
parents:
diff
changeset
|
608 |
List of checkpoint names that are resumable. The order of the |
ab25dde8919d
16323 Implement Install Execution Engine
Karen Tung <karen.tung@oracle.com>
parents:
diff
changeset
|
609 |
checkpoint names returned will be same as their registration order. |
ab25dde8919d
16323 Implement Install Execution Engine
Karen Tung <karen.tung@oracle.com>
parents:
diff
changeset
|
610 |
|
ab25dde8919d
16323 Implement Install Execution Engine
Karen Tung <karen.tung@oracle.com>
parents:
diff
changeset
|
611 |
Raise: |
ab25dde8919d
16323 Implement Install Execution Engine
Karen Tung <karen.tung@oracle.com>
parents:
diff
changeset
|
612 |
* NoDatasetError: ZFS dataset is not specified. |
ab25dde8919d
16323 Implement Install Execution Engine
Karen Tung <karen.tung@oracle.com>
parents:
diff
changeset
|
613 |
* FileNotFoundError: The specified zfs dataset is not found. |
ab25dde8919d
16323 Implement Install Execution Engine
Karen Tung <karen.tung@oracle.com>
parents:
diff
changeset
|
614 |
''' |
ab25dde8919d
16323 Implement Install Execution Engine
Karen Tung <karen.tung@oracle.com>
parents:
diff
changeset
|
615 |
|
ab25dde8919d
16323 Implement Install Execution Engine
Karen Tung <karen.tung@oracle.com>
parents:
diff
changeset
|
616 |
resumable_cp = [] |
ab25dde8919d
16323 Implement Install Execution Engine
Karen Tung <karen.tung@oracle.com>
parents:
diff
changeset
|
617 |
|
ab25dde8919d
16323 Implement Install Execution Engine
Karen Tung <karen.tung@oracle.com>
parents:
diff
changeset
|
618 |
if self.dataset is None: |
ab25dde8919d
16323 Implement Install Execution Engine
Karen Tung <karen.tung@oracle.com>
parents:
diff
changeset
|
619 |
raise NoDatasetError("ZFS dataset must be specified to get " |
ab25dde8919d
16323 Implement Install Execution Engine
Karen Tung <karen.tung@oracle.com>
parents:
diff
changeset
|
620 |
"list of resumable checkpoints") |
ab25dde8919d
16323 Implement Install Execution Engine
Karen Tung <karen.tung@oracle.com>
parents:
diff
changeset
|
621 |
|
ab25dde8919d
16323 Implement Install Execution Engine
Karen Tung <karen.tung@oracle.com>
parents:
diff
changeset
|
622 |
if not self.dataset.exists: |
ab25dde8919d
16323 Implement Install Execution Engine
Karen Tung <karen.tung@oracle.com>
parents:
diff
changeset
|
623 |
raise FileNotFoundError("Specified dataset %s does not exist" % |
ab25dde8919d
16323 Implement Install Execution Engine
Karen Tung <karen.tung@oracle.com>
parents:
diff
changeset
|
624 |
self.dataset) |
ab25dde8919d
16323 Implement Install Execution Engine
Karen Tung <karen.tung@oracle.com>
parents:
diff
changeset
|
625 |
|
1290
cfaa7349f221
7004000 Install engine enhancement to save original args/kwargs list before calling checkpoint's execute
Karen Tung <Karen.Tung@oracle.com>
parents:
1151
diff
changeset
|
626 |
doc_list = self._get_doc_snapshots(self.dataset.get("mountpoint")) |
cfaa7349f221
7004000 Install engine enhancement to save original args/kwargs list before calling checkpoint's execute
Karen Tung <Karen.Tung@oracle.com>
parents:
1151
diff
changeset
|
627 |
if not doc_list: |
cfaa7349f221
7004000 Install engine enhancement to save original args/kwargs list before calling checkpoint's execute
Karen Tung <Karen.Tung@oracle.com>
parents:
1151
diff
changeset
|
628 |
# can't find any DOC snapshots, user will have to start from |
cfaa7349f221
7004000 Install engine enhancement to save original args/kwargs list before calling checkpoint's execute
Karen Tung <Karen.Tung@oracle.com>
parents:
1151
diff
changeset
|
629 |
# first registered checkpoint. |
cfaa7349f221
7004000 Install engine enhancement to save original args/kwargs list before calling checkpoint's execute
Karen Tung <Karen.Tung@oracle.com>
parents:
1151
diff
changeset
|
630 |
if self._checkpoints: |
cfaa7349f221
7004000 Install engine enhancement to save original args/kwargs list before calling checkpoint's execute
Karen Tung <Karen.Tung@oracle.com>
parents:
1151
diff
changeset
|
631 |
resumable_cp.append(self._checkpoints[0].name) |
cfaa7349f221
7004000 Install engine enhancement to save original args/kwargs list before calling checkpoint's execute
Karen Tung <Karen.Tung@oracle.com>
parents:
1151
diff
changeset
|
632 |
return tuple(resumable_cp) |
909
ab25dde8919d
16323 Implement Install Execution Engine
Karen Tung <karen.tung@oracle.com>
parents:
diff
changeset
|
633 |
|
1290
cfaa7349f221
7004000 Install engine enhancement to save original args/kwargs list before calling checkpoint's execute
Karen Tung <Karen.Tung@oracle.com>
parents:
1151
diff
changeset
|
634 |
doc_path = doc_list[0] |
cfaa7349f221
7004000 Install engine enhancement to save original args/kwargs list before calling checkpoint's execute
Karen Tung <Karen.Tung@oracle.com>
parents:
1151
diff
changeset
|
635 |
|
cfaa7349f221
7004000 Install engine enhancement to save original args/kwargs list before calling checkpoint's execute
Karen Tung <Karen.Tung@oracle.com>
parents:
1151
diff
changeset
|
636 |
LOGGER.debug("Path of last DOC snapshot taken: %s", doc_path) |
cfaa7349f221
7004000 Install engine enhancement to save original args/kwargs list before calling checkpoint's execute
Karen Tung <Karen.Tung@oracle.com>
parents:
1151
diff
changeset
|
637 |
|
cfaa7349f221
7004000 Install engine enhancement to save original args/kwargs list before calling checkpoint's execute
Karen Tung <Karen.Tung@oracle.com>
parents:
1151
diff
changeset
|
638 |
# load a temporary instance of DOC cache based on the lastest snapshot |
909
ab25dde8919d
16323 Implement Install Execution Engine
Karen Tung <karen.tung@oracle.com>
parents:
diff
changeset
|
639 |
if os.path.exists(doc_path): |
ab25dde8919d
16323 Implement Install Execution Engine
Karen Tung <karen.tung@oracle.com>
parents:
diff
changeset
|
640 |
LOGGER.debug("Creating temp DOC based off snapshot at: %s", |
ab25dde8919d
16323 Implement Install Execution Engine
Karen Tung <karen.tung@oracle.com>
parents:
diff
changeset
|
641 |
doc_path) |
ab25dde8919d
16323 Implement Install Execution Engine
Karen Tung <karen.tung@oracle.com>
parents:
diff
changeset
|
642 |
temp_doc = DataObjectCache() |
ab25dde8919d
16323 Implement Install Execution Engine
Karen Tung <karen.tung@oracle.com>
parents:
diff
changeset
|
643 |
temp_doc.load_from_snapshot(doc_path) |
ab25dde8919d
16323 Implement Install Execution Engine
Karen Tung <karen.tung@oracle.com>
parents:
diff
changeset
|
644 |
|
ab25dde8919d
16323 Implement Install Execution Engine
Karen Tung <karen.tung@oracle.com>
parents:
diff
changeset
|
645 |
name = InstallEngine.ENGINE_DOC_ROOT |
ab25dde8919d
16323 Implement Install Execution Engine
Karen Tung <karen.tung@oracle.com>
parents:
diff
changeset
|
646 |
engine_doc_root = temp_doc.persistent.get_first_child(name=name) |
ab25dde8919d
16323 Implement Install Execution Engine
Karen Tung <karen.tung@oracle.com>
parents:
diff
changeset
|
647 |
else: |
ab25dde8919d
16323 Implement Install Execution Engine
Karen Tung <karen.tung@oracle.com>
parents:
diff
changeset
|
648 |
engine_doc_root = None |
ab25dde8919d
16323 Implement Install Execution Engine
Karen Tung <karen.tung@oracle.com>
parents:
diff
changeset
|
649 |
|
ab25dde8919d
16323 Implement Install Execution Engine
Karen Tung <karen.tung@oracle.com>
parents:
diff
changeset
|
650 |
prev_completed_cp = None |
ab25dde8919d
16323 Implement Install Execution Engine
Karen Tung <karen.tung@oracle.com>
parents:
diff
changeset
|
651 |
if engine_doc_root is not None: |
ab25dde8919d
16323 Implement Install Execution Engine
Karen Tung <karen.tung@oracle.com>
parents:
diff
changeset
|
652 |
# Get list of previously successfully executed checkpoints from doc |
ab25dde8919d
16323 Implement Install Execution Engine
Karen Tung <karen.tung@oracle.com>
parents:
diff
changeset
|
653 |
prev_completed_cp = engine_doc_root.get_children() |
ab25dde8919d
16323 Implement Install Execution Engine
Karen Tung <karen.tung@oracle.com>
parents:
diff
changeset
|
654 |
|
ab25dde8919d
16323 Implement Install Execution Engine
Karen Tung <karen.tung@oracle.com>
parents:
diff
changeset
|
655 |
if prev_completed_cp is None: |
ab25dde8919d
16323 Implement Install Execution Engine
Karen Tung <karen.tung@oracle.com>
parents:
diff
changeset
|
656 |
prev_completed_cp = [] |
ab25dde8919d
16323 Implement Install Execution Engine
Karen Tung <karen.tung@oracle.com>
parents:
diff
changeset
|
657 |
|
ab25dde8919d
16323 Implement Install Execution Engine
Karen Tung <karen.tung@oracle.com>
parents:
diff
changeset
|
658 |
# Get list of zfs snapshots |
ab25dde8919d
16323 Implement Install Execution Engine
Karen Tung <karen.tung@oracle.com>
parents:
diff
changeset
|
659 |
zfs_snapshots = self.dataset.snapshot_list |
ab25dde8919d
16323 Implement Install Execution Engine
Karen Tung <karen.tung@oracle.com>
parents:
diff
changeset
|
660 |
|
ab25dde8919d
16323 Implement Install Execution Engine
Karen Tung <karen.tung@oracle.com>
parents:
diff
changeset
|
661 |
# Determine which of the currently registered checkpoints |
ab25dde8919d
16323 Implement Install Execution Engine
Karen Tung <karen.tung@oracle.com>
parents:
diff
changeset
|
662 |
# are resumeable. The following rules are used: |
ab25dde8919d
16323 Implement Install Execution Engine
Karen Tung <karen.tung@oracle.com>
parents:
diff
changeset
|
663 |
# 1) The checkpoint must be registered at exactly the same position |
ab25dde8919d
16323 Implement Install Execution Engine
Karen Tung <karen.tung@oracle.com>
parents:
diff
changeset
|
664 |
# in the checkpoint list as the previous invocation of the |
ab25dde8919d
16323 Implement Install Execution Engine
Karen Tung <karen.tung@oracle.com>
parents:
diff
changeset
|
665 |
# application. |
ab25dde8919d
16323 Implement Install Execution Engine
Karen Tung <karen.tung@oracle.com>
parents:
diff
changeset
|
666 |
# 2) All checkpoint registration information must match between |
ab25dde8919d
16323 Implement Install Execution Engine
Karen Tung <karen.tung@oracle.com>
parents:
diff
changeset
|
667 |
# the previous and current invocation of the application. |
ab25dde8919d
16323 Implement Install Execution Engine
Karen Tung <karen.tung@oracle.com>
parents:
diff
changeset
|
668 |
# 3) Resumable checkpoints must have associated DataObjectCache |
ab25dde8919d
16323 Implement Install Execution Engine
Karen Tung <karen.tung@oracle.com>
parents:
diff
changeset
|
669 |
# snapshots and ZFS snapshots. For checkpoints that does not |
ab25dde8919d
16323 Implement Install Execution Engine
Karen Tung <karen.tung@oracle.com>
parents:
diff
changeset
|
670 |
# associated ZFS snapshots in previous execution, ZFS snapshots |
ab25dde8919d
16323 Implement Install Execution Engine
Karen Tung <karen.tung@oracle.com>
parents:
diff
changeset
|
671 |
# is not required for current execution. |
ab25dde8919d
16323 Implement Install Execution Engine
Karen Tung <karen.tung@oracle.com>
parents:
diff
changeset
|
672 |
|
ab25dde8919d
16323 Implement Install Execution Engine
Karen Tung <karen.tung@oracle.com>
parents:
diff
changeset
|
673 |
prev_idx = -1 |
ab25dde8919d
16323 Implement Install Execution Engine
Karen Tung <karen.tung@oracle.com>
parents:
diff
changeset
|
674 |
last_res_idx = None |
ab25dde8919d
16323 Implement Install Execution Engine
Karen Tung <karen.tung@oracle.com>
parents:
diff
changeset
|
675 |
for (reg_cp, prev_cp) in zip(self._checkpoints, prev_completed_cp): |
ab25dde8919d
16323 Implement Install Execution Engine
Karen Tung <karen.tung@oracle.com>
parents:
diff
changeset
|
676 |
if (reg_cp.cp_info != prev_cp): |
ab25dde8919d
16323 Implement Install Execution Engine
Karen Tung <karen.tung@oracle.com>
parents:
diff
changeset
|
677 |
break |
ab25dde8919d
16323 Implement Install Execution Engine
Karen Tung <karen.tung@oracle.com>
parents:
diff
changeset
|
678 |
|
ab25dde8919d
16323 Implement Install Execution Engine
Karen Tung <karen.tung@oracle.com>
parents:
diff
changeset
|
679 |
reg_snapshot_path = self.get_zfs_snapshot_fullpath(reg_cp.name) |
ab25dde8919d
16323 Implement Install Execution Engine
Karen Tung <karen.tung@oracle.com>
parents:
diff
changeset
|
680 |
|
ab25dde8919d
16323 Implement Install Execution Engine
Karen Tung <karen.tung@oracle.com>
parents:
diff
changeset
|
681 |
if reg_snapshot_path in zfs_snapshots: |
ab25dde8919d
16323 Implement Install Execution Engine
Karen Tung <karen.tung@oracle.com>
parents:
diff
changeset
|
682 |
idx = zfs_snapshots.index(reg_snapshot_path) |
ab25dde8919d
16323 Implement Install Execution Engine
Karen Tung <karen.tung@oracle.com>
parents:
diff
changeset
|
683 |
else: |
ab25dde8919d
16323 Implement Install Execution Engine
Karen Tung <karen.tung@oracle.com>
parents:
diff
changeset
|
684 |
idx = -1 |
ab25dde8919d
16323 Implement Install Execution Engine
Karen Tung <karen.tung@oracle.com>
parents:
diff
changeset
|
685 |
if idx >= prev_idx: |
ab25dde8919d
16323 Implement Install Execution Engine
Karen Tung <karen.tung@oracle.com>
parents:
diff
changeset
|
686 |
prev_idx = idx |
ab25dde8919d
16323 Implement Install Execution Engine
Karen Tung <karen.tung@oracle.com>
parents:
diff
changeset
|
687 |
if idx != -1: |
ab25dde8919d
16323 Implement Install Execution Engine
Karen Tung <karen.tung@oracle.com>
parents:
diff
changeset
|
688 |
resumable_cp.append(reg_cp.name) |
ab25dde8919d
16323 Implement Install Execution Engine
Karen Tung <karen.tung@oracle.com>
parents:
diff
changeset
|
689 |
last_res_idx = self._checkpoints.index(reg_cp) |
ab25dde8919d
16323 Implement Install Execution Engine
Karen Tung <karen.tung@oracle.com>
parents:
diff
changeset
|
690 |
else: |
ab25dde8919d
16323 Implement Install Execution Engine
Karen Tung <karen.tung@oracle.com>
parents:
diff
changeset
|
691 |
break |
ab25dde8919d
16323 Implement Install Execution Engine
Karen Tung <karen.tung@oracle.com>
parents:
diff
changeset
|
692 |
|
ab25dde8919d
16323 Implement Install Execution Engine
Karen Tung <karen.tung@oracle.com>
parents:
diff
changeset
|
693 |
# In addition to allowing resume from any completed checkpoint, |
ab25dde8919d
16323 Implement Install Execution Engine
Karen Tung <karen.tung@oracle.com>
parents:
diff
changeset
|
694 |
# one may also resume from the first incomplete checkpoint. |
ab25dde8919d
16323 Implement Install Execution Engine
Karen Tung <karen.tung@oracle.com>
parents:
diff
changeset
|
695 |
if last_res_idx is None: |
ab25dde8919d
16323 Implement Install Execution Engine
Karen Tung <karen.tung@oracle.com>
parents:
diff
changeset
|
696 |
# didn't find anything resumable checkpoints from prev execution. |
ab25dde8919d
16323 Implement Install Execution Engine
Karen Tung <karen.tung@oracle.com>
parents:
diff
changeset
|
697 |
if len(self._checkpoints) != 0: |
ab25dde8919d
16323 Implement Install Execution Engine
Karen Tung <karen.tung@oracle.com>
parents:
diff
changeset
|
698 |
resumable_cp.append(self._checkpoints[0].name) |
ab25dde8919d
16323 Implement Install Execution Engine
Karen Tung <karen.tung@oracle.com>
parents:
diff
changeset
|
699 |
else: |
ab25dde8919d
16323 Implement Install Execution Engine
Karen Tung <karen.tung@oracle.com>
parents:
diff
changeset
|
700 |
if (len(self._checkpoints)) - 1 > last_res_idx: |
ab25dde8919d
16323 Implement Install Execution Engine
Karen Tung <karen.tung@oracle.com>
parents:
diff
changeset
|
701 |
resumable_cp.append(self._checkpoints[last_res_idx + 1].name) |
ab25dde8919d
16323 Implement Install Execution Engine
Karen Tung <karen.tung@oracle.com>
parents:
diff
changeset
|
702 |
|
ab25dde8919d
16323 Implement Install Execution Engine
Karen Tung <karen.tung@oracle.com>
parents:
diff
changeset
|
703 |
return tuple(resumable_cp) |
ab25dde8919d
16323 Implement Install Execution Engine
Karen Tung <karen.tung@oracle.com>
parents:
diff
changeset
|
704 |
|
ab25dde8919d
16323 Implement Install Execution Engine
Karen Tung <karen.tung@oracle.com>
parents:
diff
changeset
|
705 |
def normalize_progress(self, cp_prog): |
ab25dde8919d
16323 Implement Install Execution Engine
Karen Tung <karen.tung@oracle.com>
parents:
diff
changeset
|
706 |
''' |
ab25dde8919d
16323 Implement Install Execution Engine
Karen Tung <karen.tung@oracle.com>
parents:
diff
changeset
|
707 |
Takes the percentage value provider by the InstallLogger, |
ab25dde8919d
16323 Implement Install Execution Engine
Karen Tung <karen.tung@oracle.com>
parents:
diff
changeset
|
708 |
and applies the progress ratio for the executing checkpoint |
ab25dde8919d
16323 Implement Install Execution Engine
Karen Tung <karen.tung@oracle.com>
parents:
diff
changeset
|
709 |
to calculate the overall completed percentage. |
ab25dde8919d
16323 Implement Install Execution Engine
Karen Tung <karen.tung@oracle.com>
parents:
diff
changeset
|
710 |
|
ab25dde8919d
16323 Implement Install Execution Engine
Karen Tung <karen.tung@oracle.com>
parents:
diff
changeset
|
711 |
Input: |
ab25dde8919d
16323 Implement Install Execution Engine
Karen Tung <karen.tung@oracle.com>
parents:
diff
changeset
|
712 |
* cp_prog: progress percentage value provided by InstallLogger. |
ab25dde8919d
16323 Implement Install Execution Engine
Karen Tung <karen.tung@oracle.com>
parents:
diff
changeset
|
713 |
|
ab25dde8919d
16323 Implement Install Execution Engine
Karen Tung <karen.tung@oracle.com>
parents:
diff
changeset
|
714 |
Output: |
ab25dde8919d
16323 Implement Install Execution Engine
Karen Tung <karen.tung@oracle.com>
parents:
diff
changeset
|
715 |
* normalized progress value |
ab25dde8919d
16323 Implement Install Execution Engine
Karen Tung <karen.tung@oracle.com>
parents:
diff
changeset
|
716 |
|
ab25dde8919d
16323 Implement Install Execution Engine
Karen Tung <karen.tung@oracle.com>
parents:
diff
changeset
|
717 |
Raise: |
ab25dde8919d
16323 Implement Install Execution Engine
Karen Tung <karen.tung@oracle.com>
parents:
diff
changeset
|
718 |
None |
ab25dde8919d
16323 Implement Install Execution Engine
Karen Tung <karen.tung@oracle.com>
parents:
diff
changeset
|
719 |
''' |
ab25dde8919d
16323 Implement Install Execution Engine
Karen Tung <karen.tung@oracle.com>
parents:
diff
changeset
|
720 |
|
1350
025c6311d0d9
7071386 Improve progress reporting for text installer and GUI installer
Karen Tung <Karen.Tung@oracle.com>
parents:
1308
diff
changeset
|
721 |
if self.exec_prep: |
025c6311d0d9
7071386 Improve progress reporting for text installer and GUI installer
Karen Tung <Karen.Tung@oracle.com>
parents:
1308
diff
changeset
|
722 |
# these are the values reported by the engine, do not |
025c6311d0d9
7071386 Improve progress reporting for text installer and GUI installer
Karen Tung <Karen.Tung@oracle.com>
parents:
1308
diff
changeset
|
723 |
# need to normalize |
025c6311d0d9
7071386 Improve progress reporting for text installer and GUI installer
Karen Tung <Karen.Tung@oracle.com>
parents:
1308
diff
changeset
|
724 |
return cp_prog |
025c6311d0d9
7071386 Improve progress reporting for text installer and GUI installer
Karen Tung <Karen.Tung@oracle.com>
parents:
1308
diff
changeset
|
725 |
|
909
ab25dde8919d
16323 Implement Install Execution Engine
Karen Tung <karen.tung@oracle.com>
parents:
diff
changeset
|
726 |
cp_data = self.get_cp_data(self.__currently_executing.name) |
ab25dde8919d
16323 Implement Install Execution Engine
Karen Tung <karen.tung@oracle.com>
parents:
diff
changeset
|
727 |
cp_data.prog_reported = decimal.Decimal(cp_prog) |
ab25dde8919d
16323 Implement Install Execution Engine
Karen Tung <karen.tung@oracle.com>
parents:
diff
changeset
|
728 |
normalized_prog = (int)(cp_prog * cp_data.prog_est_ratio) |
ab25dde8919d
16323 Implement Install Execution Engine
Karen Tung <karen.tung@oracle.com>
parents:
diff
changeset
|
729 |
|
ab25dde8919d
16323 Implement Install Execution Engine
Karen Tung <karen.tung@oracle.com>
parents:
diff
changeset
|
730 |
LOGGER.debug("progress: %s, reported %s, normalized %s, total=%s" % |
ab25dde8919d
16323 Implement Install Execution Engine
Karen Tung <karen.tung@oracle.com>
parents:
diff
changeset
|
731 |
(self.__currently_executing.name, cp_prog, |
ab25dde8919d
16323 Implement Install Execution Engine
Karen Tung <karen.tung@oracle.com>
parents:
diff
changeset
|
732 |
str(normalized_prog), |
ab25dde8919d
16323 Implement Install Execution Engine
Karen Tung <karen.tung@oracle.com>
parents:
diff
changeset
|
733 |
str(self.__current_completed + normalized_prog))) |
ab25dde8919d
16323 Implement Install Execution Engine
Karen Tung <karen.tung@oracle.com>
parents:
diff
changeset
|
734 |
|
1151
95413393ef67
7038120 Update Auto Installer to use CUD
Darren Kenny <Darren.Kenny@Oracle.COM>
parents:
1121
diff
changeset
|
735 |
return(str(int(self.__current_completed + normalized_prog))) |
909
ab25dde8919d
16323 Implement Install Execution Engine
Karen Tung <karen.tung@oracle.com>
parents:
diff
changeset
|
736 |
|
ab25dde8919d
16323 Implement Install Execution Engine
Karen Tung <karen.tung@oracle.com>
parents:
diff
changeset
|
737 |
def __blocking_callback(self, status, failed_checkpoint_list): |
ab25dde8919d
16323 Implement Install Execution Engine
Karen Tung <karen.tung@oracle.com>
parents:
diff
changeset
|
738 |
''' Callback used for the blocking case of execute_checkpoints ''' |
ab25dde8919d
16323 Implement Install Execution Engine
Karen Tung <karen.tung@oracle.com>
parents:
diff
changeset
|
739 |
self.__blocking_results = (status, failed_checkpoint_list) |
ab25dde8919d
16323 Implement Install Execution Engine
Karen Tung <karen.tung@oracle.com>
parents:
diff
changeset
|
740 |
|
ab25dde8919d
16323 Implement Install Execution Engine
Karen Tung <karen.tung@oracle.com>
parents:
diff
changeset
|
741 |
def _check_callback(self, callback): |
ab25dde8919d
16323 Implement Install Execution Engine
Karen Tung <karen.tung@oracle.com>
parents:
diff
changeset
|
742 |
'''Verifies that the callback function accepts the proper number |
ab25dde8919d
16323 Implement Install Execution Engine
Karen Tung <karen.tung@oracle.com>
parents:
diff
changeset
|
743 |
of arguments, so that when called after execution, there won't be an |
ab25dde8919d
16323 Implement Install Execution Engine
Karen Tung <karen.tung@oracle.com>
parents:
diff
changeset
|
744 |
exception from a mismatched function signature. |
ab25dde8919d
16323 Implement Install Execution Engine
Karen Tung <karen.tung@oracle.com>
parents:
diff
changeset
|
745 |
|
ab25dde8919d
16323 Implement Install Execution Engine
Karen Tung <karen.tung@oracle.com>
parents:
diff
changeset
|
746 |
The callback function must accept at least 2 parameters, and must not |
ab25dde8919d
16323 Implement Install Execution Engine
Karen Tung <karen.tung@oracle.com>
parents:
diff
changeset
|
747 |
require more than 2 parameters. (e.g., a 3rd parameter is ok if it is |
ab25dde8919d
16323 Implement Install Execution Engine
Karen Tung <karen.tung@oracle.com>
parents:
diff
changeset
|
748 |
an optional keyword argument). The parameters will be called with the |
ab25dde8919d
16323 Implement Install Execution Engine
Karen Tung <karen.tung@oracle.com>
parents:
diff
changeset
|
749 |
first argument being a status indicator, and the second argument being |
ab25dde8919d
16323 Implement Install Execution Engine
Karen Tung <karen.tung@oracle.com>
parents:
diff
changeset
|
750 |
the contents of the errsvc. |
ab25dde8919d
16323 Implement Install Execution Engine
Karen Tung <karen.tung@oracle.com>
parents:
diff
changeset
|
751 |
''' |
ab25dde8919d
16323 Implement Install Execution Engine
Karen Tung <karen.tung@oracle.com>
parents:
diff
changeset
|
752 |
|
ab25dde8919d
16323 Implement Install Execution Engine
Karen Tung <karen.tung@oracle.com>
parents:
diff
changeset
|
753 |
if callback is None: |
ab25dde8919d
16323 Implement Install Execution Engine
Karen Tung <karen.tung@oracle.com>
parents:
diff
changeset
|
754 |
return |
ab25dde8919d
16323 Implement Install Execution Engine
Karen Tung <karen.tung@oracle.com>
parents:
diff
changeset
|
755 |
argspec = get_argspec(callback) |
ab25dde8919d
16323 Implement Install Execution Engine
Karen Tung <karen.tung@oracle.com>
parents:
diff
changeset
|
756 |
LOGGER.log(5, "Examining function details for callback function with" |
ab25dde8919d
16323 Implement Install Execution Engine
Karen Tung <karen.tung@oracle.com>
parents:
diff
changeset
|
757 |
" signature: %s", argspec) |
ab25dde8919d
16323 Implement Install Execution Engine
Karen Tung <karen.tung@oracle.com>
parents:
diff
changeset
|
758 |
|
ab25dde8919d
16323 Implement Install Execution Engine
Karen Tung <karen.tung@oracle.com>
parents:
diff
changeset
|
759 |
num_args = len(argspec.args) |
ab25dde8919d
16323 Implement Install Execution Engine
Karen Tung <karen.tung@oracle.com>
parents:
diff
changeset
|
760 |
if hasattr(callback, "im_self"): |
ab25dde8919d
16323 Implement Install Execution Engine
Karen Tung <karen.tung@oracle.com>
parents:
diff
changeset
|
761 |
if callback.im_self is None: |
ab25dde8919d
16323 Implement Install Execution Engine
Karen Tung <karen.tung@oracle.com>
parents:
diff
changeset
|
762 |
raise TypeError("Callback cannot be an unbound method") |
ab25dde8919d
16323 Implement Install Execution Engine
Karen Tung <karen.tung@oracle.com>
parents:
diff
changeset
|
763 |
else: |
ab25dde8919d
16323 Implement Install Execution Engine
Karen Tung <karen.tung@oracle.com>
parents:
diff
changeset
|
764 |
num_args -= 1 # First arg is the bound "self" arg |
ab25dde8919d
16323 Implement Install Execution Engine
Karen Tung <karen.tung@oracle.com>
parents:
diff
changeset
|
765 |
|
ab25dde8919d
16323 Implement Install Execution Engine
Karen Tung <karen.tung@oracle.com>
parents:
diff
changeset
|
766 |
if (not argspec.varargs and |
ab25dde8919d
16323 Implement Install Execution Engine
Karen Tung <karen.tung@oracle.com>
parents:
diff
changeset
|
767 |
num_args < InstallEngine.NUM_CALLBACK_ARGS): |
ab25dde8919d
16323 Implement Install Execution Engine
Karen Tung <karen.tung@oracle.com>
parents:
diff
changeset
|
768 |
raise TypeError("callback function must accept at least 2 args:" |
ab25dde8919d
16323 Implement Install Execution Engine
Karen Tung <karen.tung@oracle.com>
parents:
diff
changeset
|
769 |
" status & errsvc") |
ab25dde8919d
16323 Implement Install Execution Engine
Karen Tung <karen.tung@oracle.com>
parents:
diff
changeset
|
770 |
|
ab25dde8919d
16323 Implement Install Execution Engine
Karen Tung <karen.tung@oracle.com>
parents:
diff
changeset
|
771 |
if argspec.defaults: |
ab25dde8919d
16323 Implement Install Execution Engine
Karen Tung <karen.tung@oracle.com>
parents:
diff
changeset
|
772 |
len_defaults = len(argspec.defaults) |
ab25dde8919d
16323 Implement Install Execution Engine
Karen Tung <karen.tung@oracle.com>
parents:
diff
changeset
|
773 |
else: |
ab25dde8919d
16323 Implement Install Execution Engine
Karen Tung <karen.tung@oracle.com>
parents:
diff
changeset
|
774 |
len_defaults = 0 |
ab25dde8919d
16323 Implement Install Execution Engine
Karen Tung <karen.tung@oracle.com>
parents:
diff
changeset
|
775 |
if num_args - len_defaults > InstallEngine.NUM_CALLBACK_ARGS: |
ab25dde8919d
16323 Implement Install Execution Engine
Karen Tung <karen.tung@oracle.com>
parents:
diff
changeset
|
776 |
raise TypeError("The specified callback function requires more" |
ab25dde8919d
16323 Implement Install Execution Engine
Karen Tung <karen.tung@oracle.com>
parents:
diff
changeset
|
777 |
" than 2 arguments and will fail") |
ab25dde8919d
16323 Implement Install Execution Engine
Karen Tung <karen.tung@oracle.com>
parents:
diff
changeset
|
778 |
|
1350
025c6311d0d9
7071386 Improve progress reporting for text installer and GUI installer
Karen Tung <Karen.Tung@oracle.com>
parents:
1308
diff
changeset
|
779 |
def _execute_checkpoints(self, checkpoint_data_list, dry_run, callback): |
909
ab25dde8919d
16323 Implement Install Execution Engine
Karen Tung <karen.tung@oracle.com>
parents:
diff
changeset
|
780 |
'''Runs the checkpoints. The public execute_checkpoints method will |
ab25dde8919d
16323 Implement Install Execution Engine
Karen Tung <karen.tung@oracle.com>
parents:
diff
changeset
|
781 |
run this function in a separate thread. |
ab25dde8919d
16323 Implement Install Execution Engine
Karen Tung <karen.tung@oracle.com>
parents:
diff
changeset
|
782 |
|
ab25dde8919d
16323 Implement Install Execution Engine
Karen Tung <karen.tung@oracle.com>
parents:
diff
changeset
|
783 |
Errors occurring here will be trapped and added to the error service |
ab25dde8919d
16323 Implement Install Execution Engine
Karen Tung <karen.tung@oracle.com>
parents:
diff
changeset
|
784 |
''' |
ab25dde8919d
16323 Implement Install Execution Engine
Karen Tung <karen.tung@oracle.com>
parents:
diff
changeset
|
785 |
|
ab25dde8919d
16323 Implement Install Execution Engine
Karen Tung <karen.tung@oracle.com>
parents:
diff
changeset
|
786 |
status = InstallEngine.EXEC_SUCCESS |
ab25dde8919d
16323 Implement Install Execution Engine
Karen Tung <karen.tung@oracle.com>
parents:
diff
changeset
|
787 |
failed_checkpoint_list = [] |
ab25dde8919d
16323 Implement Install Execution Engine
Karen Tung <karen.tung@oracle.com>
parents:
diff
changeset
|
788 |
completed = False |
ab25dde8919d
16323 Implement Install Execution Engine
Karen Tung <karen.tung@oracle.com>
parents:
diff
changeset
|
789 |
|
1350
025c6311d0d9
7071386 Improve progress reporting for text installer and GUI installer
Karen Tung <Karen.Tung@oracle.com>
parents:
1308
diff
changeset
|
790 |
# Make sure to always start at 0 progress |
025c6311d0d9
7071386 Improve progress reporting for text installer and GUI installer
Karen Tung <Karen.Tung@oracle.com>
parents:
1308
diff
changeset
|
791 |
self.__current_completed = 0 |
025c6311d0d9
7071386 Improve progress reporting for text installer and GUI installer
Karen Tung <Karen.Tung@oracle.com>
parents:
1308
diff
changeset
|
792 |
|
025c6311d0d9
7071386 Improve progress reporting for text installer and GUI installer
Karen Tung <Karen.Tung@oracle.com>
parents:
1308
diff
changeset
|
793 |
(checkpoints, failed_init_cp) = self._load_checkpoints(\ |
025c6311d0d9
7071386 Improve progress reporting for text installer and GUI installer
Karen Tung <Karen.Tung@oracle.com>
parents:
1308
diff
changeset
|
794 |
checkpoint_data_list) |
025c6311d0d9
7071386 Improve progress reporting for text installer and GUI installer
Karen Tung <Karen.Tung@oracle.com>
parents:
1308
diff
changeset
|
795 |
|
025c6311d0d9
7071386 Improve progress reporting for text installer and GUI installer
Karen Tung <Karen.Tung@oracle.com>
parents:
1308
diff
changeset
|
796 |
if not checkpoints: |
025c6311d0d9
7071386 Improve progress reporting for text installer and GUI installer
Karen Tung <Karen.Tung@oracle.com>
parents:
1308
diff
changeset
|
797 |
# one of the checkpoint must have failed to initialize, call the |
025c6311d0d9
7071386 Improve progress reporting for text installer and GUI installer
Karen Tung <Karen.Tung@oracle.com>
parents:
1308
diff
changeset
|
798 |
# callback function with the failure and return the |
025c6311d0d9
7071386 Improve progress reporting for text installer and GUI installer
Karen Tung <Karen.Tung@oracle.com>
parents:
1308
diff
changeset
|
799 |
# failures. |
025c6311d0d9
7071386 Improve progress reporting for text installer and GUI installer
Karen Tung <Karen.Tung@oracle.com>
parents:
1308
diff
changeset
|
800 |
LOGGER.debug(failed_init_cp + " checkpoint failed to initialize") |
025c6311d0d9
7071386 Improve progress reporting for text installer and GUI installer
Karen Tung <Karen.Tung@oracle.com>
parents:
1308
diff
changeset
|
801 |
callback(InstallEngine.CP_INIT_FAILED, [failed_init_cp]) |
025c6311d0d9
7071386 Improve progress reporting for text installer and GUI installer
Karen Tung <Karen.Tung@oracle.com>
parents:
1308
diff
changeset
|
802 |
with self._checkpoint_lock: |
025c6311d0d9
7071386 Improve progress reporting for text installer and GUI installer
Karen Tung <Karen.Tung@oracle.com>
parents:
1308
diff
changeset
|
803 |
self.__currently_executing = None |
025c6311d0d9
7071386 Improve progress reporting for text installer and GUI installer
Karen Tung <Karen.Tung@oracle.com>
parents:
1308
diff
changeset
|
804 |
return |
025c6311d0d9
7071386 Improve progress reporting for text installer and GUI installer
Karen Tung <Karen.Tung@oracle.com>
parents:
1308
diff
changeset
|
805 |
|
909
ab25dde8919d
16323 Implement Install Execution Engine
Karen Tung <karen.tung@oracle.com>
parents:
diff
changeset
|
806 |
try: |
ab25dde8919d
16323 Implement Install Execution Engine
Karen Tung <karen.tung@oracle.com>
parents:
diff
changeset
|
807 |
for checkpoint in checkpoints: |
ab25dde8919d
16323 Implement Install Execution Engine
Karen Tung <karen.tung@oracle.com>
parents:
diff
changeset
|
808 |
with self._checkpoint_lock: |
ab25dde8919d
16323 Implement Install Execution Engine
Karen Tung <karen.tung@oracle.com>
parents:
diff
changeset
|
809 |
# Determine whether the execution has |
ab25dde8919d
16323 Implement Install Execution Engine
Karen Tung <karen.tung@oracle.com>
parents:
diff
changeset
|
810 |
# been canceled. (Acquire the lock to ensure that |
ab25dde8919d
16323 Implement Install Execution Engine
Karen Tung <karen.tung@oracle.com>
parents:
diff
changeset
|
811 |
# cancel_checkpoints() isn't attempting to cancel |
ab25dde8919d
16323 Implement Install Execution Engine
Karen Tung <karen.tung@oracle.com>
parents:
diff
changeset
|
812 |
# __currently_executing). |
ab25dde8919d
16323 Implement Install Execution Engine
Karen Tung <karen.tung@oracle.com>
parents:
diff
changeset
|
813 |
if self._cancel_event.is_set(): |
ab25dde8919d
16323 Implement Install Execution Engine
Karen Tung <karen.tung@oracle.com>
parents:
diff
changeset
|
814 |
status = InstallEngine.EXEC_CANCELED |
ab25dde8919d
16323 Implement Install Execution Engine
Karen Tung <karen.tung@oracle.com>
parents:
diff
changeset
|
815 |
failed_checkpoint_list.append( |
ab25dde8919d
16323 Implement Install Execution Engine
Karen Tung <karen.tung@oracle.com>
parents:
diff
changeset
|
816 |
self.__currently_executing.name) |
ab25dde8919d
16323 Implement Install Execution Engine
Karen Tung <karen.tung@oracle.com>
parents:
diff
changeset
|
817 |
break |
ab25dde8919d
16323 Implement Install Execution Engine
Karen Tung <karen.tung@oracle.com>
parents:
diff
changeset
|
818 |
self.__currently_executing = checkpoint |
ab25dde8919d
16323 Implement Install Execution Engine
Karen Tung <karen.tung@oracle.com>
parents:
diff
changeset
|
819 |
cp_data = self.get_cp_data(checkpoint.name) |
ab25dde8919d
16323 Implement Install Execution Engine
Karen Tung <karen.tung@oracle.com>
parents:
diff
changeset
|
820 |
|
948
6bff7ea9c858
6997606 Resuming from previously failed checkpoint does not work correctly
Karen Tung <karen.tung@oracle.com>
parents:
947
diff
changeset
|
821 |
# Take a snapshot of the state before executing the checkpoint. |
1418
8e9701e2c0f3
7033339 - Be able to specify logfile name when instantiate InstallLogger
Ginnie Wray<virginia.wray@oracle.com>
parents:
1350
diff
changeset
|
822 |
# This snapshot, which is associated with the checkpoint's |
8e9701e2c0f3
7033339 - Be able to specify logfile name when instantiate InstallLogger
Ginnie Wray<virginia.wray@oracle.com>
parents:
1350
diff
changeset
|
823 |
# name, is for resuming at the named checkpoint. |
948
6bff7ea9c858
6997606 Resuming from previously failed checkpoint does not work correctly
Karen Tung <karen.tung@oracle.com>
parents:
947
diff
changeset
|
824 |
if status is InstallEngine.EXEC_SUCCESS: |
1290
cfaa7349f221
7004000 Install engine enhancement to save original args/kwargs list before calling checkpoint's execute
Karen Tung <Karen.Tung@oracle.com>
parents:
1151
diff
changeset
|
825 |
self.snapshot(cp_data=cp_data) |
909
ab25dde8919d
16323 Implement Install Execution Engine
Karen Tung <karen.tung@oracle.com>
parents:
diff
changeset
|
826 |
|
ab25dde8919d
16323 Implement Install Execution Engine
Karen Tung <karen.tung@oracle.com>
parents:
diff
changeset
|
827 |
try: |
ab25dde8919d
16323 Implement Install Execution Engine
Karen Tung <karen.tung@oracle.com>
parents:
diff
changeset
|
828 |
LOGGER.debug("Executing %s checkpoint", checkpoint.name) |
ab25dde8919d
16323 Implement Install Execution Engine
Karen Tung <karen.tung@oracle.com>
parents:
diff
changeset
|
829 |
checkpoint.execute(dry_run) |
ab25dde8919d
16323 Implement Install Execution Engine
Karen Tung <karen.tung@oracle.com>
parents:
diff
changeset
|
830 |
except BaseException as exception: |
948
6bff7ea9c858
6997606 Resuming from previously failed checkpoint does not work correctly
Karen Tung <karen.tung@oracle.com>
parents:
947
diff
changeset
|
831 |
LOGGER.exception("Error occurred during execution " |
6bff7ea9c858
6997606 Resuming from previously failed checkpoint does not work correctly
Karen Tung <karen.tung@oracle.com>
parents:
947
diff
changeset
|
832 |
"of '%s' checkpoint." % checkpoint.name) |
909
ab25dde8919d
16323 Implement Install Execution Engine
Karen Tung <karen.tung@oracle.com>
parents:
diff
changeset
|
833 |
completed = False |
ab25dde8919d
16323 Implement Install Execution Engine
Karen Tung <karen.tung@oracle.com>
parents:
diff
changeset
|
834 |
error_info = errsvc.ErrorInfo(checkpoint.name, |
ab25dde8919d
16323 Implement Install Execution Engine
Karen Tung <karen.tung@oracle.com>
parents:
diff
changeset
|
835 |
liberrsvc.ES_ERR) |
ab25dde8919d
16323 Implement Install Execution Engine
Karen Tung <karen.tung@oracle.com>
parents:
diff
changeset
|
836 |
error_info.set_error_data(liberrsvc.ES_DATA_EXCEPTION, |
ab25dde8919d
16323 Implement Install Execution Engine
Karen Tung <karen.tung@oracle.com>
parents:
diff
changeset
|
837 |
exception) |
ab25dde8919d
16323 Implement Install Execution Engine
Karen Tung <karen.tung@oracle.com>
parents:
diff
changeset
|
838 |
failed_checkpoint_list.append(checkpoint.name) |
ab25dde8919d
16323 Implement Install Execution Engine
Karen Tung <karen.tung@oracle.com>
parents:
diff
changeset
|
839 |
status = InstallEngine.EXEC_FAILED |
ab25dde8919d
16323 Implement Install Execution Engine
Karen Tung <karen.tung@oracle.com>
parents:
diff
changeset
|
840 |
if self.stop_on_error: |
ab25dde8919d
16323 Implement Install Execution Engine
Karen Tung <karen.tung@oracle.com>
parents:
diff
changeset
|
841 |
if (self.debug and |
ab25dde8919d
16323 Implement Install Execution Engine
Karen Tung <karen.tung@oracle.com>
parents:
diff
changeset
|
842 |
isinstance(self.checkpoint_thread, |
ab25dde8919d
16323 Implement Install Execution Engine
Karen Tung <karen.tung@oracle.com>
parents:
diff
changeset
|
843 |
InstallEngine._PseudoThread)): |
ab25dde8919d
16323 Implement Install Execution Engine
Karen Tung <karen.tung@oracle.com>
parents:
diff
changeset
|
844 |
raise |
ab25dde8919d
16323 Implement Install Execution Engine
Karen Tung <karen.tung@oracle.com>
parents:
diff
changeset
|
845 |
else: |
ab25dde8919d
16323 Implement Install Execution Engine
Karen Tung <karen.tung@oracle.com>
parents:
diff
changeset
|
846 |
break |
ab25dde8919d
16323 Implement Install Execution Engine
Karen Tung <karen.tung@oracle.com>
parents:
diff
changeset
|
847 |
else: |
ab25dde8919d
16323 Implement Install Execution Engine
Karen Tung <karen.tung@oracle.com>
parents:
diff
changeset
|
848 |
# Checkpoint completed successfully without exceptions |
ab25dde8919d
16323 Implement Install Execution Engine
Karen Tung <karen.tung@oracle.com>
parents:
diff
changeset
|
849 |
completed = True |
ab25dde8919d
16323 Implement Install Execution Engine
Karen Tung <karen.tung@oracle.com>
parents:
diff
changeset
|
850 |
|
ab25dde8919d
16323 Implement Install Execution Engine
Karen Tung <karen.tung@oracle.com>
parents:
diff
changeset
|
851 |
self._engine_doc_root.insert_children(cp_data.cp_info) |
ab25dde8919d
16323 Implement Install Execution Engine
Karen Tung <karen.tung@oracle.com>
parents:
diff
changeset
|
852 |
cp_data.completed = completed |
ab25dde8919d
16323 Implement Install Execution Engine
Karen Tung <karen.tung@oracle.com>
parents:
diff
changeset
|
853 |
|
ab25dde8919d
16323 Implement Install Execution Engine
Karen Tung <karen.tung@oracle.com>
parents:
diff
changeset
|
854 |
# Inform logger that the checkpoint has completed. |
ab25dde8919d
16323 Implement Install Execution Engine
Karen Tung <karen.tung@oracle.com>
parents:
diff
changeset
|
855 |
# This is to ensure that progress is being reported |
ab25dde8919d
16323 Implement Install Execution Engine
Karen Tung <karen.tung@oracle.com>
parents:
diff
changeset
|
856 |
# even if checkpoints don't report progress themselves |
ab25dde8919d
16323 Implement Install Execution Engine
Karen Tung <karen.tung@oracle.com>
parents:
diff
changeset
|
857 |
if cp_data.prog_reported < 100: |
ab25dde8919d
16323 Implement Install Execution Engine
Karen Tung <karen.tung@oracle.com>
parents:
diff
changeset
|
858 |
LOGGER.report_progress(msg=cp_data.name + " completed.", |
ab25dde8919d
16323 Implement Install Execution Engine
Karen Tung <karen.tung@oracle.com>
parents:
diff
changeset
|
859 |
progress=100) |
ab25dde8919d
16323 Implement Install Execution Engine
Karen Tung <karen.tung@oracle.com>
parents:
diff
changeset
|
860 |
|
ab25dde8919d
16323 Implement Install Execution Engine
Karen Tung <karen.tung@oracle.com>
parents:
diff
changeset
|
861 |
# keep track of completed percentage |
ab25dde8919d
16323 Implement Install Execution Engine
Karen Tung <karen.tung@oracle.com>
parents:
diff
changeset
|
862 |
self.__current_completed += cp_data.prog_est_ratio * 100 |
ab25dde8919d
16323 Implement Install Execution Engine
Karen Tung <karen.tung@oracle.com>
parents:
diff
changeset
|
863 |
|
1290
cfaa7349f221
7004000 Install engine enhancement to save original args/kwargs list before calling checkpoint's execute
Karen Tung <Karen.Tung@oracle.com>
parents:
1151
diff
changeset
|
864 |
# Take a snapshot of the state after executing the checkpoint. |
1418
8e9701e2c0f3
7033339 - Be able to specify logfile name when instantiate InstallLogger
Ginnie Wray<virginia.wray@oracle.com>
parents:
1350
diff
changeset
|
865 |
# if it is successful. |
948
6bff7ea9c858
6997606 Resuming from previously failed checkpoint does not work correctly
Karen Tung <karen.tung@oracle.com>
parents:
947
diff
changeset
|
866 |
if status is InstallEngine.EXEC_SUCCESS: |
1290
cfaa7349f221
7004000 Install engine enhancement to save original args/kwargs list before calling checkpoint's execute
Karen Tung <Karen.Tung@oracle.com>
parents:
1151
diff
changeset
|
867 |
self.snapshot(self._get_completed_name(cp_data.name)) |
948
6bff7ea9c858
6997606 Resuming from previously failed checkpoint does not work correctly
Karen Tung <karen.tung@oracle.com>
parents:
947
diff
changeset
|
868 |
|
909
ab25dde8919d
16323 Implement Install Execution Engine
Karen Tung <karen.tung@oracle.com>
parents:
diff
changeset
|
869 |
except BaseException as exception: |
ab25dde8919d
16323 Implement Install Execution Engine
Karen Tung <karen.tung@oracle.com>
parents:
diff
changeset
|
870 |
# Fatal error in InstallEngine - abort regardless of issue |
ab25dde8919d
16323 Implement Install Execution Engine
Karen Tung <karen.tung@oracle.com>
parents:
diff
changeset
|
871 |
LOGGER.exception("Aborting: Internal error in InstallEngine") |
ab25dde8919d
16323 Implement Install Execution Engine
Karen Tung <karen.tung@oracle.com>
parents:
diff
changeset
|
872 |
status = InstallEngine.FATAL_INTERNAL |
ab25dde8919d
16323 Implement Install Execution Engine
Karen Tung <karen.tung@oracle.com>
parents:
diff
changeset
|
873 |
error_info = errsvc.ErrorInfo(status, liberrsvc.ES_ERR) |
ab25dde8919d
16323 Implement Install Execution Engine
Karen Tung <karen.tung@oracle.com>
parents:
diff
changeset
|
874 |
error_info.set_error_data(liberrsvc.ES_DATA_EXCEPTION, |
ab25dde8919d
16323 Implement Install Execution Engine
Karen Tung <karen.tung@oracle.com>
parents:
diff
changeset
|
875 |
exception) |
ab25dde8919d
16323 Implement Install Execution Engine
Karen Tung <karen.tung@oracle.com>
parents:
diff
changeset
|
876 |
failed_checkpoint_list.insert(0, status) |
ab25dde8919d
16323 Implement Install Execution Engine
Karen Tung <karen.tung@oracle.com>
parents:
diff
changeset
|
877 |
# If we're in the main thread, raise this fatal error up. |
ab25dde8919d
16323 Implement Install Execution Engine
Karen Tung <karen.tung@oracle.com>
parents:
diff
changeset
|
878 |
if isinstance(self.checkpoint_thread, |
ab25dde8919d
16323 Implement Install Execution Engine
Karen Tung <karen.tung@oracle.com>
parents:
diff
changeset
|
879 |
InstallEngine._PseudoThread): |
ab25dde8919d
16323 Implement Install Execution Engine
Karen Tung <karen.tung@oracle.com>
parents:
diff
changeset
|
880 |
raise |
ab25dde8919d
16323 Implement Install Execution Engine
Karen Tung <karen.tung@oracle.com>
parents:
diff
changeset
|
881 |
finally: |
ab25dde8919d
16323 Implement Install Execution Engine
Karen Tung <karen.tung@oracle.com>
parents:
diff
changeset
|
882 |
with self._checkpoint_lock: |
ab25dde8919d
16323 Implement Install Execution Engine
Karen Tung <karen.tung@oracle.com>
parents:
diff
changeset
|
883 |
self.__currently_executing = None |
ab25dde8919d
16323 Implement Install Execution Engine
Karen Tung <karen.tung@oracle.com>
parents:
diff
changeset
|
884 |
|
ab25dde8919d
16323 Implement Install Execution Engine
Karen Tung <karen.tung@oracle.com>
parents:
diff
changeset
|
885 |
callback(status, failed_checkpoint_list) |
ab25dde8919d
16323 Implement Install Execution Engine
Karen Tung <karen.tung@oracle.com>
parents:
diff
changeset
|
886 |
|
1290
cfaa7349f221
7004000 Install engine enhancement to save original args/kwargs list before calling checkpoint's execute
Karen Tung <Karen.Tung@oracle.com>
parents:
1151
diff
changeset
|
887 |
def snapshot(self, snapname=None, cp_data=None): |
909
ab25dde8919d
16323 Implement Install Execution Engine
Karen Tung <karen.tung@oracle.com>
parents:
diff
changeset
|
888 |
'''Snapshots the current DOC state (and ZFS dataset, if it exists)''' |
1290
cfaa7349f221
7004000 Install engine enhancement to save original args/kwargs list before calling checkpoint's execute
Karen Tung <Karen.Tung@oracle.com>
parents:
1151
diff
changeset
|
889 |
if cp_data is not None: |
cfaa7349f221
7004000 Install engine enhancement to save original args/kwargs list before calling checkpoint's execute
Karen Tung <Karen.Tung@oracle.com>
parents:
1151
diff
changeset
|
890 |
snapshot_name = cp_data.name |
cfaa7349f221
7004000 Install engine enhancement to save original args/kwargs list before calling checkpoint's execute
Karen Tung <Karen.Tung@oracle.com>
parents:
1151
diff
changeset
|
891 |
else: |
cfaa7349f221
7004000 Install engine enhancement to save original args/kwargs list before calling checkpoint's execute
Karen Tung <Karen.Tung@oracle.com>
parents:
1151
diff
changeset
|
892 |
snapshot_name = snapname |
cfaa7349f221
7004000 Install engine enhancement to save original args/kwargs list before calling checkpoint's execute
Karen Tung <Karen.Tung@oracle.com>
parents:
1151
diff
changeset
|
893 |
|
cfaa7349f221
7004000 Install engine enhancement to save original args/kwargs list before calling checkpoint's execute
Karen Tung <Karen.Tung@oracle.com>
parents:
1151
diff
changeset
|
894 |
filename = self.get_cache_filename(snapshot_name) |
909
ab25dde8919d
16323 Implement Install Execution Engine
Karen Tung <karen.tung@oracle.com>
parents:
diff
changeset
|
895 |
LOGGER.debug("Snapshotting DOC to %s", filename) |
ab25dde8919d
16323 Implement Install Execution Engine
Karen Tung <karen.tung@oracle.com>
parents:
diff
changeset
|
896 |
self.data_object_cache.take_snapshot(filename) |
1290
cfaa7349f221
7004000 Install engine enhancement to save original args/kwargs list before calling checkpoint's execute
Karen Tung <Karen.Tung@oracle.com>
parents:
1151
diff
changeset
|
897 |
if cp_data is not None: |
cfaa7349f221
7004000 Install engine enhancement to save original args/kwargs list before calling checkpoint's execute
Karen Tung <Karen.Tung@oracle.com>
parents:
1151
diff
changeset
|
898 |
cp_data.data_cache_path = filename |
909
ab25dde8919d
16323 Implement Install Execution Engine
Karen Tung <karen.tung@oracle.com>
parents:
diff
changeset
|
899 |
|
ab25dde8919d
16323 Implement Install Execution Engine
Karen Tung <karen.tung@oracle.com>
parents:
diff
changeset
|
900 |
if self.dataset is not None and self.dataset.exists: |
1290
cfaa7349f221
7004000 Install engine enhancement to save original args/kwargs list before calling checkpoint's execute
Karen Tung <Karen.Tung@oracle.com>
parents:
1151
diff
changeset
|
901 |
snap_name = self.get_zfs_snapshot_name(snapshot_name) |
909
ab25dde8919d
16323 Implement Install Execution Engine
Karen Tung <karen.tung@oracle.com>
parents:
diff
changeset
|
902 |
LOGGER.debug("Taking zfs snapshot: %s", snap_name) |
ab25dde8919d
16323 Implement Install Execution Engine
Karen Tung <karen.tung@oracle.com>
parents:
diff
changeset
|
903 |
self.dataset.snapshot(snap_name, overwrite=True) |
1290
cfaa7349f221
7004000 Install engine enhancement to save original args/kwargs list before calling checkpoint's execute
Karen Tung <Karen.Tung@oracle.com>
parents:
1151
diff
changeset
|
904 |
if cp_data is not None: |
cfaa7349f221
7004000 Install engine enhancement to save original args/kwargs list before calling checkpoint's execute
Karen Tung <Karen.Tung@oracle.com>
parents:
1151
diff
changeset
|
905 |
cp_data.zfs_snap = snap_name |
909
ab25dde8919d
16323 Implement Install Execution Engine
Karen Tung <karen.tung@oracle.com>
parents:
diff
changeset
|
906 |
self.zfs_snapshots_modifed = True |
ab25dde8919d
16323 Implement Install Execution Engine
Karen Tung <karen.tung@oracle.com>
parents:
diff
changeset
|
907 |
else: |
1290
cfaa7349f221
7004000 Install engine enhancement to save original args/kwargs list before calling checkpoint's execute
Karen Tung <Karen.Tung@oracle.com>
parents:
1151
diff
changeset
|
908 |
if cp_data is not None: |
cfaa7349f221
7004000 Install engine enhancement to save original args/kwargs list before calling checkpoint's execute
Karen Tung <Karen.Tung@oracle.com>
parents:
1151
diff
changeset
|
909 |
cp_data.zfs_snap = None |
909
ab25dde8919d
16323 Implement Install Execution Engine
Karen Tung <karen.tung@oracle.com>
parents:
diff
changeset
|
910 |
|
ab25dde8919d
16323 Implement Install Execution Engine
Karen Tung <karen.tung@oracle.com>
parents:
diff
changeset
|
911 |
def _load_checkpoints(self, checkpoint_data_list): |
ab25dde8919d
16323 Implement Install Execution Engine
Karen Tung <karen.tung@oracle.com>
parents:
diff
changeset
|
912 |
'''Load checkpoint modules to get the executable checkpoints |
1418
8e9701e2c0f3
7033339 - Be able to specify logfile name when instantiate InstallLogger
Ginnie Wray<virginia.wray@oracle.com>
parents:
1350
diff
changeset
|
913 |
|
909
ab25dde8919d
16323 Implement Install Execution Engine
Karen Tung <karen.tung@oracle.com>
parents:
diff
changeset
|
914 |
Input: |
ab25dde8919d
16323 Implement Install Execution Engine
Karen Tung <karen.tung@oracle.com>
parents:
diff
changeset
|
915 |
checkpoint_data_list: list of checkpoints to be executed. This |
ab25dde8919d
16323 Implement Install Execution Engine
Karen Tung <karen.tung@oracle.com>
parents:
diff
changeset
|
916 |
is a list of CheckpointInfo objects. |
ab25dde8919d
16323 Implement Install Execution Engine
Karen Tung <karen.tung@oracle.com>
parents:
diff
changeset
|
917 |
Output: |
ab25dde8919d
16323 Implement Install Execution Engine
Karen Tung <karen.tung@oracle.com>
parents:
diff
changeset
|
918 |
* list of instantiated checkpoint objects, if no instantiation |
ab25dde8919d
16323 Implement Install Execution Engine
Karen Tung <karen.tung@oracle.com>
parents:
diff
changeset
|
919 |
failure occurred. |
ab25dde8919d
16323 Implement Install Execution Engine
Karen Tung <karen.tung@oracle.com>
parents:
diff
changeset
|
920 |
* name of the checkpoint that failed to instantiate. The |
1418
8e9701e2c0f3
7033339 - Be able to specify logfile name when instantiate InstallLogger
Ginnie Wray<virginia.wray@oracle.com>
parents:
1350
diff
changeset
|
921 |
exact traceback from the failure is registered with the |
1096
d795f8b803de
7036478 Additional slim_code_cleaness failures after TI/TD CUD putback
Mary Ding <mary.ding@oracle.com>
parents:
1073
diff
changeset
|
922 |
errsvc. |
909
ab25dde8919d
16323 Implement Install Execution Engine
Karen Tung <karen.tung@oracle.com>
parents:
diff
changeset
|
923 |
|
ab25dde8919d
16323 Implement Install Execution Engine
Karen Tung <karen.tung@oracle.com>
parents:
diff
changeset
|
924 |
Raises: |
ab25dde8919d
16323 Implement Install Execution Engine
Karen Tung <karen.tung@oracle.com>
parents:
diff
changeset
|
925 |
* None |
ab25dde8919d
16323 Implement Install Execution Engine
Karen Tung <karen.tung@oracle.com>
parents:
diff
changeset
|
926 |
''' |
ab25dde8919d
16323 Implement Install Execution Engine
Karen Tung <karen.tung@oracle.com>
parents:
diff
changeset
|
927 |
|
ab25dde8919d
16323 Implement Install Execution Engine
Karen Tung <karen.tung@oracle.com>
parents:
diff
changeset
|
928 |
if len(checkpoint_data_list) == 0: |
ab25dde8919d
16323 Implement Install Execution Engine
Karen Tung <karen.tung@oracle.com>
parents:
diff
changeset
|
929 |
# to protect against an empty list being passed in. |
ab25dde8919d
16323 Implement Install Execution Engine
Karen Tung <karen.tung@oracle.com>
parents:
diff
changeset
|
930 |
return([], None) |
ab25dde8919d
16323 Implement Install Execution Engine
Karen Tung <karen.tung@oracle.com>
parents:
diff
changeset
|
931 |
|
ab25dde8919d
16323 Implement Install Execution Engine
Karen Tung <karen.tung@oracle.com>
parents:
diff
changeset
|
932 |
execute_these = [] |
ab25dde8919d
16323 Implement Install Execution Engine
Karen Tung <karen.tung@oracle.com>
parents:
diff
changeset
|
933 |
total_estimate = decimal.Decimal('0') |
1350
025c6311d0d9
7071386 Improve progress reporting for text installer and GUI installer
Karen Tung <Karen.Tung@oracle.com>
parents:
1308
diff
changeset
|
934 |
self.exec_prep = True |
025c6311d0d9
7071386 Improve progress reporting for text installer and GUI installer
Karen Tung <Karen.Tung@oracle.com>
parents:
1308
diff
changeset
|
935 |
|
025c6311d0d9
7071386 Improve progress reporting for text installer and GUI installer
Karen Tung <Karen.Tung@oracle.com>
parents:
1308
diff
changeset
|
936 |
num_cp_to_load = float(len(checkpoint_data_list)) |
025c6311d0d9
7071386 Improve progress reporting for text installer and GUI installer
Karen Tung <Karen.Tung@oracle.com>
parents:
1308
diff
changeset
|
937 |
num_cp_loaded = 0 |
025c6311d0d9
7071386 Improve progress reporting for text installer and GUI installer
Karen Tung <Karen.Tung@oracle.com>
parents:
1308
diff
changeset
|
938 |
|
909
ab25dde8919d
16323 Implement Install Execution Engine
Karen Tung <karen.tung@oracle.com>
parents:
diff
changeset
|
939 |
for cp_data in checkpoint_data_list: |
ab25dde8919d
16323 Implement Install Execution Engine
Karen Tung <karen.tung@oracle.com>
parents:
diff
changeset
|
940 |
LOGGER.debug("Loading %s checkpoint", cp_data) |
1350
025c6311d0d9
7071386 Improve progress reporting for text installer and GUI installer
Karen Tung <Karen.Tung@oracle.com>
parents:
1308
diff
changeset
|
941 |
load_prog = int((num_cp_loaded / num_cp_to_load) * \ |
025c6311d0d9
7071386 Improve progress reporting for text installer and GUI installer
Karen Tung <Karen.Tung@oracle.com>
parents:
1308
diff
changeset
|
942 |
InstallEngine.EXEC_PREP_RATIO * 100) |
025c6311d0d9
7071386 Improve progress reporting for text installer and GUI installer
Karen Tung <Karen.Tung@oracle.com>
parents:
1308
diff
changeset
|
943 |
LOGGER.report_progress(msg=InstallEngine.PREP_MSG, |
025c6311d0d9
7071386 Improve progress reporting for text installer and GUI installer
Karen Tung <Karen.Tung@oracle.com>
parents:
1308
diff
changeset
|
944 |
progress=load_prog) |
909
ab25dde8919d
16323 Implement Install Execution Engine
Karen Tung <karen.tung@oracle.com>
parents:
diff
changeset
|
945 |
try: |
ab25dde8919d
16323 Implement Install Execution Engine
Karen Tung <karen.tung@oracle.com>
parents:
diff
changeset
|
946 |
checkpoint = cp_data.load_checkpoint() |
ab25dde8919d
16323 Implement Install Execution Engine
Karen Tung <karen.tung@oracle.com>
parents:
diff
changeset
|
947 |
prog_est = checkpoint.get_progress_estimate() |
ab25dde8919d
16323 Implement Install Execution Engine
Karen Tung <karen.tung@oracle.com>
parents:
diff
changeset
|
948 |
except BaseException as exception: |
ab25dde8919d
16323 Implement Install Execution Engine
Karen Tung <karen.tung@oracle.com>
parents:
diff
changeset
|
949 |
LOGGER.exception("Uncaught exception from '%s' checkpoint init" |
ab25dde8919d
16323 Implement Install Execution Engine
Karen Tung <karen.tung@oracle.com>
parents:
diff
changeset
|
950 |
% cp_data.name) |
922
f6d3871f2b3e
6997663 Change an error message to be more user friendly for an invalid pause checkpoint name
Karen Tung <karen.tung@oracle.com>
parents:
913
diff
changeset
|
951 |
error_info = errsvc.ErrorInfo(cp_data.name, liberrsvc.ES_ERR) |
909
ab25dde8919d
16323 Implement Install Execution Engine
Karen Tung <karen.tung@oracle.com>
parents:
diff
changeset
|
952 |
error_info.set_error_data(liberrsvc.ES_DATA_EXCEPTION, |
ab25dde8919d
16323 Implement Install Execution Engine
Karen Tung <karen.tung@oracle.com>
parents:
diff
changeset
|
953 |
exception) |
ab25dde8919d
16323 Implement Install Execution Engine
Karen Tung <karen.tung@oracle.com>
parents:
diff
changeset
|
954 |
return ([], cp_data.name) |
ab25dde8919d
16323 Implement Install Execution Engine
Karen Tung <karen.tung@oracle.com>
parents:
diff
changeset
|
955 |
|
ab25dde8919d
16323 Implement Install Execution Engine
Karen Tung <karen.tung@oracle.com>
parents:
diff
changeset
|
956 |
if prog_est <= 0: |
ab25dde8919d
16323 Implement Install Execution Engine
Karen Tung <karen.tung@oracle.com>
parents:
diff
changeset
|
957 |
# Take care of the case where get_progress_estimate() returning |
ab25dde8919d
16323 Implement Install Execution Engine
Karen Tung <karen.tung@oracle.com>
parents:
diff
changeset
|
958 |
# invalid value |
ab25dde8919d
16323 Implement Install Execution Engine
Karen Tung <karen.tung@oracle.com>
parents:
diff
changeset
|
959 |
prog_est = 1 |
ab25dde8919d
16323 Implement Install Execution Engine
Karen Tung <karen.tung@oracle.com>
parents:
diff
changeset
|
960 |
cp_data.prog_est = decimal.Decimal(str(prog_est)) |
ab25dde8919d
16323 Implement Install Execution Engine
Karen Tung <karen.tung@oracle.com>
parents:
diff
changeset
|
961 |
total_estimate += cp_data.prog_est |
ab25dde8919d
16323 Implement Install Execution Engine
Karen Tung <karen.tung@oracle.com>
parents:
diff
changeset
|
962 |
execute_these.append(checkpoint) |
1350
025c6311d0d9
7071386 Improve progress reporting for text installer and GUI installer
Karen Tung <Karen.Tung@oracle.com>
parents:
1308
diff
changeset
|
963 |
num_cp_loaded += 1 |
909
ab25dde8919d
16323 Implement Install Execution Engine
Karen Tung <karen.tung@oracle.com>
parents:
diff
changeset
|
964 |
|
1350
025c6311d0d9
7071386 Improve progress reporting for text installer and GUI installer
Karen Tung <Karen.Tung@oracle.com>
parents:
1308
diff
changeset
|
965 |
self.exec_prep = False |
025c6311d0d9
7071386 Improve progress reporting for text installer and GUI installer
Karen Tung <Karen.Tung@oracle.com>
parents:
1308
diff
changeset
|
966 |
self.__current_completed += InstallEngine.EXEC_PREP_RATIO_DECIMAL * 100 |
025c6311d0d9
7071386 Improve progress reporting for text installer and GUI installer
Karen Tung <Karen.Tung@oracle.com>
parents:
1308
diff
changeset
|
967 |
|
025c6311d0d9
7071386 Improve progress reporting for text installer and GUI installer
Karen Tung <Karen.Tung@oracle.com>
parents:
1308
diff
changeset
|
968 |
total_ratio = InstallEngine.EXEC_PREP_RATIO_DECIMAL |
025c6311d0d9
7071386 Improve progress reporting for text installer and GUI installer
Karen Tung <Karen.Tung@oracle.com>
parents:
1308
diff
changeset
|
969 |
adjusted_ratio = decimal.Decimal(str(1 - \ |
025c6311d0d9
7071386 Improve progress reporting for text installer and GUI installer
Karen Tung <Karen.Tung@oracle.com>
parents:
1308
diff
changeset
|
970 |
InstallEngine.EXEC_PREP_RATIO)) |
909
ab25dde8919d
16323 Implement Install Execution Engine
Karen Tung <karen.tung@oracle.com>
parents:
diff
changeset
|
971 |
for cp_data in checkpoint_data_list: |
1350
025c6311d0d9
7071386 Improve progress reporting for text installer and GUI installer
Karen Tung <Karen.Tung@oracle.com>
parents:
1308
diff
changeset
|
972 |
cp_data.prog_est_ratio = (cp_data.prog_est / total_estimate) * \ |
025c6311d0d9
7071386 Improve progress reporting for text installer and GUI installer
Karen Tung <Karen.Tung@oracle.com>
parents:
1308
diff
changeset
|
973 |
adjusted_ratio |
909
ab25dde8919d
16323 Implement Install Execution Engine
Karen Tung <karen.tung@oracle.com>
parents:
diff
changeset
|
974 |
total_ratio += cp_data.prog_est_ratio |
ab25dde8919d
16323 Implement Install Execution Engine
Karen Tung <karen.tung@oracle.com>
parents:
diff
changeset
|
975 |
LOGGER.debug("%s: prog est-%s, prog ratio-%s, total_ratio-%s" % |
ab25dde8919d
16323 Implement Install Execution Engine
Karen Tung <karen.tung@oracle.com>
parents:
diff
changeset
|
976 |
(cp_data.name, str(cp_data.prog_est), |
ab25dde8919d
16323 Implement Install Execution Engine
Karen Tung <karen.tung@oracle.com>
parents:
diff
changeset
|
977 |
str(cp_data.prog_est_ratio), str(total_ratio))) |
ab25dde8919d
16323 Implement Install Execution Engine
Karen Tung <karen.tung@oracle.com>
parents:
diff
changeset
|
978 |
|
ab25dde8919d
16323 Implement Install Execution Engine
Karen Tung <karen.tung@oracle.com>
parents:
diff
changeset
|
979 |
# Just in case the total ratio didn't add up to 100% because |
ab25dde8919d
16323 Implement Install Execution Engine
Karen Tung <karen.tung@oracle.com>
parents:
diff
changeset
|
980 |
# of rounding down, adjust it in the last checkpoint |
ab25dde8919d
16323 Implement Install Execution Engine
Karen Tung <karen.tung@oracle.com>
parents:
diff
changeset
|
981 |
checkpoint_data_list[-1].prog_est_ratio += \ |
ab25dde8919d
16323 Implement Install Execution Engine
Karen Tung <karen.tung@oracle.com>
parents:
diff
changeset
|
982 |
decimal.Decimal("1") - total_ratio |
ab25dde8919d
16323 Implement Install Execution Engine
Karen Tung <karen.tung@oracle.com>
parents:
diff
changeset
|
983 |
LOGGER.debug("Last checkpoint, %s: prog ratio %s" % |
ab25dde8919d
16323 Implement Install Execution Engine
Karen Tung <karen.tung@oracle.com>
parents:
diff
changeset
|
984 |
(checkpoint_data_list[-1].name, |
ab25dde8919d
16323 Implement Install Execution Engine
Karen Tung <karen.tung@oracle.com>
parents:
diff
changeset
|
985 |
str(checkpoint_data_list[-1].prog_est_ratio))) |
ab25dde8919d
16323 Implement Install Execution Engine
Karen Tung <karen.tung@oracle.com>
parents:
diff
changeset
|
986 |
|
ab25dde8919d
16323 Implement Install Execution Engine
Karen Tung <karen.tung@oracle.com>
parents:
diff
changeset
|
987 |
return (execute_these, None) |
ab25dde8919d
16323 Implement Install Execution Engine
Karen Tung <karen.tung@oracle.com>
parents:
diff
changeset
|
988 |
|
ab25dde8919d
16323 Implement Install Execution Engine
Karen Tung <karen.tung@oracle.com>
parents:
diff
changeset
|
989 |
def get_exec_list(self, start_from=None, pause_before=None): |
ab25dde8919d
16323 Implement Install Execution Engine
Karen Tung <karen.tung@oracle.com>
parents:
diff
changeset
|
990 |
'''Returns the list of checkpoints to execute based on the desired |
ab25dde8919d
16323 Implement Install Execution Engine
Karen Tung <karen.tung@oracle.com>
parents:
diff
changeset
|
991 |
start/end checkpoint names |
ab25dde8919d
16323 Implement Install Execution Engine
Karen Tung <karen.tung@oracle.com>
parents:
diff
changeset
|
992 |
|
ab25dde8919d
16323 Implement Install Execution Engine
Karen Tung <karen.tung@oracle.com>
parents:
diff
changeset
|
993 |
Input: |
ab25dde8919d
16323 Implement Install Execution Engine
Karen Tung <karen.tung@oracle.com>
parents:
diff
changeset
|
994 |
start_from: name of checkpoint to start execution. Optional. |
ab25dde8919d
16323 Implement Install Execution Engine
Karen Tung <karen.tung@oracle.com>
parents:
diff
changeset
|
995 |
pause_before: name of checkpoint to pause execution. Optional. |
ab25dde8919d
16323 Implement Install Execution Engine
Karen Tung <karen.tung@oracle.com>
parents:
diff
changeset
|
996 |
|
ab25dde8919d
16323 Implement Install Execution Engine
Karen Tung <karen.tung@oracle.com>
parents:
diff
changeset
|
997 |
Output: |
ab25dde8919d
16323 Implement Install Execution Engine
Karen Tung <karen.tung@oracle.com>
parents:
diff
changeset
|
998 |
List of checkpoints to be executed. |
ab25dde8919d
16323 Implement Install Execution Engine
Karen Tung <karen.tung@oracle.com>
parents:
diff
changeset
|
999 |
|
ab25dde8919d
16323 Implement Install Execution Engine
Karen Tung <karen.tung@oracle.com>
parents:
diff
changeset
|
1000 |
Raises: |
1418
8e9701e2c0f3
7033339 - Be able to specify logfile name when instantiate InstallLogger
Ginnie Wray<virginia.wray@oracle.com>
parents:
1350
diff
changeset
|
1001 |
UsageError: There are unexecuted checkpoints before the |
909
ab25dde8919d
16323 Implement Install Execution Engine
Karen Tung <karen.tung@oracle.com>
parents:
diff
changeset
|
1002 |
checkpoint specified to start execution from. |
ab25dde8919d
16323 Implement Install Execution Engine
Karen Tung <karen.tung@oracle.com>
parents:
diff
changeset
|
1003 |
UnknownChkptError: Name specified for start_from and pause_before |
ab25dde8919d
16323 Implement Install Execution Engine
Karen Tung <karen.tung@oracle.com>
parents:
diff
changeset
|
1004 |
is not valid. |
ab25dde8919d
16323 Implement Install Execution Engine
Karen Tung <karen.tung@oracle.com>
parents:
diff
changeset
|
1005 |
''' |
ab25dde8919d
16323 Implement Install Execution Engine
Karen Tung <karen.tung@oracle.com>
parents:
diff
changeset
|
1006 |
|
ab25dde8919d
16323 Implement Install Execution Engine
Karen Tung <karen.tung@oracle.com>
parents:
diff
changeset
|
1007 |
exec_list = [] |
ab25dde8919d
16323 Implement Install Execution Engine
Karen Tung <karen.tung@oracle.com>
parents:
diff
changeset
|
1008 |
|
ab25dde8919d
16323 Implement Install Execution Engine
Karen Tung <karen.tung@oracle.com>
parents:
diff
changeset
|
1009 |
if start_from is None: |
ab25dde8919d
16323 Implement Install Execution Engine
Karen Tung <karen.tung@oracle.com>
parents:
diff
changeset
|
1010 |
start_from_cp = self.get_first_incomplete() |
ab25dde8919d
16323 Implement Install Execution Engine
Karen Tung <karen.tung@oracle.com>
parents:
diff
changeset
|
1011 |
if start_from_cp is None: |
ab25dde8919d
16323 Implement Install Execution Engine
Karen Tung <karen.tung@oracle.com>
parents:
diff
changeset
|
1012 |
# All checkpoints completed, so continuing where the engine |
ab25dde8919d
16323 Implement Install Execution Engine
Karen Tung <karen.tung@oracle.com>
parents:
diff
changeset
|
1013 |
# left off is a no-op - return the empty list |
ab25dde8919d
16323 Implement Install Execution Engine
Karen Tung <karen.tung@oracle.com>
parents:
diff
changeset
|
1014 |
return exec_list |
ab25dde8919d
16323 Implement Install Execution Engine
Karen Tung <karen.tung@oracle.com>
parents:
diff
changeset
|
1015 |
else: |
ab25dde8919d
16323 Implement Install Execution Engine
Karen Tung <karen.tung@oracle.com>
parents:
diff
changeset
|
1016 |
start_from = start_from_cp.name |
ab25dde8919d
16323 Implement Install Execution Engine
Karen Tung <karen.tung@oracle.com>
parents:
diff
changeset
|
1017 |
LOGGER.debug("Retrieving checkpoint list from %s to %s", start_from, |
ab25dde8919d
16323 Implement Install Execution Engine
Karen Tung <karen.tung@oracle.com>
parents:
diff
changeset
|
1018 |
pause_before) |
ab25dde8919d
16323 Implement Install Execution Engine
Karen Tung <karen.tung@oracle.com>
parents:
diff
changeset
|
1019 |
|
ab25dde8919d
16323 Implement Install Execution Engine
Karen Tung <karen.tung@oracle.com>
parents:
diff
changeset
|
1020 |
# Examine all checkpoints. For checkpoints prior to the one indicated |
ab25dde8919d
16323 Implement Install Execution Engine
Karen Tung <karen.tung@oracle.com>
parents:
diff
changeset
|
1021 |
# by start_from (while found_start is False), ensure that they've been |
ab25dde8919d
16323 Implement Install Execution Engine
Karen Tung <karen.tung@oracle.com>
parents:
diff
changeset
|
1022 |
# completed so that we only resume from a completed checkpoint. |
ab25dde8919d
16323 Implement Install Execution Engine
Karen Tung <karen.tung@oracle.com>
parents:
diff
changeset
|
1023 |
found_start = False |
ab25dde8919d
16323 Implement Install Execution Engine
Karen Tung <karen.tung@oracle.com>
parents:
diff
changeset
|
1024 |
for cp in self._checkpoints: |
ab25dde8919d
16323 Implement Install Execution Engine
Karen Tung <karen.tung@oracle.com>
parents:
diff
changeset
|
1025 |
if cp.name == start_from: |
ab25dde8919d
16323 Implement Install Execution Engine
Karen Tung <karen.tung@oracle.com>
parents:
diff
changeset
|
1026 |
# Found the start_from checkpoint - start adding |
ab25dde8919d
16323 Implement Install Execution Engine
Karen Tung <karen.tung@oracle.com>
parents:
diff
changeset
|
1027 |
# to the exec list |
ab25dde8919d
16323 Implement Install Execution Engine
Karen Tung <karen.tung@oracle.com>
parents:
diff
changeset
|
1028 |
found_start = True |
ab25dde8919d
16323 Implement Install Execution Engine
Karen Tung <karen.tung@oracle.com>
parents:
diff
changeset
|
1029 |
|
ab25dde8919d
16323 Implement Install Execution Engine
Karen Tung <karen.tung@oracle.com>
parents:
diff
changeset
|
1030 |
if found_start and cp.name == pause_before: |
ab25dde8919d
16323 Implement Install Execution Engine
Karen Tung <karen.tung@oracle.com>
parents:
diff
changeset
|
1031 |
# Pause before this checkpoint - stop adding checkpoints |
ab25dde8919d
16323 Implement Install Execution Engine
Karen Tung <karen.tung@oracle.com>
parents:
diff
changeset
|
1032 |
# to the exec_list |
ab25dde8919d
16323 Implement Install Execution Engine
Karen Tung <karen.tung@oracle.com>
parents:
diff
changeset
|
1033 |
if found_start: |
ab25dde8919d
16323 Implement Install Execution Engine
Karen Tung <karen.tung@oracle.com>
parents:
diff
changeset
|
1034 |
break |
ab25dde8919d
16323 Implement Install Execution Engine
Karen Tung <karen.tung@oracle.com>
parents:
diff
changeset
|
1035 |
else: |
ab25dde8919d
16323 Implement Install Execution Engine
Karen Tung <karen.tung@oracle.com>
parents:
diff
changeset
|
1036 |
raise UsageError("Specified pause_before checkpoint, %s, " |
1096
d795f8b803de
7036478 Additional slim_code_cleaness failures after TI/TD CUD putback
Mary Ding <mary.ding@oracle.com>
parents:
1073
diff
changeset
|
1037 |
"is registered after specified " |
1418
8e9701e2c0f3
7033339 - Be able to specify logfile name when instantiate InstallLogger
Ginnie Wray<virginia.wray@oracle.com>
parents:
1350
diff
changeset
|
1038 |
"start_from checkpoint, %s" % |
1096
d795f8b803de
7036478 Additional slim_code_cleaness failures after TI/TD CUD putback
Mary Ding <mary.ding@oracle.com>
parents:
1073
diff
changeset
|
1039 |
(pause_before, start_from)) |
909
ab25dde8919d
16323 Implement Install Execution Engine
Karen Tung <karen.tung@oracle.com>
parents:
diff
changeset
|
1040 |
|
ab25dde8919d
16323 Implement Install Execution Engine
Karen Tung <karen.tung@oracle.com>
parents:
diff
changeset
|
1041 |
if found_start: |
ab25dde8919d
16323 Implement Install Execution Engine
Karen Tung <karen.tung@oracle.com>
parents:
diff
changeset
|
1042 |
exec_list.append(cp) |
ab25dde8919d
16323 Implement Install Execution Engine
Karen Tung <karen.tung@oracle.com>
parents:
diff
changeset
|
1043 |
elif not cp.completed: |
ab25dde8919d
16323 Implement Install Execution Engine
Karen Tung <karen.tung@oracle.com>
parents:
diff
changeset
|
1044 |
raise UsageError("Invalid start checkpoint. " |
ab25dde8919d
16323 Implement Install Execution Engine
Karen Tung <karen.tung@oracle.com>
parents:
diff
changeset
|
1045 |
"Previous checkpoint (%s) not completed." % |
ab25dde8919d
16323 Implement Install Execution Engine
Karen Tung <karen.tung@oracle.com>
parents:
diff
changeset
|
1046 |
cp.name) |
ab25dde8919d
16323 Implement Install Execution Engine
Karen Tung <karen.tung@oracle.com>
parents:
diff
changeset
|
1047 |
else: |
ab25dde8919d
16323 Implement Install Execution Engine
Karen Tung <karen.tung@oracle.com>
parents:
diff
changeset
|
1048 |
# After "found_start", keep adding checkpoints until pause_before. |
ab25dde8919d
16323 Implement Install Execution Engine
Karen Tung <karen.tung@oracle.com>
parents:
diff
changeset
|
1049 |
# If the pause_before checkpoint is not found, but pause_before |
ab25dde8919d
16323 Implement Install Execution Engine
Karen Tung <karen.tung@oracle.com>
parents:
diff
changeset
|
1050 |
# was specified, it's an error |
ab25dde8919d
16323 Implement Install Execution Engine
Karen Tung <karen.tung@oracle.com>
parents:
diff
changeset
|
1051 |
if not found_start: |
922
f6d3871f2b3e
6997663 Change an error message to be more user friendly for an invalid pause checkpoint name
Karen Tung <karen.tung@oracle.com>
parents:
913
diff
changeset
|
1052 |
raise UnknownChkptError("'%s' is not a valid checkpoint" |
1096
d795f8b803de
7036478 Additional slim_code_cleaness failures after TI/TD CUD putback
Mary Ding <mary.ding@oracle.com>
parents:
1073
diff
changeset
|
1053 |
" to start execution from." % |
d795f8b803de
7036478 Additional slim_code_cleaness failures after TI/TD CUD putback
Mary Ding <mary.ding@oracle.com>
parents:
1073
diff
changeset
|
1054 |
start_from) |
909
ab25dde8919d
16323 Implement Install Execution Engine
Karen Tung <karen.tung@oracle.com>
parents:
diff
changeset
|
1055 |
if pause_before is not None: |
922
f6d3871f2b3e
6997663 Change an error message to be more user friendly for an invalid pause checkpoint name
Karen Tung <karen.tung@oracle.com>
parents:
913
diff
changeset
|
1056 |
raise UnknownChkptError("'%s' is not a valid checkpoint" |
1096
d795f8b803de
7036478 Additional slim_code_cleaness failures after TI/TD CUD putback
Mary Ding <mary.ding@oracle.com>
parents:
1073
diff
changeset
|
1057 |
" to pause execution at." % |
d795f8b803de
7036478 Additional slim_code_cleaness failures after TI/TD CUD putback
Mary Ding <mary.ding@oracle.com>
parents:
1073
diff
changeset
|
1058 |
pause_before) |
909
ab25dde8919d
16323 Implement Install Execution Engine
Karen Tung <karen.tung@oracle.com>
parents:
diff
changeset
|
1059 |
return tuple(exec_list) |
ab25dde8919d
16323 Implement Install Execution Engine
Karen Tung <karen.tung@oracle.com>
parents:
diff
changeset
|
1060 |
|
ab25dde8919d
16323 Implement Install Execution Engine
Karen Tung <karen.tung@oracle.com>
parents:
diff
changeset
|
1061 |
def get_cp_data(self, name): |
ab25dde8919d
16323 Implement Install Execution Engine
Karen Tung <karen.tung@oracle.com>
parents:
diff
changeset
|
1062 |
'''Helper method for retrieving a CheckpointData object by name''' |
ab25dde8919d
16323 Implement Install Execution Engine
Karen Tung <karen.tung@oracle.com>
parents:
diff
changeset
|
1063 |
|
ab25dde8919d
16323 Implement Install Execution Engine
Karen Tung <karen.tung@oracle.com>
parents:
diff
changeset
|
1064 |
for cp in self._checkpoints: |
ab25dde8919d
16323 Implement Install Execution Engine
Karen Tung <karen.tung@oracle.com>
parents:
diff
changeset
|
1065 |
if cp.name == name: |
ab25dde8919d
16323 Implement Install Execution Engine
Karen Tung <karen.tung@oracle.com>
parents:
diff
changeset
|
1066 |
return cp |
ab25dde8919d
16323 Implement Install Execution Engine
Karen Tung <karen.tung@oracle.com>
parents:
diff
changeset
|
1067 |
raise UnknownChkptError("'%s' is not a registered checkpoint" % name) |
ab25dde8919d
16323 Implement Install Execution Engine
Karen Tung <karen.tung@oracle.com>
parents:
diff
changeset
|
1068 |
|
ab25dde8919d
16323 Implement Install Execution Engine
Karen Tung <karen.tung@oracle.com>
parents:
diff
changeset
|
1069 |
def get_first_incomplete(self): |
ab25dde8919d
16323 Implement Install Execution Engine
Karen Tung <karen.tung@oracle.com>
parents:
diff
changeset
|
1070 |
'''Return the first checkpoint that has not yet been run''' |
ab25dde8919d
16323 Implement Install Execution Engine
Karen Tung <karen.tung@oracle.com>
parents:
diff
changeset
|
1071 |
for cp in self._checkpoints: |
ab25dde8919d
16323 Implement Install Execution Engine
Karen Tung <karen.tung@oracle.com>
parents:
diff
changeset
|
1072 |
if not cp.completed: |
ab25dde8919d
16323 Implement Install Execution Engine
Karen Tung <karen.tung@oracle.com>
parents:
diff
changeset
|
1073 |
return cp |
ab25dde8919d
16323 Implement Install Execution Engine
Karen Tung <karen.tung@oracle.com>
parents:
diff
changeset
|
1074 |
return None |
ab25dde8919d
16323 Implement Install Execution Engine
Karen Tung <karen.tung@oracle.com>
parents:
diff
changeset
|
1075 |
|
ab25dde8919d
16323 Implement Install Execution Engine
Karen Tung <karen.tung@oracle.com>
parents:
diff
changeset
|
1076 |
def get_cache_filename(self, cp_name): |
ab25dde8919d
16323 Implement Install Execution Engine
Karen Tung <karen.tung@oracle.com>
parents:
diff
changeset
|
1077 |
'''Returns the filename of the DOC dump for the given checkpoint''' |
ab25dde8919d
16323 Implement Install Execution Engine
Karen Tung <karen.tung@oracle.com>
parents:
diff
changeset
|
1078 |
if self.dataset is not None and self.dataset.exists: |
1070
ef77609251f5
7021591 provide an implementation of TI/TD based on CUD
Drew Fisher <drew.fisher@oracle.com>
parents:
948
diff
changeset
|
1079 |
path = self.dataset.get("mountpoint") |
909
ab25dde8919d
16323 Implement Install Execution Engine
Karen Tung <karen.tung@oracle.com>
parents:
diff
changeset
|
1080 |
else: |
ab25dde8919d
16323 Implement Install Execution Engine
Karen Tung <karen.tung@oracle.com>
parents:
diff
changeset
|
1081 |
path = self._tmp_cache_path |
ab25dde8919d
16323 Implement Install Execution Engine
Karen Tung <karen.tung@oracle.com>
parents:
diff
changeset
|
1082 |
if path is None: |
ab25dde8919d
16323 Implement Install Execution Engine
Karen Tung <karen.tung@oracle.com>
parents:
diff
changeset
|
1083 |
path = self._gen_tmp_dir() |
ab25dde8919d
16323 Implement Install Execution Engine
Karen Tung <karen.tung@oracle.com>
parents:
diff
changeset
|
1084 |
|
ab25dde8919d
16323 Implement Install Execution Engine
Karen Tung <karen.tung@oracle.com>
parents:
diff
changeset
|
1085 |
filename = InstallEngine.CACHE_FILE_NAME % {"checkpoint": cp_name} |
ab25dde8919d
16323 Implement Install Execution Engine
Karen Tung <karen.tung@oracle.com>
parents:
diff
changeset
|
1086 |
full_path = os.path.join(path, filename) |
ab25dde8919d
16323 Implement Install Execution Engine
Karen Tung <karen.tung@oracle.com>
parents:
diff
changeset
|
1087 |
return full_path |
ab25dde8919d
16323 Implement Install Execution Engine
Karen Tung <karen.tung@oracle.com>
parents:
diff
changeset
|
1088 |
|
ab25dde8919d
16323 Implement Install Execution Engine
Karen Tung <karen.tung@oracle.com>
parents:
diff
changeset
|
1089 |
def _gen_tmp_dir(self): |
ab25dde8919d
16323 Implement Install Execution Engine
Karen Tung <karen.tung@oracle.com>
parents:
diff
changeset
|
1090 |
'''Determine where temporary DOC files should be stored''' |
ab25dde8919d
16323 Implement Install Execution Engine
Karen Tung <karen.tung@oracle.com>
parents:
diff
changeset
|
1091 |
|
ab25dde8919d
16323 Implement Install Execution Engine
Karen Tung <karen.tung@oracle.com>
parents:
diff
changeset
|
1092 |
# if the TEMP_DOC_DIR env variable is defined, use that value |
ab25dde8919d
16323 Implement Install Execution Engine
Karen Tung <karen.tung@oracle.com>
parents:
diff
changeset
|
1093 |
# for the temporary DOC directory. |
ab25dde8919d
16323 Implement Install Execution Engine
Karen Tung <karen.tung@oracle.com>
parents:
diff
changeset
|
1094 |
|
ab25dde8919d
16323 Implement Install Execution Engine
Karen Tung <karen.tung@oracle.com>
parents:
diff
changeset
|
1095 |
if InstallEngine.TMP_CACHE_ENV in os.environ: |
ab25dde8919d
16323 Implement Install Execution Engine
Karen Tung <karen.tung@oracle.com>
parents:
diff
changeset
|
1096 |
doc_path = os.environ[InstallEngine.TMP_CACHE_ENV] |
ab25dde8919d
16323 Implement Install Execution Engine
Karen Tung <karen.tung@oracle.com>
parents:
diff
changeset
|
1097 |
if not os.path.exists(doc_path): |
ab25dde8919d
16323 Implement Install Execution Engine
Karen Tung <karen.tung@oracle.com>
parents:
diff
changeset
|
1098 |
os.makedirs(doc_path) |
ab25dde8919d
16323 Implement Install Execution Engine
Karen Tung <karen.tung@oracle.com>
parents:
diff
changeset
|
1099 |
else: |
ab25dde8919d
16323 Implement Install Execution Engine
Karen Tung <karen.tung@oracle.com>
parents:
diff
changeset
|
1100 |
prefix = InstallEngine.TMP_CACHE_PATH_PREFIX |
ab25dde8919d
16323 Implement Install Execution Engine
Karen Tung <karen.tung@oracle.com>
parents:
diff
changeset
|
1101 |
doc_dir = InstallEngine.TMP_CACHE_PATH_ROOT_DEFAULT |
ab25dde8919d
16323 Implement Install Execution Engine
Karen Tung <karen.tung@oracle.com>
parents:
diff
changeset
|
1102 |
if not os.path.exists(doc_dir): |
ab25dde8919d
16323 Implement Install Execution Engine
Karen Tung <karen.tung@oracle.com>
parents:
diff
changeset
|
1103 |
os.makedirs(doc_dir) |
ab25dde8919d
16323 Implement Install Execution Engine
Karen Tung <karen.tung@oracle.com>
parents:
diff
changeset
|
1104 |
doc_path = tempfile.mkdtemp(prefix=prefix, dir=doc_dir) |
ab25dde8919d
16323 Implement Install Execution Engine
Karen Tung <karen.tung@oracle.com>
parents:
diff
changeset
|
1105 |
self._tmp_cache_path = doc_path |
ab25dde8919d
16323 Implement Install Execution Engine
Karen Tung <karen.tung@oracle.com>
parents:
diff
changeset
|
1106 |
return doc_path |
ab25dde8919d
16323 Implement Install Execution Engine
Karen Tung <karen.tung@oracle.com>
parents:
diff
changeset
|
1107 |
|
ab25dde8919d
16323 Implement Install Execution Engine
Karen Tung <karen.tung@oracle.com>
parents:
diff
changeset
|
1108 |
def get_zfs_snapshot_name(self, cp_name): |
ab25dde8919d
16323 Implement Install Execution Engine
Karen Tung <karen.tung@oracle.com>
parents:
diff
changeset
|
1109 |
'''Returns the ZFS snapshot name for the given checkpoint''' |
ab25dde8919d
16323 Implement Install Execution Engine
Karen Tung <karen.tung@oracle.com>
parents:
diff
changeset
|
1110 |
return InstallEngine.SNAPSHOT_NAME % {"checkpoint": cp_name} |
ab25dde8919d
16323 Implement Install Execution Engine
Karen Tung <karen.tung@oracle.com>
parents:
diff
changeset
|
1111 |
|
ab25dde8919d
16323 Implement Install Execution Engine
Karen Tung <karen.tung@oracle.com>
parents:
diff
changeset
|
1112 |
def get_zfs_snapshot_fullpath(self, cp_name): |
ab25dde8919d
16323 Implement Install Execution Engine
Karen Tung <karen.tung@oracle.com>
parents:
diff
changeset
|
1113 |
'''Returns the full ZFS snapshot path for the given checkpoint''' |
ab25dde8919d
16323 Implement Install Execution Engine
Karen Tung <karen.tung@oracle.com>
parents:
diff
changeset
|
1114 |
snap_name = self.get_zfs_snapshot_name(cp_name) |
ab25dde8919d
16323 Implement Install Execution Engine
Karen Tung <karen.tung@oracle.com>
parents:
diff
changeset
|
1115 |
return(self.dataset.snapname(snap_name)) |
ab25dde8919d
16323 Implement Install Execution Engine
Karen Tung <karen.tung@oracle.com>
parents:
diff
changeset
|
1116 |
|
ab25dde8919d
16323 Implement Install Execution Engine
Karen Tung <karen.tung@oracle.com>
parents:
diff
changeset
|
1117 |
@property |
ab25dde8919d
16323 Implement Install Execution Engine
Karen Tung <karen.tung@oracle.com>
parents:
diff
changeset
|
1118 |
def doc(self): |
ab25dde8919d
16323 Implement Install Execution Engine
Karen Tung <karen.tung@oracle.com>
parents:
diff
changeset
|
1119 |
''' return data object cache instantiated by the engine ''' |
ab25dde8919d
16323 Implement Install Execution Engine
Karen Tung <karen.tung@oracle.com>
parents:
diff
changeset
|
1120 |
return self.data_object_cache |
ab25dde8919d
16323 Implement Install Execution Engine
Karen Tung <karen.tung@oracle.com>
parents:
diff
changeset
|
1121 |
|
ab25dde8919d
16323 Implement Install Execution Engine
Karen Tung <karen.tung@oracle.com>
parents:
diff
changeset
|
1122 |
@property |
ab25dde8919d
16323 Implement Install Execution Engine
Karen Tung <karen.tung@oracle.com>
parents:
diff
changeset
|
1123 |
def _engine_doc_root(self): |
ab25dde8919d
16323 Implement Install Execution Engine
Karen Tung <karen.tung@oracle.com>
parents:
diff
changeset
|
1124 |
''' Returns the root node for storing engine related info in DOC ''' |
ab25dde8919d
16323 Implement Install Execution Engine
Karen Tung <karen.tung@oracle.com>
parents:
diff
changeset
|
1125 |
name = InstallEngine.ENGINE_DOC_ROOT |
ab25dde8919d
16323 Implement Install Execution Engine
Karen Tung <karen.tung@oracle.com>
parents:
diff
changeset
|
1126 |
node = self.doc.persistent.get_first_child(name=name) |
ab25dde8919d
16323 Implement Install Execution Engine
Karen Tung <karen.tung@oracle.com>
parents:
diff
changeset
|
1127 |
if node is None: |
ab25dde8919d
16323 Implement Install Execution Engine
Karen Tung <karen.tung@oracle.com>
parents:
diff
changeset
|
1128 |
node = EngineData() |
ab25dde8919d
16323 Implement Install Execution Engine
Karen Tung <karen.tung@oracle.com>
parents:
diff
changeset
|
1129 |
self.doc.persistent.insert_children(node) |
ab25dde8919d
16323 Implement Install Execution Engine
Karen Tung <karen.tung@oracle.com>
parents:
diff
changeset
|
1130 |
return node |
ab25dde8919d
16323 Implement Install Execution Engine
Karen Tung <karen.tung@oracle.com>
parents:
diff
changeset
|
1131 |
|
1290
cfaa7349f221
7004000 Install engine enhancement to save original args/kwargs list before calling checkpoint's execute
Karen Tung <Karen.Tung@oracle.com>
parents:
1151
diff
changeset
|
1132 |
def _rollback(self, before_cp, resumable_cp_list=None): |
909
ab25dde8919d
16323 Implement Install Execution Engine
Karen Tung <karen.tung@oracle.com>
parents:
diff
changeset
|
1133 |
'''Revert the engine to the given Checkpoint (by name): |
ab25dde8919d
16323 Implement Install Execution Engine
Karen Tung <karen.tung@oracle.com>
parents:
diff
changeset
|
1134 |
* If the checkpoint was snapshotted via ZFS, rollback to that |
ab25dde8919d
16323 Implement Install Execution Engine
Karen Tung <karen.tung@oracle.com>
parents:
diff
changeset
|
1135 |
* Additionally, rollback the DOC |
ab25dde8919d
16323 Implement Install Execution Engine
Karen Tung <karen.tung@oracle.com>
parents:
diff
changeset
|
1136 |
Raises: |
ab25dde8919d
16323 Implement Install Execution Engine
Karen Tung <karen.tung@oracle.com>
parents:
diff
changeset
|
1137 |
IOError: If the DOC snapshot can't be found or can't be read |
ab25dde8919d
16323 Implement Install Execution Engine
Karen Tung <karen.tung@oracle.com>
parents:
diff
changeset
|
1138 |
RollbackError: If the engine doesn't have a valid ZFS dataset |
ab25dde8919d
16323 Implement Install Execution Engine
Karen Tung <karen.tung@oracle.com>
parents:
diff
changeset
|
1139 |
to do an out-of-process rollback from |
ab25dde8919d
16323 Implement Install Execution Engine
Karen Tung <karen.tung@oracle.com>
parents:
diff
changeset
|
1140 |
''' |
1290
cfaa7349f221
7004000 Install engine enhancement to save original args/kwargs list before calling checkpoint's execute
Karen Tung <Karen.Tung@oracle.com>
parents:
1151
diff
changeset
|
1141 |
|
cfaa7349f221
7004000 Install engine enhancement to save original args/kwargs list before calling checkpoint's execute
Karen Tung <Karen.Tung@oracle.com>
parents:
1151
diff
changeset
|
1142 |
cp_data = self.get_cp_data(before_cp) |
cfaa7349f221
7004000 Install engine enhancement to save original args/kwargs list before calling checkpoint's execute
Karen Tung <Karen.Tung@oracle.com>
parents:
1151
diff
changeset
|
1143 |
|
cfaa7349f221
7004000 Install engine enhancement to save original args/kwargs list before calling checkpoint's execute
Karen Tung <Karen.Tung@oracle.com>
parents:
1151
diff
changeset
|
1144 |
LOGGER.debug("Going to rollback to %s", before_cp) |
909
ab25dde8919d
16323 Implement Install Execution Engine
Karen Tung <karen.tung@oracle.com>
parents:
diff
changeset
|
1145 |
|
ab25dde8919d
16323 Implement Install Execution Engine
Karen Tung <karen.tung@oracle.com>
parents:
diff
changeset
|
1146 |
if cp_data.completed: |
ab25dde8919d
16323 Implement Install Execution Engine
Karen Tung <karen.tung@oracle.com>
parents:
diff
changeset
|
1147 |
# In-process resume |
ab25dde8919d
16323 Implement Install Execution Engine
Karen Tung <karen.tung@oracle.com>
parents:
diff
changeset
|
1148 |
cache_file = cp_data.data_cache_path |
ab25dde8919d
16323 Implement Install Execution Engine
Karen Tung <karen.tung@oracle.com>
parents:
diff
changeset
|
1149 |
snap_name = cp_data.zfs_snap |
ab25dde8919d
16323 Implement Install Execution Engine
Karen Tung <karen.tung@oracle.com>
parents:
diff
changeset
|
1150 |
if cache_file is None: |
1308
837baaf7608b
7068197 nosexunit test failure in solaris_install/engine/__init__.py
Sreedhar Chalamalasetti <sreedhar.chalamalasetti@oracle.com>
parents:
1290
diff
changeset
|
1151 |
raise RollbackError(before_cp, |
1290
cfaa7349f221
7004000 Install engine enhancement to save original args/kwargs list before calling checkpoint's execute
Karen Tung <Karen.Tung@oracle.com>
parents:
1151
diff
changeset
|
1152 |
"Checkpoint has no data cache") |
909
ab25dde8919d
16323 Implement Install Execution Engine
Karen Tung <karen.tung@oracle.com>
parents:
diff
changeset
|
1153 |
else: |
ab25dde8919d
16323 Implement Install Execution Engine
Karen Tung <karen.tung@oracle.com>
parents:
diff
changeset
|
1154 |
# Out of process resume |
ab25dde8919d
16323 Implement Install Execution Engine
Karen Tung <karen.tung@oracle.com>
parents:
diff
changeset
|
1155 |
if self.dataset is None: |
ab25dde8919d
16323 Implement Install Execution Engine
Karen Tung <karen.tung@oracle.com>
parents:
diff
changeset
|
1156 |
# Application needs to set ZFS dataset before |
ab25dde8919d
16323 Implement Install Execution Engine
Karen Tung <karen.tung@oracle.com>
parents:
diff
changeset
|
1157 |
# calling InstallEngine.rollback(...) |
ab25dde8919d
16323 Implement Install Execution Engine
Karen Tung <karen.tung@oracle.com>
parents:
diff
changeset
|
1158 |
raise RollbackError(before_cp, "A ZFS dataset is required to " |
ab25dde8919d
16323 Implement Install Execution Engine
Karen Tung <karen.tung@oracle.com>
parents:
diff
changeset
|
1159 |
"rollback to this checkpoint") |
ab25dde8919d
16323 Implement Install Execution Engine
Karen Tung <karen.tung@oracle.com>
parents:
diff
changeset
|
1160 |
cache_file = self.get_cache_filename(cp_data.name) |
ab25dde8919d
16323 Implement Install Execution Engine
Karen Tung <karen.tung@oracle.com>
parents:
diff
changeset
|
1161 |
snap_name = self.get_zfs_snapshot_name(cp_data.name) |
ab25dde8919d
16323 Implement Install Execution Engine
Karen Tung <karen.tung@oracle.com>
parents:
diff
changeset
|
1162 |
long_snap_name = self.dataset.snapname(snap_name) |
ab25dde8919d
16323 Implement Install Execution Engine
Karen Tung <karen.tung@oracle.com>
parents:
diff
changeset
|
1163 |
|
ab25dde8919d
16323 Implement Install Execution Engine
Karen Tung <karen.tung@oracle.com>
parents:
diff
changeset
|
1164 |
if long_snap_name not in self.dataset.snapshot_list: |
1290
cfaa7349f221
7004000 Install engine enhancement to save original args/kwargs list before calling checkpoint's execute
Karen Tung <Karen.Tung@oracle.com>
parents:
1151
diff
changeset
|
1165 |
if resumable_cp_list and (before_cp == resumable_cp_list[-1]): |
cfaa7349f221
7004000 Install engine enhancement to save original args/kwargs list before calling checkpoint's execute
Karen Tung <Karen.Tung@oracle.com>
parents:
1151
diff
changeset
|
1166 |
# Take care of the case where the checkpoint to resume |
cfaa7349f221
7004000 Install engine enhancement to save original args/kwargs list before calling checkpoint's execute
Karen Tung <Karen.Tung@oracle.com>
parents:
1151
diff
changeset
|
1167 |
# from is not previously executed. Use the "completed" |
cfaa7349f221
7004000 Install engine enhancement to save original args/kwargs list before calling checkpoint's execute
Karen Tung <Karen.Tung@oracle.com>
parents:
1151
diff
changeset
|
1168 |
# snapshot from the previous checkpoint. |
cfaa7349f221
7004000 Install engine enhancement to save original args/kwargs list before calling checkpoint's execute
Karen Tung <Karen.Tung@oracle.com>
parents:
1151
diff
changeset
|
1169 |
index = resumable_cp_list.index(before_cp) |
cfaa7349f221
7004000 Install engine enhancement to save original args/kwargs list before calling checkpoint's execute
Karen Tung <Karen.Tung@oracle.com>
parents:
1151
diff
changeset
|
1170 |
if index == 0: |
cfaa7349f221
7004000 Install engine enhancement to save original args/kwargs list before calling checkpoint's execute
Karen Tung <Karen.Tung@oracle.com>
parents:
1151
diff
changeset
|
1171 |
LOGGER.debug("First checkpoint is different than" |
cfaa7349f221
7004000 Install engine enhancement to save original args/kwargs list before calling checkpoint's execute
Karen Tung <Karen.Tung@oracle.com>
parents:
1151
diff
changeset
|
1172 |
"previous first checkpoint, " |
cfaa7349f221
7004000 Install engine enhancement to save original args/kwargs list before calling checkpoint's execute
Karen Tung <Karen.Tung@oracle.com>
parents:
1151
diff
changeset
|
1173 |
"no rollback necessary.") |
cfaa7349f221
7004000 Install engine enhancement to save original args/kwargs list before calling checkpoint's execute
Karen Tung <Karen.Tung@oracle.com>
parents:
1151
diff
changeset
|
1174 |
return |
cfaa7349f221
7004000 Install engine enhancement to save original args/kwargs list before calling checkpoint's execute
Karen Tung <Karen.Tung@oracle.com>
parents:
1151
diff
changeset
|
1175 |
completed_name = self._get_completed_name(\ |
cfaa7349f221
7004000 Install engine enhancement to save original args/kwargs list before calling checkpoint's execute
Karen Tung <Karen.Tung@oracle.com>
parents:
1151
diff
changeset
|
1176 |
resumable_cp_list[index - 1]) |
cfaa7349f221
7004000 Install engine enhancement to save original args/kwargs list before calling checkpoint's execute
Karen Tung <Karen.Tung@oracle.com>
parents:
1151
diff
changeset
|
1177 |
LOGGER.debug("Going to use snapshot %s", completed_name) |
cfaa7349f221
7004000 Install engine enhancement to save original args/kwargs list before calling checkpoint's execute
Karen Tung <Karen.Tung@oracle.com>
parents:
1151
diff
changeset
|
1178 |
cache_file = self.get_cache_filename(completed_name) |
cfaa7349f221
7004000 Install engine enhancement to save original args/kwargs list before calling checkpoint's execute
Karen Tung <Karen.Tung@oracle.com>
parents:
1151
diff
changeset
|
1179 |
snap_name = self.get_zfs_snapshot_name(completed_name) |
cfaa7349f221
7004000 Install engine enhancement to save original args/kwargs list before calling checkpoint's execute
Karen Tung <Karen.Tung@oracle.com>
parents:
1151
diff
changeset
|
1180 |
long_snap_name = self.dataset.snapname(snap_name) |
cfaa7349f221
7004000 Install engine enhancement to save original args/kwargs list before calling checkpoint's execute
Karen Tung <Karen.Tung@oracle.com>
parents:
1151
diff
changeset
|
1181 |
if long_snap_name not in self.dataset.snapshot_list: |
cfaa7349f221
7004000 Install engine enhancement to save original args/kwargs list before calling checkpoint's execute
Karen Tung <Karen.Tung@oracle.com>
parents:
1151
diff
changeset
|
1182 |
raise RollbackError(before_cp, |
cfaa7349f221
7004000 Install engine enhancement to save original args/kwargs list before calling checkpoint's execute
Karen Tung <Karen.Tung@oracle.com>
parents:
1151
diff
changeset
|
1183 |
"Missing required ZFS snapshot " |
cfaa7349f221
7004000 Install engine enhancement to save original args/kwargs list before calling checkpoint's execute
Karen Tung <Karen.Tung@oracle.com>
parents:
1151
diff
changeset
|
1184 |
"[%s]" % long_snap_name) |
cfaa7349f221
7004000 Install engine enhancement to save original args/kwargs list before calling checkpoint's execute
Karen Tung <Karen.Tung@oracle.com>
parents:
1151
diff
changeset
|
1185 |
else: |
cfaa7349f221
7004000 Install engine enhancement to save original args/kwargs list before calling checkpoint's execute
Karen Tung <Karen.Tung@oracle.com>
parents:
1151
diff
changeset
|
1186 |
raise RollbackError(before_cp, |
cfaa7349f221
7004000 Install engine enhancement to save original args/kwargs list before calling checkpoint's execute
Karen Tung <Karen.Tung@oracle.com>
parents:
1151
diff
changeset
|
1187 |
"Missing required ZFS snapshot " |
cfaa7349f221
7004000 Install engine enhancement to save original args/kwargs list before calling checkpoint's execute
Karen Tung <Karen.Tung@oracle.com>
parents:
1151
diff
changeset
|
1188 |
"[%s]" % long_snap_name) |
909
ab25dde8919d
16323 Implement Install Execution Engine
Karen Tung <karen.tung@oracle.com>
parents:
diff
changeset
|
1189 |
if snap_name is not None: |
ab25dde8919d
16323 Implement Install Execution Engine
Karen Tung <karen.tung@oracle.com>
parents:
diff
changeset
|
1190 |
self.dataset.rollback(snap_name, recursive=True) |
ab25dde8919d
16323 Implement Install Execution Engine
Karen Tung <karen.tung@oracle.com>
parents:
diff
changeset
|
1191 |
|
ab25dde8919d
16323 Implement Install Execution Engine
Karen Tung <karen.tung@oracle.com>
parents:
diff
changeset
|
1192 |
if not os.path.exists(cache_file): |
ab25dde8919d
16323 Implement Install Execution Engine
Karen Tung <karen.tung@oracle.com>
parents:
diff
changeset
|
1193 |
raise NoCacheError(before_cp, cache_file) |
ab25dde8919d
16323 Implement Install Execution Engine
Karen Tung <karen.tung@oracle.com>
parents:
diff
changeset
|
1194 |
|
ab25dde8919d
16323 Implement Install Execution Engine
Karen Tung <karen.tung@oracle.com>
parents:
diff
changeset
|
1195 |
self.doc.load_from_snapshot(cache_file) |
ab25dde8919d
16323 Implement Install Execution Engine
Karen Tung <karen.tung@oracle.com>
parents:
diff
changeset
|
1196 |
|
ab25dde8919d
16323 Implement Install Execution Engine
Karen Tung <karen.tung@oracle.com>
parents:
diff
changeset
|
1197 |
# Reset the 'completed' state of all registered checkpoints, |
ab25dde8919d
16323 Implement Install Execution Engine
Karen Tung <karen.tung@oracle.com>
parents:
diff
changeset
|
1198 |
# based on how far the engine was rolled back |
ab25dde8919d
16323 Implement Install Execution Engine
Karen Tung <karen.tung@oracle.com>
parents:
diff
changeset
|
1199 |
completed = True |
ab25dde8919d
16323 Implement Install Execution Engine
Karen Tung <karen.tung@oracle.com>
parents:
diff
changeset
|
1200 |
for checkpoint in self._checkpoints: |
ab25dde8919d
16323 Implement Install Execution Engine
Karen Tung <karen.tung@oracle.com>
parents:
diff
changeset
|
1201 |
if checkpoint.name == before_cp: |
ab25dde8919d
16323 Implement Install Execution Engine
Karen Tung <karen.tung@oracle.com>
parents:
diff
changeset
|
1202 |
completed = False |
ab25dde8919d
16323 Implement Install Execution Engine
Karen Tung <karen.tung@oracle.com>
parents:
diff
changeset
|
1203 |
checkpoint.completed = completed |
ab25dde8919d
16323 Implement Install Execution Engine
Karen Tung <karen.tung@oracle.com>
parents:
diff
changeset
|
1204 |
|
ab25dde8919d
16323 Implement Install Execution Engine
Karen Tung <karen.tung@oracle.com>
parents:
diff
changeset
|
1205 |
def cancel_checkpoints(self): |
ab25dde8919d
16323 Implement Install Execution Engine
Karen Tung <karen.tung@oracle.com>
parents:
diff
changeset
|
1206 |
'''Cancels currently executing checkpoints. If no checkpoints are |
ab25dde8919d
16323 Implement Install Execution Engine
Karen Tung <karen.tung@oracle.com>
parents:
diff
changeset
|
1207 |
currently running, this is a no-op. |
ab25dde8919d
16323 Implement Install Execution Engine
Karen Tung <karen.tung@oracle.com>
parents:
diff
changeset
|
1208 |
''' |
ab25dde8919d
16323 Implement Install Execution Engine
Karen Tung <karen.tung@oracle.com>
parents:
diff
changeset
|
1209 |
|
ab25dde8919d
16323 Implement Install Execution Engine
Karen Tung <karen.tung@oracle.com>
parents:
diff
changeset
|
1210 |
with self._checkpoint_lock: |
ab25dde8919d
16323 Implement Install Execution Engine
Karen Tung <karen.tung@oracle.com>
parents:
diff
changeset
|
1211 |
# Use the _checkpoint_lock to ensure that |
ab25dde8919d
16323 Implement Install Execution Engine
Karen Tung <karen.tung@oracle.com>
parents:
diff
changeset
|
1212 |
# __currently_executing doesn't change after being canceled. |
ab25dde8919d
16323 Implement Install Execution Engine
Karen Tung <karen.tung@oracle.com>
parents:
diff
changeset
|
1213 |
self._cancel_event.set() |
ab25dde8919d
16323 Implement Install Execution Engine
Karen Tung <karen.tung@oracle.com>
parents:
diff
changeset
|
1214 |
if self.__currently_executing is not None: |
ab25dde8919d
16323 Implement Install Execution Engine
Karen Tung <karen.tung@oracle.com>
parents:
diff
changeset
|
1215 |
self.__currently_executing.cancel() |
ab25dde8919d
16323 Implement Install Execution Engine
Karen Tung <karen.tung@oracle.com>
parents:
diff
changeset
|
1216 |
|
ab25dde8919d
16323 Implement Install Execution Engine
Karen Tung <karen.tung@oracle.com>
parents:
diff
changeset
|
1217 |
if self.checkpoint_thread is not None: |
ab25dde8919d
16323 Implement Install Execution Engine
Karen Tung <karen.tung@oracle.com>
parents:
diff
changeset
|
1218 |
self.checkpoint_thread.join() |
ab25dde8919d
16323 Implement Install Execution Engine
Karen Tung <karen.tung@oracle.com>
parents:
diff
changeset
|
1219 |
|
ab25dde8919d
16323 Implement Install Execution Engine
Karen Tung <karen.tung@oracle.com>
parents:
diff
changeset
|
1220 |
self._cancel_event.clear() |
ab25dde8919d
16323 Implement Install Execution Engine
Karen Tung <karen.tung@oracle.com>
parents:
diff
changeset
|
1221 |
|
ab25dde8919d
16323 Implement Install Execution Engine
Karen Tung <karen.tung@oracle.com>
parents:
diff
changeset
|
1222 |
def cleanup_checkpoints(self): |
ab25dde8919d
16323 Implement Install Execution Engine
Karen Tung <karen.tung@oracle.com>
parents:
diff
changeset
|
1223 |
''' Removes ZFS and DataObjectCache snapshots associated with |
ab25dde8919d
16323 Implement Install Execution Engine
Karen Tung <karen.tung@oracle.com>
parents:
diff
changeset
|
1224 |
currently registered checkpoints. |
ab25dde8919d
16323 Implement Install Execution Engine
Karen Tung <karen.tung@oracle.com>
parents:
diff
changeset
|
1225 |
''' |
ab25dde8919d
16323 Implement Install Execution Engine
Karen Tung <karen.tung@oracle.com>
parents:
diff
changeset
|
1226 |
|
ab25dde8919d
16323 Implement Install Execution Engine
Karen Tung <karen.tung@oracle.com>
parents:
diff
changeset
|
1227 |
# Checkpoint cleanup can not happen while checkpoints execution |
ab25dde8919d
16323 Implement Install Execution Engine
Karen Tung <karen.tung@oracle.com>
parents:
diff
changeset
|
1228 |
# is in progress. Make sure we are not in the middle of |
ab25dde8919d
16323 Implement Install Execution Engine
Karen Tung <karen.tung@oracle.com>
parents:
diff
changeset
|
1229 |
# executing checkpoints |
ab25dde8919d
16323 Implement Install Execution Engine
Karen Tung <karen.tung@oracle.com>
parents:
diff
changeset
|
1230 |
|
ab25dde8919d
16323 Implement Install Execution Engine
Karen Tung <karen.tung@oracle.com>
parents:
diff
changeset
|
1231 |
if self._is_executing_checkpoints(): |
ab25dde8919d
16323 Implement Install Execution Engine
Karen Tung <karen.tung@oracle.com>
parents:
diff
changeset
|
1232 |
raise EngineError("Checkpoint cleanup is " |
ab25dde8919d
16323 Implement Install Execution Engine
Karen Tung <karen.tung@oracle.com>
parents:
diff
changeset
|
1233 |
"not allowed during checkpoint execution.") |
ab25dde8919d
16323 Implement Install Execution Engine
Karen Tung <karen.tung@oracle.com>
parents:
diff
changeset
|
1234 |
|
ab25dde8919d
16323 Implement Install Execution Engine
Karen Tung <karen.tung@oracle.com>
parents:
diff
changeset
|
1235 |
if self.dataset is not None and self.dataset.exists: |
ab25dde8919d
16323 Implement Install Execution Engine
Karen Tung <karen.tung@oracle.com>
parents:
diff
changeset
|
1236 |
|
ab25dde8919d
16323 Implement Install Execution Engine
Karen Tung <karen.tung@oracle.com>
parents:
diff
changeset
|
1237 |
# Get list of zfs snapshots |
ab25dde8919d
16323 Implement Install Execution Engine
Karen Tung <karen.tung@oracle.com>
parents:
diff
changeset
|
1238 |
zfs_snapshots = self.dataset.snapshot_list |
ab25dde8919d
16323 Implement Install Execution Engine
Karen Tung <karen.tung@oracle.com>
parents:
diff
changeset
|
1239 |
|
ab25dde8919d
16323 Implement Install Execution Engine
Karen Tung <karen.tung@oracle.com>
parents:
diff
changeset
|
1240 |
for cp_data in self._checkpoints: |
ab25dde8919d
16323 Implement Install Execution Engine
Karen Tung <karen.tung@oracle.com>
parents:
diff
changeset
|
1241 |
# Will attempt to look for ZFS snapshots from |
ab25dde8919d
16323 Implement Install Execution Engine
Karen Tung <karen.tung@oracle.com>
parents:
diff
changeset
|
1242 |
# all checkpoints, including those that is not completed |
ab25dde8919d
16323 Implement Install Execution Engine
Karen Tung <karen.tung@oracle.com>
parents:
diff
changeset
|
1243 |
# in this process. If a checkpoint exists, destroy it. |
ab25dde8919d
16323 Implement Install Execution Engine
Karen Tung <karen.tung@oracle.com>
parents:
diff
changeset
|
1244 |
# If it doesn't exist, continue on. |
1290
cfaa7349f221
7004000 Install engine enhancement to save original args/kwargs list before calling checkpoint's execute
Karen Tung <Karen.Tung@oracle.com>
parents:
1151
diff
changeset
|
1245 |
|
cfaa7349f221
7004000 Install engine enhancement to save original args/kwargs list before calling checkpoint's execute
Karen Tung <Karen.Tung@oracle.com>
parents:
1151
diff
changeset
|
1246 |
# first delete the "completed" snapshot for a given |
cfaa7349f221
7004000 Install engine enhancement to save original args/kwargs list before calling checkpoint's execute
Karen Tung <Karen.Tung@oracle.com>
parents:
1151
diff
changeset
|
1247 |
# checkpoint, then, delete the snapshot taken prior to |
cfaa7349f221
7004000 Install engine enhancement to save original args/kwargs list before calling checkpoint's execute
Karen Tung <Karen.Tung@oracle.com>
parents:
1151
diff
changeset
|
1248 |
# executing the checkpoint. |
cfaa7349f221
7004000 Install engine enhancement to save original args/kwargs list before calling checkpoint's execute
Karen Tung <Karen.Tung@oracle.com>
parents:
1151
diff
changeset
|
1249 |
completed_cp_name = self._get_completed_name(cp_data.name) |
cfaa7349f221
7004000 Install engine enhancement to save original args/kwargs list before calling checkpoint's execute
Karen Tung <Karen.Tung@oracle.com>
parents:
1151
diff
changeset
|
1250 |
snap_path = self.get_zfs_snapshot_fullpath(completed_cp_name) |
cfaa7349f221
7004000 Install engine enhancement to save original args/kwargs list before calling checkpoint's execute
Karen Tung <Karen.Tung@oracle.com>
parents:
1151
diff
changeset
|
1251 |
if snap_path in zfs_snapshots: |
cfaa7349f221
7004000 Install engine enhancement to save original args/kwargs list before calling checkpoint's execute
Karen Tung <Karen.Tung@oracle.com>
parents:
1151
diff
changeset
|
1252 |
snap_name = self.get_zfs_snapshot_name(completed_cp_name) |
cfaa7349f221
7004000 Install engine enhancement to save original args/kwargs list before calling checkpoint's execute
Karen Tung <Karen.Tung@oracle.com>
parents:
1151
diff
changeset
|
1253 |
self.dataset.destroy(dry_run=False, snapshot=snap_name) |
cfaa7349f221
7004000 Install engine enhancement to save original args/kwargs list before calling checkpoint's execute
Karen Tung <Karen.Tung@oracle.com>
parents:
1151
diff
changeset
|
1254 |
|
909
ab25dde8919d
16323 Implement Install Execution Engine
Karen Tung <karen.tung@oracle.com>
parents:
diff
changeset
|
1255 |
snap_path = self.get_zfs_snapshot_fullpath(cp_data.name) |
ab25dde8919d
16323 Implement Install Execution Engine
Karen Tung <karen.tung@oracle.com>
parents:
diff
changeset
|
1256 |
if snap_path in zfs_snapshots: |
ab25dde8919d
16323 Implement Install Execution Engine
Karen Tung <karen.tung@oracle.com>
parents:
diff
changeset
|
1257 |
snap_name = self.get_zfs_snapshot_name(cp_data.name) |
1073
7ff3ee2fcf57
7036435 Additional install unit tests failures after TI/TD CUD putback
Drew Fisher <drew.fisher@oracle.com>
parents:
1070
diff
changeset
|
1258 |
self.dataset.destroy(dry_run=False, snapshot=snap_name) |
909
ab25dde8919d
16323 Implement Install Execution Engine
Karen Tung <karen.tung@oracle.com>
parents:
diff
changeset
|
1259 |
|
ab25dde8919d
16323 Implement Install Execution Engine
Karen Tung <karen.tung@oracle.com>
parents:
diff
changeset
|
1260 |
if self._tmp_cache_path is not None: |
ab25dde8919d
16323 Implement Install Execution Engine
Karen Tung <karen.tung@oracle.com>
parents:
diff
changeset
|
1261 |
shutil.rmtree(self._tmp_cache_path) |
ab25dde8919d
16323 Implement Install Execution Engine
Karen Tung <karen.tung@oracle.com>
parents:
diff
changeset
|
1262 |
self._tmp_cache_path = None |
ab25dde8919d
16323 Implement Install Execution Engine
Karen Tung <karen.tung@oracle.com>
parents:
diff
changeset
|
1263 |
|
ab25dde8919d
16323 Implement Install Execution Engine
Karen Tung <karen.tung@oracle.com>
parents:
diff
changeset
|
1264 |
# since all checkpoint DOC and/or ZFS snapshots are removed, unset |
ab25dde8919d
16323 Implement Install Execution Engine
Karen Tung <karen.tung@oracle.com>
parents:
diff
changeset
|
1265 |
# the completed flag for the checkpoints because they can no longer |
ab25dde8919d
16323 Implement Install Execution Engine
Karen Tung <karen.tung@oracle.com>
parents:
diff
changeset
|
1266 |
# be rolled back to. |
ab25dde8919d
16323 Implement Install Execution Engine
Karen Tung <karen.tung@oracle.com>
parents:
diff
changeset
|
1267 |
for cp_data in self._checkpoints: |
ab25dde8919d
16323 Implement Install Execution Engine
Karen Tung <karen.tung@oracle.com>
parents:
diff
changeset
|
1268 |
cp_data.completed = False |
ab25dde8919d
16323 Implement Install Execution Engine
Karen Tung <karen.tung@oracle.com>
parents:
diff
changeset
|
1269 |
|
ab25dde8919d
16323 Implement Install Execution Engine
Karen Tung <karen.tung@oracle.com>
parents:
diff
changeset
|
1270 |
def _is_executing_checkpoints(self): |
ab25dde8919d
16323 Implement Install Execution Engine
Karen Tung <karen.tung@oracle.com>
parents:
diff
changeset
|
1271 |
''' determine whether the engine is currently executing checkpoints ''' |
ab25dde8919d
16323 Implement Install Execution Engine
Karen Tung <karen.tung@oracle.com>
parents:
diff
changeset
|
1272 |
|
ab25dde8919d
16323 Implement Install Execution Engine
Karen Tung <karen.tung@oracle.com>
parents:
diff
changeset
|
1273 |
return ((self.checkpoint_thread is not None) and |
ab25dde8919d
16323 Implement Install Execution Engine
Karen Tung <karen.tung@oracle.com>
parents:
diff
changeset
|
1274 |
(self.checkpoint_thread.is_alive())) |
1290
cfaa7349f221
7004000 Install engine enhancement to save original args/kwargs list before calling checkpoint's execute
Karen Tung <Karen.Tung@oracle.com>
parents:
1151
diff
changeset
|
1275 |
|
cfaa7349f221
7004000 Install engine enhancement to save original args/kwargs list before calling checkpoint's execute
Karen Tung <Karen.Tung@oracle.com>
parents:
1151
diff
changeset
|
1276 |
def _get_doc_snapshots(self, root_dir): |
cfaa7349f221
7004000 Install engine enhancement to save original args/kwargs list before calling checkpoint's execute
Karen Tung <Karen.Tung@oracle.com>
parents:
1151
diff
changeset
|
1277 |
''' Find all DOC cache snapshot files, and return them in a sorted |
cfaa7349f221
7004000 Install engine enhancement to save original args/kwargs list before calling checkpoint's execute
Karen Tung <Karen.Tung@oracle.com>
parents:
1151
diff
changeset
|
1278 |
list with the last created file first. |
cfaa7349f221
7004000 Install engine enhancement to save original args/kwargs list before calling checkpoint's execute
Karen Tung <Karen.Tung@oracle.com>
parents:
1151
diff
changeset
|
1279 |
|
cfaa7349f221
7004000 Install engine enhancement to save original args/kwargs list before calling checkpoint's execute
Karen Tung <Karen.Tung@oracle.com>
parents:
1151
diff
changeset
|
1280 |
args: |
cfaa7349f221
7004000 Install engine enhancement to save original args/kwargs list before calling checkpoint's execute
Karen Tung <Karen.Tung@oracle.com>
parents:
1151
diff
changeset
|
1281 |
root_dir: The directory in which to find the snapshot files |
cfaa7349f221
7004000 Install engine enhancement to save original args/kwargs list before calling checkpoint's execute
Karen Tung <Karen.Tung@oracle.com>
parents:
1151
diff
changeset
|
1282 |
''' |
cfaa7349f221
7004000 Install engine enhancement to save original args/kwargs list before calling checkpoint's execute
Karen Tung <Karen.Tung@oracle.com>
parents:
1151
diff
changeset
|
1283 |
|
cfaa7349f221
7004000 Install engine enhancement to save original args/kwargs list before calling checkpoint's execute
Karen Tung <Karen.Tung@oracle.com>
parents:
1151
diff
changeset
|
1284 |
if root_dir is None: |
cfaa7349f221
7004000 Install engine enhancement to save original args/kwargs list before calling checkpoint's execute
Karen Tung <Karen.Tung@oracle.com>
parents:
1151
diff
changeset
|
1285 |
raise EngineError("Provided root directory to search for DOC " |
cfaa7349f221
7004000 Install engine enhancement to save original args/kwargs list before calling checkpoint's execute
Karen Tung <Karen.Tung@oracle.com>
parents:
1151
diff
changeset
|
1286 |
"snapshots is None.") |
cfaa7349f221
7004000 Install engine enhancement to save original args/kwargs list before calling checkpoint's execute
Karen Tung <Karen.Tung@oracle.com>
parents:
1151
diff
changeset
|
1287 |
|
cfaa7349f221
7004000 Install engine enhancement to save original args/kwargs list before calling checkpoint's execute
Karen Tung <Karen.Tung@oracle.com>
parents:
1151
diff
changeset
|
1288 |
file_list_with_time = list() |
cfaa7349f221
7004000 Install engine enhancement to save original args/kwargs list before calling checkpoint's execute
Karen Tung <Karen.Tung@oracle.com>
parents:
1151
diff
changeset
|
1289 |
doc_snapshot_wildcard = InstallEngine.CACHE_FILE_NAME_PREFIX + "*" |
cfaa7349f221
7004000 Install engine enhancement to save original args/kwargs list before calling checkpoint's execute
Karen Tung <Karen.Tung@oracle.com>
parents:
1151
diff
changeset
|
1290 |
for doc_snap in glob.glob(os.path.join(root_dir, |
cfaa7349f221
7004000 Install engine enhancement to save original args/kwargs list before calling checkpoint's execute
Karen Tung <Karen.Tung@oracle.com>
parents:
1151
diff
changeset
|
1291 |
doc_snapshot_wildcard)): |
cfaa7349f221
7004000 Install engine enhancement to save original args/kwargs list before calling checkpoint's execute
Karen Tung <Karen.Tung@oracle.com>
parents:
1151
diff
changeset
|
1292 |
stat = os.stat(doc_snap) |
cfaa7349f221
7004000 Install engine enhancement to save original args/kwargs list before calling checkpoint's execute
Karen Tung <Karen.Tung@oracle.com>
parents:
1151
diff
changeset
|
1293 |
time_and_file_tuple = stat.st_mtime, doc_snap |
cfaa7349f221
7004000 Install engine enhancement to save original args/kwargs list before calling checkpoint's execute
Karen Tung <Karen.Tung@oracle.com>
parents:
1151
diff
changeset
|
1294 |
file_list_with_time.append(time_and_file_tuple) |
cfaa7349f221
7004000 Install engine enhancement to save original args/kwargs list before calling checkpoint's execute
Karen Tung <Karen.Tung@oracle.com>
parents:
1151
diff
changeset
|
1295 |
|
cfaa7349f221
7004000 Install engine enhancement to save original args/kwargs list before calling checkpoint's execute
Karen Tung <Karen.Tung@oracle.com>
parents:
1151
diff
changeset
|
1296 |
file_list_with_time.sort() |
cfaa7349f221
7004000 Install engine enhancement to save original args/kwargs list before calling checkpoint's execute
Karen Tung <Karen.Tung@oracle.com>
parents:
1151
diff
changeset
|
1297 |
|
cfaa7349f221
7004000 Install engine enhancement to save original args/kwargs list before calling checkpoint's execute
Karen Tung <Karen.Tung@oracle.com>
parents:
1151
diff
changeset
|
1298 |
result = [doc_file[1] for doc_file in file_list_with_time] |
cfaa7349f221
7004000 Install engine enhancement to save original args/kwargs list before calling checkpoint's execute
Karen Tung <Karen.Tung@oracle.com>
parents:
1151
diff
changeset
|
1299 |
|
cfaa7349f221
7004000 Install engine enhancement to save original args/kwargs list before calling checkpoint's execute
Karen Tung <Karen.Tung@oracle.com>
parents:
1151
diff
changeset
|
1300 |
return tuple(reversed(result)) |
cfaa7349f221
7004000 Install engine enhancement to save original args/kwargs list before calling checkpoint's execute
Karen Tung <Karen.Tung@oracle.com>
parents:
1151
diff
changeset
|
1301 |
|
cfaa7349f221
7004000 Install engine enhancement to save original args/kwargs list before calling checkpoint's execute
Karen Tung <Karen.Tung@oracle.com>
parents:
1151
diff
changeset
|
1302 |
def _get_completed_name(self, cp_name): |
cfaa7349f221
7004000 Install engine enhancement to save original args/kwargs list before calling checkpoint's execute
Karen Tung <Karen.Tung@oracle.com>
parents:
1151
diff
changeset
|
1303 |
'''Return the name to use for checkpoint completed snapshot ''' |
cfaa7349f221
7004000 Install engine enhancement to save original args/kwargs list before calling checkpoint's execute
Karen Tung <Karen.Tung@oracle.com>
parents:
1151
diff
changeset
|
1304 |
return (cp_name + InstallEngine.CP_COMPLETED_SUFFIX) |