hce-node application  1.4.3
HCE Hierarchical Cluster Engine node application
 All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Friends Macros
DRCETaskRequestCheckStateExecutor.cpp
Go to the documentation of this file.
1 #include <Poco/Logger.h>
2 #include <Poco/File.h>
3 
4 #include "DRCEFileExtractor.hpp"
5 #include "DRCEFileStream.hpp"
6 #include "DRCEMessageConst.hpp"
7 #include "DRCEError.hpp"
8 
11 #include "DRCEResourceMonitor.hpp"
12 
13 namespace HCE
14 {
15 namespace drce
16 {
17 //-----------------------------------------------------------------------------
19  DRCENodeOptions& nodeOptions_, CustomMessage& message_, DRCEResourceMonitor& resourceMonitor_)
20 : inherited(asyncTaskQueue_, nodeOptions_, message_, resourceMonitor_)
21 {
22 }
23 //-----------------------------------------------------------------------------
25 {
26  DRCEResultDataItem resultDataItem = getResultDataItem(*pTaskRequest, DRCETaskRequest::TaskState::UNDEFINED);
27 
28  try
29  {
30  DRCETaskRequestCheckState* pTaskRequestCheckState = dynamic_cast<DRCETaskRequestCheckState*>(pTaskRequest);
31  if (!pTaskRequestCheckState)
33 
34  if (pTaskRequestCheckState->getCheckType()!=DRCETaskRequestCheckState::CheckType::ctSimple &&
35  pTaskRequestCheckState->getCheckType()!=DRCETaskRequestCheckState::CheckType::ctExtended)
36  throw Poco::Exception(message(message_const::WRONG_CHECK_TYPE, static_cast<unsigned int>(pTaskRequestCheckState->getCheckType())), ERROR_BAD_COMMAND_PARAMS);
37 
38  std::string fileName;
39  if (pTaskRequestCheckState->getCheckType()==DRCETaskRequestCheckState::CheckType::ctExtended)
40  {
41  // data file name
42  fileName = FileStream::getDataFileName(nodeOptions.getTasksDataDir(), pTaskRequestCheckState->getTaskId());
43  }
44  else
45  {
46  // status file name
47  fileName = FileStream::getStatusFileName(nodeOptions.getTasksStatusDir(), pTaskRequestCheckState->getTaskId());
48  }
49 
50  Poco::File fileSource(fileName);
51  if (!fileSource.exists())
52  {
53  resultDataItem.setState(static_cast<unsigned int>(DRCETaskRequest::TaskState::NOT_FOUND));
55  }
56 
57  resultDataItem.setState(static_cast<unsigned int>(DRCETaskRequest::TaskState::BUSY));
58 
59  if (asyncTaskQueue.isLockedAsyncTask(resultDataItem.getRequestId()))
60  {
61  Poco::Thread::sleep(500);
62  if (asyncTaskQueue.isLockedAsyncTask(resultDataItem.getRequestId()))
63  {
65  }
66  }
67 
68  AsyncTaskLocker lock(asyncTaskQueue, resultDataItem.getRequestId());
69  DataFileExtractor dataFileExtractor(message);
71  {
72  try
73  {
74  resultDataItem = dataFileExtractor.extract(fileName);
75  break;
76  }
77  catch(Poco::Exception& e)
78  {
79  Poco::Logger::root().log(Poco::Message(drce_const::moduleName,
80  "DRCETaskRequestCheckStateExecutor extract '"+fileName+"' return "+e.message(),
81  Poco::Message::Priority::PRIO_DEBUG));
82  if (e.code() != ERROR_UNSERIALIZE)
83  throw;
84  else
85  Poco::Thread::sleep(200);
86  }
87  }
89  }
90  catch(Poco::Exception& e)
91  {
92  resultDataItem.setErrorCode(e.code());
93  resultDataItem.setErrorMessage(e.message());
94  }
95  catch(std::exception& e)
96  {
97  resultDataItem.setErrorCode(ERROR_EXECUTE_TASK);
98  resultDataItem.setErrorMessage(e.what());
99  }
100  return resultDataItem;
101 }
102 //-----------------------------------------------------------------------------
103 //-----------------------------------------------------------------------------
104 } // end namespace drce
105 } // end namespace HCE