MPPS before Store IAN - dcm4che/dcm4chee-arc-light GitHub Wiki

Overview

Modality Performed Procedure Step may be received by archive from a modality even before objects are stored to the archive. In such case, Instance Availability Notification may be sent out from the archive once all objects of the study have been received by the archive.

Optionally if an IAN Timeout has been additionally configured to wait and check for completeness of instances received in MPPS and all instances referenced in MPPS have been received, then this timer shall be stopped and Instance Availability Notification is sent out.

Configuration

Use Case : Only some referenced objects received

  • Using Archive UI - Can be configured either on :
    • Archive Device level (Send IAN for instances received by any Application Entity of the Archive) :

      Go upto archive device extension level Configuration page -> Devices tab -> dcm4chee-arc -> Device Extension -> Archive Device Extension. Configure IAN Timeout and set IAN On Timeout to True and Save.

    • Archive Application Extension level (Send IAN for instances received by this Application Entity of the Archive) :

      Go upto archive AE extension level Configuration page -> Devices tab -> dcm4chee-arc -> Child Objects Network AEs -> Network AE Extension -> Archive Network AE Extension. Configure IAN Timeout and set IAN On Timeout to True and Save.

OR

  • Using LDAP - One may either create a LDIF file to add attributes either on :

    • Archive Device level (e.g.):

        version: 1
        dn: dicomDeviceName=dcm4chee-arc,cn=Devices,cn=DICOM Configuration,dc=dcm4che,dc=org
        changetype: modify
        add: dcmIanTimeout
        dcmIanTimeout: PT5M
      
        dn: dicomDeviceName=dcm4chee-arc,cn=Devices,cn=DICOM Configuration,dc=dcm4che,dc=org
        changetype: modify
        add: dcmIanOnTimeout
        dcmIanOnTimeout: TRUE        
      

    OR

    • Archive AE level (e.g.):

        version: 1        
        dn: dicomAETitle=DCM4CHEE,dicomDeviceName=dcm4chee-arc,cn=Devices,cn=DICOM Configuration,dc=dcm4che,dc=org
        changetype: modify
        add: dcmIanTimeout
        dcmIanTimeout: PT5M
      
        dn: dicomAETitle=DCM4CHEE,dicomDeviceName=dcm4chee-arc,cn=Devices,cn=DICOM Configuration,dc=dcm4che,dc=org
        changetype: modify
        add: dcmIanOnTimeout
        dcmIanOnTimeout: TRUE
      

    and import it to the LDAP Server by using the ldapmodify command line utility.

    OR use the Add Attribute... and Add Value... function of Apache Directory Studio to add attributes on Device Level (e.g.: dicomDeviceName=dcm4chee-arc) or on Application Entity Level (e.g: dicomAETitle=DCM4CHEE) of the Archive Configuration.

One may refer to Archive Device or Archive Network AE to understand the description of attributes.

Refer ISO-8601 Duration format for more know-how on Durations.

Go to the Control tab on Configuration page in archive UI and reload the configuration.

Testing

Required dcm4che Tools

  • storescu simulating the external object source (e.g. modality) STORESCU, from which objects are being received.
  • mppsscu simulating Service Class User (SCU) for the Modality Performed Procedure Step (MPPS) SOP Class and for the Verification SOP Class.

Verification

All referenced objects received

  1. Send MPPS request for a study

       mppsscu -c DCM4CHEE@localhost:11112 /pathToStudy
    
  2. Start IANSCP

       ianscp -b IANSCP:11117
    
  3. Store all objects of that study on archive

       storescu -c DCM4CHEE@localhost:11112 /pathToStudy
    

After the configured polling interval is reached, check in the ianscp tool window that the Instance Availability Notification has been received.

Only some referenced objects received

  1. Send MPPS request for a study

       mppsscu -c DCM4CHEE@localhost:11112 /pathToStudy
    
  2. Start IANSCP

       ianscp -b IANSCP:11117
    
  3. Store only some objects of that study on archive

       storescu -c DCM4CHEE@localhost:11112 /pathToStudy-some-objects
    

After the configured polling interval and IAN timeout have been reached, check in the ianscp tool window that the Instance Availability Notification has been received. Also in the logs on archive side, a WARN message can be seen as

17:19:31,023 WARN  [org.dcm4chee.arc.ian.scu.IANScheduler] (EE-ManagedScheduledExecutorService-default-Thread-7) Timeout 
for IanTask[pk=7, deviceName=dcm4chee-arc, mppsInstanceUID=2.25.252633828717293194269690210345411940655, scheduledTime=2020-03-09 17:19:06.409] 
exceeded - schedule IAN for available instances

All referenced objects received before IAN Timeout is reached

  1. Send MPPS request for a study

       mppsscu -c DCM4CHEE@localhost:11112 /pathToStudy
    
  2. Start IANSCP

       ianscp -b IANSCP:11117
    
  3. Store all objects of that study on archive

       storescu -c DCM4CHEE@localhost:11112 /pathToStudy
    

Once the configured polling interval is reached, scheduler checks completeness of MPPS and sends out IAN. This can be verified by scheduled time of IAN task and start of IAN scheduler and time when corresponding IAN that is sent out. Check in the ianscp tool window that the Instance Availability Notification has been received. Sample logs on archive side for this use case

