diff --git a/common/fileview2/fvdisksource.cpp b/common/fileview2/fvdisksource.cpp index 068e526f2ff..5c27abf366b 100644 --- a/common/fileview2/fvdisksource.cpp +++ b/common/fileview2/fvdisksource.cpp @@ -678,7 +678,8 @@ bool TranslatedDiskDataSource::init() bool TranslatedDiskDataSource::compileHelperWU() { submitWorkUnit(helperWuid, username, password); - return waitForWorkUnitToCompile(helperWuid); + WUState state = waitForWorkUnitToCompile(helperWuid); + return isCompiled(state); } //--------------------------------------------------------------------------- diff --git a/common/workunit/workunit.cpp b/common/workunit/workunit.cpp index e00c4372ad9..b3f5e91da5f 100644 --- a/common/workunit/workunit.cpp +++ b/common/workunit/workunit.cpp @@ -13182,25 +13182,16 @@ extern WORKUNIT_API WUState secWaitForWorkUnitToComplete(const char * wuid, ISec return WUStateUnknown; } -extern bool waitForWorkUnitToCompile(const char * wuid, int timeout) +extern WUState waitForWorkUnitToCompile(const char * wuid, int timeout) { - switch(globalFactory->waitForWorkUnit(wuid, (unsigned) timeout, true, { WUStateWait })) - { - case WUStateCompiled: - case WUStateCompleted: - case WUStateWait: - case WUStateUploadingFiles: - return true; - default: - return false; - } + return globalFactory->waitForWorkUnit(wuid, (unsigned) timeout, true, { WUStateWait }); } -extern WORKUNIT_API bool secWaitForWorkUnitToCompile(const char *wuid, ISecManager *secmgr, ISecUser *secuser, int timeout) +extern WORKUNIT_API WUState secWaitForWorkUnitToCompile(const char *wuid, ISecManager *secmgr, ISecUser *secuser, int timeout) { if (checkWuSecAccess(wuid, secmgr, secuser, SecAccess_Read, "Wait for Compile", false, true)) return waitForWorkUnitToCompile(wuid, timeout); - return false; + return WUStateUnknown; } extern WORKUNIT_API bool secDebugWorkunit(const char *wuid, ISecManager *secmgr, ISecUser *secuser, const char *command, StringBuffer &response) diff --git a/common/workunit/workunit.hpp b/common/workunit/workunit.hpp index f9a55b0559d..365468ff483 100644 --- a/common/workunit/workunit.hpp +++ b/common/workunit/workunit.hpp @@ -1695,9 +1695,9 @@ inline bool isWorkunitDAToken(const char * distributedAccessToken) //returns a state code. WUStateUnknown == timeout extern WORKUNIT_API WUState waitForWorkUnitToComplete(const char * wuid, int timeout = -1, std::list expectedStates = {}); -extern WORKUNIT_API bool waitForWorkUnitToCompile(const char * wuid, int timeout = -1); +extern WORKUNIT_API WUState waitForWorkUnitToCompile(const char * wuid, int timeout = -1); extern WORKUNIT_API WUState secWaitForWorkUnitToComplete(const char * wuid, ISecManager *secmgr, ISecUser *secuser, int timeout = -1, std::list expectedStates = {}); -extern WORKUNIT_API bool secWaitForWorkUnitToCompile(const char *wuid, ISecManager *secmgr, ISecUser *secuser, int timeout = -1); +extern WORKUNIT_API WUState secWaitForWorkUnitToCompile(const char *wuid, ISecManager *secmgr, ISecUser *secuser, int timeout = -1); extern WORKUNIT_API bool secDebugWorkunit(const char *wuid, ISecManager *secmgr, ISecUser *secuser, const char *command, StringBuffer &response); extern WORKUNIT_API WUState getWorkUnitState(const char* state); extern WORKUNIT_API IWorkflowScheduleConnection * getWorkflowScheduleConnection(char const * wuid); @@ -1705,6 +1705,7 @@ extern WORKUNIT_API const char *skipLeadingXml(const char *text); extern WORKUNIT_API bool isArchiveQuery(const char * text); extern WORKUNIT_API bool isQueryManifest(const char * text); extern WORKUNIT_API IPropertyTree * resolveDefinitionInArchive(IPropertyTree * archive, const char * path); +inline bool isCompiled(WUState state) { return state == WUStateCompiled || state == WUStateCompleted; } inline bool isLibrary(IConstWorkUnit * wu) { return wu->getApplicationValueInt("LibraryModule", "interfaceHash", 0) != 0; } diff --git a/ecl/eclcmd/eclcmd_common.cpp b/ecl/eclcmd/eclcmd_common.cpp index f513750b99e..db46d75426c 100644 --- a/ecl/eclcmd/eclcmd_common.cpp +++ b/ecl/eclcmd/eclcmd_common.cpp @@ -753,6 +753,10 @@ eclCmdOptionMatchIndicator EclCmdWithEclTarget::matchCommandLineOption(ArgvItera return EclCmdOptionMatch; if (iter.matchOption(optTargetCluster, ECLOPT_CLUSTER_DEPRECATED)||iter.matchOption(optTargetCluster, ECLOPT_CLUSTER_DEPRECATED_S)) return EclCmdOptionMatch; + if (iter.matchOption(optWaitTime, ECLOPT_WAIT)) + return EclCmdOptionMatch; + if (iter.matchFlag(optPoll, ECLOPT_POLL)) + return EclCmdOptionMatch; //Process options which should be passed straight through to eclcc StringBuffer temp; if (iter.matchOptionText(temp, ECLOPT_FETCH_REPOS, true, false) || iter.matchOptionText(temp, ECLOPT_UPDATE_REPOS, true, false) || diff --git a/ecl/eclcmd/eclcmd_common.hpp b/ecl/eclcmd/eclcmd_common.hpp index 16912c5566e..957d7af21b1 100644 --- a/ecl/eclcmd/eclcmd_common.hpp +++ b/ecl/eclcmd/eclcmd_common.hpp @@ -21,6 +21,7 @@ #include "ws_workunits.hpp" #include "ws_fs.hpp" #include "eclcc.hpp" +#include "workunit.hpp" //========================================================================================= @@ -311,6 +312,7 @@ class EclCmdCommon : implements IEclCommand, public CInterface setRpcRequestTimeouts(rpc, waitMS, optWaitConnectMs, optWaitReadSec); setRpcSSLOptions(rpc, optSSL, optClientCert, optClientPrivateKey, optCACert, optAcceptSelfSigned); } + void checkFeatures(IClientWsWorkunits *client, bool &useCompression, int &major, int &minor, int &point, unsigned waitMs, unsigned waitConnectMs, unsigned waitReadSec); virtual void usage() { @@ -359,7 +361,7 @@ class EclCmdCommon : implements IEclCommand, public CInterface class EclCmdWithEclTarget : public EclCmdCommon { public: - EclCmdWithEclTarget() : optResultLimit((unsigned)-1), paramCount(0), optNoArchive(false), optLegacy(false), optDebug(false), optCheckDirty(false) + EclCmdWithEclTarget() : optResultLimit((unsigned)-1), paramCount(0), optWaitTime((unsigned)-1), optNoArchive(false), optLegacy(false), optDebug(false), optCheckDirty(false), optPoll(false) { } virtual eclCmdOptionMatchIndicator matchCommandLineOption(ArgvIterator &iter, bool finalAttempt=false); @@ -367,6 +369,7 @@ class EclCmdWithEclTarget : public EclCmdCommon bool getFullAttributePath(StringBuffer & result); bool setTarget(const char *target); bool setParam(const char *in, bool final); + bool doDeploy(IClientWsWorkunits *client, unsigned waitMs, const char *cluster, const char *name, StringBuffer *wuid, StringBuffer *wucluster, bool noarchive, bool displayWuid, bool compress, bool protect); virtual void usage() { @@ -380,6 +383,8 @@ class EclCmdWithEclTarget : public EclCmdCommon " -f-