Qorus Integration Engine  3.0.4.p7
Qorus 2.8 Series

back to Release Notes

Qorus 2.8.1

Release Overview

This release contains major new features and many bugfixes over 2.8.0.p1.

New Features

New Qorus features:

  • HTTP server improvements:
    • implemented support for PUT and DELETE methods
    • much improved handler matching algorithm; all handlers are scanned and the best match is used
  • new classes:

New modules:

  • SqlUtil: provides functionality for db-independent schema management and SQL operations
  • RestClient: provides client-side REST support
  • Util: provides some simple utility functions
  • RestHandler: provides infrastructure for implementing REST services using the Qorus HTTP server
  • WebSocketHandler: provides infrastructure for implementing RFC-6455 based WebSocket services using the Qorus HTTP server

Other changes:

Issues Fixed

Issues Fixed

Bug ID Severity Description Change
614 MINOR original file source information not available in service code at runtime in track traces and exception info fixed in Qorus
613 MINOR original file source information not available at runtime in job code in track traces and exception info fixed in Qorus
612 CRITICAL the error status from a detach function can affect the next step executed in the same thread even if the step is actually COMPLETE fixed in Qorus
611 CRITICAL parse options are not enforced properly on the block level, also subclasses inheriting code with different parse options will cause the child parse options to be used when running the parent class code which causes errors fixed in the qore library
610 CRITICAL if a non-variable reference is included in an "our" variable declaration list, a parse-time crash will result due to a memory error in the parser fixed in the qore library
609 CRITICAL service APIs using event APIs can get into a spinlock condition when the system is shutdown as there is no indication that the internal API is returning immediately due to a system shutdown condition fixed in Qorus
608 MINOR oload fails to load system services and user services in the same call because it creates the internal service library incorrectly fixed in oload
607 NORMAL a bug related to out-of-order parse initialization for functions and methods can result in the wrong return type being returned for a method with more than 1 variant where the variant cannot be matched at parse time fixed in the qore library
606 NORMAL parse exceptions and warnings when validating types used with the return statement can be reported at the wrong source location fixed in the qore library
605 MINOR the info component of warning messages is repeated in the workflow log files fixed in Qorus
604 NORMAL parse exceptions for empty blocks with a missing return statement are reported at the wrong source location fixed in the qore library
603 CRITICAL public members and static variables of privately-inherited classes are incorrectly treated as public attributes of the child class fixed in the qore library
602 MAJOR invalid unique index on the workflow_errors table makes it impossible to associate more than one workflow-specific error against a workflow fixed in Qorus
601 NORMAL parse exceptions in base class constructor arguments could be reported at the wrong source location fixed in the qore library
600 MINOR illegal arguments passed to class copy methods are ignored and never executed fixed in the qore library
599 CRITICAL declaring a parameter type for copy methods causes the copy method to be unable to be called fixed in the qore library
598 CRITICAL a parse-time crash will occur when calling the copy() method for a class that does not implement an explicit copy() method fixed in the qore library
597 NORMAL it's not possible to output a single '\' character in a regex substitution expression: a single '\' is taken as an escape code, and '\' is output literally fixed in the qore library
596 MINOR when rescheduling a READY order with a future date, the workflow status is not updated to SCHEDULED fixed in Qorus
578 CRITICAL an error managing failed SSL connections causes the qorus process to take 100% CPU usage and must be killed after shutdown as well fixed in the qore library

Qorus 2.8.0.p1

Release Overview

This release was mostly a bugfix release; see below for more information.

New Features

Issues Fixed

Issues Fixed

Bug ID Severity Description Change
595 NORMAL parse exceptions resolving global variables could be reported at the wrong source location fixed in the qore library
594 NORMAL system events for workflow order instance creation are not emitted when subworkflow order instances are created fixed in Qorus
593 NORMAL error_instance rows are not created when errors happen in the detach function fixed in Qorus
592 NORMAL the autostart flag is updated by oload even if manually set by operations with the API fixed in oload and in Qorus
591 NORMAL the qore library can sometimes show the incorrect source location when type errors are found in function or method calls fixed in the qore library
590 MAJOR some broken sftp servers set the file's mode to 0 when opening a file read-only when using the ssh2 module fixed in the ssh2 module
589 CRITICAL changing the global retry_delay or async_retry options in workflow code during a workflow reset in the onetimeinit function can cause a spurious exception and results in a condition where qorus has to be killed to be shut down fixed in Qorus
588 MAJOR oload ignores service code outside of method declarations, previously this code was included in the following code object fixed in oload
587 MINOR classes with unimplemented inherited abstract variants can sometimes throw runtime exceptions when instantiated but should instead be caught at parse time fixed in the qore library
586 NORMAL the ? : operator gives the wrong types at parse time resulting in incorrect parse type errors fixed in the qore library
585 MINOR oload does not refresh the step map when inserting or updating steps fixed in oload

Qorus 2.8.0

Release Overview

