docs: private void scanForInvalidDeliveryDelay() throws SevereMessageStoreException {
      	final String methodName = "scanForInvalidDeliveryDelay";
          if (TraceComponent.isAnyTracingEnabled() && tc.isEntryEnabled())
              SibTr.entry(this, tc, methodName);
  
  
          String str = messageStore.getProperty(MessageStoreConstants.PROP_MAXIMUM_ALLOWED_DELIVERY_DELAY_INTERVAL, MessageStoreConstants.PROP_MAXIMUM_ALLOWED_DELIVERY_DELAY_INTERVAL_DEFAULT);
          if (str.equals(MessageStoreConstants.PROP_MAXIMUM_ALLOWED_DELIVERY_DELAY_INTERVAL_DEFAULT)) {
          	 if (TraceComponent.isAnyTracingEnabled() && tc.isEntryEnabled())
                   SibTr.exit(this, tc, methodName, "No scan");	
          	 return;
          }
          try {
              final long maximumAllowedDeliveryDelayInterval = Long.parseLong(str);
              maximumTime = System.currentTimeMillis() + maximumAllowedDeliveryDelayInterval;
  
          } catch (NumberFormatException exception) {
              // No FFDC Code Needed.
              lastException = exception;
              lastExceptionTime = timeNow();
              SibTr.debug(this, tc, methodName, "Unable to parse property: " + exception);
              //TODO Output a warning message, no scan.
              if (TraceComponent.isAnyTracingEnabled() && tc.isEntryEnabled())
                  SibTr.exit(this, tc, methodName, "No scan, exception="+exception);	
         	    return;
          }
          
          MessageStoreConstants.MaximumAllowedDeliveryDelayAction action; 
          try {
          	String actionStr = messageStore.getProperty(MessageStoreConstants.PROP_MAXIMUM_ALLOWED_DELIVERY_DELAY_ACTION, MessageStoreConstants.PROP_MAXIMUM_ALLOWED_DELIVERY_DELAY_ACTION_DEFAULT);        
              action = MessageStoreConstants.MaximumAllowedDeliveryDelayAction.valueOf(actionStr);
  
          } catch (IllegalArgumentException illegalArgumentException) {
          	 lastException = illegalArgumentException;
               lastExceptionTime = timeNow();
               SibTr.debug(this, tc, methodName, "Unable to parse property: " + illegalArgumentException);
               action = MessageStoreConstants.MaximumAllowedDeliveryDelayAction.warn;
          }       
          
          // Point to the start of the deliveryDelayIndex tree.                  
          deliveryDelayIndex.resetIterator();
          DeliveryDelayableReference deliveryDelayableRef = deliveryDelayIndex.next();
          try {
          	while (deliveryDelayableRef != null && deliveryDelayableRef.getDeliveryDelayTime() > maximumTime) {
  
          		DeliveryDelayable deliveryDelayable = (DeliveryDelayable) deliveryDelayableRef.get();
          		 SibTr.debug(this, tc, methodName, "deliveryDelayable="+deliveryDelayable+" deliveryDelayable.deliveryDelayableIsInStore()="+deliveryDelayable.deliveryDelayableIsInStore());	
          		// The soft reference should not be null during startup when the scan is done. 
          		if (deliveryDelayable != null && deliveryDelayable.deliveryDelayableIsInStore()) {
          			boolean unlocked = deliveryDelayable.handleInvalidDeliveryDelayable(action);
                      if (unlocked)
      			        remove(deliveryDelayableRef, true);   			
          		}
          		deliveryDelayableRef = deliveryDelayIndex.next();
          	}
          	
          } catch (MessageStoreException | SIException exception) {
  
              SevereMessageStoreException severeMessageStoreException = new SevereMessageStoreException(exception);
              lastException = exception;
              lastExceptionTime = timeNow();
              if (TraceComponent.isAnyTracingEnabled() && tc.isEntryEnabled())
                  SibTr.exit(tc, methodName, severeMessageStoreException);
              throw severeMessageStoreException;
          }
          
          if (TraceComponent.isAnyTracingEnabled() && tc.isEntryEnabled())
              SibTr.exit(this, tc, methodName);		
  	}