Skip to content

Error propagation failure when violating Logical Quotas via iRODS HTTP API #479

@MarekNieslanik

Description

@MarekNieslanik

Environment:
iRODS: 5.0.2
iRODS HTTP API: 0.6.0
Plugin: irods_rule_engine_plugin_logical_quotas

We are integrating the Logical Quotas Rule Engine Plugin into our iRODS stack to track and limit collection capacity. While the plugin correctly enforces quotas at the server level (for example with icommands), the resulting error messages are not being properly propagated through the iRODS HTTP API.

When a quota constraint is violated during a write operation via the HTTP API, the API returns a generic error that does not reflect the actual cause (the quota violation).

parallel_write_init failure:
The HTTP API returns a generic INVALID_HANDLE error:
JSON response from the server

{"irods_response":{"status_code":-175000,"status_message":"INVALID_HANDLE: Could not open output stream to [/tempZone/home/rods/abcdef].\n\n"}}  // similar in HTTP API logs

However, the iRODS server logs correctly identify the issue:

"log_message":"Logical Quotas Policy Violation: Adding object exceeds maximum data size in bytes limit"

Simple write failure
A similar issue occurs with the standard write operation. The error message changes to Output stream to data object is in a bad state, but the error code remains -175000.

The main issue is that the error code (-175000) and the error messages are too generic. They are identical to errors triggered by other issues, such as a missing target collection or data object.

As a result, it is currently impossible for the client application to distinguish between a policy violation (quota exceeded) and a system error (missing path). The specific error information from the Rule Engine Plugin is lost during the transition through the HTTP API.

We would neet the HTTP API to propagate the specific error message or a unique error code provided by the Logical Quotas plugin, allowing clients to identify that a quota violation has occurred.

Metadata

Metadata

Assignees

Labels

Type

No type
No fields configured for issues without a type.

Projects

No projects

Relationships

None yet

Development

No branches or pull requests

Issue actions