Qorus 2.8.0 is a minor release over the Qorus 2.7 Series branch, however bringing major new features to the Qorus platform. It is based on the Qore 0.8.7 library, which contains major new features over previous versions of Qore as well.

Upgrade Notes

Due to the RBAC changes in this release, existing user security configurations (meaning application permissions and access groups associated to users) are migrated to new custom single-use roles which are created by the upgrade logic in the Qorus application installation script and are associated only to the user being migrated.

After the migration the updated user-tool script or the updated RBAC system APIs can be used to review, change, delete, or coalesce roles and users as desired.

The goal of the migration logic is to leave existing users with the same security configuration as before the upgrade, however represented with the corrected RBAC model.

Changes Affecting Backwards-Compatibility

  • RBAC Overhaul
    The RBAC implementation was completely redesigned to provide a proper RBAC implementation; the previous implementation was "role-based" only in name.
    following changes were made:
    • roles were renamed permissions
    • profiles were renamed roles
    • all security configuration information was moved away from users and placed in roles; as of this release, Qorus users derive their complete security configuration solely from the roles associated to them.

    Corresponding changes were made in RBAC system APIs and also to the system data model.

New Features

  • Extensible RBAC and LDAP Integration
    • QorusRbacAuth.qm: this user module provides the AbstractRbacProvider class which can be used to implement external authentication and RBAC support to Qorus
    • QorusLdapAuth.qm: this user module uses the AbstractRbacProvider class in the QorusRbacAuth.qm user module and the openldap module to provide flexible LDAP integration to Qorus (see LDAP Authentication and RBAC Integration for more information)
    • rbac-external: a new system option to allow external RBAC providers to be set
    • user-tool was updated to support operations with external RBAC providers such as "QorusLdapAuth" using the -B option.
  • Workflow Error Definition Changes
    Workflow errors are now stored in the database in two new tables:
    • GLOBAL_WORKFLOW_ERRORS: global workflow error definitions
    • WORKFLOW_ERRORS: workflow-specific error definitions

    The ownership of the error definitions has changed from developers (who are now only responsible for the initial error definitions) to operations. oload has been updated to load in error definitions into the two tables listed above and Qorus has been modified to do the same for existing workflows in the database that are started the first time.

    Once workflow error definitions are in the error tables, these definitions are used exclusively. The first time a workflow error definition is created, it is stored in the GLOBAL_WORKFLOW_ERRORS table. If another workflow defines the same error with different parameters, then a workflow-specific version of the error is stored in WORKFLOW_ERRORS.

    There is a new flag on workflow-specific error definitions: "manually_updated". If this flag is set to True, meaning that the error has been updated through the API, then the manually-updated error will not be overwritten by definitions in workflow error functions.

    New system API methods have been implemented to provide operations the ability to redefine, create, and generally manipulate error definitions in the way that makes the most sense for operations. The new methods are as follows:
  • User-Defined Tags
    User-defined tags can now be associated to all code objects (and many other object types). User-defined tags are added to code files using the special tag "TAG: " and then the tag name followed by another colon and the tag value. For example, to add user-defined tags to a step:
    # type: STEP
    # version: 1.1
    # desc: example step function
    # name: example_func
    # author: Qore Technologies, sro
    # TAG: release: BSS-100.a.10.5
    %new-style
    %require-types
    
    sub example_func() {
    }
    # END
  • Source Location in Errors
    New features of Qore 0.8.7 are used that allow the source file name and line offset to be stored for all code objects so that the original source location can be displayed alongside the embedded code object's location in exception information so that manually extrapolating the source line of an error in a source file is no longer necessary. For example:
    OMQ-quark-1.log:2013.02.04 17:05:33.645915 T185: SVC: user.ebs-ie-opco-in-b4n_polling: error autostarting user service: SFTP-PROPERTY-ERROR: <run-time-loaded: FUNCTION lib-opco-in-generic-sftp-polling:1.0>:115 (source "lib-opco-in-generic-sftp-polling-v1.0.qfd":121) (while calling user.ebs-ie-opco-in-b4n_polling.init()): User exception: <run-time-loaded: FUNCTION lib-opco-in-generic-sftp-polling:1.0>:115 (source "lib-opco-in-generic-sftp-polling-v1.0.qfd":121): SFTP-PROPERTY-ERROR: missing property "b4n-host" in the "sepl" domain or in the "ebs-ie-opco-in-b4n_polling" domain

    The source location is stored in user tags and is only available for objects loaded by the new oload included with this release; objects already in the database will not have any source location associated to them until they are reloaded with oload.
  • Oracle Advanced Queueing Support
    The oracle driver now contains support for retrieving and posting events to Oracle Advanced Queues.
  • Job API Methods for Job-Specific Options
    The following new methods were implemented:
  • oview Changes
    oview now supports displaying source-code equivalents from API queries for functions, constants, classes, and services

