Release notes RPM

This post summarizes all the beta versions since the release.


  • Completely overhauled the job launcher that schedules and executes print jobs after they arrive. Some users had seen that output stopped. We put a lot of resources into fixing this; since then, while testing, we have sent over a million jobs into RPM, and we are satisfied this problem is behind us.
  • Reinstated support for device limits
  • On startup, we now clear the error status from existing jobs, so they are not restricted from starting
  • We also clear the error status for queues when you resume (turn ‘off’ suspend) or enable
  • We post the active job status proactively to the user interface when we launch the job and when it completes
  • On job errors, we take more caution to make sure the UI shows the job error status and the message
  • Launcher was sometimes failing to remove files in the TEMP folder because they were still in use; RPM now has a thread that will attempt to remove files periodically until they are gone
  • Update to job error handling: if the error was due to a problem with a transform, we now clean up sufficiently that a job retry might succeed

Job management

  • All jobs are now spooled to a folder and added to RPM by a task in the background. This happens continuously. There should no longer be delays starting RPM when significant numbers of jobs are left from a previous run.
  • The text banner transform can now safely follow a data extraction transform and display the desired fields
  • Jobs that failed were occasionally marked as “complete”. This is fixed.
  • Overhauled and streamlined the way the job manager creates jobs, updates jobs, and issues database commands
  • When RPM removes a job for any reason, the text reason is now included in the log and other messaging, for instance, if the job completed normally, removed manually, or due to job retention policies
  • The Jobs folder is now assigned parallel to the Spool folder
  • While resetting job status on startup, RPM proactively updates any jobs not in “wait” status so that the UI reflects this for the user
  • RPM was failing to archive jobs on a hidden Windows share
  • Addressed a problem where we weren't able to use credentials to examine a folder on a hidden share. This is fixed.
  • Archive to folder action now reports when the folder is not found and the folder path is not a folder
  • The job cleanup manager could exit on startup
    • If you had job retention turned on with a maximum number of jobs and have a queue with more jobs than the retention limit, RPM could exit on startup

Process management

  • We updated all the code in RPM that runs a program. We had occasional reports of RPM failing to run a program, be it a user’s filter program or the PCL to PDF utility. We updated the filter action, filter transform, PCL to PDF and PCL to PostScript, the email action, the alert function, the LPR and IP Printer actions, the device tester, and the interactive Text and Raw Printer actions
  • Simplified process management and updated the way we check on idle time for processes we launch
  • Eliminated the “shell” option from running a process as an action or transform
  • The filter action and transform now have a setting to react to the program exit code as an error, including a diagnostic log message and a Critical Event
  • The process code now logs the directory it’s running in


  • Update the PCL to PDF transform to include the trial watermark and overlay options
  • Now shipping a new version of the PCL to PDF utility
  • The string translator could lose a byte here and there on large substitutions using regular expressions


  • Now allows an incorrectly formed queue status command as some mainstream print clients fail to follow the RFC specification
  • Added logic to detect that client lost network connection while sending the data file, which happens often on some networks (possibly VPN). We handle these incomplete jobs using the UI settings to error the job, delete, or ignore the error and process it anyway
  • LPD object was “closing” twice, which is unnecessary and resulted in an erroneous diagnostic log message that the queue was not specified (although it was)
  • Added the connection ID from the socket manager to the properties for the job and some of the diagnostic logging, so we could track an LPD job from the initial connection to job scheduling.
  • The LPD protocol now adds port settings to the parameters in the job so that the LPD manager can determine the right setting for auto-creating the queue if it doesn’t exist
  • The “LPQ” or “print queue status” command now returns text results as expected
  • The verbose or long version of the “LPQ” command now returns the results
  • If you do a status query on a queue that doesn’t exist, you get immediate feedback
  • Also updated the “LPQ” message text for non-existent queues in those instances where RPM is not configured with permission to automatically create the queue

Device manager

  • The device error message includes the device type and attempts to look up the queue name
  • Device error messages are now written to the event log a maximum number of times (5) although the device continues to be tested, silently
  • If the device error clears, we note that in the event log as well

Queue Folder

  • Completely removed the old program and replaced it with a new one. Queue Folders now routinely fetch tens of thousands of files without issue.
  • The Queue Folders module in RPM now moves the new file or files from the watch folder to a staging area. In the past, if files were created in the watch folder faster than Queue Folders could process them, it may submit the file multiple times which didn't help to process if it was otherwise bottle-necked


  • Addressed logic in the email program and the module that manages it, to better track and log exception returns
  • If the service can’t start, it now attempts to send an alert email provided the Email Notification settings are in place (Configure / Notification Settings)
  • Email action now handles a trailing comma in a To: address
  • Email action parses the output of the email client program and records it in the event log
  • Fixed an exception in the email alert process
  • Critical event emails now include the RPM version, the Windows version, and the product serial number


  • Added startup messages, updated many existing messages, and removed several
  • Removed the document management warning from the device tester and print actions
  • Improvement to diagnostic log to suppress newlines from data we are logging
  • Somewhat increased the number of things we include in the diagnostic log
  • Message log entries are now spooled to disk rather than being cached in memory

User interface

  • If the user enables “use overlay” then make sure they select an overlay
  • Text to PDF: better security options


  • Added “Multiplexor” to the list of adapters names we ignore alongside Juniper


  • Overhauled the way we do database queries and updates
  • Upgraded our handling of converting text date/time statements


  • File handling: Improved the way we manage file operations in a threaded environment; as soon as we did this, several unusual errors were eliminated
  • Server sockets are now removed gracefully when the service exits unexpectedly
  • PDF Gen now runs 60 minutes idle before shutting down
  • The RPM installer will suppress the upgrade dialog if the /silent switch is used
  • Somewhat simplified the chain of events for outgoing RPC and solved some issues which were preventing the UI from recognizing events from the service
  • The process for adding a telnet protocol was taking an exception; this is fixed
  • We put the startup code for Timer manager in its own thread, in case it has to read thousands of stored time events (such as the time to remove a job)