From 33a3ad04f5bcbeaf36fc7dd86da67e8e2c2530d2 Mon Sep 17 00:00:00 2001 From: kaetemi Date: Mon, 13 May 2019 04:02:37 +0800 Subject: [PATCH] Retry ligo export on crash --- .../build_gamedata/processes/ligo/1_export.py | 57 ++++++++++++++++--- .../ligo/maxscript/nel_ligo_export.ms | 45 ++++++++++++++- 2 files changed, 92 insertions(+), 10 deletions(-) diff --git a/code/nel/tools/build_gamedata/processes/ligo/1_export.py b/code/nel/tools/build_gamedata/processes/ligo/1_export.py index 09be53494..4077ddb1c 100755 --- a/code/nel/tools/build_gamedata/processes/ligo/1_export.py +++ b/code/nel/tools/build_gamedata/processes/ligo/1_export.py @@ -61,8 +61,9 @@ if LigoExportLand == "" or LigoExportOnePass == 1: mkPath(log, ExportBuildDirectory + "/" + LigoEcosystemZoneLigoExportDirectory) mkPath(log, ExportBuildDirectory + "/" + LigoEcosystemCmbExportDirectory) mkPath(log, DatabaseDirectory + "/" + ZoneSourceDirectory[0]) - mkPath(log, ExportBuildDirectory + "/" + LigoEcosystemTagExportDirectory) - if (needUpdateDirByTagLogFiltered(log, DatabaseDirectory + "/" + LigoMaxSourceDirectory, ".max", ExportBuildDirectory + "/" + LigoEcosystemTagExportDirectory, ".max.tag", [ "zonematerial", "zonetransition", "zonespecial" ])): + tagDirectory = ExportBuildDirectory + "/" + LigoEcosystemTagExportDirectory + mkPath(log, tagDirectory) + if (needUpdateDirByTagLogFiltered(log, DatabaseDirectory + "/" + LigoMaxSourceDirectory, ".max", tagDirectory, ".max.tag", [ "zonematerial", "zonetransition", "zonespecial" ])): printLog(log, "WRITE " + ligoIniPath) ligoIni = open(ligoIniPath, "w") ligoIni.write("[LigoConfig]\n") @@ -71,29 +72,69 @@ if LigoExportLand == "" or LigoExportOnePass == 1: ligoIni.write("LigoOldZonePath=" + DatabaseDirectory + "/" + ZoneSourceDirectory[0] + "/\n") ligoIni.close() - outDirTag = ExportBuildDirectory + "/" + LigoEcosystemTagExportDirectory - logFile = ScriptDirectory + "/processes/ligo/log.log" + outputLogfile = ScriptDirectory + "/processes/ligo/log.log" smallBank = ExportBuildDirectory + "/" + SmallbankExportDirectory + "/" + BankTileBankName + ".smallbank" + maxRunningTagFile = tagDirectory + "/max_running.tag" scriptSrc = "maxscript/nel_ligo_export.ms" scriptDst = MaxUserDirectory + "/scripts/nel_ligo_export.ms" + tagList = findFiles(log, tagDirectory, "", ".max.tag") + tagLen = len(tagList) + if os.path.isfile(scriptDst): os.remove(scriptDst) + tagDiff = 1 printLog(log, "WRITE " + scriptDst) sSrc = open(scriptSrc, "r") sDst = open(scriptDst, "w") for line in sSrc: - newline = line.replace("output_logfile", logFile) - newline = newline.replace("output_directory_tag", outDirTag) + newline = line.replace("output_logfile", outputLogfile) + newline = newline.replace("output_directory_tag", tagDirectory) newline = newline.replace("bankFilename", smallBank) sDst.write(newline) sSrc.close() sDst.close() - printLog(log, "MAXSCRIPT " + scriptDst) - subprocess.call([ Max, "-U", "MAXScript", "nel_ligo_export.ms", "-q", "-mi", "-mip" ]) + zeroRetryLimit = 3 + while tagDiff > 0: + mrt = open(maxRunningTagFile, "w") + mrt.write("moe-moe-kyun") + mrt.close() + printLog(log, "MAXSCRIPT " + scriptDst) + subprocess.call([ Max, "-U", "MAXScript", "nel_ligo_export.ms", "-q", "-mi", "-mip" ]) + if os.path.exists(outputLogfile): + try: + lSrc = open(outputLogfile, "r") + for line in lSrc: + lineStrip = line.strip() + if (len(lineStrip) > 0): + printLog(log, lineStrip) + lSrc.close() + os.remove(outputLogfile) + except Exception: + printLog(log, "ERROR Failed to read 3dsmax log") + else: + printLog(log, "WARNING No 3dsmax log") + tagList = findFiles(log, tagDirectory, "", ".max.tag") + newTagLen = len(tagList) + tagDiff = newTagLen - tagLen + tagLen = newTagLen + addTagDiff = 0 + if os.path.exists(maxRunningTagFile): + printLog(log, "FAIL 3ds Max crashed and/or file export failed!") + if tagDiff == 0: + if zeroRetryLimit > 0: + zeroRetryLimit = zeroRetryLimit - 1 + addTagDiff = 1 + else: + printLog(log, "FAIL Retry limit reached!") + else: + addTagDiff = 1 + os.remove(maxRunningTagFile) + printLog(log, "Exported " + str(tagDiff) + " .max files!") + tagDiff += addTagDiff os.remove(scriptDst) printLog(log, "") diff --git a/code/nel/tools/build_gamedata/processes/ligo/maxscript/nel_ligo_export.ms b/code/nel/tools/build_gamedata/processes/ligo/maxscript/nel_ligo_export.ms index 07d032809..e1d5de20e 100755 --- a/code/nel/tools/build_gamedata/processes/ligo/maxscript/nel_ligo_export.ms +++ b/code/nel/tools/build_gamedata/processes/ligo/maxscript/nel_ligo_export.ms @@ -16,6 +16,7 @@ TransitionNumBis = #( 5, 4, 2, 3, 7, 6, 0, 1, 8) NEL3D_APPDATA_IGNAME = 1423062564 -- string : name of the Instance Group tagThisFile = true +removeRunningTag = true -- Unhide layers fn unhidelayers = @@ -599,6 +600,7 @@ try if tagFile == undefined then ( nlerror ("WARNING can't create tag file "+tag) + removeRunningTag = false ) else ( @@ -606,6 +608,10 @@ try close tagFile ) ) + else + ( + removeRunningTag = false + ) resetMAXFile #noprompt gc () @@ -832,6 +838,7 @@ try if tagFile == undefined then ( nlerror ("WARNING can't create tag file "+tag) + removeRunningTag = false ) else ( @@ -839,6 +846,10 @@ try close tagFile ) ) + else + ( + removeRunningTag = false + ) ) resetMAXFile #noprompt @@ -956,6 +967,7 @@ try if tagFile == undefined then ( nlerror ("WARNING can't create tag file "+tag) + removeRunningTag = false ) else ( @@ -963,6 +975,10 @@ try close tagFile ) ) + else + ( + removeRunningTag = false + ) resetMAXFile #noprompt gc () @@ -978,13 +994,38 @@ try catch ( -- Error - nlerror ("ERROR fatal error exporting ligo zone in folder"+ligo_root_path) + nlerror("ERROR fatal error exporting ligo zone in folder"+ligo_root_path) + nlerror("FAIL Fatal error occurred") + NelForceQuitRightNow() + removeRunningTag = false tagThisFile = false ) +try +( + if (removeRunningTag) then + ( + resetMAXFile #noPrompt + ) +) +catch +( + nlerror("FAIL Last reset fails") + removeRunningTag = false +) +if (removeRunningTag) then +( + nlerror("SUCCESS All .max files have been successfully exported") + deleteFile("%TagDirectory%/max_running.tag") +) +else +( + nlerror("FAIL One or more issues occurred") + NelForceQuitRightNow() +) -resetMAXFile #noprompt +nlerror("BYE") quitMAX #noPrompt quitMAX () #noPrompt