Upgrade: Fix problem with exception thrown on no view dependency
Users with no view dependency had failures for upgrade since
the script was looking for a list with dependent views. This update
moves the view check within the view depedency block instead of
outside it.
diff --git a/src/madpack/madpack.py b/src/madpack/madpack.py
index 068e238..1218505 100755
--- a/src/madpack/madpack.py
+++ b/src/madpack/madpack.py
@@ -522,29 +522,18 @@
__info("\tDetecting view dependencies...", True)
vd = ViewDependency(schema, portid, con_args)
- # if no dependency found
- if not td.has_dependency() and not vd.has_dependency():
- __info("\tNo dependency issues found, continuing upgrade...", True)
- __info("\tReading existing UDAs/UDTs...", False)
- sc = ScriptCleaner(schema, portid, con_args, ch)
-
- ch.drop_changed_uda()
- ch.drop_changed_udt()
- ch.drop_changed_udc()
- ch.drop_changed_udf()
- __db_create_objects(schema, None, True, sc)
- __info("MADlib %s upgraded successfully in %s schema." % (rev, schema.upper()), True)
- return
-
- cd_udt = []
+ abort = False
if td.has_dependency():
__info("\tFollowing user tables are dependent on updated MADlib types:", True)
__info(td.get_dependency_str(), True)
- d_udt = td.get_depended_udt()
- c_udt = ch.get_udt()
- for udt in d_udt:
- if udt in c_udt:
- cd_udt.append(udt)
+ cd_udt = [udt for udt in td.get_depended_udt()
+ if udt in ch.get_udt()]
+ if len(cd_udt) > 0:
+ __error("""
+ User has objects dependent on updated MADlib types ({0})!
+ These objects need to be dropped before starting upgrade again. Aborting upgrade ...
+ """.format('\n'.join(cd_udt)), False)
+ abort = True
if vd.has_dependency():
__info("\tFollowing user views are dependent on updated MADlib objects:", True)
@@ -552,36 +541,31 @@
c_udf = ch.get_udf_signature()
d_udf = vd.get_depended_func_signature(False)
-
cd_udf = [udf for udf in d_udf if udf in c_udf]
+ if len(cd_udf) > 0:
+ __error("""
+ User has objects dependent on updated MADlib functions ({0})!
+ These objects will not fail to work with the new functions and
+ need to be dropped before starting upgrade again. Aborting upgrade ...
+ """.format('\n'.join(cd_udf)), False)
+ abort = True
c_uda = ch.get_uda_signature()
d_uda = vd.get_depended_func_signature(True)
cd_uda = [uda for uda in d_uda if uda in c_uda]
+ if len(cd_uda) > 0:
+ __error("""
+ User has objects dependent on updated MADlib functions ({0})!
+ These objects will not fail to work with the new aggregates and
+ need to be dropped before starting upgrade again. Aborting upgrade ...
+ """.format('\n'.join(cd_uda)), False)
+ abort = True
- abort = False
- if len(cd_udt) > 0:
- __error("""
- User has objects dependent on updated MADlib types ({0})!
- These objects need to be dropped before starting upgrade again. Aborting upgrade ...
- """ .format('\n'.join(cd_udt)), False)
- abort = True
- if len(cd_udf) > 0:
- __error("""
- User has objects dependent on updated MADlib functions ({0})!
- These objects need to be dropped before starting upgrade again. Aborting upgrade ...
- """ .format('\n'.join(cd_udf)), False)
- abort = True
- if len(cd_uda) > 0:
- __error("""
- User has objects dependent on udpated MADlib aggregates ({0})!
- These objects need to be dropped before starting upgrade again. Aborting upgrade ...
- """ .format('\n'.join(cd_uda)), False)
- abort = True
if abort:
__error('------- Upgrade aborted. -------', True)
else:
__info("No explicit dependency problem found, continuing to upgrade ...", True)
- vd.save_and_drop()
+ if vd.has_dependency():
+ vd.save_and_drop()
__info("\tReading existing UDAs/UDTs...", False)
sc = ScriptCleaner(schema, portid, con_args, ch)