System Schema Data Model 2.8.0 Changes

  • New Tables
    • EXTERNAL_USER_STORAGE: external key-value storage for external RBAC users
    • GLOBAL_WORKFLOW_ERRORS: global workflow error definitions
    • WORKFLOW_ERRORS: workflow-specific error definitions
    • FUNCTION_INSTANCE_TAGS: function instance tags
    • CLASS_TAGS: class tags
    • CONSTANT_TAGS: constant tags
    • SERVICE_TAGS: service tags
    • SERVICE_METHOD_TAGS: service method tags
    • QUEUE_TAGS: queue tags
    • WORKFLOW_EVENT_TYPES_TAGS: workflow event type tags
    • STEP_TAGS: step tags
    • WORKFLOW_TAGS: workflow tags
    • JOB_TAGS: job tags
  • Changed Tables
    • ROLE_TYPE renamed to PERMISSION_TYPE
    • ROLES renamed to PERMISSIONS
    • PROFILES renamed to ROLES
    • PROFILE_ROLES renamed to ROLE_PERMISSIONS
    • PROFILE_GROUP_ACCESS renamed to ROLE_GROUP_ACCESS
  • Dropped Tables
    • USER_GROUP_ACCESS

Issues Fixed

Issues Fixed

Bug ID Severity Description Change
584 MAJOR a deadlock occurs when a workflow is reset while a synchronous workflow is running and then a stop command is sent to the synchronous execution instance fixed in Qorus
583 CRITICAL assigning a local variable which is already a reference to a global variable which is a reference causes a runtime crash fixed in the qore library
582 CRITICAL an error in the "reference" type handling allows non-reference values to be passed to builtin code expecing references which causes a crash fixed in the qore library
581 MINOR workflow instance does not update modified_date when it does to an error fixed in Qorus
580 MINOR oracle libraries cannot be found by the installation script when the lib path is not set in (obsolete) LD_LIBRARY_PATH but is set in /etc/ld.conf fixed in the install script
579 CRITICAL parseBase64StringToString() returns an invalid string when called with an empty string - causes a crash fixed in the qore library
578 CRITICAL an error managing failed SSL connections causes the qorus process to take 100% CPU usage and must be killed after shutdown as well fixed in the qore library
577 CRITICAL trying to dynamically call a function that does not exist results in a deadlock due to an error where a critical mutex is left locked indefinitely fixed in the qore library
576 CRITICAL declaring an abstract method with parameters and then declaring a concrete reimplementation of the method in a child class with no parameters causes a parse-time crash fixed in the qore library
575 MINOR oload does not allow workflow event types to be deleted fixed in oload
574 MINOR oload allows system service methods to be deleted fixed in oload
573 TRIVIAL oload fails with an SQL error message when deleting queues if the queue is referenced by an existing step or if queue data exists; queue data should also be deleted if no step references exist fixed in oload
572 MINOR oload allows functions, classes, or constants to be deleted even if they are referenced as library objects fixed in oload
571 MINOR there is a memory leak handling exceptions that occur due to evaluations made at parse time fixed in the qore library
570 NORMAL errors in managing datasource allocations with the SQLStatement class could lead to hanging transactions, deadlocks, or incorrect SQL behavior fixed in the qore library
569 NORMAL not possible to delete a group that has associated roles (ex profiles) fixed in Qorus
568 MAJOR perl-style boolean evaluation broken with global variables: they are evaluated mathematically (old style) regardless of the boolean evaluation setting fixed in the qore library
567 CRITICAL a "soft deadlock" can occur when resetting user services using global HTTP handlers, blocking the service from unloading or running fixed in Qorus
566 MINOR a race condition in shutting down services while they are being started can cause spurious exceptions to appear in the system log fixed in Qorus
565 MAJOR the default administrator user "admin" created in new installs and with upgrades has a default password "admin" that causes Qorus security issues fixed in Qorus
564 NORMAL the client library initializes datasource pools for db actions with server settings even though only 1 connection is normally needed fixed in the Qorus client library
563 MAJOR user classes created in 2 different Program objects (ex: Qorus services) are not always seen as compatible at runtime fixed in the qore library
562 MAJOR generation of internal strings for abstract method signatures is done while parsing but tries to resolve class names in the signature types whereas this information is not available fixed in the qore library
561 MAJOR declaring a parameter with type reference prohibits the reference from being assigned to NOTHING even if it may be legal for the original lvalue fixed in the qore library
560 MAJOR calling omq.system.reload-rbac() while rbac is enabled causes the system to try and autostart services in disabled groups fixed in Qorus
559 MAJOR user-tool and the group system APIs allow the default group DEFAULT to be deleted or modified fixed in Qorus
558 MAJOR performing group update operations or calling omq.system.rload-rbac() while rbac is enabled and services are being initialized leads to a deadlock fixed in Qorus
580 MINOR install in oracle - LD_LIBRARY_PATH vs. ld.conf fixed in Qorus
581 MINOR workflow instance does not update modified_date when it goes to an error fixed in Qorus