workunit.hpp 56 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635636637638639640641642643644645646647648649650651652653654655656657658659660661662663664665666667668669670671672673674675676677678679680681682683684685686687688689690691692693694695696697698699700701702703704705706707708709710711712713714715716717718719720721722723724725726727728729730731732733734735736737738739740741742743744745746747748749750751752753754755756757758759760761762763764765766767768769770771772773774775776777778779780781782783784785786787788789790791792793794795796797798799800801802803804805806807808809810811812813814815816817818819820821822823824825826827828829830831832833834835836837838839840841842843844845846847848849850851852853854855856857858859860861862863864865866867868869870871872873874875876877878879880881882883884885886887888889890891892893894895896897898899900901902903904905906907908909910911912913914915916917918919920921922923924925926927928929930931932933934935936937938939940941942943944945946947948949950951952953954955956957958959960961962963964965966967968969970971972973974975976977978979980981982983984985986987988989990991992993994995996997998999100010011002100310041005100610071008100910101011101210131014101510161017101810191020102110221023102410251026102710281029103010311032103310341035103610371038103910401041104210431044104510461047104810491050105110521053105410551056105710581059106010611062106310641065106610671068106910701071107210731074107510761077107810791080108110821083108410851086108710881089109010911092109310941095109610971098109911001101110211031104110511061107110811091110111111121113111411151116111711181119112011211122112311241125112611271128112911301131113211331134113511361137113811391140114111421143114411451146114711481149115011511152115311541155115611571158115911601161116211631164116511661167116811691170117111721173117411751176117711781179118011811182118311841185118611871188118911901191119211931194119511961197119811991200120112021203120412051206120712081209121012111212121312141215121612171218121912201221122212231224122512261227122812291230123112321233123412351236123712381239124012411242124312441245124612471248124912501251125212531254125512561257125812591260126112621263126412651266126712681269127012711272127312741275127612771278127912801281128212831284128512861287128812891290129112921293129412951296129712981299130013011302130313041305130613071308130913101311131213131314131513161317131813191320132113221323132413251326132713281329133013311332133313341335133613371338133913401341134213431344134513461347134813491350135113521353135413551356135713581359136013611362136313641365
  1. /*##############################################################################
  2. HPCC SYSTEMS software Copyright (C) 2012 HPCC Systems.
  3. Licensed under the Apache License, Version 2.0 (the "License");
  4. you may not use this file except in compliance with the License.
  5. You may obtain a copy of the License at
  6. http://www.apache.org/licenses/LICENSE-2.0
  7. Unless required by applicable law or agreed to in writing, software
  8. distributed under the License is distributed on an "AS IS" BASIS,
  9. WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
  10. See the License for the specific language governing permissions and
  11. limitations under the License.
  12. ############################################################################## */
  13. #ifndef WORKUNIT_INCL
  14. #define WORKUNIT_INCL
  15. #ifdef _WIN32
  16. #ifdef WORKUNIT_EXPORTS
  17. #define WORKUNIT_API __declspec(dllexport)
  18. #else
  19. #define WORKUNIT_API __declspec(dllimport)
  20. #endif
  21. #else
  22. #define WORKUNIT_API
  23. #endif
  24. #define MINIMUM_SCHEDULE_PRIORITY 0
  25. #define DEFAULT_SCHEDULE_PRIORITY 50
  26. #define MAXIMUM_SCHEDULE_PRIORITY 100
  27. #include "jiface.hpp"
  28. #include "errorlist.h"
  29. #include "jtime.hpp"
  30. #include "jsocket.hpp"
  31. #include "jstats.h"
  32. #include "jprop.hpp"
  33. #define CHEAP_UCHAR_DEF
  34. #ifdef _WIN32
  35. typedef wchar_t UChar;
  36. #else //__WIN32
  37. typedef unsigned short UChar;
  38. #endif //__WIN32
  39. // error codes
  40. #define QUERRREG_ADD_NAMEDQUERY QUERYREGISTRY_ERROR_START
  41. #define QUERRREG_REMOVE_NAMEDQUERY QUERYREGISTRY_ERROR_START+1
  42. #define QUERRREG_WUID QUERYREGISTRY_ERROR_START+2
  43. #define QUERRREG_DLL QUERYREGISTRY_ERROR_START+3
  44. #define QUERRREG_SETALIAS QUERYREGISTRY_ERROR_START+4
  45. #define QUERRREG_RESOLVEALIAS QUERYREGISTRY_ERROR_START+5
  46. #define QUERRREG_REMOVEALIAS QUERYREGISTRY_ERROR_START+6
  47. #define QUERRREG_QUERY_REGISTRY QUERYREGISTRY_ERROR_START+7
  48. #define QUERRREG_SUSPEND QUERYREGISTRY_ERROR_START+8
  49. #define QUERRREG_UNSUSPEND QUERYREGISTRY_ERROR_START+9
  50. #define QUERRREG_COMMENT QUERYREGISTRY_ERROR_START+10
  51. class CDateTime;
  52. interface ISetToXmlTransformer;
  53. interface ISecManager;
  54. interface ISecUser;
  55. class StringArray;
  56. class StringBuffer;
  57. typedef unsigned __int64 __uint64;
  58. interface IScmIterator : extends IInterface
  59. {
  60. virtual bool first() = 0;
  61. virtual bool next() = 0;
  62. virtual bool isValid() = 0;
  63. };
  64. interface IQueueSwitcher : extends IInterface
  65. {
  66. virtual void * getQ(const char * qname, const char * wuid) = 0;
  67. virtual void putQ(const char * qname, const char * wuid, void * qitem) = 0;
  68. virtual bool isAuto() = 0;
  69. };
  70. //! PriorityClass
  71. //! Not sure what the real current class values are -- TBD
  72. enum WUPriorityClass
  73. {
  74. PriorityClassUnknown = 0,
  75. PriorityClassLow = 1,
  76. PriorityClassNormal = 2,
  77. PriorityClassHigh = 3,
  78. PriorityClassSize = 4
  79. };
  80. enum WUQueryType
  81. {
  82. QueryTypeUnknown = 0,
  83. QueryTypeEcl = 1,
  84. QueryTypeSql = 2,
  85. QueryTypeXml = 3,
  86. QueryTypeAttribute = 4,
  87. QueryTypeSize = 5
  88. };
  89. enum WUState
  90. {
  91. WUStateUnknown = 0,
  92. WUStateCompiled = 1,
  93. WUStateRunning = 2,
  94. WUStateCompleted = 3,
  95. WUStateFailed = 4,
  96. WUStateArchived = 5,
  97. WUStateAborting = 6,
  98. WUStateAborted = 7,
  99. WUStateBlocked = 8,
  100. WUStateSubmitted = 9,
  101. WUStateScheduled = 10,
  102. WUStateCompiling = 11,
  103. WUStateWait = 12,
  104. WUStateUploadingFiles = 13,
  105. WUStateDebugPaused = 14,
  106. WUStateDebugRunning = 15,
  107. WUStatePaused = 16,
  108. WUStateSize = 17
  109. };
  110. enum WUAction
  111. {
  112. WUActionUnknown = 0,
  113. WUActionCompile = 1,
  114. WUActionCheck = 2,
  115. WUActionRun = 3,
  116. WUActionExecuteExisting = 4,
  117. WUActionPause = 5,
  118. WUActionPauseNow = 6,
  119. WUActionResume = 7,
  120. WUActionSize = 8
  121. };
  122. enum WUCompareMode
  123. {
  124. CompareModeOff = 0,
  125. CompareModeHole = 1,
  126. CompareModeThor = 2,
  127. CompareModeSize = 3
  128. };
  129. enum WUResultStatus
  130. {
  131. ResultStatusUndefined = 0,
  132. ResultStatusCalculated = 1,
  133. ResultStatusSupplied = 2,
  134. ResultStatusFailed = 3,
  135. ResultStatusPartial = 4,
  136. ResultStatusSize = 5
  137. };
  138. enum WUExceptionSeverity
  139. {
  140. ExceptionSeverityInformation = 0,
  141. ExceptionSeverityWarning = 1,
  142. ExceptionSeverityError = 2,
  143. ExceptionSeveritySize = 3
  144. };
  145. //! IConstWUGraph
  146. enum WUGraphType
  147. {
  148. GraphTypeAny = 0,
  149. GraphTypeProgress = 1,
  150. GraphTypeEcl = 2,
  151. GraphTypeActivities = 3,
  152. GraphTypeSubProgress = 4,
  153. GraphTypeSize = 5
  154. };
  155. interface IConstWUGraphIterator;
  156. interface ICsvToRawTransformer;
  157. interface IXmlToRawTransformer;
  158. interface IPropertyTree;
  159. interface IPropertyTreeIterator;
  160. interface IConstWUGraph : extends IInterface
  161. {
  162. virtual IStringVal & getXGMML(IStringVal & ret, bool mergeProgress) const = 0;
  163. virtual IStringVal & getDOT(IStringVal & ret) const = 0;
  164. virtual IStringVal & getName(IStringVal & ret) const = 0;
  165. virtual IStringVal & getLabel(IStringVal & ret) const = 0;
  166. virtual IStringVal & getTypeName(IStringVal & ret) const = 0;
  167. virtual WUGraphType getType() const = 0;
  168. virtual IPropertyTree * getXGMMLTree(bool mergeProgress) const = 0;
  169. virtual IPropertyTree * getXGMMLTreeRaw() const = 0;
  170. virtual bool isValid() const = 0;
  171. };
  172. interface IWUGraph : extends IConstWUGraph
  173. {
  174. virtual void setXGMML(const char * text) = 0;
  175. virtual void setXGMMLTree(IPropertyTree * tree, bool compress=true) = 0;
  176. virtual void setName(const char * name) = 0;
  177. virtual void setLabel(const char * name) = 0;
  178. virtual void setType(WUGraphType type) = 0;
  179. };
  180. interface IConstWUGraphIterator : extends IScmIterator
  181. {
  182. virtual IConstWUGraph & query() = 0;
  183. };
  184. interface IConstWUTimer : extends IInterface
  185. {
  186. virtual IStringVal & getName(IStringVal & ret) const = 0;
  187. virtual unsigned getCount() const = 0;
  188. virtual unsigned getDuration() const = 0;
  189. };
  190. interface IWUTimer : extends IConstWUTimer
  191. {
  192. virtual void setName(const char * str) = 0;
  193. virtual void setCount(unsigned c) = 0;
  194. virtual void setDuration(unsigned d) = 0;
  195. };
  196. interface IConstWUTimerIterator : extends IScmIterator
  197. {
  198. virtual IConstWUTimer & query() = 0;
  199. };
  200. //! IWUResult
  201. enum
  202. {
  203. ResultSequenceStored = -1,
  204. ResultSequencePersist = -2,
  205. ResultSequenceInternal = -3,
  206. ResultSequenceOnce = -4,
  207. };
  208. extern WORKUNIT_API bool isSpecialResultSequence(unsigned sequence);
  209. enum WUResultFormat
  210. {
  211. ResultFormatRaw = 0,
  212. ResultFormatXml = 1,
  213. ResultFormatXmlSet = 2,
  214. ResultFormatCsv = 3,
  215. ResultFormatSize = 4
  216. };
  217. interface IConstWUResult : extends IInterface
  218. {
  219. virtual WUResultStatus getResultStatus() const = 0;
  220. virtual IStringVal & getResultName(IStringVal & str) const = 0;
  221. virtual int getResultSequence() const = 0;
  222. virtual bool isResultScalar() const = 0;
  223. virtual IStringVal & getResultXml(IStringVal & str) const = 0;
  224. virtual unsigned getResultFetchSize() const = 0;
  225. virtual __int64 getResultTotalRowCount() const = 0;
  226. virtual __int64 getResultRowCount() const = 0;
  227. virtual void getResultDataset(IStringVal & ecl, IStringVal & defs) const = 0;
  228. virtual IStringVal & getResultLogicalName(IStringVal & ecl) const = 0;
  229. virtual IStringVal & getResultKeyField(IStringVal & ecl) const = 0;
  230. virtual unsigned getResultRequestedRows() const = 0;
  231. virtual __int64 getResultInt() const = 0;
  232. virtual bool getResultBool() const = 0;
  233. virtual double getResultReal() const = 0;
  234. virtual IStringVal & getResultString(IStringVal & str) const = 0;
  235. virtual IDataVal & getResultRaw(IDataVal & data, IXmlToRawTransformer * xmlTransformer, ICsvToRawTransformer * csvTransformer) const = 0;
  236. virtual IDataVal & getResultUnicode(IDataVal & data) const = 0;
  237. virtual IStringVal & getResultEclSchema(IStringVal & str) const = 0;
  238. virtual __int64 getResultRawSize(IXmlToRawTransformer * xmlTransformer, ICsvToRawTransformer * csvTransformer) const = 0;
  239. virtual IDataVal & getResultRaw(IDataVal & data, __int64 from, __int64 length, IXmlToRawTransformer * xmlTransformer, ICsvToRawTransformer * csvTransformer) const = 0;
  240. virtual IStringVal & getResultRecordSizeEntry(IStringVal & str) const = 0;
  241. virtual IStringVal & getResultTransformerEntry(IStringVal & str) const = 0;
  242. virtual __int64 getResultRowLimit() const = 0;
  243. virtual IStringVal & getResultFilename(IStringVal & str) const = 0;
  244. virtual WUResultFormat getResultFormat() const = 0;
  245. virtual unsigned getResultHash() const = 0;
  246. virtual void getResultDecimal(void * val, unsigned length, unsigned precision, bool isSigned) const = 0;
  247. virtual bool getResultIsAll() const = 0;
  248. virtual const IProperties *queryXmlns() = 0;
  249. };
  250. interface IWUResult : extends IConstWUResult
  251. {
  252. virtual void setResultStatus(WUResultStatus status) = 0;
  253. virtual void setResultName(const char * name) = 0;
  254. virtual void setResultSequence(unsigned seq) = 0;
  255. virtual void setResultSchemaRaw(unsigned len, const void * schema) = 0;
  256. virtual void setResultScalar(bool isScalar) = 0;
  257. virtual void setResultRaw(unsigned len, const void * data, WUResultFormat format) = 0;
  258. virtual void setResultFetchSize(unsigned rows) = 0;
  259. virtual void setResultTotalRowCount(__int64 rows) = 0;
  260. virtual void setResultRowCount(__int64 rows) = 0;
  261. virtual void setResultDataset(const char * ecl, const char * defs) = 0;
  262. virtual void setResultLogicalName(const char * logicalName) = 0;
  263. virtual void setResultKeyField(const char * name) = 0;
  264. virtual void setResultRequestedRows(unsigned rowcount) = 0;
  265. virtual void setResultInt(__int64 val) = 0;
  266. virtual void setResultBool(bool val) = 0;
  267. virtual void setResultReal(double val) = 0;
  268. virtual void setResultString(const char * val, unsigned length) = 0;
  269. virtual void setResultData(const void * val, unsigned length) = 0;
  270. virtual void setResultDecimal(const void * val, unsigned length) = 0;
  271. virtual void addResultRaw(unsigned len, const void * data, WUResultFormat format) = 0;
  272. virtual void setResultRecordSizeEntry(const char * val) = 0;
  273. virtual void setResultTransformerEntry(const char * val) = 0;
  274. virtual void setResultRowLimit(__int64 value) = 0;
  275. virtual void setResultFilename(const char * name) = 0;
  276. virtual void setResultUnicode(const void * val, unsigned length) = 0;
  277. virtual void setResultUInt(__uint64 val) = 0;
  278. virtual void setResultIsAll(bool value) = 0;
  279. virtual void setResultFormat(WUResultFormat format) = 0;
  280. virtual void setResultXML(const char * xml) = 0;
  281. virtual void setResultRow(unsigned len, const void * data) = 0;
  282. virtual void setXmlns(const char *prefix, const char *uri) = 0;
  283. };
  284. interface IConstWUResultIterator : extends IScmIterator
  285. {
  286. virtual IConstWUResult & query() = 0;
  287. };
  288. //! IWUQuery
  289. enum WUFileType
  290. {
  291. FileTypeCpp = 0,
  292. FileTypeDll = 1,
  293. FileTypeResText = 2,
  294. FileTypeHintXml = 3,
  295. FileTypeXml = 4,
  296. FileTypeSize = 5
  297. };
  298. interface IConstWUAssociatedFile : extends IInterface
  299. {
  300. virtual WUFileType getType() const = 0;
  301. virtual IStringVal & getDescription(IStringVal & ret) const = 0;
  302. virtual IStringVal & getIp(IStringVal & ret) const = 0;
  303. virtual IStringVal & getName(IStringVal & ret) const = 0;
  304. virtual IStringVal & getNameTail(IStringVal & ret) const = 0;
  305. virtual unsigned getCrc() const = 0;
  306. };
  307. interface IConstWUAssociatedFileIterator : extends IScmIterator
  308. {
  309. virtual IConstWUAssociatedFile & query() = 0;
  310. };
  311. interface IConstWUQuery : extends IInterface
  312. {
  313. virtual WUQueryType getQueryType() const = 0;
  314. virtual IStringVal & getQueryText(IStringVal & str) const = 0;
  315. virtual IStringVal & getQueryName(IStringVal & str) const = 0;
  316. virtual IStringVal & getQueryDllName(IStringVal & str) const = 0;
  317. virtual unsigned getQueryDllCrc() const = 0;
  318. virtual IStringVal & getQueryCppName(IStringVal & str) const = 0;
  319. virtual IStringVal & getQueryResTxtName(IStringVal & str) const = 0;
  320. virtual IConstWUAssociatedFile * getAssociatedFile(WUFileType type, unsigned index) const = 0;
  321. virtual IConstWUAssociatedFileIterator & getAssociatedFiles() const = 0;
  322. virtual IStringVal & getQueryShortText(IStringVal & str) const = 0;
  323. virtual IStringVal & getQueryMainDefinition(IStringVal & str) const = 0;
  324. };
  325. interface IWUQuery : extends IConstWUQuery
  326. {
  327. virtual void setQueryType(WUQueryType qt) = 0;
  328. virtual void setQueryText(const char * pstr) = 0;
  329. virtual void setQueryName(const char * pstr) = 0;
  330. virtual void addAssociatedFile(WUFileType type, const char * name, const char * ip, const char * desc, unsigned crc) = 0;
  331. virtual void removeAssociatedFiles() = 0;
  332. virtual void setQueryMainDefinition(const char * str) = 0;
  333. };
  334. interface IConstWUWebServicesInfo : extends IInterface
  335. {
  336. virtual IStringVal & getModuleName(IStringVal & str) const = 0;
  337. virtual IStringVal & getAttributeName(IStringVal & str) const = 0;
  338. virtual IStringVal & getDefaultName(IStringVal & str) const = 0;
  339. virtual IStringVal & getInfo(const char * name, IStringVal & str) const = 0;
  340. virtual unsigned getWebServicesCRC() const = 0;
  341. };
  342. interface IWUWebServicesInfo : extends IConstWUWebServicesInfo
  343. {
  344. virtual void setModuleName(const char * pstr) = 0;
  345. virtual void setAttributeName(const char * pstr) = 0;
  346. virtual void setDefaultName(const char * pstr) = 0;
  347. virtual void setInfo(const char * name, const char * info) = 0;
  348. virtual void setWebServicesCRC(unsigned crc) = 0;
  349. };
  350. interface IConstWURoxieQueryInfo : extends IInterface
  351. {
  352. virtual IStringVal & getQueryInfo(IStringVal & str) const = 0;
  353. virtual IStringVal & getDefaultPackageInfo(IStringVal & str) const = 0;
  354. virtual IStringVal & getRoxieClusterName(IStringVal & str) const = 0;
  355. virtual IStringVal & getWuid(IStringVal & str) const = 0;
  356. };
  357. interface IWURoxieQueryInfo : extends IConstWURoxieQueryInfo
  358. {
  359. virtual void setQueryInfo(const char * info) = 0;
  360. virtual void setDefaultPackageInfo(const char * pstr, int len) = 0;
  361. virtual void setRoxieClusterName(const char * name) = 0;
  362. virtual void setWuid(const char * wuid) = 0;
  363. };
  364. //! IWUPlugin
  365. interface IConstWUPlugin : extends IInterface
  366. {
  367. virtual IStringVal & getPluginName(IStringVal & str) const = 0;
  368. virtual IStringVal & getPluginVersion(IStringVal & str) const = 0;
  369. virtual bool getPluginThor() const = 0;
  370. virtual bool getPluginHole() const = 0;
  371. };
  372. interface IWUPlugin : extends IConstWUPlugin
  373. {
  374. virtual void setPluginName(const char * str) = 0;
  375. virtual void setPluginVersion(const char * str) = 0;
  376. virtual void setPluginThor(bool flag) = 0;
  377. virtual void setPluginHole(bool flag) = 0;
  378. };
  379. interface IConstWUPluginIterator : extends IScmIterator
  380. {
  381. virtual IConstWUPlugin & query() = 0;
  382. };
  383. interface IConstWULibraryActivityIterator : extends IScmIterator
  384. {
  385. virtual unsigned query() const = 0;
  386. };
  387. interface IConstWULibrary : extends IInterface
  388. {
  389. virtual IStringVal & getName(IStringVal & str) const = 0;
  390. virtual IConstWULibraryActivityIterator * getActivities() const = 0;
  391. };
  392. interface IWULibrary : extends IConstWULibrary
  393. {
  394. virtual void setName(const char * str) = 0;
  395. virtual void addActivity(unsigned id) = 0;
  396. };
  397. interface IConstWULibraryIterator : extends IScmIterator
  398. {
  399. virtual IConstWULibrary & query() = 0;
  400. };
  401. //! IWUActivity
  402. interface IConstWUActivity : extends IInterface
  403. {
  404. virtual __int64 getId() const = 0;
  405. virtual unsigned getKind() const = 0;
  406. virtual IStringVal & getHelper(IStringVal & ret) const = 0;
  407. };
  408. interface IWUActivity : extends IConstWUActivity
  409. {
  410. virtual void setKind(unsigned id) = 0;
  411. virtual void setHelper(const char * str) = 0;
  412. };
  413. interface IConstWUActivityIterator : extends IScmIterator
  414. {
  415. virtual IConstWUActivity & query() = 0;
  416. };
  417. //! IWUException
  418. interface IConstWUException : extends IInterface
  419. {
  420. virtual IStringVal & getExceptionSource(IStringVal & str) const = 0;
  421. virtual IStringVal & getExceptionMessage(IStringVal & str) const = 0;
  422. virtual unsigned getExceptionCode() const = 0;
  423. virtual WUExceptionSeverity getSeverity() const = 0;
  424. virtual IStringVal & getTimeStamp(IStringVal & dt) const = 0;
  425. virtual IStringVal & getExceptionFileName(IStringVal & str) const = 0;
  426. virtual unsigned getExceptionLineNo() const = 0;
  427. virtual unsigned getExceptionColumn() const = 0;
  428. };
  429. interface IWUException : extends IConstWUException
  430. {
  431. virtual void setExceptionSource(const char * str) = 0;
  432. virtual void setExceptionMessage(const char * str) = 0;
  433. virtual void setExceptionCode(unsigned code) = 0;
  434. virtual void setSeverity(WUExceptionSeverity level) = 0;
  435. virtual void setTimeStamp(const char * dt) = 0;
  436. virtual void setExceptionFileName(const char * str) = 0;
  437. virtual void setExceptionLineNo(unsigned r) = 0;
  438. virtual void setExceptionColumn(unsigned c) = 0;
  439. };
  440. interface IConstWUExceptionIterator : extends IScmIterator
  441. {
  442. virtual IConstWUException & query() = 0;
  443. };
  444. enum ClusterType { NoCluster, HThorCluster, RoxieCluster, ThorLCRCluster };
  445. extern WORKUNIT_API ClusterType getClusterType(const char * platform, ClusterType dft = NoCluster);
  446. extern WORKUNIT_API const char *clusterTypeString(ClusterType clusterType, bool lcrSensitive);
  447. inline bool isThorCluster(ClusterType type) { return (type == ThorLCRCluster); }
  448. //! IClusterInfo
  449. interface IConstWUClusterInfo : extends IInterface
  450. {
  451. virtual IStringVal & getName(IStringVal & str) const = 0;
  452. virtual IStringVal & getScope(IStringVal & str) const = 0;
  453. virtual IStringVal & getThorQueue(IStringVal & str) const = 0;
  454. virtual unsigned getSize() const = 0;
  455. virtual ClusterType getPlatform() const = 0;
  456. virtual IStringVal & getAgentQueue(IStringVal & str) const = 0;
  457. virtual IStringVal & getServerQueue(IStringVal & str) const = 0;
  458. virtual IStringVal & getRoxieProcess(IStringVal & str) const = 0;
  459. virtual const StringArray & getThorProcesses() const = 0;
  460. virtual const StringArray & getPrimaryThorProcesses() const = 0;
  461. virtual const SocketEndpointArray & getRoxieServers() const = 0;
  462. virtual const char *getLdapUser() const = 0;
  463. virtual const char *getLdapPassword() const = 0;
  464. };
  465. //! IWorkflowItem
  466. enum WFType
  467. {
  468. WFTypeNormal = 0,
  469. WFTypeSuccess = 1,
  470. WFTypeFailure = 2,
  471. WFTypeRecovery = 3,
  472. WFTypeWait = 4,
  473. WFTypeSize = 5
  474. };
  475. enum WFMode
  476. {
  477. WFModeNormal = 0,
  478. WFModeCondition = 1,
  479. WFModeSequential = 2,
  480. WFModeParallel = 3,
  481. WFModePersist = 4,
  482. WFModeBeginWait = 5,
  483. WFModeWait = 6,
  484. WFModeOnce = 7,
  485. WFModeSize = 8
  486. };
  487. enum WFState
  488. {
  489. WFStateNull = 0,
  490. WFStateReqd = 1,
  491. WFStateDone = 2,
  492. WFStateFail = 3,
  493. WFStateSkip = 4,
  494. WFStateWait = 5,
  495. WFStateBlocked = 6,
  496. WFStateSize = 7
  497. };
  498. interface IWorkflowDependencyIterator : extends IScmIterator
  499. {
  500. virtual unsigned query() const = 0;
  501. };
  502. interface IWorkflowEvent : extends IInterface
  503. {
  504. virtual const char * queryName() const = 0;
  505. virtual const char * queryText() const = 0;
  506. virtual bool matches(const char * name, const char * text) const = 0;
  507. };
  508. interface IConstWorkflowItem : extends IInterface
  509. {
  510. virtual unsigned queryWfid() const = 0;
  511. virtual bool isScheduled() const = 0;
  512. virtual bool isScheduledNow() const = 0;
  513. virtual IWorkflowEvent * getScheduleEvent() const = 0;
  514. virtual unsigned querySchedulePriority() const = 0;
  515. virtual bool hasScheduleCount() const = 0;
  516. virtual unsigned queryScheduleCount() const = 0;
  517. virtual IWorkflowDependencyIterator * getDependencies() const = 0;
  518. virtual WFType queryType() const = 0;
  519. virtual WFMode queryMode() const = 0;
  520. virtual unsigned querySuccess() const = 0;
  521. virtual unsigned queryFailure() const = 0;
  522. virtual unsigned queryRecovery() const = 0;
  523. virtual unsigned queryRetriesAllowed() const = 0;
  524. virtual unsigned queryContingencyFor() const = 0;
  525. virtual IStringVal & getPersistName(IStringVal & val) const = 0;
  526. virtual unsigned queryPersistWfid() const = 0;
  527. virtual int queryPersistCopies() const = 0; // 0 - unmangled name, < 0 - use default, > 0 - max number
  528. virtual unsigned queryScheduleCountRemaining() const = 0;
  529. virtual WFState queryState() const = 0;
  530. virtual unsigned queryRetriesRemaining() const = 0;
  531. virtual int queryFailCode() const = 0;
  532. virtual const char * queryFailMessage() const = 0;
  533. virtual const char * queryEventName() const = 0;
  534. virtual const char * queryEventExtra() const = 0;
  535. virtual unsigned queryScheduledWfid() const = 0;
  536. virtual IStringVal & queryCluster(IStringVal & val) const = 0;
  537. };
  538. interface IRuntimeWorkflowItem : extends IConstWorkflowItem
  539. {
  540. virtual void setState(WFState state) = 0;
  541. virtual bool testAndDecRetries() = 0;
  542. virtual bool decAndTestScheduleCountRemaining() = 0;
  543. virtual void setFailInfo(int code, const char * message) = 0;
  544. virtual void reset() = 0;
  545. virtual void setEvent(const char * name, const char * extra) = 0;
  546. virtual void incScheduleCount() = 0;
  547. };
  548. interface IWorkflowItem : extends IRuntimeWorkflowItem
  549. {
  550. virtual void setScheduledNow() = 0;
  551. virtual void setScheduledOn(const char * name, const char * text) = 0;
  552. virtual void setSchedulePriority(unsigned priority) = 0;
  553. virtual void setScheduleCount(unsigned count) = 0;
  554. virtual void addDependency(unsigned wfid) = 0;
  555. virtual void setPersistInfo(const char * name, unsigned wfid, int maxCopies) = 0;
  556. virtual void syncRuntimeData(const IConstWorkflowItem & other) = 0;
  557. virtual void setScheduledWfid(unsigned wfid) = 0;
  558. virtual void setCluster(const char * cluster) = 0;
  559. };
  560. interface IConstWorkflowItemIterator : extends IScmIterator
  561. {
  562. virtual IConstWorkflowItem * query() const = 0;
  563. };
  564. interface IRuntimeWorkflowItemIterator : extends IConstWorkflowItemIterator
  565. {
  566. virtual IRuntimeWorkflowItem * get() const = 0;
  567. };
  568. interface IWorkflowItemIterator : extends IConstWorkflowItemIterator
  569. {
  570. virtual IWorkflowItem * get() const = 0;
  571. };
  572. interface IWorkflowItemArray : extends IInterface
  573. {
  574. virtual IRuntimeWorkflowItem & queryWfid(unsigned wfid) = 0;
  575. virtual unsigned count() const = 0;
  576. virtual IRuntimeWorkflowItemIterator * getSequenceIterator() = 0;
  577. virtual void addClone(const IConstWorkflowItem * other) = 0;
  578. virtual bool hasScheduling() const = 0;
  579. };
  580. enum LocalFileUploadType
  581. {
  582. UploadTypeFileSpray = 0,
  583. UploadTypeWUResult = 1,
  584. UploadTypeWUResultCsv = 2,
  585. UploadTypeWUResultXml = 3,
  586. UploadTypeSize = 4
  587. };
  588. interface IConstLocalFileUpload : extends IInterface
  589. {
  590. virtual unsigned queryID() const = 0;
  591. virtual LocalFileUploadType queryType() const = 0;
  592. virtual IStringVal & getSource(IStringVal & ret) const = 0;
  593. virtual IStringVal & getDestination(IStringVal & ret) const = 0;
  594. virtual IStringVal & getEventTag(IStringVal & ret) const = 0;
  595. };
  596. interface IConstLocalFileUploadIterator : extends IScmIterator
  597. {
  598. virtual IConstLocalFileUpload * get() = 0;
  599. };
  600. enum WUSubscribeOptions
  601. {
  602. SubscribeOptionRunningState = 0,
  603. SubscribeOptionAnyState = 1,
  604. SubscribeOptionAbort = 2,
  605. SubscribeOptionProgress = 3,
  606. SubscribeOptionAll = 4,
  607. SubscribeOptionSize = 5
  608. };
  609. interface IWUGraphProgress;
  610. interface IPropertyTree;
  611. enum WUGraphState
  612. {
  613. WUGraphUnknown = 0,
  614. WUGraphComplete = 1,
  615. WUGraphRunning = 2,
  616. WUGraphFailed = 3,
  617. WUGraphPaused = 4
  618. };
  619. enum WUFileKind
  620. {
  621. WUFileStandard = 0,
  622. WUFileTemporary = 1,
  623. WUFileOwned = 2,
  624. WUFileJobOwned = 3
  625. };
  626. typedef unsigned __int64 WUGraphIDType;
  627. typedef unsigned __int64 WUNodeIDType;
  628. interface IConstWUGraphProgress : extends IInterface
  629. {
  630. virtual IPropertyTree * queryProgressTree() = 0;
  631. virtual WUGraphState queryGraphState() = 0;
  632. virtual WUGraphState queryNodeState(WUGraphIDType nodeId) = 0;
  633. virtual IWUGraphProgress * update() = 0;
  634. virtual unsigned queryFormatVersion() = 0;
  635. };
  636. interface IWUGraphProgress : extends IConstWUGraphProgress
  637. {
  638. virtual IPropertyTree & updateEdge(WUGraphIDType nodeId, const char * edgeId) = 0;
  639. virtual IPropertyTree & updateNode(WUGraphIDType nodeId, WUNodeIDType id) = 0;
  640. virtual void setGraphState(WUGraphState state) = 0;
  641. virtual void setNodeState(WUGraphIDType nodeId, WUGraphState state) = 0;
  642. };
  643. interface IConstWUTimeStamp : extends IInterface
  644. {
  645. virtual IStringVal & getApplication(IStringVal & str) const = 0;
  646. virtual IStringVal & getEvent(IStringVal & str) const = 0;
  647. virtual IStringVal & getDate(IStringVal & dt) const = 0;
  648. };
  649. interface IConstWUTimeStampIterator : extends IScmIterator
  650. {
  651. virtual IConstWUTimeStamp & query() = 0;
  652. };
  653. interface IConstWUAppValue : extends IInterface
  654. {
  655. virtual IStringVal & getApplication(IStringVal & str) const = 0;
  656. virtual IStringVal & getName(IStringVal & str) const = 0;
  657. virtual IStringVal & getValue(IStringVal & str) const = 0;
  658. };
  659. interface IConstWUAppValueIterator : extends IScmIterator
  660. {
  661. virtual IConstWUAppValue & query() = 0;
  662. };
  663. interface IConstWUStatistic : extends IInterface
  664. {
  665. virtual IStringVal & getFullName(IStringVal & str) const = 0; // A unique name
  666. virtual IStringVal & getCreator(IStringVal & str) const = 0; // what component gathered the statistic e.g., roxie/eclcc/thorslave[ip]
  667. virtual IStringVal & getDescription(IStringVal & str) const = 0;// Description suitable for displaying to the user
  668. virtual IStringVal & getName(IStringVal & str) const = 0; // what is the name of the statistic e.g., wall time
  669. virtual IStringVal & getScope(IStringVal & str) const = 0; // what scope is the statistic gathered over? e.g., workunit, wfid:n, graphn, graphn:m
  670. virtual StatisticMeasure getKind() const = 0;
  671. virtual unsigned __int64 getValue() const = 0;
  672. virtual unsigned __int64 getCount() const = 0;
  673. virtual unsigned __int64 getMax() const = 0;
  674. };
  675. interface IConstWUStatisticIterator : extends IScmIterator
  676. {
  677. virtual IConstWUStatistic & query() = 0;
  678. };
  679. //! IWorkUnit
  680. //! Provides high level access to WorkUnit "header" data.
  681. interface IWorkUnit;
  682. interface IUserDescriptor;
  683. interface IStringIterator : extends IScmIterator
  684. {
  685. virtual IStringVal & str(IStringVal & str) = 0;
  686. };
  687. interface IConstWorkUnit : extends IInterface
  688. {
  689. virtual bool aborting() const = 0;
  690. virtual void forceReload() = 0;
  691. virtual WUAction getAction() const = 0;
  692. virtual IStringVal& getActionEx(IStringVal & str) const = 0;
  693. virtual IStringVal & getApplicationValue(const char * application, const char * propname, IStringVal & str) const = 0;
  694. virtual int getApplicationValueInt(const char * application, const char * propname, int defVal) const = 0;
  695. virtual IConstWUAppValueIterator & getApplicationValues() const = 0;
  696. virtual bool hasWorkflow() const = 0;
  697. virtual unsigned queryEventScheduledCount() const = 0;
  698. virtual IPropertyTree * queryWorkflowTree() const = 0;
  699. virtual IConstWorkflowItemIterator * getWorkflowItems() const = 0;
  700. virtual IWorkflowItemArray * getWorkflowClone() const = 0;
  701. virtual IConstLocalFileUploadIterator * getLocalFileUploads() const = 0;
  702. virtual bool requiresLocalFileUpload() const = 0;
  703. virtual bool getIsQueryService() const = 0;
  704. virtual IStringVal & getClusterName(IStringVal & str) const = 0;
  705. virtual unsigned getCombineQueries() const = 0;
  706. virtual WUCompareMode getCompareMode() const = 0;
  707. virtual IStringVal & getCustomerId(IStringVal & str) const = 0;
  708. virtual bool hasDebugValue(const char * propname) const = 0;
  709. virtual IStringVal & getDebugValue(const char * propname, IStringVal & str) const = 0;
  710. virtual int getDebugValueInt(const char * propname, int defVal) const = 0;
  711. virtual __int64 getDebugValueInt64(const char * propname, __int64 defVal) const = 0;
  712. virtual bool getDebugValueBool(const char * propname, bool defVal) const = 0;
  713. virtual IStringIterator & getDebugValues() const = 0;
  714. virtual IStringIterator & getDebugValues(const char * prop) const = 0;
  715. virtual unsigned getExceptionCount() const = 0;
  716. virtual IConstWUExceptionIterator & getExceptions() const = 0;
  717. virtual IConstWUResult * getGlobalByName(const char * name) const = 0;
  718. virtual IConstWUGraphIterator & getGraphs(WUGraphType type) const = 0;
  719. virtual IConstWUGraph * getGraph(const char * name) const = 0;
  720. virtual IConstWUGraphProgress * getGraphProgress(const char * name) const = 0;
  721. virtual IStringVal & getJobName(IStringVal & str) const = 0;
  722. virtual IStringVal & getParentWuid(IStringVal & str) const = 0;
  723. virtual IConstWUPlugin * getPluginByName(const char * name) const = 0;
  724. virtual IConstWUPluginIterator & getPlugins() const = 0;
  725. virtual IConstWULibraryIterator & getLibraries() const = 0;
  726. virtual WUPriorityClass getPriority() const = 0;
  727. virtual int getPriorityLevel() const = 0;
  728. virtual IConstWUQuery * getQuery() const = 0;
  729. virtual bool getRescheduleFlag() const = 0;
  730. virtual IConstWUResult * getResultByName(const char * name) const = 0;
  731. virtual IConstWUResult * getResultBySequence(unsigned seq) const = 0;
  732. virtual unsigned getResultLimit() const = 0;
  733. virtual IConstWUResultIterator & getResults() const = 0;
  734. virtual IConstWUActivityIterator & getActivities() const = 0;
  735. virtual IConstWUActivity * getActivity(__int64 id) const = 0;
  736. virtual IStringVal & getScope(IStringVal & str) const = 0;
  737. virtual IStringVal & getSecurityToken(IStringVal & str) const = 0;
  738. virtual WUState getState() const = 0;
  739. virtual IStringVal & getStateEx(IStringVal & str) const = 0;
  740. virtual __int64 getAgentSession() const = 0;
  741. virtual unsigned getAgentPID() const = 0;
  742. virtual IStringVal & getStateDesc(IStringVal & str) const = 0;
  743. virtual IConstWUResult * getTemporaryByName(const char * name) const = 0;
  744. virtual IConstWUResultIterator & getTemporaries() const = 0;
  745. virtual bool getRunningGraph(IStringVal & graphName, WUGraphIDType & subId) const = 0;
  746. virtual unsigned getTimerCount(const char * timerName) const = 0;
  747. virtual unsigned getTimerDuration(const char * timerName) const = 0;
  748. virtual IStringVal & getTimerDescription(const char * timerName, IStringVal & str) const = 0;
  749. virtual IStringVal & getTimeStamp(const char * name, const char * instance, IStringVal & str) const = 0;
  750. virtual IConstWUWebServicesInfo * getWebServicesInfo() const = 0;
  751. virtual IConstWURoxieQueryInfo * getRoxieQueryInfo() const = 0;
  752. virtual IStringIterator & getTimers() const = 0;
  753. virtual IConstWUTimerIterator & getTimerIterator() const = 0;
  754. virtual IConstWUTimeStampIterator & getTimeStamps() const = 0;
  755. virtual IConstWUStatisticIterator & getStatistics() const = 0;
  756. virtual IConstWUStatistic * getStatistic(const char * name) const = 0;
  757. virtual IStringVal & getUser(IStringVal & str) const = 0;
  758. virtual IStringVal & getWuScope(IStringVal & str) const = 0;
  759. virtual IConstWUResult * getVariableByName(const char * name) const = 0;
  760. virtual IConstWUResultIterator & getVariables() const = 0;
  761. virtual IStringVal & getWuid(IStringVal & str) const = 0;
  762. virtual bool isProtected() const = 0;
  763. virtual bool isPausing() const = 0;
  764. virtual IWorkUnit & lock() = 0;
  765. virtual bool reload() = 0;
  766. virtual void requestAbort() = 0;
  767. virtual void subscribe(WUSubscribeOptions options) = 0;
  768. virtual unsigned queryFileUsage(const char * filename) const = 0;
  769. virtual unsigned getCodeVersion() const = 0;
  770. virtual unsigned getWuidVersion() const = 0;
  771. virtual void getBuildVersion(IStringVal & buildVersion, IStringVal & eclVersion) const = 0;
  772. virtual bool isBilled() const = 0;
  773. virtual bool getWuDate(unsigned & year, unsigned & month, unsigned & day) = 0;
  774. virtual IPropertyTree * getDiskUsageStats() = 0;
  775. virtual IPropertyTreeIterator & getFileIterator() const = 0;
  776. virtual bool getCloneable() const = 0;
  777. virtual IUserDescriptor * queryUserDescriptor() const = 0;
  778. virtual IStringVal & getSnapshot(IStringVal & str) const = 0;
  779. virtual IJlibDateTime & getTimeScheduled(IJlibDateTime & val) const = 0;
  780. virtual IPropertyTreeIterator & getFilesReadIterator() const = 0;
  781. virtual void protect(bool protectMode) = 0;
  782. virtual IStringVal & getAllowedClusters(IStringVal & str) const = 0;
  783. virtual int getPriorityValue() const = 0;
  784. virtual void remoteCheckAccess(IUserDescriptor * user, bool writeaccess) const = 0;
  785. virtual bool getAllowAutoQueueSwitch() const = 0;
  786. virtual IConstWULibrary * getLibraryByName(const char * name) const = 0;
  787. virtual unsigned getGraphCount() const = 0;
  788. virtual unsigned getSourceFileCount() const = 0;
  789. virtual unsigned getResultCount() const = 0;
  790. virtual unsigned getVariableCount() const = 0;
  791. virtual unsigned getTimerCount() const = 0;
  792. virtual unsigned getApplicationValueCount() const = 0;
  793. virtual unsigned getDebugAgentListenerPort() const = 0;
  794. virtual IStringVal & getDebugAgentListenerIP(IStringVal & ip) const = 0;
  795. virtual IStringVal & getXmlParams(IStringVal & params) const = 0;
  796. virtual const IPropertyTree * getXmlParams() const = 0;
  797. virtual unsigned __int64 getHash() const = 0;
  798. virtual IStringIterator *getLogs(const char *type, const char *instance=NULL) const = 0;
  799. virtual IStringIterator *getProcesses(const char *type) const = 0;
  800. virtual IPropertyTreeIterator* getProcesses(const char *type, const char *instance) const = 0;
  801. };
  802. interface IDistributedFile;
  803. interface IWorkUnit : extends IConstWorkUnit
  804. {
  805. virtual void clearExceptions() = 0;
  806. virtual void commit() = 0;
  807. virtual IWUException * createException() = 0;
  808. virtual void setTimeStamp(const char * name, const char * instance, const char * event) = 0;
  809. virtual void addTimeStamp(const char * name, const char * instance, const char * event) = 0;
  810. virtual void addProcess(const char *type, const char *instance, unsigned pid, const char *log=NULL) = 0;
  811. virtual void setAction(WUAction action) = 0;
  812. virtual void setApplicationValue(const char * application, const char * propname, const char * value, bool overwrite) = 0;
  813. virtual void setApplicationValueInt(const char * application, const char * propname, int value, bool overwrite) = 0;
  814. virtual void incEventScheduledCount() = 0;
  815. virtual void setIsQueryService(bool cached) = 0;
  816. virtual void setClusterName(const char * value) = 0;
  817. virtual void setCombineQueries(unsigned combine) = 0;
  818. virtual void setCompareMode(WUCompareMode value) = 0;
  819. virtual void setCustomerId(const char * value) = 0;
  820. virtual void setDebugValue(const char * propname, const char * value, bool overwrite) = 0;
  821. virtual void setDebugValueInt(const char * propname, int value, bool overwrite) = 0;
  822. virtual void setJobName(const char * value) = 0;
  823. virtual void setPriority(WUPriorityClass cls) = 0;
  824. virtual void setPriorityLevel(int level) = 0;
  825. virtual void setRescheduleFlag(bool value) = 0;
  826. virtual void setResultLimit(unsigned value) = 0;
  827. virtual void setSecurityToken(const char * value) = 0;
  828. virtual void setState(WUState state) = 0;
  829. virtual void setStateEx(const char * text) = 0;
  830. virtual void setAgentSession(__int64 sessionId) = 0;
  831. virtual void setTimerInfo(const char * name, unsigned ms, unsigned count, unsigned __int64 max) = 0;
  832. virtual void setStatistic(const char * creator_who, const char * wuScope_where, const char * stat_what, const char * description, StatisticMeasure kind, unsigned __int64 value, unsigned __int64 count, unsigned __int64 maxValue, bool merge) = 0;
  833. virtual void setTracingValue(const char * propname, const char * value) = 0;
  834. virtual void setTracingValueInt(const char * propname, int value) = 0;
  835. virtual void setUser(const char * value) = 0;
  836. virtual void setWuScope(const char * value) = 0;
  837. virtual void setSnapshot(const char * value) = 0;
  838. virtual IWorkflowItemIterator * updateWorkflowItems() = 0;
  839. virtual void syncRuntimeWorkflow(IWorkflowItemArray * array) = 0;
  840. virtual IWorkflowItem * addWorkflowItem(unsigned wfid, WFType type, WFMode mode, unsigned success, unsigned failure, unsigned recovery, unsigned retriesAllowed, unsigned contingencyFor) = 0;
  841. virtual void resetWorkflow() = 0;
  842. virtual void schedule() = 0;
  843. virtual void deschedule() = 0;
  844. virtual unsigned addLocalFileUpload(LocalFileUploadType type, const char * source, const char * destination, const char * eventTag) = 0;
  845. virtual IWUResult * updateGlobalByName(const char * name) = 0;
  846. virtual IWUGraph * updateGraph(const char * name) = 0;
  847. virtual IWUQuery * updateQuery() = 0;
  848. virtual IWUWebServicesInfo * updateWebServicesInfo(bool create) = 0;
  849. virtual IWURoxieQueryInfo * updateRoxieQueryInfo(const char * wuid, const char * roxieClusterName) = 0;
  850. virtual IWUActivity * updateActivity(__int64 id) = 0;
  851. virtual IWUPlugin * updatePluginByName(const char * name) = 0;
  852. virtual IWULibrary * updateLibraryByName(const char * name) = 0;
  853. virtual IWUResult * updateResultByName(const char * name) = 0;
  854. virtual IWUResult * updateResultBySequence(unsigned seq) = 0;
  855. virtual IWUResult * updateTemporaryByName(const char * name) = 0;
  856. virtual IWUResult * updateVariableByName(const char * name) = 0;
  857. virtual void addFile(const char * fileName, StringArray * clusters, unsigned usageCount, WUFileKind fileKind, const char * graphOwner) = 0;
  858. virtual void releaseFile(const char * fileName) = 0;
  859. virtual void setCodeVersion(unsigned version, const char * buildVersion, const char * eclVersion) = 0;
  860. virtual void setBilled(bool value) = 0;
  861. virtual void deleteTempFiles(const char * graph, bool deleteOwned, bool deleteJobOwned) = 0;
  862. virtual void deleteTemporaries() = 0;
  863. virtual void addDiskUsageStats(__int64 avgNodeUsage, unsigned minNode, __int64 minNodeUsage, unsigned maxNode, __int64 maxNodeUsage, __int64 graphId) = 0;
  864. virtual void setCloneable(bool value) = 0;
  865. virtual void setIsClone(bool value) = 0;
  866. virtual void setTimeScheduled(const IJlibDateTime & val) = 0;
  867. virtual void noteFileRead(IDistributedFile * file) = 0;
  868. virtual void clearGraphProgress() = 0;
  869. virtual void resetBeforeGeneration() = 0;
  870. virtual bool switchThorQueue(const char * newcluster, IQueueSwitcher * qs) = 0;
  871. virtual void setAllowedClusters(const char * value) = 0;
  872. virtual void setAllowAutoQueueSwitch(bool val) = 0;
  873. virtual void setLibraryInformation(const char * name, unsigned interfaceHash, unsigned definitionHash) = 0;
  874. virtual void setDebugAgentListenerPort(unsigned port) = 0;
  875. virtual void setDebugAgentListenerIP(const char * ip) = 0;
  876. virtual void setXmlParams(const char *xml) = 0;
  877. virtual void setXmlParams(IPropertyTree *tree) = 0;
  878. virtual void setHash(unsigned __int64 hash) = 0;
  879. virtual void setResultInt(const char * name, unsigned sequence, __int64 val) = 0;
  880. virtual void setResultUInt(const char * name, unsigned sequence, unsigned __int64 val) = 0;
  881. virtual void setResultReal(const char *name, unsigned sequence, double val) = 0;
  882. virtual void setResultVarString(const char * stepname, unsigned sequence, const char *val) = 0;
  883. virtual void setResultVarUnicode(const char * stepname, unsigned sequence, UChar const *val) = 0;
  884. virtual void setResultString(const char * stepname, unsigned sequence, int len, const char *val) = 0;
  885. virtual void setResultData(const char * stepname, unsigned sequence, int len, const void *val) = 0;
  886. // virtual void doSetResultString(type_t type, const char *name, unsigned sequence, int len, const char *val) = 0;
  887. virtual void setResultRaw(const char * name, unsigned sequence, int len, const void *val) = 0;
  888. virtual void setResultSet(const char * name, unsigned sequence, bool isAll, size32_t len, const void *val, ISetToXmlTransformer *) = 0;
  889. virtual void setResultUnicode(const char * name, unsigned sequence, int len, UChar const * val) = 0;
  890. virtual void setResultBool(const char *name, unsigned sequence, bool val) = 0;
  891. virtual void setResultDecimal(const char *name, unsigned sequence, int len, int precision, bool isSigned, const void *val) = 0;
  892. virtual void setResultDataset(const char * name, unsigned sequence, size32_t len, const void *val, unsigned numRows, bool extend) = 0;
  893. };
  894. interface IConstWorkUnitIterator : extends IScmIterator
  895. {
  896. virtual IConstWorkUnit & query() = 0;
  897. };
  898. //! IWUTimers
  899. interface IWUTimers : extends IInterface
  900. {
  901. virtual void setTrigger(const IJlibDateTime & dt) = 0;
  902. virtual IJlibDateTime & getTrigger(IJlibDateTime & dt) const = 0;
  903. virtual void setExpiration(const IJlibDateTime & dt) = 0;
  904. virtual IJlibDateTime & getExpiration(IJlibDateTime & dt) const = 0;
  905. virtual void setSubmission(const IJlibDateTime & dt) = 0;
  906. virtual IJlibDateTime & getSubmission(IJlibDateTime & dt) const = 0;
  907. };
  908. //! IWUFactory
  909. //! Used to instantiate WorkUnit components.
  910. class MemoryBuffer; // should define an SCMinterface for it
  911. interface ILocalWorkUnit : extends IWorkUnit
  912. {
  913. virtual void serialize(MemoryBuffer & tgt) = 0;
  914. virtual void deserialize(MemoryBuffer & src) = 0;
  915. virtual void loadXML(const char * xml) = 0;
  916. virtual IConstWorkUnit * unlock() = 0;
  917. };
  918. enum WUSortField
  919. {
  920. WUSFuser = 1,
  921. WUSFcluster = 2,
  922. WUSFjob = 3,
  923. WUSFstate = 4,
  924. WUSFpriority = 5,
  925. WUSFwuid = 6,
  926. WUSFwuidhigh = 7,
  927. WUSFfileread = 8,
  928. WUSFroxiecluster = 9,
  929. WUSFprotected = 10,
  930. WUSFbatchloginid = 11,
  931. WUSFbatchcustomername = 12,
  932. WUSFbatchpriority = 13,
  933. WUSFbatchinputreccount = 14,
  934. WUSFbatchtimeuploaded = 15,
  935. WUSFbatchtimecompleted = 16,
  936. WUSFbatchmachine = 17,
  937. WUSFbatchinputfile = 18,
  938. WUSFbatchoutputfile = 19,
  939. WUSFtotalthortime = 20,
  940. WUSFwildwuid = 21,
  941. WUSFecl = 22,
  942. WUSFcustom = 23,
  943. WUSFterm = 0,
  944. WUSFreverse = 256,
  945. WUSFnocase = 512,
  946. WUSFnumeric = 1024,
  947. WUSFwild = 2048
  948. };
  949. enum WUQueryFilterBoolean
  950. {
  951. WUQFSNo = 0,
  952. WUQFSYes = 1,
  953. WUQFSAll = 2
  954. };
  955. enum WUQuerySortField
  956. {
  957. WUQSFId = 1,
  958. WUQSFname = 2,
  959. WUQSFwuid = 3,
  960. WUQSFdll = 4,
  961. WUQSFmemoryLimit = 5,
  962. WUQSFmemoryLimitHi = 6,
  963. WUQSFtimeLimit = 7,
  964. WUQSFtimeLimitHi = 8,
  965. WUQSFwarnTimeLimit = 9,
  966. WUQSFwarnTimeLimitHi = 10,
  967. WUQSFpriority = 11,
  968. WUQSFpriorityHi = 12,
  969. WUQSFQuerySet = 13,
  970. WUQSFActivited = 14,
  971. WUQSFSuspendedByUser = 15,
  972. WUQSFterm = 0,
  973. WUQSFreverse = 256,
  974. WUQSFnocase = 512,
  975. WUQSFnumeric = 1024,
  976. WUQSFwild = 2048
  977. };
  978. typedef IIteratorOf<IPropertyTree> IConstQuerySetQueryIterator;
  979. interface IWorkUnitFactory : extends IInterface
  980. {
  981. virtual IWorkUnit * createWorkUnit(const char * parentWuid, const char * app, const char * user) = 0;
  982. virtual bool deleteWorkUnit(const char * wuid) = 0;
  983. virtual IConstWorkUnit * openWorkUnit(const char * wuid, bool lock) = 0;
  984. virtual IConstWorkUnitIterator * getWorkUnitsByOwner(const char * owner) = 0;
  985. virtual IWorkUnit * updateWorkUnit(const char * wuid) = 0;
  986. virtual int setTracingLevel(int newlevel) = 0;
  987. virtual IWorkUnit * createNamedWorkUnit(const char * wuid, const char * parentWuid, const char * app, const char * user) = 0;
  988. virtual IConstWorkUnitIterator * getWorkUnitsByState(WUState state) = 0;
  989. virtual IConstWorkUnitIterator * getWorkUnitsByECL(const char * ecl) = 0;
  990. virtual IConstWorkUnitIterator * getWorkUnitsByCluster(const char * cluster) = 0;
  991. virtual IConstWorkUnitIterator * getWorkUnitsByXPath(const char * xpath) = 0;
  992. virtual IConstWorkUnitIterator * getWorkUnitsSorted(WUSortField * sortorder, WUSortField * filters, const void * filterbuf, unsigned startoffset, unsigned maxnum, const char * queryowner, __int64 * cachehint, unsigned *total) = 0;
  993. virtual unsigned numWorkUnits() = 0;
  994. virtual unsigned numWorkUnitsFiltered(WUSortField * filters, const void * filterbuf) = 0;
  995. virtual void descheduleAllWorkUnits() = 0;
  996. virtual bool deleteWorkUnitEx(const char * wuid) = 0;
  997. virtual IConstQuerySetQueryIterator * getQuerySetQueriesSorted(WUQuerySortField *sortorder, WUQuerySortField *filters, const void *filterbuf, unsigned startoffset, unsigned maxnum, __int64 *cachehint, unsigned *total) = 0;
  998. };
  999. interface IWorkflowScheduleConnection : extends IInterface
  1000. {
  1001. virtual void lock() = 0;
  1002. virtual void unlock() = 0;
  1003. virtual void setActive() = 0;
  1004. virtual void resetActive() = 0;
  1005. virtual bool queryActive() = 0;
  1006. virtual bool pull(IWorkflowItemArray * workflow) = 0;
  1007. virtual void push(const char * name, const char * text) = 0;
  1008. };
  1009. interface IExtendedWUInterface
  1010. {
  1011. virtual unsigned calculateHash(unsigned prevHash) = 0;
  1012. virtual void copyWorkUnit(IConstWorkUnit *cached, bool all) = 0;
  1013. virtual bool archiveWorkUnit(const char *base,bool del,bool ignoredllerrors,bool deleteOwned) = 0;
  1014. virtual void packWorkUnit(bool pack=true) = 0;
  1015. };
  1016. struct WorkunitUpdate : public Owned<IWorkUnit>
  1017. {
  1018. public:
  1019. WorkunitUpdate(IWorkUnit *wu) : Owned<IWorkUnit>(wu) { }
  1020. ~WorkunitUpdate() { if (get()) get()->commit(); }
  1021. };
  1022. class WuStatisticTarget : implements IStatisticTarget
  1023. {
  1024. public:
  1025. WuStatisticTarget(IWorkUnit * _wu, const char * _defaultWho) : wu(_wu), defaultWho(_defaultWho) {}
  1026. virtual void addStatistic(const char * creator_who, const char * wuScope_where, const char * stat_what, const char * description, StatisticMeasure kind, unsigned __int64 value, unsigned __int64 count, unsigned __int64 maxValue, bool merge)
  1027. {
  1028. if (!creator_who) creator_who = defaultWho;
  1029. wu->setStatistic(creator_who, wuScope_where, stat_what, description, kind, value, count, maxValue, merge);
  1030. }
  1031. protected:
  1032. Linked<IWorkUnit> wu;
  1033. const char * defaultWho;
  1034. };
  1035. extern WORKUNIT_API IStringVal &getEclCCServerQueueNames(IStringVal &ret, const char *process);
  1036. extern WORKUNIT_API IStringVal &getEclServerQueueNames(IStringVal &ret, const char *process);
  1037. extern WORKUNIT_API IStringVal &getEclSchedulerQueueNames(IStringVal &ret, const char *process);
  1038. extern WORKUNIT_API IStringVal &getAgentQueueNames(IStringVal &ret, const char *process);
  1039. extern WORKUNIT_API IStringVal &getRoxieQueueNames(IStringVal &ret, const char *process);
  1040. extern WORKUNIT_API IStringVal &getThorQueueNames(IStringVal &ret, const char *process);
  1041. extern WORKUNIT_API StringBuffer &getClusterThorQueueName(StringBuffer &ret, const char *cluster);
  1042. extern WORKUNIT_API StringBuffer &getClusterThorGroupName(StringBuffer &ret, const char *cluster);
  1043. extern WORKUNIT_API StringBuffer &getClusterRoxieQueueName(StringBuffer &ret, const char *cluster);
  1044. extern WORKUNIT_API StringBuffer &getClusterEclCCServerQueueName(StringBuffer &ret, const char *cluster);
  1045. extern WORKUNIT_API StringBuffer &getClusterEclServerQueueName(StringBuffer &ret, const char *cluster);
  1046. extern WORKUNIT_API StringBuffer &getClusterEclAgentQueueName(StringBuffer &ret, const char *cluster);
  1047. extern WORKUNIT_API IStringIterator *getTargetClusters(const char *processType, const char *processName);
  1048. extern WORKUNIT_API bool validateTargetClusterName(const char *clustname);
  1049. extern WORKUNIT_API IConstWUClusterInfo* getTargetClusterInfo(const char *clustname);
  1050. typedef IArrayOf<IConstWUClusterInfo> CConstWUClusterInfoArray;
  1051. extern WORKUNIT_API unsigned getEnvironmentClusterInfo(CConstWUClusterInfoArray &clusters);
  1052. extern WORKUNIT_API unsigned getEnvironmentClusterInfo(IPropertyTree* environmentRoot, CConstWUClusterInfoArray &clusters);
  1053. extern WORKUNIT_API void getRoxieProcessServers(const char *process, SocketEndpointArray &servers);
  1054. extern WORKUNIT_API bool isProcessCluster(const char *remoteDali, const char *process);
  1055. extern WORKUNIT_API bool isProcessCluster(const char *process);
  1056. extern WORKUNIT_API bool getWorkUnitCreateTime(const char *wuid,CDateTime &time); // based on WUID
  1057. extern WORKUNIT_API bool restoreWorkUnit(const char *base,const char *wuid);
  1058. extern WORKUNIT_API void clientShutdownWorkUnit();
  1059. extern WORKUNIT_API IExtendedWUInterface * queryExtendedWU(IWorkUnit * wu);
  1060. extern WORKUNIT_API unsigned getEnvironmentThorClusterNames(StringArray &thorNames, StringArray &groupNames, StringArray &targetNames, StringArray &queueNames);
  1061. extern WORKUNIT_API unsigned getEnvironmentHThorClusterNames(StringArray &eclAgentNames, StringArray &groupNames, StringArray &targetNames);
  1062. extern WORKUNIT_API StringBuffer &formatGraphTimerLabel(StringBuffer &str, const char *graphName, unsigned subGraphNum=0, unsigned __int64 subId=0);
  1063. extern WORKUNIT_API StringBuffer &formatGraphTimerScope(StringBuffer &str, const char *graphName, unsigned subGraphNum, unsigned __int64 subId);
  1064. extern WORKUNIT_API bool parseGraphTimerLabel(const char *label, StringAttr &graphName, unsigned & graphNum, unsigned &subGraphNum, unsigned &subId);
  1065. extern WORKUNIT_API void addExceptionToWorkunit(IWorkUnit * wu, WUExceptionSeverity severity, const char * source, unsigned code, const char * text, const char * filename, unsigned lineno, unsigned column);
  1066. extern WORKUNIT_API IWorkUnitFactory * getWorkUnitFactory();
  1067. extern WORKUNIT_API IWorkUnitFactory * getSecWorkUnitFactory(ISecManager &secmgr, ISecUser &secuser);
  1068. extern WORKUNIT_API IWorkUnitFactory * getWorkUnitFactory(ISecManager *secmgr, ISecUser *secuser);
  1069. extern WORKUNIT_API ILocalWorkUnit* createLocalWorkUnit();
  1070. extern WORKUNIT_API IStringVal& exportWorkUnitToXML(const IConstWorkUnit *wu, IStringVal &str, bool unpack, bool includeProgress);
  1071. extern WORKUNIT_API StringBuffer &exportWorkUnitToXML(const IConstWorkUnit *wu, StringBuffer &str, bool unpack, bool includeProgress);
  1072. extern WORKUNIT_API void exportWorkUnitToXMLFile(const IConstWorkUnit *wu, const char * filename, unsigned extraXmlFlags, bool unpack, bool includeProgress);
  1073. extern WORKUNIT_API void submitWorkUnit(const char *wuid, const char *username, const char *password);
  1074. extern WORKUNIT_API void abortWorkUnit(const char *wuid);
  1075. extern WORKUNIT_API void submitWorkUnit(const char *wuid, ISecManager *secmgr, ISecUser *secuser);
  1076. extern WORKUNIT_API void abortWorkUnit(const char *wuid, ISecManager *secmgr, ISecUser *secuser);
  1077. extern WORKUNIT_API void secSubmitWorkUnit(const char *wuid, ISecManager &secmgr, ISecUser &secuser);
  1078. extern WORKUNIT_API void secAbortWorkUnit(const char *wuid, ISecManager &secmgr, ISecUser &secuser);
  1079. extern WORKUNIT_API IWUResult * updateWorkUnitResult(IWorkUnit * w, const char *name, unsigned sequence);
  1080. extern WORKUNIT_API IConstWUResult * getWorkUnitResult(IConstWorkUnit * w, const char *name, unsigned sequence);
  1081. //returns a state code. WUStateUnknown == timeout
  1082. extern WORKUNIT_API WUState waitForWorkUnitToComplete(const char * wuid, int timeout = -1, bool returnOnWaitState = false);
  1083. extern WORKUNIT_API bool waitForWorkUnitToCompile(const char * wuid, int timeout = -1);
  1084. extern WORKUNIT_API WUState secWaitForWorkUnitToComplete(const char * wuid, ISecManager &secmgr, ISecUser &secuser, int timeout = -1, bool returnOnWaitState = false);
  1085. extern WORKUNIT_API bool secWaitForWorkUnitToCompile(const char * wuid, ISecManager &secmgr, ISecUser &secuser, int timeout = -1);
  1086. extern WORKUNIT_API bool secDebugWorkunit(const char * wuid, ISecManager &secmgr, ISecUser &secuser, const char *command, StringBuffer &response);
  1087. extern WORKUNIT_API IStringVal& createToken(const char *wuid, const char *user, const char *password, IStringVal &str);
  1088. // This latter is temporary - tokens will be replaced by something more secure
  1089. extern WORKUNIT_API void extractToken(const char *token, const char *wuid, IStringVal &user, IStringVal &password);
  1090. extern WORKUNIT_API WUState getWorkUnitState(const char* state);
  1091. extern WORKUNIT_API IWorkflowScheduleConnection * getWorkflowScheduleConnection(char const * wuid);
  1092. extern WORKUNIT_API const char *skipLeadingXml(const char *text);
  1093. extern WORKUNIT_API bool isArchiveQuery(const char * text);
  1094. extern WORKUNIT_API bool isQueryManifest(const char * text);
  1095. extern WORKUNIT_API IPropertyTree * resolveDefinitionInArchive(IPropertyTree * archive, const char * path);
  1096. inline bool isLibrary(IConstWorkUnit * wu) { return wu->getApplicationValueInt("LibraryModule", "interfaceHash", 0) != 0; }
  1097. extern WORKUNIT_API bool looksLikeAWuid(const char * wuid);
  1098. enum WUQueryActivationOptions
  1099. {
  1100. DO_NOT_ACTIVATE = 0,
  1101. MAKE_ACTIVATE= 1,
  1102. ACTIVATE_SUSPEND_PREVIOUS = 2,
  1103. ACTIVATE_DELETE_PREVIOUS = 3,
  1104. DO_NOT_ACTIVATE_LOAD_DATA_ONLY = 4,
  1105. MAKE_ACTIVATE_LOAD_DATA_ONLY = 5
  1106. };
  1107. extern WORKUNIT_API int calcPriorityValue(const IPropertyTree * p); // Calls to this should really go through the workunit interface.
  1108. extern WORKUNIT_API IPropertyTree * addNamedQuery(IPropertyTree * queryRegistry, const char * name, const char * wuid, const char * dll, bool library, const char *userid, const char *snapshot); // result not linked
  1109. extern WORKUNIT_API void removeNamedQuery(IPropertyTree * queryRegistry, const char * id);
  1110. extern WORKUNIT_API void removeWuidFromNamedQueries(IPropertyTree * queryRegistry, const char * wuid);
  1111. extern WORKUNIT_API void removeDllFromNamedQueries(IPropertyTree * queryRegistry, const char * dll);
  1112. extern WORKUNIT_API void removeAliasesFromNamedQuery(IPropertyTree * queryRegistry, const char * id);
  1113. extern WORKUNIT_API void setQueryAlias(IPropertyTree * queryRegistry, const char * name, const char * value);
  1114. extern WORKUNIT_API IPropertyTree * getQueryById(IPropertyTree * queryRegistry, const char *queryid);
  1115. extern WORKUNIT_API IPropertyTree * getQueryById(const char *queryset, const char *queryid, bool readonly);
  1116. extern WORKUNIT_API IPropertyTree * resolveQueryAlias(IPropertyTree * queryRegistry, const char * alias);
  1117. extern WORKUNIT_API IPropertyTree * resolveQueryAlias(const char *queryset, const char *alias, bool readonly);
  1118. extern WORKUNIT_API IPropertyTree * getQueryRegistry(const char * wsEclId, bool readonly);
  1119. extern WORKUNIT_API IPropertyTree * getQueryRegistryRoot();
  1120. extern WORKUNIT_API void setQueryCommentForNamedQuery(IPropertyTree * queryRegistry, const char *id, const char *queryComment);
  1121. extern WORKUNIT_API void setQuerySuspendedState(IPropertyTree * queryRegistry, const char * name, bool suspend, const char *userid);
  1122. extern WORKUNIT_API IPropertyTree * addNamedPackageSet(IPropertyTree * packageRegistry, const char * name, IPropertyTree *packageInfo, bool overWrite); // result not linked
  1123. extern WORKUNIT_API void removeNamedPackage(IPropertyTree * packageRegistry, const char * id);
  1124. extern WORKUNIT_API IPropertyTree * getPackageSetRegistry(const char * wsEclId, bool readonly);
  1125. extern WORKUNIT_API void addQueryToQuerySet(IWorkUnit *workunit, const char *querySetName, const char *queryName, IPropertyTree *packageInfo, WUQueryActivationOptions activateOption, StringBuffer &newQueryId, const char *userid);
  1126. extern WORKUNIT_API bool removeQuerySetAlias(const char *querySetName, const char *alias);
  1127. extern WORKUNIT_API void addQuerySetAlias(const char *querySetName, const char *alias, const char *id);
  1128. extern WORKUNIT_API void setSuspendQuerySetQuery(const char *querySetName, const char *id, bool suspend, const char *userid);
  1129. extern WORKUNIT_API void deleteQuerySetQuery(const char *querySetName, const char *id);
  1130. extern WORKUNIT_API const char *queryIdFromQuerySetWuid(const char *querySetName, const char *wuid, IStringVal &id);
  1131. extern WORKUNIT_API void removeQuerySetAliasesFromNamedQuery(const char *querySetName, const char * id);
  1132. extern WORKUNIT_API void setQueryCommentForNamedQuery(const char *querySetName, const char *id, const char *comment);
  1133. extern WORKUNIT_API void gatherLibraryNames(StringArray &names, StringArray &unresolved, IWorkUnitFactory &workunitFactory, IConstWorkUnit &cw, IPropertyTree *queryset);
  1134. extern WORKUNIT_API void associateLocalFile(IWUQuery * query, WUFileType type, const char * name, const char * description, unsigned crc);
  1135. interface ITimeReporter;
  1136. extern WORKUNIT_API void updateWorkunitTimeStat(IWorkUnit * wu, const char * component, const char * wuScope, const char * stat, const char * description, unsigned __int64 value, unsigned __int64 count, unsigned __int64 maxValue);
  1137. extern WORKUNIT_API void updateWorkunitTiming(IWorkUnit * wu, const char * component, const char * mangledScope, const char * description, unsigned __int64 value, unsigned __int64 count, unsigned __int64 maxValue);
  1138. extern WORKUNIT_API void updateWorkunitTimings(IWorkUnit * wu, ITimeReporter *timer, const char * component);
  1139. extern WORKUNIT_API const char *getTargetClusterComponentName(const char *clustname, const char *processType, StringBuffer &name);
  1140. extern WORKUNIT_API void descheduleWorkunit(char const * wuid);
  1141. #if 0
  1142. void WORKUNIT_API testWorkflow();
  1143. #endif
  1144. extern WORKUNIT_API const char * getWorkunitStateStr(WUState state);
  1145. #endif