11:12:09,023 INFO  [org.dcm4chee.arc.ian.scu.IANScheduler] (EE-ManagedExecutorService-default-Thread-5) DCM4CHEE<-MPPSSCU(1): 
Created IanTask[pk=9, deviceName=dcm4chee-arc, mppsInstanceUID=2.25.316612971090743533821318144748315192179, 
scheduledTime=Tue Mar 10 11:13:09 CET 2020]
..............
..............
11:13:04,527 INFO  [org.dcm4chee.arc.ian.scu.IANScheduler] (EE-ManagedScheduledExecutorService-default-Thread-9) start 
IANScheduler.execute()
11:13:04,578 INFO  [org.dcm4chee.arc.ian.scu.IANScheduler] (EE-ManagedScheduledExecutorService-default-Thread-9) Check 
availability of MPPS[pk=39, uid=2.25.316612971090743533821318144748315192179, studyInstanceUID=1.2.840.113674.1335.106.200, 
status=COMPLETED]
11:13:04,599 INFO  [org.dcm4chee.arc.ian.scu.IANScheduler] (EE-ManagedScheduledExecutorService-default-Thread-9) Schedule 
IanTask[pk=9, deviceName=dcm4chee-arc, mppsInstanceUID=2.25.316612971090743533821318144748315192179, 
scheduledTime=2020-03-10 11:13:09.015]
11:13:04,710 INFO  [org.dcm4chee.arc.qmgt.impl.QueueManagerEJB] (EE-ManagedScheduledExecutorService-default-Thread-9) 
Schedule Task[id=ID:bb2c6efa-62b7-11ea-a51c-c465169b5497] at Queue IANSCU
11:13:04,764 INFO  [org.dcm4chee.arc.ian.scu.IANScheduler] (EE-ManagedScheduledExecutorService-default-Thread-9) 
finished IANScheduler.execute()
11:13:04,801 INFO  [org.dcm4chee.arc.qmgt.impl.QueueManagerEJB] (Thread-12 (ActiveMQ-client-global-threads)) Start 
processing Task[id=ID:bb2c6efa-62b7-11ea-a51c-c465169b5497] from Queue IANSCU with Status: SCHEDULED
11:13:04,815 INFO  [org.dcm4che3.net.Connection] (Thread-12 (ActiveMQ-client-global-threads)) Initiate connection from 
/0.0.0.0:0 to localhost:11117
11:13:04,816 INFO  [org.dcm4che3.net.Connection] (Thread-12 (ActiveMQ-client-global-threads)) Established connection 
Socket[addr=localhost/127.0.0.1,port=11117,localport=51565]
11:13:04,817 INFO  [org.dcm4che3.net.Association] (Thread-12 (ActiveMQ-client-global-threads)) DCM4CHEE->IANSCP(3) << A-ASSOCIATE-RQ
11:13:04,863 INFO  [org.dcm4che3.net.Association] (EE-ManagedExecutorService-default-Thread-7) DCM4CHEE->IANSCP(3) >> A-ASSOCIATE-AC
11:13:04,864 INFO  [org.dcm4che3.net.Dimse] (Thread-12 (ActiveMQ-client-global-threads)) DCM4CHEE->IANSCP(3) << 1:N-CREATE-RQ[pcid=1
  cuid=1.2.840.10008.5.1.4.33 - Instance Availability Notification SOP Class
  iuid=2.25.334780248116221015257243059289974336611 - ?
  tsuid=1.2.840.10008.1.2 - Implicit VR Little Endian]
11:13:04,920 INFO  [org.dcm4che3.net.Dimse] (EE-ManagedExecutorService-default-Thread-7) DCM4CHEE->IANSCP(3) >> 1:N-CREATE-RSP[pcid=1, status=0H
  cuid=1.2.840.10008.5.1.4.33 - Instance Availability Notification SOP Class
  iuid=2.25.334780248116221015257243059289974336611 - ?
  tsuid=1.2.840.10008.1.2 - Implicit VR Little Endian]
11:13:04,920 INFO  [org.dcm4che3.net.Association] (Thread-12 (ActiveMQ-client-global-threads)) DCM4CHEE->IANSCP(3) << A-RELEASE-RQ
11:13:04,921 INFO  [org.dcm4che3.net.Association] (EE-ManagedExecutorService-default-Thread-7) DCM4CHEE->IANSCP(3) >> A-RELEASE-RP
11:13:04,921 INFO  [org.dcm4che3.net.Association] (EE-ManagedExecutorService-default-Thread-7) DCM4CHEE->IANSCP(3): close 
Socket[addr=localhost/127.0.0.1,port=11117,localport=51565]
11:13:04,927 INFO  [org.dcm4chee.arc.qmgt.impl.QueueManagerEJB] (Thread-12 (ActiveMQ-client-global-threads)) Finished 
processing of Task[id=ID:bb2c6efa-62b7-11ea-a51c-c465169b5497] at Queue IANSCU with Status COMPLETED
⚠️ **GitHub.com Fallback** ⚠️