Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Extend Move SCP response and abort DcmSend associations on C-STORE I/O errors mid transfer #710

Open
wants to merge 4 commits into
base: dev
Choose a base branch
from

Conversation

Enet4
Copy link
Collaborator

@Enet4 Enet4 commented Dec 20, 2024

This PR addresses two major concerns in the C-MOVE operation with Dicoogle:

Indefinite hanging

an edge case where a remote transfer association can hang indefinitely due to errors in the storage provider, such as corrupted storage data. Getting an IOException while invoking cstore would result in the local store SCU proceeding to wait for a response from the SCP, even though it had not sent the final PData, resulting in both peers waiting for each other.

The approach adopted here was to abort the association as soon as an IOException happens.

Opaque C-MOVE response

Moreover, this PR includes an extension to the C-MOVE SCP so that it also returns more accurate information about how the C-MOVE operation went, so that the C-MOVE SCU can more reliably understand what happened.

  • Command Status reflects the success (or lack thereof) of the underlying C-STORE operations
  • Command data set may also provide Number of Completed Suboperations, Number of Remaining Suboperations, and Number of Failed Suboperations).
  • On error, Status will have an error code in Cxxx, as mandated by the standard. Error ID and Error Comment may also be provided.
  • If at least one of the suboperations fails, the status code will be B000.

Enet4 added 3 commits January 3, 2025 09:41
- extend DicoogleDcmSend to
  keep track of failed and skipped file transfers
- propagate exception to caller upon fatal I/O error in DicoogleDcmSend
- change MoveRSP to admit a response status other than success
- refactor CallDCMSend into a method in CMoveServiceSCP
- add sub-operation countings in response,
  and report warning status when suitable
- Status.ProcessingFailure and other constants in this class
  need to be complemented with the base error code
@Enet4 Enet4 changed the title DcmSend: abort associations when I/O errors on C-STORE mid transfer Extend Move SCP response and abort DcmSend associations on C-STORE I/O errors mid transfer Jan 3, 2025
@Enet4 Enet4 self-assigned this Jan 3, 2025
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Projects
None yet
Development

Successfully merging this pull request may close these issues.

1 participant