FSEvMgrThrd Class Reference
[File System Event Manager]

#include <ivd-fsevent.h>

Inheritance diagram for FSEvMgrThrd:

Inheritance graph
[legend]
Collaboration diagram for FSEvMgrThrd:

Collaboration graph
[legend]

List of all members.


Detailed Description

FS Evenet Manager Thread.

Author:
Andrej Jamsek, HERMES SoftLab

Definition at line 96 of file hpux/ivd-fsevent.h.


Public Member Functions

 FSEvMgrThrd (int a_fd)
 Release list thread constructor.
 ~FSEvMgrThrd ()
 Release list thread destructor.
void SendReply (UInt16_t a_status, hsm_req_t *a_req)
virtual void Run (void *arg)
 Release list thread run method.
 FSEvMgrThrd (int a_fd)
 ~FSEvMgrThrd ()
void SendReply (UInt16_t a_status, ivd_req_t *a_req)
virtual void Run (void *arg)

Public Attributes

 log_CLASSID_m

Private Attributes

int m_fd
i_Service_var m_iService

Constructor & Destructor Documentation

FSEvMgrThrd::FSEvMgrThrd ( int  a_fd  ) 

Release list thread constructor.

Definition at line 144 of file hpux/ivd-fsevent.cpp.

References log_FUNC_m.

00144                                 : 
00145         m_fd(a_fd){
00146 
00147     log_FUNC_m(FSEvMgrThrd);
00148 }

FSEvMgrThrd::~FSEvMgrThrd (  ) 

Release list thread destructor.

Definition at line 153 of file hpux/ivd-fsevent.cpp.

References log_FUNC_m.

00153                          {
00154     log_FUNC_m(~FSEvMgrThrd);
00155 }

FSEvMgrThrd::FSEvMgrThrd ( int  a_fd  ) 

FSEvMgrThrd::~FSEvMgrThrd (  ) 


Member Function Documentation

void FSEvMgrThrd::SendReply ( UInt16_t  a_status,
hsm_req_t a_req 
)

Definition at line 275 of file hpux/ivd-fsevent.cpp.

References dbg_NORM, errno, g_fd, hsm_req_t::hdr, log_DBG_m, log_ERR_m, log_FUNC_m, hsm_req_hdr_t::reqid, size, and hsm_req_hdr_t::status.

Referenced by Run(), and SendReply().

00275                                                               {
00276 
00277     log_FUNC_m(SendReply);
00278 
00279     int size = sizeof(hsm_req_t);
00280 
00281     log_DBG_m(dbg_NORM, "regid: " << a_req->hdr.reqid
00282         << " a_status: " << a_req->hdr.reqid, a_status);
00283 
00284     a_req->hdr.status = a_status;
00285 
00286     int ret = write(g_fd, a_req, size);
00287     if (ret < 0 || ret < size) {
00288         log_ERR_m("Sending Reply failed. Errno: " << errno);
00289 
00290         //throw ivd_Error(ie_ERRORWRITE, strerror(errno));
00291         //pgtoni:
00292         //This throw is not cached in Run, will change it to log_ERR_m
00293         log_ERR_m(strerror(errno));
00294     }
00295 }

Here is the caller graph for this function:

void FSEvMgrThrd::Run ( void *  arg  )  [virtual]

Release list thread run method.

Reimplemented from cmn_Thread.

Definition at line 160 of file hpux/ivd-fsevent.cpp.

