Commit a304e76d authored by Pavel Vainerman's avatar Pavel Vainerman

(codegen): Сделал activate-timeout по умолчанию 30 сек (было 10),

а также 90 сек для SM, добавил вывод информации о текущем состоянии инициализации процесса (PassiveTimer): исправление ошибки 'sock_set_timeout: xxxxxxx tries to set negative timeout (LogServer): попытка решить проблемму бесконечного ожидания на mutex-е
parent 85b0ca16
......@@ -416,6 +416,8 @@
std::unordered_map<const uniset::ObjectId,size_t, StatHashFn> smStat; /*!< количество сообщений по датчикам */
size_t processingMessageCatchCount = { 0 }; /*!< количество исключений пойманных в processingMessage */
std::string ostate = { "" }; /*!< состояние процесса (выводится в getInfo()) */
</xsl:if>
</xsl:template>
......@@ -476,22 +478,42 @@ void <xsl:value-of select="$CLASSNAME"/>_SK::preSysCommand( const SystemMessage*
}
case SystemMessage::StartUp:
{
ostate = "StartUp...";
try
{
if( !logserv_host.empty() &amp;&amp; logserv_port != 0 &amp;&amp; !logserv-&gt;isRunning() )
{
ostate = "StartUp: run log server...";
myinfo &lt;&lt; myname &lt;&lt; "(preSysCommand): run log server " &lt;&lt; logserv_host &lt;&lt; ":" &lt;&lt; logserv_port &lt;&lt; endl;
logserv-&gt;run(logserv_host, logserv_port, true);
}
}
catch( std::exception&amp; ex )
{
mywarn &lt;&lt; myname &lt;&lt; "(preSysCommand): CAN`t run log server err: " &lt;&lt; ex.what() &lt;&lt; endl;
}
catch( ... )
{
mywarn &lt;&lt; myname &lt;&lt; "(preSysCommand): CAN`t run log server err: catch ..." &lt;&lt; endl;
}
ostate = "StartUp: wait sm ready..";
waitSM(smReadyTimeout);
ptStartUpTimeout.reset();
// т.к. для io-переменных важно соблюдать последовательность!
// сперва обновить входы..
ostate = "StartUp: update values..";
updateValues();
ostate = "StartUp: init from SM..";
initFromSM(); // потом обновить значения переменных, помеченных как инициализируемые из SM
ostate = "StartUp: update outputs..";
updateOutputs(true); // а потом уже выходы (принудительное обновление)
ostate = "StartUp: pre ask sensors..";
preAskSensors(UniversalIO::UIONotify);
ostate = "StartUp: ask sensors..";
askSensors(UniversalIO::UIONotify);
active = true;
ostate = "StartUp: [OK]";
break;
}
......@@ -514,9 +536,20 @@ void <xsl:value-of select="$CLASSNAME"/>_SK::preSysCommand( const SystemMessage*
if( logserv &amp;&amp; !logserv_host.empty() &amp;&amp; logserv_port != 0 )
{
try
{
mylogany &lt;&lt; myname &lt;&lt; "(preSysCommand): try restart logserver.." &lt;&lt; endl;
logserv-&gt;check(true);
}
catch( std::exception&amp; ex )
{
mywarn &lt;&lt; myname &lt;&lt; "(preSysCommand): CAN`t restart log server err: " &lt;&lt; ex.what() &lt;&lt; endl;
}
catch( ... )
{
mywarn &lt;&lt; myname &lt;&lt; "(preSysCommand): CAN`t restart log server err: catch ..." &lt;&lt; endl;
}
}
}
break;
......@@ -536,6 +569,8 @@ uniset::SimpleInfo* <xsl:value-of select="$CLASSNAME"/>_SK::getInfo( CORBA::Long
ostringstream inf;
inf &lt;&lt; i->info &lt;&lt; endl;
inf &lt;&lt; "initialization: " &lt;&lt; ostate &lt;&lt; endl;
if( logserv /* &amp;&amp; userparam &lt; 0 */ )
{
inf &lt;&lt; "LogServer: " &lt;&lt; logserv_host &lt;&lt; ":" &lt;&lt; logserv_port
......@@ -800,10 +835,7 @@ void <xsl:value-of select="$CLASSNAME"/>_SK::waitSM( int wait_msec, ObjectId _te
&lt;&lt; wait_msec &lt;&lt; " мсек";
mycrit &lt;&lt; err.str() &lt;&lt; endl;
// terminate();
// abort();
// raise(SIGTERM);
std::terminate();
std::abort();
// throw uniset::SystemError(err.str());
}
......@@ -815,10 +847,7 @@ void <xsl:value-of select="$CLASSNAME"/>_SK::waitSM( int wait_msec, ObjectId _te
&lt;&lt; wait_msec &lt;&lt; " мсек";
mycrit &lt;&lt; err.str() &lt;&lt; endl;
// terminate();
// abort();
//raise(SIGTERM);
std::terminate();
std::abort();
// throw uniset::SystemError(err.str());
}
}
......@@ -1229,9 +1258,9 @@ end_private(false)
if( smTestID == DefaultObjectId )
smTestID = getSMTestID();
activateTimeout = conf->getArgPInt("--" + argprefix + "activate-timeout", 20000);
activateTimeout = conf->getArgPInt("--" + argprefix + "activate-timeout", 40000);
int msec = conf->getArgPInt("--" + argprefix + "startup-timeout", 10000);
int msec = conf->getArgPInt("--" + argprefix + "startup-timeout", 30000);
ptStartUpTimeout.setTiming(msec);
// ===================== &lt;variables&gt; =====================
......@@ -1695,10 +1724,11 @@ askPause(uniset_conf()->getPIntProp(cnode,"askPause",2000))
vmonit(smTestID);
vmonit(smReadyTimeout);
vmonit(activateTimeout);
activateTimeout = conf->getArgPInt("--" + argprefix + "activate-timeout", 20000);
activateTimeout = conf->getArgPInt("--" + argprefix + "activate-timeout", 40000);
int msec = conf->getArgPInt("--" + argprefix + "startup-timeout", 10000);
int msec = conf->getArgPInt("--" + argprefix + "startup-timeout", 30000);
ptStartUpTimeout.setTiming(msec);
}
......
......@@ -511,6 +511,24 @@ mv -f %buildroot%python_sitelibdir_noarch/* %buildroot%python_sitelibdir/%oname
* Mon Nov 21 2016 Pavel Vainerman <pv@altlinux.ru> 2.6-alt2
- UNet: fixed bug in change receive channel
* Sat Nov 19 2016 Pavel Vainerman <pv@altlinux.ru> 2.6-alt1.5
- LogServer: attempt to fixed bug in run fuction (infinity lock)
* Sat Nov 19 2016 Pavel Vainerman <pv@altlinux.ru> 2.6-alt1.4
- LogServer: attempt to fixed bug in run fuction (infinity lock)
* Sat Nov 19 2016 Pavel Vainerman <pv@altlinux.ru> 2.6-alt1.3
- (codegen): add process state info for getInfo()
* Fri Nov 18 2016 Pavel Vainerman <pv@altlinux.ru> 2.6-alt1.2
- set default activate-timeout 30 sec
- show pid() in getInfo()
- minor fixes
* Fri Nov 18 2016 Pavel Vainerman <pv@altlinux.ru> 2.6-alt1.1
- add try/catch for run log server
>>>>>>> (codegen): Сделал activate-timeout по умолчанию 30 сек (было 10),
* Fri Nov 11 2016 Pavel Vainerman <pv@altlinux.ru> 2.6-alt1
- build new version
- remove 'fastSaveValue'
......
......@@ -44,10 +44,11 @@ void SharedMemory::help_print( int argc, const char* const* argv )
cout << "--heartbeat-check-time - период проверки 'счётчиков'. По умолчанию 1000 мсек" << endl;
cout << "--e-filter - фильтр для считывания <eventlist>" << endl;
cout << "--e-startup-pause - пауза перед посылкой уведомления о старте SM. (По умолчанию: 1500 мсек)." << endl;
cout << "--activate-timeout - время ожидания активизации (По умолчанию: 15000 мсек)." << endl;
cout << "--activate-timeout - время ожидания активизации (По умолчанию: 60000 мсек)." << endl;
cout << "--sm-no-history - отключить ведение истории (аварийного следа)" << endl;
cout << "--pulsar-id - датчик 'мигания'" << endl;
cout << "--pulsar-msec - период 'мигания'. По умолчанию: 5000." << endl;
cout << "--db-logging [1,0] - включение или отключение логирования датчиков в БД (должен быть запущен DBServer)" << endl;
cout << endl;
cout << " Logs: " << endl;
cout << "--sm-log-... - log control" << endl;
......@@ -157,7 +158,7 @@ SharedMemory::SharedMemory( ObjectId id, const std::string& datafile, const std:
evntPause = conf->getArgPInt("--e-startup-pause", 5000);
activateTimeout = conf->getArgPInt("--activate-timeout", 60000);
activateTimeout = conf->getArgPInt("--activate-timeout", 90000);
sidPulsar = DefaultObjectId;
string p = conf->getArgParam("--pulsar-id", it.getProp("pulsar_id"));
......
......@@ -8,7 +8,7 @@
ВСЕ ВАШИ ИЗМЕНЕНИЯ БУДУТ ПОТЕРЯНЫ.
*/
// --------------------------------------------------------------------------
// generate timestamp: 2016-11-11+03:00
// generate timestamp: 2016-11-19+03:00
// -----------------------------------------------------------------------------
#ifndef UObject_SK_H_
#define UObject_SK_H_
......@@ -120,6 +120,7 @@ class UObject_SK:
// ------------------------------------------------------------
std::string help() noexcept;
#ifndef DISABLE_REST_API
// HTTP API
virtual nlohmann::json httpGet( const Poco::URI::QueryParameters& p ) override;
......@@ -158,6 +159,7 @@ class UObject_SK:
virtual void sigterm( int signo ) override;
virtual bool activateObject() override;
virtual std::string getMonitInfo(){ return ""; } /*!< пользовательская информация выводимая в getInfo() */
#ifndef DISABLE_REST_API
virtual void httpGetUserData( nlohmann::json& jdata ){} /*!< для пользовательских данных в httpGet() */
virtual nlohmann::json httpDumpIO();
......@@ -250,6 +252,8 @@ class UObject_SK:
std::unordered_map<const uniset::ObjectId,size_t, StatHashFn> smStat; /*!< количество сообщений по датчикам */
size_t processingMessageCatchCount = { 0 }; /*!< количество исключений пойманных в processingMessage */
std::string ostate = { "" }; /*!< состояние процесса (выводится в getInfo()) */
bool end_private; // вспомогательное поле (для внутреннего использования при генерировании кода)
};
......
......@@ -11,7 +11,7 @@
ВСЕ ВАШИ ИЗМЕНЕНИЯ БУДУТ ПОТЕРЯНЫ.
*/
// --------------------------------------------------------------------------
// generate timestamp: 2016-11-11+03:00
// generate timestamp: 2016-11-19+03:00
// -----------------------------------------------------------------------------
#include <memory>
#include <iomanip>
......@@ -196,9 +196,9 @@ end_private(false)
if( smTestID == DefaultObjectId )
smTestID = getSMTestID();
activateTimeout = conf->getArgPInt("--" + argprefix + "activate-timeout", 20000);
activateTimeout = conf->getArgPInt("--" + argprefix + "activate-timeout", 40000);
int msec = conf->getArgPInt("--" + argprefix + "startup-timeout", 10000);
int msec = conf->getArgPInt("--" + argprefix + "startup-timeout", 30000);
ptStartUpTimeout.setTiming(msec);
// ===================== <variables> =====================
......@@ -292,6 +292,7 @@ void UObject_SK::testMode( bool _state )
}
// -----------------------------------------------------------------------------
#ifndef DISABLE_REST_API
nlohmann::json UObject_SK::httpDumpIO()
{
......@@ -307,7 +308,9 @@ nlohmann::json UObject_SK::httpDumpIO()
return std::move(jdata);
}
// ----------------------------------------------------------------------------
#endif // #ifndef DISABLE_REST_API
#endif
std::string UObject_SK::dumpIO()
{
ostringstream s;
......@@ -415,22 +418,42 @@ void UObject_SK::preSysCommand( const SystemMessage* _sm )
}
case SystemMessage::StartUp:
{
ostate = "StartUp...";
try
{
if( !logserv_host.empty() && logserv_port != 0 && !logserv->isRunning() )
{
ostate = "StartUp: run log server...";
myinfo << myname << "(preSysCommand): run log server " << logserv_host << ":" << logserv_port << endl;
logserv->run(logserv_host, logserv_port, true);
}
}
catch( std::exception& ex )
{
mywarn << myname << "(preSysCommand): CAN`t run log server err: " << ex.what() << endl;
}
catch( ... )
{
mywarn << myname << "(preSysCommand): CAN`t run log server err: catch ..." << endl;
}
ostate = "StartUp: wait sm ready..";
waitSM(smReadyTimeout);
ptStartUpTimeout.reset();
// т.к. для io-переменных важно соблюдать последовательность!
// сперва обновить входы..
ostate = "StartUp: update values..";
updateValues();
ostate = "StartUp: init from SM..";
initFromSM(); // потом обновить значения переменных, помеченных как инициализируемые из SM
ostate = "StartUp: update outputs..";
updateOutputs(true); // а потом уже выходы (принудительное обновление)
ostate = "StartUp: pre ask sensors..";
preAskSensors(UniversalIO::UIONotify);
ostate = "StartUp: ask sensors..";
askSensors(UniversalIO::UIONotify);
active = true;
ostate = "StartUp: [OK]";
break;
}
......@@ -453,9 +476,20 @@ void UObject_SK::preSysCommand( const SystemMessage* _sm )
if( logserv && !logserv_host.empty() && logserv_port != 0 )
{
try
{
mylogany << myname << "(preSysCommand): try restart logserver.." << endl;
logserv->check(true);
}
catch( std::exception& ex )
{
mywarn << myname << "(preSysCommand): CAN`t restart log server err: " << ex.what() << endl;
}
catch( ... )
{
mywarn << myname << "(preSysCommand): CAN`t restart log server err: catch ..." << endl;
}
}
}
break;
......@@ -474,6 +508,8 @@ uniset::SimpleInfo* UObject_SK::getInfo( CORBA::Long userparam )
ostringstream inf;
inf << i->info << endl;
inf << "initialization: " << ostate << endl;
if( logserv /* && userparam < 0 */ )
{
inf << "LogServer: " << logserv_host << ":" << logserv_port
......@@ -506,6 +542,7 @@ uniset::SimpleInfo* UObject_SK::getInfo( CORBA::Long userparam )
return i._retn();
}
// -----------------------------------------------------------------------------
#ifndef DISABLE_REST_API
nlohmann::json UObject_SK::httpGet( const Poco::URI::QueryParameters& params )
{
......@@ -587,14 +624,14 @@ nlohmann::json UObject_SK::httpRequest( const std::string& req, const Poco::URI:
nlohmann::json UObject_SK::httpRequestLog( const Poco::URI::QueryParameters& p )
{
nlohmann::json jret;
auto& jdata = jret[myname];
jdata["log"] = Debug::str(mylog->level());
jret[myname]["log"] = Debug::str(mylog->level());
return std::move(jret);
}
// -----------------------------------------------------------------------------
#endif // #ifndef DISABLE_REST_API
#endif
// -----------------------------------------------------------------------------
// -----------------------------------------------------------------------------
void UObject_SK::sigterm( int signo )
{
......@@ -645,10 +682,7 @@ void UObject_SK::waitSM( int wait_msec, ObjectId _testID )
<< wait_msec << " мсек";
mycrit << err.str() << endl;
// terminate();
// abort();
// raise(SIGTERM);
std::terminate();
std::abort();
// throw uniset::SystemError(err.str());
}
......@@ -660,10 +694,7 @@ void UObject_SK::waitSM( int wait_msec, ObjectId _testID )
<< wait_msec << " мсек";
mycrit << err.str() << endl;
// terminate();
// abort();
//raise(SIGTERM);
std::terminate();
std::abort();
// throw uniset::SystemError(err.str());
}
}
......
......@@ -7,6 +7,7 @@ from pyUniSet import *
from pyUConnector import *
from pyUModbus import *
from UGlobal import *
from pyUExceptions import *
class UInterface():
......@@ -74,7 +75,7 @@ class UInterface():
except UException, e:
return [False,"%s"%e.getError()]
raise [False, "Unknown interface %s" % self.itype]
return [False, "Unknown interface %s" % self.itype]
def getValue(self, s_id):
......
......@@ -3012,10 +3012,11 @@ SWIG_Python_NonDynamicSetAttr(PyObject *obj, PyObject *name, PyObject *value) {
#define SWIGTYPE_p_USysError swig_types[2]
#define SWIGTYPE_p_UTimeOut swig_types[3]
#define SWIGTYPE_p_UTypes__Params swig_types[4]
#define SWIGTYPE_p_char swig_types[5]
#define SWIGTYPE_p_p_char swig_types[6]
static swig_type_info *swig_types[8];
static swig_module_info swig_module = {swig_types, 7, 0, 0, 0, 0};
#define SWIGTYPE_p_UValidateError swig_types[5]
#define SWIGTYPE_p_char swig_types[6]
#define SWIGTYPE_p_p_char swig_types[7]
static swig_type_info *swig_types[9];
static swig_module_info swig_module = {swig_types, 8, 0, 0, 0, 0};
#define SWIG_TypeQuery(name) SWIG_TypeQueryModule(&swig_module, &swig_module, name)
#define SWIG_MangledTypeQuery(name) SWIG_MangledTypeQueryModule(&swig_module, &swig_module, name)
......@@ -4588,6 +4589,109 @@ SWIGINTERN PyObject *USysError_swigregister(PyObject *SWIGUNUSEDPARM(self), PyOb
return SWIG_Py_Void();
}
SWIGINTERN PyObject *_wrap_new_UValidateError__SWIG_0(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
PyObject *resultobj = 0;
UValidateError *result = 0 ;
if (!PyArg_ParseTuple(args,(char *)":new_UValidateError")) SWIG_fail;
result = (UValidateError *)new UValidateError();
resultobj = SWIG_NewPointerObj(SWIG_as_voidptr(result), SWIGTYPE_p_UValidateError, SWIG_POINTER_NEW | 0 );
return resultobj;
fail:
return NULL;
}
SWIGINTERN PyObject *_wrap_new_UValidateError__SWIG_1(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
PyObject *resultobj = 0;
std::string *arg1 = 0 ;
int res1 = SWIG_OLDOBJ ;
PyObject * obj0 = 0 ;
UValidateError *result = 0 ;
if (!PyArg_ParseTuple(args,(char *)"O:new_UValidateError",&obj0)) SWIG_fail;
{
std::string *ptr = (std::string *)0;
res1 = SWIG_AsPtr_std_string(obj0, &ptr);
if (!SWIG_IsOK(res1)) {
SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "new_UValidateError" "', argument " "1"" of type '" "std::string const &""'");
}
if (!ptr) {
SWIG_exception_fail(SWIG_ValueError, "invalid null reference " "in method '" "new_UValidateError" "', argument " "1"" of type '" "std::string const &""'");
}
arg1 = ptr;
}
result = (UValidateError *)new UValidateError((std::string const &)*arg1);
resultobj = SWIG_NewPointerObj(SWIG_as_voidptr(result), SWIGTYPE_p_UValidateError, SWIG_POINTER_NEW | 0 );
if (SWIG_IsNewObj(res1)) delete arg1;
return resultobj;
fail:
if (SWIG_IsNewObj(res1)) delete arg1;
return NULL;
}
SWIGINTERN PyObject *_wrap_new_UValidateError(PyObject *self, PyObject *args) {
Py_ssize_t argc;
PyObject *argv[2] = {
0
};
Py_ssize_t ii;
if (!PyTuple_Check(args)) SWIG_fail;
argc = args ? PyObject_Length(args) : 0;
for (ii = 0; (ii < 1) && (ii < argc); ii++) {
argv[ii] = PyTuple_GET_ITEM(args,ii);
}
if (argc == 0) {
return _wrap_new_UValidateError__SWIG_0(self, args);
}
if (argc == 1) {
int _v;
int res = SWIG_AsPtr_std_string(argv[0], (std::string**)(0));
_v = SWIG_CheckState(res);
if (_v) {
return _wrap_new_UValidateError__SWIG_1(self, args);
}
}
fail:
SWIG_SetErrorMsg(PyExc_NotImplementedError,"Wrong number or type of arguments for overloaded function 'new_UValidateError'.\n"
" Possible C/C++ prototypes are:\n"
" UValidateError::UValidateError()\n"
" UValidateError::UValidateError(std::string const &)\n");
return 0;
}
SWIGINTERN PyObject *_wrap_delete_UValidateError(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
PyObject *resultobj = 0;
UValidateError *arg1 = (UValidateError *) 0 ;
void *argp1 = 0 ;
int res1 = 0 ;
PyObject * obj0 = 0 ;
if (!PyArg_ParseTuple(args,(char *)"O:delete_UValidateError",&obj0)) SWIG_fail;
res1 = SWIG_ConvertPtr(obj0, &argp1,SWIGTYPE_p_UValidateError, SWIG_POINTER_DISOWN | 0 );
if (!SWIG_IsOK(res1)) {
SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "delete_UValidateError" "', argument " "1"" of type '" "UValidateError *""'");
}
arg1 = reinterpret_cast< UValidateError * >(argp1);
delete arg1;
resultobj = SWIG_Py_Void();
return resultobj;
fail:
return NULL;
}
SWIGINTERN PyObject *UValidateError_swigregister(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
PyObject *obj;
if (!PyArg_ParseTuple(args,(char*)"O:swigregister", &obj)) return NULL;
SWIG_TypeNewClientData(SWIGTYPE_p_UValidateError, SWIG_NewClientData(obj));
return SWIG_Py_Void();
}
SWIGINTERN PyObject *_wrap_new_UProxyObject__SWIG_0(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
PyObject *resultobj = 0;
std::string *arg1 = 0 ;
......@@ -4997,6 +5101,9 @@ static PyMethodDef SwigMethods[] = {
{ (char *)"new_USysError", _wrap_new_USysError, METH_VARARGS, NULL},
{ (char *)"delete_USysError", _wrap_delete_USysError, METH_VARARGS, NULL},
{ (char *)"USysError_swigregister", USysError_swigregister, METH_VARARGS, NULL},
{ (char *)"new_UValidateError", _wrap_new_UValidateError, METH_VARARGS, NULL},
{ (char *)"delete_UValidateError", _wrap_delete_UValidateError, METH_VARARGS, NULL},
{ (char *)"UValidateError_swigregister", UValidateError_swigregister, METH_VARARGS, NULL},
{ (char *)"new_UProxyObject", _wrap_new_UProxyObject, METH_VARARGS, NULL},
{ (char *)"delete_UProxyObject", _wrap_delete_UProxyObject, METH_VARARGS, NULL},
{ (char *)"UProxyObject_addToAsk", _wrap_UProxyObject_addToAsk, METH_VARARGS, NULL},
......@@ -5020,11 +5127,15 @@ static void *_p_UTimeOutTo_p_UException(void *x, int *SWIGUNUSEDPARM(newmemory))
static void *_p_USysErrorTo_p_UException(void *x, int *SWIGUNUSEDPARM(newmemory)) {
return (void *)((UException *) ((USysError *) x));
}
static void *_p_UValidateErrorTo_p_UException(void *x, int *SWIGUNUSEDPARM(newmemory)) {
return (void *)((UException *) ((UValidateError *) x));
}
static swig_type_info _swigt__p_UException = {"_p_UException", "UException *", 0, 0, (void*)0, 0};
static swig_type_info _swigt__p_UProxyObject = {"_p_UProxyObject", "UProxyObject *", 0, 0, (void*)0, 0};
static swig_type_info _swigt__p_USysError = {"_p_USysError", "USysError *", 0, 0, (void*)0, 0};
static swig_type_info _swigt__p_UTimeOut = {"_p_UTimeOut", "UTimeOut *", 0, 0, (void*)0, 0};
static swig_type_info _swigt__p_UTypes__Params = {"_p_UTypes__Params", "UTypes::Params *", 0, 0, (void*)0, 0};
static swig_type_info _swigt__p_UValidateError = {"_p_UValidateError", "UValidateError *", 0, 0, (void*)0, 0};
static swig_type_info _swigt__p_char = {"_p_char", "char *", 0, 0, (void*)0, 0};
static swig_type_info _swigt__p_p_char = {"_p_p_char", "char **", 0, 0, (void*)0, 0};
......@@ -5034,15 +5145,17 @@ static swig_type_info *swig_type_initial[] = {
&_swigt__p_USysError,
&_swigt__p_UTimeOut,
&_swigt__p_UTypes__Params,
&_swigt__p_UValidateError,
&_swigt__p_char,
&_swigt__p_p_char,
};
static swig_cast_info _swigc__p_UException[] = { {&_swigt__p_UException, 0, 0, 0}, {&_swigt__p_UTimeOut, _p_UTimeOutTo_p_UException, 0, 0}, {&_swigt__p_USysError, _p_USysErrorTo_p_UException, 0, 0},{0, 0, 0, 0}};
static swig_cast_info _swigc__p_UException[] = { {&_swigt__p_UException, 0, 0, 0}, {&_swigt__p_UTimeOut, _p_UTimeOutTo_p_UException, 0, 0}, {&_swigt__p_USysError, _p_USysErrorTo_p_UException, 0, 0}, {&_swigt__p_UValidateError, _p_UValidateErrorTo_p_UException, 0, 0},{0, 0, 0, 0}};
static swig_cast_info _swigc__p_UProxyObject[] = { {&_swigt__p_UProxyObject, 0, 0, 0},{0, 0, 0, 0}};
static swig_cast_info _swigc__p_USysError[] = { {&_swigt__p_USysError, 0, 0, 0},{0, 0, 0, 0}};
static swig_cast_info _swigc__p_UTimeOut[] = { {&_swigt__p_UTimeOut, 0, 0, 0},{0, 0, 0, 0}};
static swig_cast_info _swigc__p_UTypes__Params[] = { {&_swigt__p_UTypes__Params, 0, 0, 0},{0, 0, 0, 0}};
static swig_cast_info _swigc__p_UValidateError[] = { {&_swigt__p_UValidateError, 0, 0, 0},{0, 0, 0, 0}};
static swig_cast_info _swigc__p_char[] = { {&_swigt__p_char, 0, 0, 0},{0, 0, 0, 0}};
static swig_cast_info _swigc__p_p_char[] = { {&_swigt__p_p_char, 0, 0, 0},{0, 0, 0, 0}};
......@@ -5052,6 +5165,7 @@ static swig_cast_info *swig_cast_initial[] = {
_swigc__p_USysError,
_swigc__p_UTimeOut,
_swigc__p_UTypes__Params,
_swigc__p_UValidateError,
_swigc__p_char,
_swigc__p_p_char,
};
......
......@@ -221,6 +221,28 @@ class USysError(UException):
USysError_swigregister = _pyUniSet.USysError_swigregister
USysError_swigregister(USysError)
class UValidateError(UException):
__swig_setmethods__ = {}
for _s in [UException]:
__swig_setmethods__.update(getattr(_s, '__swig_setmethods__', {}))
__setattr__ = lambda self, name, value: _swig_setattr(self, UValidateError, name, value)
__swig_getmethods__ = {}
for _s in [UException]:
__swig_getmethods__.update(getattr(_s, '__swig_getmethods__', {}))
__getattr__ = lambda self, name: _swig_getattr(self, UValidateError, name)
__repr__ = _swig_repr
def __init__(self, *args):
this = _pyUniSet.new_UValidateError(*args)
try:
self.this.append(this)
except Exception:
self.this = this
__swig_destroy__ = _pyUniSet.delete_UValidateError
__del__ = lambda self: None
UValidateError_swigregister = _pyUniSet.UValidateError_swigregister
UValidateError_swigregister(UValidateError)
class UProxyObject:
__swig_setmethods__ = {}
__setattr__ = lambda self, name, value: _swig_setattr(self, UProxyObject, name, value)
......
......@@ -203,7 +203,7 @@ void LogServer::evprepare( const ev::loop_ref& eloop )
if( mylog.is_crit() )
mylog.crit() << err.str() << endl;
throw SystemError( err.str() );
throw uniset::SystemError( err.str() );
}
try
......@@ -219,7 +219,17 @@ void LogServer::evprepare( const ev::loop_ref& eloop )
if( mylog.is_crit() )
mylog.crit() << err.str() << endl;
throw SystemError( err.str() );
throw uniset::SystemError( err.str() );
}
catch( std::exception& ex )
{
ostringstream err;
err << myname << "(evprepare): " << ex.what();
if( mylog.is_crit() )
mylog.crit() << err.str() << endl;
throw uniset::SystemError( err.str() );
}
sock->setBlocking(false);
......
......@@ -257,7 +257,7 @@ void LogSession::callback( ev::io& watcher, int revents ) noexcept
if( cancelled.load() )
{
if( mylog.is_info() )
mylog.info() << peername << "LogSession: stop session... disconnect.." << endl;
mylog.info() << peername << "(LogSession): stop session... disconnect.." << endl;
io.stop();
cmdTimer.stop();
......
......@@ -27,6 +27,7 @@
#include <sys/types.h>
#include <sstream>
#include <chrono>
#include <Poco/Process.h>
#include "Exceptions.h"
#include "ORepHelpers.h"
......@@ -633,7 +634,7 @@ void UniSetObject::work()
{
uinfo << myname << ": thread processing messages running..." << endl;
msgpid = thr ? thr->getTID() : getpid();
msgpid = thr ? thr->getTID() : Poco::Process::id();
{
std::unique_lock<std::mutex> locker(m_working);
......@@ -748,7 +749,8 @@ uniset::SimpleInfo* UniSetObject::getInfo( ::CORBA::Long userparam )
ostringstream info;
info.setf(ios::left, ios::adjustfield);
info << "(" << myid << ")" << setw(40) << myname << "\n==================================================\n";
info << "tid=" << setw(10);
info << "pid=" << setw(10) << Poco::Process::id();
info << " tid=" << setw(10);
if( threadcreate )
{
......
......@@ -38,8 +38,18 @@ bool CommonEventLoop::evrun(EvWatcher* w, bool thread )
bool ret = false;
{
{
std::unique_lock<std::mutex> l(wlist_mutex);
for( auto& e: wlist )
{
if( e == w )
{
cerr << "(CommonEventLoop::evrun): " << w->wname() << " ALREADY ADDED.." << endl;
return false;
}
}
wlist.push_back(w);
}
if( !thr )
{
......@@ -47,18 +57,24 @@ bool CommonEventLoop::evrun(EvWatcher* w, bool thread )
std::this_thread::sleep_for(std::chrono::milliseconds(30));
}
// ожидаем обработки evprepare (которая будет в defaultLoop)
std::unique_lock<std::mutex> locker(prep_mutex);
wprep = w;
prep_notify = false;
evprep.send(); // будим default loop
// ждём..
std::unique_lock<std::mutex> locker(prep_mutex);
// ожидаем обработки evprepare (которая будет в defaultLoop)
while( !prep_notify )
prep_event.wait(locker);
{
prep_event.wait_for(locker,std::chrono::milliseconds(5000), [=]()
{
return (prep_notify == true);
} );
}
// сбрасываем флаг
prep_notify = false;
// если стал nullptr - значит evprepare отработал нормально
// если wprep стал nullptr - значит evprepare отработал нормально
ret = ( wprep == nullptr );
}
......@@ -125,6 +141,9 @@ bool CommonEventLoop::evstop( EvWatcher* w )
// -------------------------------------------------------------------------
void CommonEventLoop::onPrepare() noexcept
{
prep_notify = false;
{
std::unique_lock<std::mutex> lock(prep_mutex);
if( wprep )
{
try
......@@ -138,6 +157,7 @@ void CommonEventLoop::onPrepare() noexcept
wprep = nullptr;
}
}
// будим всех ожидающих..
prep_notify = true;
......
......@@ -116,7 +116,10 @@ void UniSetTimer::stop() noexcept
const Poco::Timespan UniSetTimer::millisecToPoco( const timeout_t msec ) noexcept
{
if( msec == WaitUpTime )
return Poco::Timespan(-1, 0);
{
// int days, int hours, int minutes, int seconds, int microSeconds
return Poco::Timespan(std::numeric_limits<int>::max(),0,0,0,0);
}
// msec --> usec
return Poco::Timespan( long(msec / 1000), long((msec * 1000) % 1000000) );
......@@ -125,7 +128,10 @@ const Poco::Timespan UniSetTimer::millisecToPoco( const timeout_t msec ) noexcep
const Poco::Timespan UniSetTimer::microsecToPoco( const timeout_t usec ) noexcept
{
if( usec == WaitUpTime )
return Poco::Timespan(-1, 0);
{
// int days, int hours, int minutes, int seconds, int microSeconds
return Poco::Timespan(std::numeric_limits<int>::max(),0,0,0,0);
}
return Poco::Timespan( long(usec / 1000000), long(usec % 1000000) );
}
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment