irods / irods_rule_engine_plugin_logical_quotas

BSD 3-Clause "New" or "Revised" License
1 stars 9 forks source link

`logical_quotas_get_collection_status` crashes once executed on a collection which does not have metadata attached for monitoring #82

Closed mstfdkmn closed 3 weeks ago

mstfdkmn commented 1 year ago

Once the logical_quotas_get_collection_status operation invokes for a collection does not have metadata attached for monitoring, the plugin throws errors both in the client side and in the logs.

To simplify a case, listing existing metadata on a collection:

✔ [Nov/29 17:29] vsc33586@login1 ~ $ imeta ls -C /icts_icts/home/u0137480/test
AVUs defined for collection /icts_icts/home/u0137480/test:
attribute: atr
value: val
units:

Run the logical_quotas_get_collection_status operation with irule or prc for the specified collection above:

(base) u0137480@CRD-L-07856:~/projects/irods-acl-management$ irule -r irods_rule_engine_plugin-logical_quotas-instance '{"operation": "logical_quotas_get_collection_status", "collection": "/icts_icts/home/u0137480/test"}' null ruleExecOut
remote addresses: 10.114.56.34 ERROR: rcExecMyRule error.  status = -1205000 RE_RUNTIME_ERROR
Level 0: iRODS Exception:
    file: /repos/irods_rule_engine_plugin_logical_quotas/src/handler.cpp
    function: irods::error irods::handler::logical_quotas_get_collection_status(const std::string &, const irods::instance_configuration_map &, std::list<boost::any> &, MsParamArray *, irods::callback &)
    line: 443
    code: -130000 (SYS_INVALID_INPUT_PARAM)
    message:
        Logical Quotas Policy: [/icts_icts/home/u0137480/test] is not a monitored collection.
stack trace:
--------------

Dumping stack trace
<0>     Offset: 0x6e    Address: 0x7fc153d8176e irods::exception::exception(long, std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char> > const&, std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char> > const&, unsigned int, std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char> > const&)
<1>     Offset: 0x1386  Address: 0x7fc14c53f1a6 irods::handler::logical_quotas_get_collection_status(std::__1::basic_string<char, std::__1::char_t

Logs:

[2022-11-29T16:51:07.208Z][icts-t-cloud-leu-1] rsyslogd stdout | 2022-11-29T17:51:07.207626+01:00 icts rodsServer[37041]: icts_icts - remote addresses: 127.0.0.1, 2a02:2c40:0:221::3306:10 ERROR: rsExecMyRule : -1205000, [-]#011/repos/irods_rule_engine_plugin_logical_quotas/src/handler.cpp:519:irods::error irods::handler::logical_quotas_get_collection_status(const std::string &, const irods::instance_configuration_map &, std::list<boost::any> &, MsParamArray *, irods::callback &) :  status [RE_RUNTIME_ERROR]  errno [] -- message [iRODS Exception:#012    file: /repos/irods_rule_engine_plugin_logical_quotas/src/handler.cpp#012    function: irods::error irods::handler::logical_quotas_get_collection_status(const std::string &, const irods::instance_configuration_map &, std::list<boost::any> &, MsParamArray *, irods::callback &)#012    line: 443#012    code: -130000 (SYS_INVALID_INPUT_PARAM)#012    message:#012        Logical Quotas Policy: [/icts_icts/home/u0137480/test] is not a monitored collection.#012stack trace:#012--------------#012#012Dumping stack trace#012<0>#011Offset: 0x6e  #011Address: 0x7fc153d8176e#011irods::exception::exception(long, std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char> > const&, std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char> > const&, unsigned int, std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char> > const&)#012<1>#011Offset: 0x1386#011Address: 0x7fc14c53f1a6#011irods::handler::logical_quotas_get_collection_status(std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char> > const&, std::__1::unordered_map<std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char> >, irods::instance_configuration, std::__1::hash<std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char> > >, std::__1::equal_to<std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char> > >, std::__1::allocator<std::__1::pair<std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char> > const, irods::instance_configuration> > > const&, std::__1::list<boost::any, std::__1::allocator<boost::any> >&, MsParamArray*, irods::callback&)#012<2>#011Offset: 0x22  #011Address: 0x7fc14c519512#011std::__1::__function::__func<irods::error (*)(std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char> > const&, std::__1::unordered_map<std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char> >, irods::instance_configuration, std::__1::hash<std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char> > >, std::__1::equal_to<std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char> > >, std::__1::allocator<std::__1::pair<std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char> > const, irods::instance_configuration> > > const&, std::__1::list<boost::any, std::__1::allocator<boost::any> >&, MsParamArray*, irods::callback&), std::__1::allocator<irods::error (*)(std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char> > const&, std::__1::unordered_map<std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char> >, irods::instance_configuration, std::__1::hash<std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char> > >, std::__1::equal_to<std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char> > >, std::__1::allocator<std::__1::pair<std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char> > const, irods::instance_configuration> > > const&, std::__1::list<boost::any, std::__1::allocator<boost::any> >&, MsParamArray*, irods::callback&)>, irods::error (std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char> > const&, std::__1::unordered_map<std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char> >, irods::instance_configuration, std::__1::hash<std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char> > >, std::__1::equal_to<std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char> > >, std::__1::allocator<std::__1::pair<std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char> > const, irods::instance_configuration> > > const&, std::__1::list<boost::any, std::__1::allocator<boost::any> >&, MsParamArray*, irods::callback&)>::operator()(std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char> > const&, std::__1::unordered_map<std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char> >, irods::instance_configuration, std::__1::hash<std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char> > >, std::__1::equal_to<std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char> > >, std::__1::allocator<std::__1::pair<std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char> > const, irods::instance_configuration> > > const&, std::__1::list<boost::any, std::__1::allocator<boost::any> >&, MsParamArray*&&, irods::callback&)#012<3>#011Offset:       #011Address: 0x7fc14c51569d#011/usr/lib/irods/plugins/rule_engines/libirods_rule_engine_plugin-logical_quotas.so(+0x3e69d) [0x7fc14c51569d]#012<4>#011Offset:       #011Address: 0x7fc14c514b63#011/usr/lib/irods/plugins/rule_engines/libirods_rule_engine_plugin-logical_quotas.so(+0x3db63) [0x7fc14c514b63]#012<5>#011Offset: 0xeb  #011Address: 0x7fc152cb185b#011irods::pluggable_rule_engine<std::__1::tuple<> >::exec_rule_text(std::__1::tuple<>&, std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char> > const&, MsParamArray*, std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char> > const&, irods::callback)#012<6>#011Offset: 0x467 #011Address: 0x7fc152cb1427#011irods::rule_engine_context_manager<std::__1::tuple<>, RuleExecInfo*, (irods::rule_execution_manager_pack)0>::exec_rule_text(std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char> > const&, std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char> > const&, MsParamArray*, std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char> > const&)#012<7>#011Offset: 0x872 #011Address: 0x7fc152cb0992#011rsExecMyRule(RsComm*, ExecMyRuleInp*, MsParamArray**)#012<8>#011Offset: 0x52  #011Address: 0x7fc152f487f2#011irods::api_call_adaptor<ExecMyRuleInp*, MsParamArray**>::operator()(irods::plugin_context&, RsComm*, ExecMyRuleInp*, MsParamArray**)#012<9>#011Offset: 0x16  #011Address: 0x7fc152f48766#011std::__1::__function::__func<irods::api_call_adaptor<ExecMyRuleInp*, MsParamArray**>, std::__1::allocator<irods::api_call_adaptor<ExecMyRuleInp*, MsParamArray**> >, irods::error (irods::plugin_context&, RsComm*, ExecMyRuleInp*, MsParamArray**)>::operator()(irods::plugin_context&, RsComm*&&, ExecMyRuleInp*&&, MsParamArray**&&)#012<10>#011Offset: 0x1437#011Address: 0x7fc152e18a77#011int irods::api_entry::call_handler<ExecMyRuleInp*, MsParamArray**>(RsComm*, ExecMyRuleInp*, MsParamArray**)#012<11>#011Offset: 0x71c #011Address: 0x7fc15308160c#011rsApiHandler(RsComm*, int, BytesBuf*, BytesBuf*)#012<12>#011Offset: 0xa4e #011Address: 0x7fc1530836fe#011readAndProcClientMsg(RsComm*, int)#012<13>#011Offset: 0xd08 #011Address: 0x7fc153074928#011agentMain(RsComm*)#012<14>#011Offset: 0x216c#011Address: 0x7fc1530729dc#011runIrodsAgentFactory(sockaddr_un)#012<15>#011Offset:       #011Address: 0x434108#011/usr/sbin/irodsServer(main+0x16d8) [0x434108]#012<16>#011Offset:       #011Address: 0x7fc150526555#011/lib64/libc.so.6(__libc_start_main+0xf5) [0x7fc150526555]#012<17>#011Offset:       #011Address: 0x4328f2#011/usr/sbin/irodsServer() [0x4328f2]#012#012#012]#012
[2022-11-29T16:51:07.208Z][icts-t-cloud-leu-1] rsyslogd stdout | 2022-11-29T17:51:07.207340+01:00 icts rodsServer[37041]: icts_icts - remote addresses: 127.0.0.1, 2a02:2c40:0:221::3306:10 ERROR: iRODS Exception:#012    file: /repos/irods_rule_engine_plugin_logical_quotas/src/handler.cpp#012    function: irods::error irods::handler::logical_quotas_get_collection_status(const std::string &, const irods::instance_configuration_map &, std::list<boost::any> &, MsParamArray *, irods::callback &)#012    line: 443#012    code: -130000 (SYS_INVALID_INPUT_PARAM)#012    message:#012        Logical Quotas Policy: [/icts_icts/home/u0137480/test] is not a monitored collection.#012stack trace:#012--------------#012#012Dumping stack trace#012<0>#011Offset: 0x6e  #011Address: 0x7fc153d8176e#011irods::exception::exception(long, std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char> > const&, std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char> > const&, unsigned int, std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char> > const&)#012<1>#011Offset: 0x1386#011Address: 0x7fc14c53f1a6#011irods::handler::logical_quotas_get_collection_status(std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char> > const&, std::__1::unordered_map<std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char> >, irods::instance_configuration, std::__1::hash<std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char> > >, std::__1::equal_to<std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char> > >, std::__1::allocator<std::__1::pair<std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char> > const, irods::instance_configuration> > > const&, std::__1::list<boost::any, std::__1::allocator<boost::any> >&, MsParamArray*, irods::callback&)#012<2>#011Offset: 0x22  #011Address: 0x7fc14c519512#011std::__1::__function::__func<irods::error (*)(std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char> > const&, std::__1::unordered_map<std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char> >, irods::instance_configuration, std::__1::hash<std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char> > >, std::__1::equal_to<std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char> > >, std::__1::allocator<std::__1::pair<std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char> > const, irods::instance_configuration> > > const&, std::__1::list<boost::any, std::__1::allocator<boost::any> >&, MsParamArray*, irods::callback&), std::__1::allocator<irods::error (*)(std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char> > const&, std::__1::unordered_map<std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char> >, irods::instance_configuration, std::__1::hash<std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char> > >, std::__1::equal_to<std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char> > >, std::__1::allocator<std::__1::pair<std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char> > const, irods::instance_configuration> > > const&, std::__1::list<boost::any, std::__1::allocator<boost::any> >&, MsParamArray*, irods::callback&)>, irods::error (std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char> > const&, std::__1::unordered_map<std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char> >, irods::instance_configuration, std::__1::hash<std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char> > >, std::__1::equal_to<std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char> > >, std::__1::allocator<std::__1::pair<std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char> > const, irods::instance_configuration> > > const&, std::__1::list<boost::any, std::__1::allocator<boost::any> >&, MsParamArray*, irods::callback&)>::operator()(std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char> > const&, std::__1::unordered_map<std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char> >, irods::instance_configuration, std::__1::hash<std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char> > >, std::__1::equal_to<std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char> > >, std::__1::allocator<std::__1::pair<std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char> > const, irods::instance_configuration> > > const&, std::__1::list<boost::any, std::__1::allocator<boost::any> >&, MsParamArray*&&, irods::callback&)#012<3>#011Offset:       #011Address: 0x7fc14c51569d#011/usr/lib/irods/plugins/rule_engines/libirods_rule_engine_plugin-logical_quotas.so(+0x3e69d) [0x7fc14c51569d]#012<4>#011Offset:       #011Address: 0x7fc14c514b63#011/usr/lib/irods/plugins/rule_engines/libirods_rule_engine_plugin-logical_quotas.so(+0x3db63) [0x7fc14c514b63]#012<5>#011Offset: 0xeb  #011Address: 0x7fc152cb185b#011irods::pluggable_rule_engine<std::__1::tuple<> >::exec_rule_text(std::__1::tuple<>&, std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char> > const&, MsParamArray*, std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char> > const&, irods::callback)#012<6>#011Offset: 0x467 #011Address: 0x7fc152cb1427#011irods::rule_engine_context_manager<std::__1::tuple<>, RuleExecInfo*, (irods::rule_execution_manager_pack)0>::exec_rule_text(std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char> > const&, std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char> > const&, MsParamArray*, std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char> > const&)#012<7>#011Offset: 0x872 #011Address: 0x7fc152cb0992#011rsExecMyRule(RsComm*, ExecMyRuleInp*, MsParamArray**)#012<8>#011Offset: 0x52  #011Address: 0x7fc152f487f2#011irods::api_call_adaptor<ExecMyRuleInp*, MsParamArray**>::operator()(irods::plugin_context&, RsComm*, ExecMyRuleInp*, MsParamArray**)#012<9>#011Offset: 0x16  #011Address: 0x7fc152f48766#011std::__1::__function::__func<irods::api_call_adaptor<ExecMyRuleInp*, MsParamArray**>, std::__1::allocator<irods::api_call_adaptor<ExecMyRuleInp*, MsParamArray**> >, irods::error (irods::plugin_context&, RsComm*, ExecMyRuleInp*, MsParamArray**)>::operator()(irods::plugin_context&, RsComm*&&, ExecMyRuleInp*&&, MsParamArray**&&)#012<10>#011Offset: 0x1437#011Address: 0x7fc152e18a77#011int irods::api_entry::call_handler<ExecMyRuleInp*, MsParamArray**>(RsComm*, ExecMyRuleInp*, MsParamArray**)#012<11>#011Offset: 0x71c #011Address: 0x7fc15308160c#011rsApiHandler(RsComm*, int, BytesBuf*, BytesBuf*)#012<12>#011Offset: 0xa4e #011Address: 0x7fc1530836fe#011readAndProcClientMsg(RsComm*, int)#012<13>#011Offset: 0xd08 #011Address: 0x7fc153074928#011agentMain(RsComm*)#012<14>#011Offset: 0x216c#011Address: 0x7fc1530729dc#011runIrodsAgentFactory(sockaddr_un)#012<15>#011Offset:       #011Address: 0x434108#011/usr/sbin/irodsServer(main+0x16d8) [0x434108]#012<16>#011Offset:       #011Address: 0x7fc150526555#011/lib64/libc.so.6(__libc_start_main+0xf5) [0x7fc150526555]#012<17>#011Offset:       #011Address: 0x4328f2#011/usr/sbin/irodsServer() [0x4328f2]#012#012
korydraughn commented 1 year ago

It looks like the REP is using the noisy form of reporting an exceptions.

I agree it shouldn't be so noisy for this use-case. We'll adjust it.