References PreMountsMgr::Add(), hsm_req_t::cancel, cmn_Num2Str(), hsm_req_log_error_t::code, hsm_req_pre_mount_t::comm_minor, dbg_LOW, PreMountsMgr::Del(), hsm_req_log_error_t::dev_major, hsm_req_pre_mount_t::dev_major, hsm_req_log_error_t::dev_minor, hsm_req_pre_mount_t::dev_minor, hsm_req_t::error, evt_ERROR, evt_WARNING, g_cmn, g_runHSM, ivd_BaseException::GetDescription(), ivd_BaseException::GetError(), ivd_BaseException::GetFriendly(), hsm_req_t::hdr, HSM_DEVNAME, HSM_ERR_BOTTOM_MOUNT_d, HSM_ERR_HSM_CLOSED_d, HSM_ERR_REPLY_d, HSM_EVT_CANCEL_REQ, HSM_EVT_LOG_ERROR, HSM_EVT_PRE_MOUNT, HSM_WRN_HSM_BUSY_d, i_IVDHSM, ipc_EXEC_m, log_DBG_m, log_ERR_m, log_FUNC_m, log_WriteEvent(), m_fd, cmn_SysInfo::m_hostName, ivd_Product::m_nameShortLC, MAX_EVT_BUFSIZE, hsm_req_t::pre_mount, cmn_Global::prod, hsm_req_cancel_req_t::reqid, ipc_Corba::ResolveSvc(), SendReply(), cmn_Global::si, size, and hsm_req_hdr_t::type.

00160                               {
00161 
00162     log_FUNC_m(Run);
00163 
00164     int             size;
00165     char            buf[MAX_EVT_BUFSIZE];
00166     hsm_req_t       *req;
00167 
00168     while ((size = read(m_fd, buf, MAX_EVT_BUFSIZE)) > 0) {
00169         req = (hsm_req_t *) buf;
00170         if (req->hdr.type == HSM_EVT_PRE_MOUNT) {
00171 
00172             string callDev = 
00173                 string("/dev/" HSM_DEVNAME "/") + 
00174                 cmn_Num2Str(req->pre_mount.comm_minor);
00175 
00176             string fileUUID =
00177                 cmn_Num2Str(req->pre_mount.dev_major) +
00178                 string(":") +
00179                 cmn_Num2Str(req->pre_mount.dev_minor);
00180 
00181             log_WriteEvent("Mount request (comm device: " + callDev + ").", 
00182                            "", 0, fileUUID);
00183 
00184             try {
00185                 g_premountMgr.Add(fileUUID, req->hdr);
00186 
00187                 if (g_runHSM) {
00188                     i_StringList_t seqArgum;
00189                     seqArgum.length(2);
00190                     seqArgum[0] = CORBA::string_dup(callDev.c_str());
00191                     seqArgum[1] = CORBA::string_dup(fileUUID.c_str());
00192 
00193                     log_DBG_m(dbg_LOW, "Starting ivd-hsm on " << callDev
00194                         << " for " << fileUUID << "." );
00195 
00196                     ipc_EXEC_m(
00197                         CORBA::Object_var obj =
00198                             ipc_Corba::ResolveSvc(g_cmn.si.m_hostName);
00199                         i_Service_var iService = i_Service::_narrow(obj);
00200 
00201                         iService->Execute(i_IVDHSM, seqArgum);
00202                     );
00203                     log_DBG_m(dbg_LOW, "Execute succeeded.");
00204                 }
00205                 else {
00206                     log_DBG_m(dbg_LOW,
00207                         "HSM not started - start manually: " << endl << 
00208                         "ivd-hsm " << callDev << " " << fileUUID);
00209                 }
00210             }
00211             catch (ivd_Exception &ie) {
00212                 log_ERR_m("Caught ERROR "
00213                     << ie.GetError() << " " << ie.GetDescription());
00214                 ostringstream sstr;
00215                 sstr << "Starting HSM failed (" << ie.GetFriendly() << ").";
00216                 log_WriteEvent(evt_ERROR, sstr.str(), "", 0, fileUUID);
00217                 SendReply(ie.GetError(), req);
00218             }
00219             catch (std::exception &se) {
00220                 log_ERR_m("Caught std::exception ERROR " << se.what());
00221                 ostringstream sstr;
00222                 sstr << "Starting HSM failed (" << se.what() << ").";
00223                 log_WriteEvent(evt_ERROR, sstr.str(), "", 0, fileUUID);
00224                 SendReply(HSM_ERR_REPLY_d, req);
00225             }
00226             catch (...) {
00227                 log_ERR_m("Caught unknown exception");
00228                 ostringstream sstr;
00229                 sstr << "Starting HSM failed (unknown exception).";
00230                 log_WriteEvent(evt_ERROR, sstr.str(), "", 0, fileUUID);
00231                 SendReply(HSM_ERR_REPLY_d, req);
00232             }
00233 
00234         } else if (req->hdr.type == HSM_EVT_CANCEL_REQ) {
00235             g_premountMgr.Del(req->cancel.reqid);
00236         } else if (req->hdr.type == HSM_EVT_LOG_ERROR) {
00237             string fileUUID =
00238                 cmn_Num2Str(req->error.dev_major) +
00239                 string(":") +
00240                 cmn_Num2Str(req->error.dev_minor);
00241 
00242             switch (req->error.code) {
00243             case HSM_ERR_HSM_CLOSED_d:
00244                 log_WriteEvent(evt_ERROR,
00245                                "Premature HSM exit. Unmount and run "
00246                                + g_cmn.prod.m_nameShortLC + "check!",
00247                                "", 0, fileUUID);
00248                 break;
00249             case HSM_ERR_BOTTOM_MOUNT_d:
00250                 log_WriteEvent(evt_ERROR,
00251                     "Failed to mount bottom file system. See dmesg for details.",
00252                     "", 0, fileUUID);
00253                 break;
00254             case HSM_WRN_HSM_BUSY_d:
00255                 log_WriteEvent(evt_WARNING,
00256                     "Read of event messages were stopped or slowed down by HSM. See dmesg for details.",
00257                     "", 0, fileUUID);
00258                 break;
00259             default :
00260                 ostringstream sstr;
00261                 sstr << "Got unknown error code from HSMFS: " 
00262                      << req->error.code;
00263                 log_WriteEvent(evt_ERROR, sstr.str(), "", 0, fileUUID);
00264                 log_ERR_m("Got unknown error code from HSMFS:"
00265                     << req->error.code << " for " << fileUUID);
00266             }
00267         }
00268         else {
00269             log_ERR_m("FSeventMgr caught " << req->hdr.type << " event");
00270         }
00271     }
00272 }

Here is the call graph for this function:

void FSEvMgrThrd::SendReply ( UInt16_t  a_status,
ivd_req_t a_req 
)

Definition at line 274 of file linux/ivd-fsevent.cpp.

References ivd_req_hdr_t::code, dbg_NORM, errno, g_fd, ivd_req_t::hdr, log_DBG_m, log_ERR_m, log_FUNC_m, ivd_req_hdr_t::reqid, and SendReply().

00274                                                               {
00275 
00276     log_FUNC_m(SendReply);
00277 
00278     int size = sizeof(ivd_req_t);
00279 
00280     log_DBG_m(dbg_NORM, "regid: " << a_req->hdr.reqid
00281         << " a_status: " << a_status);
00282 
00283     a_req->hdr.code = a_status;
00284 
00285     int ret = write(g_fd, a_req, size);
00286     if (ret < 0 || ret < size) {
00287         log_ERR_m("Sending Reply failed. Errno: " << errno);
00288 
00289         //throw ivd_Error(ie_ERRORWRITE, strerror(errno));
00290         //pgtoni:
00291         //This throw is not cached in Run, will change it to log_ERR_m
00292         log_ERR_m(strerror(errno));
00293     }
00294 }

Here is the call graph for this function:

virtual void FSEvMgrThrd::Run ( void *  arg  )  [virtual]

Reimplemented from cmn_Thread.


Member Data Documentation

int FSEvMgrThrd::m_fd [private]

Definition at line 99 of file hpux/ivd-fsevent.h.

Referenced by Run().

i_Service_var FSEvMgrThrd::m_iService [private]

Definition at line 100 of file hpux/ivd-fsevent.h.

Reimplemented from cmn_Thread.

Definition at line 104 of file hpux/ivd-fsevent.h.


The documentation for this class was generated from the following files:

Generated on Mon Feb 27 19:25:14 2012 for OPENARCHIVE by  doxygen 1.5.6