##############################################################################
@RELEASE: 6.9-2b
##############################################################################
@SUMMARY: This is a supervisor-only patch release of 6.9-2 that includes the
following key fixes.
==== CL 18910 ====
@INTERNAL FIX: supervisor patches to help cut down on the number of threads,
and reduce chances of repeated worker rejections on some farms due to
race-conditions/timing issues.
ZD17713
==== CL 18822 ====
@FIX: a bug in the startHost() dispatch routine causing the supervisor NOT to
always dispatch jobs to workers when they became available.
ZD: 17713
###############################################################################
@RELEASE: 6.9-2a
##############################################################################
@SUMMARY: 6.9-2a is a patch release of 6.9-2, and includes the following fixes.
==== CL 18717 ====
@FIX: Job instances can become unkill-able with QB_PREEMPT_MODE_FAIL internal status
JIRA: QUBE-2819
==== CL 18351 ====
@CHANGE: background helper thread improvements
* limit the number of workers that are potentially recontacted by the background helper routine to 50 per iteration.
* background thread exits and refreshes after running for approximately 1 hour, as opposed to 24 hours
ZD: 17124
==== CL 18340 ====
@FIX: allow special characters in job name field at submissions
JIRA: QUBE-2748
==== CL 18324 ====
@CHANGE: output of "qbadmin s -config" and "qbadmin w -config hostname" now sorted alphabetically.
JIRA: QUBE-2654
==== CL 18285 ====
@FIX: add better error-checks in cmdrange jobtype's log-parsing code, in case the log file is not readable.
In some situations, fseek() was causing crashes in the parseFileStream() routine.
ZD: 17442
==== CL 18221 ====
@FIX: prevent "host.processors" to be unset when jobs are modified.
JIRA: QUBE-2649
==== CL 18157 ====
@FIX: shortened the timeout for "qbreportwork" when it reports a "failed" work that has migrate_on_frame_retry from 600 seconds to 20.
This was causing long 10-minute pauses on the job instance when a frame
fails after exhausting all of its retry counts.
Original change was made in CL17206, for QUBE-2202/ZD16553.
ZD: 17447
==== CL 18147 ====
@FIX: Windows worker wouldn't properly release automounted drives at the end of running a job instance
ZD: 17400
==== CL 18001 ====
@FIX: Pytnon API's qb.ping(asDict=True) was broken when metered licensing was unauthorized, because of the minus sign
==== CL 17889 ====
@CHANGE: job queries requesting for subjob and/or work details now must explicitly provide job IDs.
Both qbjobinfo() C++ and qb.jobinfo() Python APIs now reject such submissions and return an error.
For example, the Python call "qb.jobinfo(subjobs=True)" will raise a runtime exception. It must be now called like "qb.jobinfo(subjobs=True, id=12345)" or "qb.jobinfo(subjobs=True, id=[1234,5678])"
JIRA: QUBE-244
==== CL 17863 ====
@FIX: Qube language callback command "mail-status" wasn't working properly, setting the smtp "TO" field to an incorrect string.
==== CL 17858 ====
@FIX: qb.deleteworkerproperties() and qb.deleteworkerresources() fn should return an error when used with the wrong 2nd arg (must be a list)
ZD: 16932
JIRA: QUBE-2381
==== CL 17856 ====
@FIX: misleading "invalid key" error message in supelog when supervisor_max_metered_licenses set to 0
JIRA: QUBE-2397
==== CL 17797 ====
@FIX: ignore any ethernet interface with "virutal" in its description when detecting the primary MAC address on Windows.
ZD 17072
==== CL 17790 ====
@FIX: issue where the background helper thread frequently sends 2 or more update requests (QB_MESSAGE_REQUEST_UPDATE) to a single "questionable" worker (i.e., one that has missed enough heartbeats, and potentially down) at once.
ZD: 17124
==== CL 17735 ====
@FIX: badlogin jobs can't be retried or killed (previously fixed in CL15011, but regressed)
JIRA: QUBE-642
ZD: 12699, 17010
==== CL 16491 ====
@NOTES:Add support for AfterEffects point release scheme (2015.3)
##############################################################################
@RELEASE: 6.9-2
##############################################################################
@SUMMARY: This is a maintenance release of 6.9, and includes a few fixes
and improvements to 6.9-1. Recommended upgrade for all 6.9 customers.
##############################################################################
==== CL 17763 ====
Supervisor and worker now use correct startup scripts for CentOS 7+.
==== CL 17735 ====
@FIX: badlogin jobs can't be retried or killed (previously fixed in CL15011, but regressed)
JIRA: QUBE-642
ZD: 12699, 17010
##############################################################################
@RELEASE: 6.9-1
##############################################################################
@SUMMARY: This is a maintenance release of 6.9, and includes a number of fixes
and improvements to 6.9-0. Recommended upgrade for all 6.9 customers.
##############################################################################
==== CL 17696 ====
@UPDATE: add explanation for "deferTableCreation" to the python qb.submit() API routine.
JIRA: QUBE-2400
==== CL 17692 ====
@FIX: another memory leak plugged in the startHost()-related routine, startQualifiedJobsOnHost(). This was causing successful itereations of startHost() (i.e., an instance was dispatched to a worker) to cause memory bloats. Among other places, it was affecting the background helper thread (when it does the "requeuing host" routine.
JIRA: QUBE-2382
==== CL 17649 ====
@FIX: memory leak in preemption code, especially when preemption policy is set to passive or is disabled by the algorithm.
QUBE: JIRA-2382
==== CL 17634 ====
@FIX: memory leak in one of the host-triggered dispatch routines
startQualifiedJobsOnHost(), which is called from startHost().
Among other things, this was bloating the memory usage inside the helper
routine running in a background thread/process (cleanermain()).
JIRA: QUBE-2382
ZD: 16952
==== CL 17610 ====
@FIX: memory corruption that would cause python or perl to crash when the function was called inside jobs.
JIRA: QUBE-2389
==== CL 17595 ====
@FIX: fixed memory leak in QbPack::store() and storeXML() methods, which were causing, among other things, supervisor threads to bloat when processing large job submissions
JIRA: QUBE-2382
==== CL 17594 ====
@FIX: plugged a potential memory leak in QbDaemon communication code, affecting all server (supervisor, worker) programs
JIRA: QUBE-2382
==== CL 17593 ====
@FIX: plugged memory leak in dispatch code
JIRA: QUBE-2382
==== CL 17592 ====
@FIX: plugged potential memory leak in user permission-check routine, specifically in the group-access check code
JIRA: QUBE-2382
==== CL 17566 ====
@NEW: qbwrk.conf loading optimization (and thus "qbadmin w -reconfig" speed up) by explictly listing template names and non-existing hostnames in the new [global_config] section
* added [global_config] section to the qbwrk.conf file, and allow new config parameters "templates" to list all qbwrk.conf template section names, and "non_existent" to list all non-existent hostnames
* supe skips ip-address resolution for all section names included in "templates" and "non_existent", and all reserved names, i.e.: "global_config", "default", "linux", "osx", and "winnt", thus speeding up the loading of qbwrk.conf file, which in turn speeds up supervisor boot time and "qbadmin w -reconfig" operation.
JIRA: QUBE-2346
==== CL 17540 ====
@CHANGE: removed unnecessary submit-time check/rejection of omithosts and omitgroups.
ZD: 16907, 16908
JIRA: QUBE-2366
==== CL 17449 ====
@FIX: directory deletion during log cleanup can fail if the supervisor is updating the job history file at the same time
==== CL 17435 ====
@FIX: supervisor process handling a qbping request should always reread the license file before replying
There was a code path that instructs the supe thread to force-read the
license file, but the read was not happening under certain conditions; the
code was returning the old cached data if available, or the default count
of 2 if the cache isn't available.
* add a few more informational lines to print to the supelog at license
re-reading.
JIRA: QUBE-2317
==== CL 17422 ====
@FIX: make formatting and object instantiation compatible with Python 2.6
==== CL 17416 ====
@FIX: remove unnecessary error message in the schema upgrade routine
JIRA: QUBE-2283
==== CL 17414 ====
@CHANGE: Add more text to describe the subtle yet significant difference between "retry" and "requeue" Python API routines
JIRA: QUBE-2049
==== CL 17403 ====
@FIX: jobs with status "registering" appears when submissions are rejected due to incorrect requirements specifications
ZD: 16408
JIRA: QUBE-2034
==== CL 17402 ====
@FIX: intermittent bug where some supe threads won't properly read the supervisor license key from qb.lic
* add warning message to print to supelog when the license file reader
returns zero-length data
ZD: 16828
JIRA: QUBE-2317
==== CL 17390 ====
@FIX: post-flight should only be run when qbreportwork() is invoked with an agenda-item with terminal-state
JIRA: QUBE-2032
ZD: 16412
==== CL 17376 ====
@FIX: Triggers incorrectly executing multiple times
When a composite (i.e, using && or ||) trigger is specified for a job's callback, such as "done-job-job1 && done-job-job2",
the callback would erroneously get run multiple times.
ZD: 16282
JIRA: QUBE-1881
==== CL 17369 ====
@FIX: issue introduced in 6.9 where requestwork() jobtype backend routine will crash when frame padding is 40 or greater.
Python jobtype backend, in particular, was found to crash during a call to
the API routine qb.requestwork(), with a "*** stack smashing detected ***:"
error message and a backtrace.
ZD: 16759
JIRA: QUBE-2318
==== CL 17290 ====
@TWEAK: license-reading routine prints the total license count to the supelog
JIRA: QUBE-2003
==== CL 17289 ====
@TWEAK: "ping" handler to print out more info to supelog
Every "qbping" will print out something like the following supelog now:
[Nov 18, 2016 16:25:55] shinyambp[11662]: INFO: responded to ping request from [127.0.0.1]: 6.9-0 bld-custom osx - - host - 0/11 unlimited licenses (metered=0/0) - mode=0 (0)
JIRA: QUBE-2002
==== CL 17231 ====
@FIX: disabled verbose option for logging libcurl actions
==== CL 17208 ====
@CHANGE: Popluate the subjob (instance) objects with more data (like status), and not just the IDs, when subjob info is requested via "qbhostinfo" (qb.hostinfo(subjobs=True) for python API)
Previously, only jobid, subid, and host info (name, address, macaddress)
were filled. Now, things like "status", "timestart", "allocations",
etc. are properly filled in.
JIRA: QUBE-2073
ZD: 16541
==== CL 17206 ====
@FIX: When "migrate_on_frame_retry" job flag is set, prevent backend from doing further processing (especially another requestwork()) after a work failed
This was causing race-conditions that will get agenda items to be stuck in
"retrying" state, while there are no instances processing them.
Now the reportwork() API routine is modified so that if it's invoked to
report that a work "failed", and the "migrate_on_frame_retry" is set on the
job, it will stop processing (does a long sleep), and let the worker/proxy
do the process clean up.
JIRA: QUBE-2202
ZD: 16553
==== CL 17186 ====
@FIX: "VirtualBox Host-Only Ethernet Adapter" now when daemons (supe, worker) try to pick a primary mac address
JIRA: QUBE-2149
ZD: 16561
==== CL 17182 ====
@CHANGE: all classes that inherit from QbObject print as a regular dictionary, no longer have a __repr__ which prints the job data as a single flat string
@NEW: add qb.validatejob() function to python API, help find malformed jobs that crash the user interfaces
==== CL 17141 ====
@FIX: Any job submitted from within a running job picks up the pgrp of the submitting job
By design, if the submission environment has QBGRPID and QBJOBID set, the
API's submission routine will set the job's pgrp and pid, respectively to
the values specified in the environment variables.
One couldn't override this "inheritance" behavior even by explicitly
specifying "pgrp" or "pid" in the job being submitted, for instance with
the "-pgrp" command-line option of qbsub.
Fixed, so that setting "pgrp" to 0 on submission means that the job should
generate its own pgrp instead of inheriting it from the environment.
JIRA: QUBE-2141
ZD: 16545
==== CL 17101 ====
@NEW: add "-dying" and "-registering" options to qbjobs.
@CHANGE: also add dying and registering jobs to the "-active" filter.
JIRA: QUBE-2091
ZD: 16469
==== CL 17083 ====
@FIX: Python API: qbping(asDict=True) crashes when used against older (pre-6.9) supe
Among other things, this was causing WV to crash and AV to note an
exception (but not crash) when starting up with an older supervisro.
JIRA: QUBE-2084
##############################################################################
@RELEASE: 6.9-0
##############################################################################
==== CL 16804 ====
@TWEAK: added code to print what operation was requested, when printing out "permission granted to user..."
==== CL 16776 ====
@FIX: Python API should handle exception for when gethostbyname() doesn't work in mysqlConnect
JIRA: QUBE-1965
==== CL 16770 ====
@CHANGE: Ensure that the pending reasons returned by qb.hostorder (or qbhostorder command) take metered licensing into account
JIRA: QUBE-1986
==== CL 16696 ====
@NEW: add supervisor_max_metered_licenses support to qb.conf, which enables site-admins to customize the effective limit of metered licenses that can be used at any given time.
This number must be smaller than the metered account's limit, or it will be
capped at the account limit.
Setting this to 0 effectively disables metered licensing, while setting it
to -1 (default), allows usage up to the metered account's limit .
JIRA: QUBE-1867
==== CL 16668 ====
@NEW: made available some frame-padding related environment variables during the execution of job instances and pre/postflights:
QB_FRAME_PADDING
QB_PADDED_FRAME_NUMBER
QB_PADDED_FRAME_START
QB_PADDED_FRAME_END
QB_PADDED_FRAME_STEP
JIRA: QUBE-1841
==== CL 16665 ====
@CHANGE: All "subjob" sections in qbsummary output show "instance" in the title
@CHANGE: renamed "*vs" options to "*vi" (such as "pvi" or "cvi"). For
compatibility, the older names still work, just not advertised in the
"help" output
@FIX: const-ness of QbString::replacevalue() method
JIRA: QUBE-1617
==== CL 16643 ====
@FIX: added dependency on mysql-libs (or mariadb-libs) to the supervisor RPM
JIRA: QUBE-1784
==== CL 16642 ====
@CHANGE: automatic capping of priorities to supervisor_highest_user_priority
if an ordinary (non-admin) user tries to submit jobs at a higher priority (i.e. lower numerical value) than supervisor_highest_user_priority, the jobs will be accepted but with the priority automatically (and silently, except for a WARNING message in the supelog) capped at supervisor_highest_user_priority
JIRA: QUBE-1804
==== CL 16629 ====
@CHANGE: "kill work" on a running agenda item will now put the instance processing the agenda item back to "pending", instead of also killing it.
JIRA: QUBE-627
==== CL 16628 ====
@FIX: "qb_default_string()" warning printed during linux qube-core installation
Corrected code so that warnings like the following won't print any more:
WARNING: qb_default_string() unknown value[1001]
WARNING: qb_default_string() unknown value[1002]
JIRA: QUBE-1894
==== CL 16602 ====
@FIX: misleading database name printed in error handler for MySQL stored procedures PFX_CALC_CPU_TIME() and PFX_CALC_AVG_WORK_TIME(); "ERROR: TABLE NOT FOUND IN DB pfx_dw.<actual_database_name>"
==== CL 16517 ====
@FIX: C4D appFinder jobs don't apply path translation properly on Windows, backslashes are converted too early
==== CL 16407 ====
@NEW: add SMTP Auth support over SSL and TLS connections.
@CHANGE:
* add new mail config qb.conf parameters: mail_user, mail_password, mail_connection_type
* modified mail_port to be 0 by default, which means use the standard port depending on connection type: 25, 465 (SSL), or 587 (TLS)
==== CL 16389 ====
@FIX: calls to qb.reportwork that happen very close together can cause the supervisor to deadlock on a single frame's status
==== CL 16379 ====
@FIX: case-insensitive parsing of template names in qbwrk.conf when listed for template inheritance
The following now works (hostA will be in the "big" group):
[BigNode]
worker_groups = "big"
[hostA] : bignode
JIRA: QUBE-1809
==== CL 16369 ====
@FIX: don't mark the instance as failed if there is one more command to run, the child process has already exited, and the command is sys.exit(0); happens when maya is shut down with its native quit() function.
==== CL 16338 ====
@CHANGE: database checks script splits logging levels between stdout and stderr
==== CL 16308 ====
@CHANGE: fixed every reference to "subjob" to "instance"
JIRA: QUBE-1768
==== CL 16303 ====
@CHANGE: add supervisor mode settings (such as "disable_metered") to display in qbping output, and be returned in the qb.ping(asDict=True) Pyhon API invocation
JIRA: QUBE-1759
==== CL 16286 ====
@FIX: checkDiskUsage fails when --mysql option is used and root can't authenticate
==== CL 16269 ====
@FIX: properly support timeouts on socket connections
@NEW: add "-timeout N" option to the qbping command, and the API qbping(), qbworkerping(), and qbhostping() API routines now honor the timeout set via "qbsettimeout()".
QUBE-1746
==== CL 16266 ====
@NEW: a new command-line utility for performing both database health checks and data integrity checks
==== CL 16247 ====
@FIX: fixed qb.workid() in callbacks to return the correct workid of the current callback context (it had been always returning None)
Also changed qb.jobstatus(), workstatus(), and subjobstatus() so that, if
invoked in a callback giving no args (like a jobid and workid or subjobid),
they return the status of the respective thing (job, work, or subjob) of
the current callback context.
JIRA: QUBE-1763
ZD: 16105
==== CL 16235 ====
@FIX: a problem with the filtering added to avoid jobs with an ID of 0, in CL15821
This was causing preemption to not function in many cases.
ZD: 16006
==== CL 16229 ====
@FIX: On Windows, daemons (supe, worker) now ignore VMWare Virtual Ethernet Adapters when trying to pick a primary mac address (QbConnection.cpp) for the host, which is used to uniquely identify hosts
ZD: 14481
==== CL 16214 ====
@FIX: aerender AppFinder mangling first path conversion on Windows when using UNC
==== CL 16177 ====
@NEW: add metered_max and metered_used fields to the dict returned by qb.ping(asDict=True)
JIRA: QUBE-1745
==== CL 16145 ====
@NEW: add support for Metered Licensing
==== CL 16139 ====
@FIX: Fixed the duplicate instance of "stop_activity" (i.e., it was listed twice), to "enforce_password" in qb_supervisor_mode_flag_string(), which was causing string to int conversion of the mode flags to be incorrect
==== CL 16064 ====
@FIX: when job 'dev' attribute True, printing the job package with regex_errors causes the logParser to generate a false positive for the regex_errors match
==== CL 16049 ====
@NEW: add 'outputPath match required' to python-based jobs, frame/work is failed if no match is found
==== CL 15974 ====
@CHANGE: add support for "-conf PATH" to specify qb.conf for worker (phase 1)
QUBE-253
==== CL 15970 ====
@FIX: modified (un)install_supervisor scripts to properly support CentOS/RHEL 7+ with mariadb and systemd.
Also modified configure_mysql script (for Linux) to be able to detect the
version of mysql installed on the system, even when the server is not
running
QUBE-1663
==== CL 15964 ====
@NEW: changes to code that generates/modifies my.cnf
@CHANGE: some refactoring of the configure_mysql script (run on linux on
(un)installation of the supervisor to modify my.cnf.
@NEW: make sure "default-storage-engine=MyISAM" is set on Linux too
@NEW: add "query_cache_type=0" to my.cnf on all platforms
JIRA: QUBE-1663
==== CL 15960 ====
@FIX: jobs submitted with pgrp set to a (null) string end up having a pgrp of 0
JIRA: QUBE-1668
==== CL 15957 ====
@FIX: use of single-quotes in job dependency "info-*" syntax results in hung job instances
JIRA: QUBE-1571
==== CL 15947 ====
@CHANGE: adding "default-storage-engine=MYISAM" to the my.cnf generated for Linux/OSX supe installations
JIRA: QUBE-1663
==== CL 15936 ====
@CHANGE: add InnoDB to MyISAM conversion code in upgrade_supervisor program for all "qube" tables
JIRA: QUBE-1664
==== CL 15909 ====
@CHANGE: change flaw in auto-wrangling logic in which it sometimes won't detect a bad worker, and allows it to fail many job agendas.
When a single job instance/worker has failed all of its assigned frames (at
least aw_activation_work_count frames) for a job, while other workers are
still processing their first frame (i.e., no other worker/instance has
finished a frame), the system deems this worker "bad", locks it, and
migrates the failed frames and instance, and notify the admin.
JIRA: QUBE-1475
ZD: 15219
==== CL 15865 ====
@CHANGE: Made section headers (such as "[default]" or "[node[001-199]]") case-insensitive in config files such as qbwrk.conf
JIRA: QUBE-1356
==== CL 15821 ====
@FIX: add code to the DB routines and doPreemption() routine to silently ignore job records with job ID of 0 (likely due to corrupt DB records), which was spewing out many warning messages into the supelog
ZD:15739
==== CL 15809 ====
@FIX: backslashed characters in VRED jobs get treated as escape characters
==== CL 15700 ====
@NEW: add "--conf filename" option to supervisor to specify an alternate location and name for the qb.conf file
JIRA: QUBE-253
==== CL 15673 ====
@FIX: orphaned job processes left behind on Windows workers, especially when the proxy.exe program dies unexpectedly
ZD: 15518
==== CL 15653 ====
@FIX: setting jobss "pgrp" value prior to submission is ignored for all but the first job when submitting a list of jobs via a single call to the qbsubmit() API routine
JIRA: QUBE-1536
ZD: 15528
==== CL 15650 ====
@FIX: Explicitly setting "host.memory" in worker_resources broken on Linux
ZD: 15505
JIRA: QUBE-1531
==== CL 15642 ====
@FIX: Unix (Linux/OSX) workers, when running a cleanup process for a teminating job instance (via removeJob()), would sometimes inadvertently kill processes belonging to other job instances, due to process IDs once owned by the terminating job being reused by the system.
ZD: 15548
==== CL 15567 ====
@FIX: supervisor_default_max_cpus value was not being applied properly
ZD: 15503
JIRA: QUBE-1528
==== CL 15560 ====
@CHANGE: "modify" operation will print, into the supelog and the job's .hst file, the values of the newly modified parameters
JIRA: QUBE-1318
ZD: 14979
==== CL 15531 ====
@NEW: add run_program_and_convert_encoding.pl script, which is a wrapper to run any given program and convert its stdout from and to specified encodings (like UTF-16le to UTF-8).
Added to support 3dsmax batch (i.e., "cmdrange") submissions.
JIRA: QUBE-1210
==== CL 15462 ====
@FIX: removed submission-time check for jobtype existence on the farm, as it was causing false negatives in certain cases and disallowing submissions
ZD: 15328, 15831
==== CL 15423 ====
@FIX: KeyError: "regex_outputPaths" is raised when min file size check is specifiec, but no outputPath regular expression is defined
==== CL 15384 ====
@NEW: add Mac OS X 10.11, aka "El Capitan" support
==== CL 15380 ====
@CHANGE: modification now allowed on "done" jobs
ZD: 15281
==== CL 15351 ====
@FIX: Windows issue where wireless network interfaces are ignored when licenses are verified, causing license keys bound to such interfaces to not work.
==== CL 15347 ====
@FIX: Windows issue where wireless network interfaces are ignored when licenses are verified, causing license keys bound to such interfaces to not work.
==== CL 15324 ====
@CHANGE: supervisor on Win32 to build against Perl 5.8 (upgraded from 5.6) to avoid build issues on new build platform.