Release Notes for P4, the Helix Command Line, P4D, the Helix Versioning Engine P4P, the Helix Proxy and P4Broker, the Helix Broker Version 2022.2 Introduction This document lists all user-visible changes to: * Helix Versioning Engine (P4D) * Command line client (P4) * Helix Proxy (P4P) * Helix Broker (P4Broker) in 2022.2 release. Release notes for other Perforce Helix products are available separately on the Perforce Documentation web page. Developer notes for Perforce API programming, the Helix Broker and also a separate document which programmers should read in addition to this release note document. Perforce numbers releases YYYY.R/CCCCC, e.g. 2002.1/30547. YYYY is the year; R is the release of that year; CCCCC is the bugfix change level. Each bugfix in these release notes is marked by its change number. Any build includes (1) all bugfixes of all previous releases and (2) all bugfixes of the current release up to the bugfix change level. Both 'p4' and 'p4d' will report their version information by passing the '-V' flag. Additionally, 'p4' can report the server's information with the 'p4 info' command. Version information includes a release version and a build change number. The build change number can be compared with change numbers and patch information mentioned in the matching version release notes file to determine if a particular build of a version includes the change mentioned. Supported Platforms for p4d, p4, p4p and p4broker Linux kernel 2.6+ (glibc 2.6+) for Intel(x86_64) Windows 8.1 for Intel(x64) Windows 10 for Intel(x64) Windows 2012 for Intel(x64) Windows 2016 for Intel(x64) Windows 2019 for Intel(x64) Windows 2022 for Intel(x64) Apple OS X 10.12+ for Intel(x86_64) -------------------------------------------------------------------------- Important Platform End-of-Life Notice This notice identifies the platforms that will be placed in End-of-Life (EOL) status in April 2023. This applies to p4, p4d, p4p, and p4broker components of the server release. The following 32-bit platforms are now in the Obsolescent phase: Linux kernel 2.6+ (glibc 2.6+) for Intel(x86) The following 32-bit platforms are now in the Discontinued phase: Windows 8.1 for Intel(x86), Windows 10 for Intel(x86) OBSOLESCENT Phase: Starting with this release, these platforms will no longer be supported. Customers will receive full support and patches for the deprecated platforms during this phase for older releases. The platforms will remain in this phase until April 2023 after which they will transition into the discontinued phase. DISCONTINUED (EOL) Phase: Patches will no longer be issued for these platforms. We will no longer provide technical support to customers with servers on these platforms -------------------------------------------------------------------------- Important Changes to Helix Core Licenses Helix Core licenses have been modified to include an 'ExtraCapabilities' field. This field encapsulates details about the license for this server as well as additional applications that extend this Helix Core Server. Please note, a comprehensive list of possible values is not provided as the list will evolve over time and, as with other fields in the license, any modifications to the 'ExtraCapabilities' field will invalidate the license. This new license format requires an updated version of the Helix Core Server to be able to read and apply this new license. License files that use this new field require an updated version of the Helix Core Server and include the following comment specifying the exact versions required: # This license works with 2019.2 patch 14, 2020.1 patch 8, 2020.2 patch 6, 2021.1 patch 1, 2021.2 or later servers. -------------------------------------------------------------------------- Important limitation for Windows servers prior to 2021.2 Support for Helix Core Extensions was disabled for Windows servers prior to 2021.2 due to unrelated performance concerns on that platform requiring a conflicting toolchain change. Extensions remained fully supported on Linux and Mac. This limitation has been resolved in 2021.2 and extensions are now fully supported on all supported platforms. -------------------------------------------------------------------------- Important security note This release links OpenSSL version 3.0.12 -------------------------------------------------------------------------- Important export note This product is subject to U.S. export control laws and regulations including, but not limited to, the U.S. Export Administration Regulations, the International Traffic in Arms Regulation requirements, and all applicable end-use, end-user and destination restrictions. Licensee shall not permit, directly or indirectly, use of any Perforce technology in or by any U.S. embargoed country or otherwise in violation of any U.S. export control laws and regulations. -------------------------------------------------------------------------- Upgrading the Server ** IMPORTANT UPGRADE NOTES ** CHANGES TO DISTRIBUTED UPGRADE RECOMMENDATIONS For 2019.1 or later of the Helix Versioning Engine (P4D), significant schema upgrades performed by 'p4d -xu' will only be performed on servers where those upgrades are needed. This means that metadata changes made by upgrades must be replicated and so must be journaled. To help prevent mistakes, upgrades will not run if journaling is disabled. If offline databases are in use, upgrades should not be performed on them, as the upgrade performed on the live database will be journaled and applied during normal journal replay. When upgrading from 2019.1 or later of the Helix Versioning Engine (P4D), replicas may be upgraded safely prior to the server they are replicating from. This upgrade pattern, referred to as "outside-in", allows a multi-server environment be upgraded server-by-server starting with the outermost replica, without requiring the entire set of servers to be taken offline at once. When upgrading from a version prior to 2019.1 to 2019.1 or later, we strongly recommend that all servers are upgraded in a single upgrade session. More information can be found in the Helix Core Server Administrator Guides: https://www.perforce.com/manuals/p4sag/Content/P4SAG/chapter.upgrade.html https://www.perforce.com/manuals/p4dist/Content/P4Dist/intro.maintaining.html ------------------------------------------------------------------- CHANGES TO UNLICENSED SERVER For v16.1 onwards of the Helix Versioning Engine (P4D) the number of free users allowed with an unlicensed server has changed to 5, the number of clients remains at 20. Previous versions of the server will continue to support the 20/20 usage allowance. ------------------------------------------------------------------- BEFORE UPGRADING To upgrade your Helix Core Server (P4D), your license file must be current. Expired licenses do not work with upgraded servers. In addition to your usual checkpointing scheme, always checkpoint your server immediately before undertaking an upgrade. For any Git Connector instances that are currently polling repos we recommend upgrading your Git Connector instance before upgrading your Helix Core Server. Otherwise, any repo polling would cease. Read-only archive directories can interfere with the upgrade process. This may be the case for archive paths migrated from a different version control system, such as CVS, or in cases where 3rd party imported content has been made read only by a system admin. Make sure all such archive paths are writeable before attempting the upgrade. DOWNGRADING A 2022.2 SERVER IS NOT POSSIBLE UPGRADING PROCEDURE IS DIFFERENT DEPENDING ON WHAT YOUR CURRENT PERFORCE VERSION IS: UPDATE DATABASE SCHEMA vs UPDATE DATABASE FORMAT ------------------------------------------------------------------- ** UPDATE DATABASE SCHEMA If your current server version is 2013.3 or above, then this upgrade is a UPDATE DATABASE SCHEMA upgrade: Unix Platforms 1. Issue the 'p4d -r -J -xu' command. This command performs the significant schema upgrades, then exits. 2. Restart your server with your site's usual parameters. Windows Platforms 1. Issue the 'p4d -r -J -xu' command from a command prompt window. This command performs the significant schema upgrades, then exits. 2. Restart your Helix Versioning Engine (P4D) service. Note: Personal DVCS servers will automatically perform any database schema upgrades. Although the upgrade steps described above are unnecessary for these servers, they are safe to run. ------------------------------------------------------------------- ** UPDATE DATABASE FORMAT If your current server version is 2013.2 or earlier, then this upgrade is an UPDATE DATABASE FORMAT upgrade: Due to the btree format introduced in 2013.3 this is not an UPDATE DATABASE SCHEMA upgrade. A checkpoint using your old server and then a restore using the 2021.1 server is required before the internal upgrades 'p4d -xu' (if required) can be performed. Note: If you have made use of the (undocumented) '+T' modifier (storing file content in the tiny.db database) this data is not checkpointed (and therefore not restored). See 'p4 help undoc' for backup/restore procedures for this table. Once the database has been restored with the 2021.1 version, update your database schema: Unix Platforms 1. Issue the 'p4d -r -J -xu' command. This command performs the schema upgrades, then exits. 2. Restart your server with your site's usual parameters. Windows Platforms 1. Issue the 'p4d -r -J -xu' command from a command prompt window. This command performs the schema upgrades, then exits. 2. Restart your Helix Versioning Engine (P4D) service. -------------------------------------------------------------------------- Interoperating With Previous Releases 1. Unless stated otherwise you can intermix any release of Helix Command Line (P4) with any release of the Helix Versioning Engine (P4D), but any functionality new to 2022.2 requires you to upgrade the client and/or P4D. See marks in the notes below. * -- requires new p4 client program including all client applications and derived APIs ** -- requires new p4d server program *** -- requires new p4p proxy program **** -- requires new p4broker broker program Any replica servers must be at least the same release level as the master server and any functionality that requires an upgrade for the master requires an upgrade for the replica. A replica can be running a later release than the master if the master is running at least 2019.1. However in this case some new functionality might not be available on the upgraded replica until the master has been upgraded. 2. Beginning with 99.2, remote depots will interoperate between UNIX and NT. Beginning with 98.2, remote depots will interoperate across (98.2 and higher) releases. In 98.1 and before, remote depots will only operate with another server of the same release. 3. As of 2005.1, remote depot support for 98.2 and 99.1 servers has been dropped. Attempts by 98.2 and 99.1 servers to contact 2005.1 servers still works, but the depots will appear devoid of files. -------------------------------------------------------------------------- Technology Preview features: Technology Preview features are currently unsupported, might not be functionally complete, and are not suitable for deployment in production. These features are provided to the customer to solicit interest and feedback, with the goal of full support in future releases. Customers are encouraged to provide feedback and functionality suggestions for Technology Preview features before they become fully supported. -------------------------------------------------------------------------- Important note: Please refer to: http://www.perforce.com/perforce/r22.2/user/relnotes.txt to get up to date GA and post-GA information about this release. -------------------------------------------------------------------------- Major new functionality in 2022.2 (2022.2/2369846) (2022/11/16) #2323550 (Jobs #111683, #111684, #111685) ** Added Writable Components feature, with new stream component types writeimport+ and writeall. If a stream component is defined as writeimport+ in a stream consumer, then the stream consumer clients can open for edit and submit changes to any files in import+ paths in the stream component. If a stream component is defined as writeall, then the stream consumer clients can open for edit and submit changes to files in share, isolate, or import+ paths in the stream component. #2302144 (Jobs #41853, #109932, #110537, #110737) ** Added parallel checkpointing, dumping and recovery. The 'p' suboption to -jc, -jd and -jr allows the use of concurrent threads writing/reading to multiple checkpoint files, one per database table. For example: $ p4d -r . -N 4 -jcp cp Checkpointing files to cp.ckp.9154... $ p4d -r . -N 4 -jrp cp.ckp.9154 Recovering from cp.ckp.9154... The checkpoint files are placed into a newly created directory based on the checkpoint/dump prefix. The number of threads to use is controlled by the 'db.checkpoint.threads' configurable. This can be overridden on the command line for checkpoint and recovery with the '-N threads' option. Changes to 'db.checkpoint.threads' will apply to the next checkpoint or journal dump; no server restart is required. Minor new functionality in 2022.2 (2022.2/2369846) (2022/11/16) #2382272 (Job #109101) ** BTree consolidation and repair merges pages where possible and can recover lost internal node space. Run 'p4d -xrc' on a single table or all tables. Set 'db.internal.repair' configurable to 1 to have runtime processes do space recovery, including internal node space if it avoids pages splits. #2360521 (Jobs #100355, #113009) ** When you log in with a license that will soon expire, a warning now appears about the need to update the license to avoid downtime. This change introduces two new configurables: 1) 'auth.licenseexpiry.warn', which enables the license expiry warning: 0: no license expiry warning 1: Warn only users with permission level 'admin' or higher, when they log in (default) 2: Warn all users when they log in 2) 'auth.licenseexpiry.warnthreshold', is the number of days prior to license expiry when the warnings start to appear. The default is 7 days. Changes to either 'auth.licenseexpiry.warn' or 'auth.licenseexpiry.warnthreshold' will apply to all new logins; no server restart required. #2342301 (Job #109600) ** 'p4 topology' now reports: - the context of capturing the topology server records - the address, destination address and the server-id of the respective target server. The prior '-d' flag has been replaced by the '-D' flag, which permanently removes topology server records. The '-d' flag's new behavior is to mark a server in the topology as deleted whilst leaving the history intact. For more details, please see 'p4 help topology'. #2330294 (Job #111573) ** Server log files now include an estimate of the memory used by the server to process a command. Tracking output in the P4LOG log file now includes output like '--- memory cmd/proc 6mb/10mb' that represents megabytes of committed, touched memory used by a command. The 'cmd' portion is what the particular command being logged used, and the 'proc' portion is what the peak usage for the process/thread is - this comes into play when multiple commands are run on the same connection. Version 55 of the 'CommandEnd' event (1.55) in the structured logs have two new fields that represent the same data. The 'serverlog.version.N' configurable can be used to pin a structured log file to a specific server version's format. To retain the prior structured log events format, set the 'serverlog.version.N' configurable to 54. #2328306 (Job #111568) ** The track output in server log files now include network stats for upstream server-to-server communication as well as with the client or downstream server. These stats are recorded as additional 'rpc' lines with the target server's P4PORT in parentheses in the P4LOG file and as additional 'NetworkPerformance' events in the structured logs at version 55 (8.55), where the 'f_trackType' field has the P4PORT appended to the 'rpc' string after a '-'. Note that the himark is not used on client connections (including connections from servers to upstream servers), and so will remain at the default value of 2000. The 'serverlog.version.N' configurable can be used to pin a structured log file to a specific server version's format. To retain the prior structured log events format, set the 'serverlog.version.N' configurable to 54. #2330292 (Job #111584) ** Server triggers have a new 'serverprocesspid' variable provided to them that is the PID of the entire server process on both Windows and Unix platforms. This compliments the existing 'serverpid' variable which is the thread ID that's handling a command on Windows, and the PID on Unixes. #2328638 (Job #110937) ** Two new options has been added for 'p4 changes': --stream, is for filtering result to changes that contain a stream. --nostream, is for filtering result to changes that do not contain a stream. #2328154 (Job #59960) ** Group specifications can now specify a memory limit (MaxMemory) for commands run by group members. See 'p4 help maxmemory' for details. The limit is applied each time a single command is run, and does not affect groups of commands as a whole. Note that the memory limit is best-effort and that commands may exceed the limit for a time between checks. P4API programs that run multiple commands on a single connection will be disconnected from the server when the memory limit is hit. Note that the memory limit is more accurate at larger values than smaller ones (as in single or double digit) due to differences in when/where memory is sampled. #2328077 (Job #83788) ** The new 'p4 renameclient' command renames a client to a new client name by modifying database records pertaining to the old client. This command creates the new client, changes database records for existing work in progress to use the new client name, and then deletes the old client from the domain table. The entities that are modified include pending and shelved changes owned by the old client, fixes to pending changes by the old client, files opened by the client, and the client's have list. The 'run.renameclient.allow' configurable can be used to restrict users that can run the 'p4 renameclient' command. #2325440 (Job #110831) ** Added new '--use-stream-change=N' option for 'p4 sync' for syncing stream clients to use the stream spec view at or before change N. If no change N is specified, then the maximum change specifier in the file list is used. For N=0 or N=head, the current stream spec view is used. Also added configurable 'dm.sync.streamchange', which takes values 0 (default) or 1. When set to 1, 'p4 sync' will implicitly use '--use-stream-change=N', where N is the maximum change specifier used in the file list; if no change specifier is used then the current stream spec view is used. If the StreamAtChange field is set in the client specification, then that value overrides any value given for '--use-stream-change'. Changes to 'dm.sync.streamchange' will apply to all new commands; no server restart required. #2323074 (Job #21537) ** On Windows Server 2016 and newer, journal rotation can be performed using an atomic rename. Previous journal rotation was performed as a copy and truncate operation. The atomic rename journal rotation offers a significant performance gain only on NTFS filesystems. By default the 'filesys.atomic.rename' configurable is set to 0 (disabled). Changes to 'filesys.atomic.rename' will not apply until the server has been restarted. #2315124 (Job #111351) ** Structured logging improvements. This release adds a new command group identifier which clients can use to tie multiple events to a single action for improved traceability. The command group identifier has been added to all structured log event types that contain command fields, positioned at column 14 (after the command arguments field), increasing the version number of those events to 55 (e.g. 2.55). The 'serverlog.version.N' configurable can be used to pin a structured log file to a specific server version's format. To retain the prior structured log events format, set the 'serverlog.version.N' configurable to 54. #2306230 (Job #103797) ** The -jr recovery command to p4d now accepts the '-S' option. Using this option ignores all storage records in the replay file and instead recalculates the net storage reference count change from the rev records. It applies the recalculated reference count at the end of the replay or end of each transaction. The '-S' option cannot be combined with the '-m' option. This option has a performance impact on journal replay and is intended for use under the guidance of Perforce Support. #2306041 (Job #106424) ** The new '--streamviews' option has been added to the p4 fstat, p4 files, and p4 dirs commands to report files and directories from stream Paths and Components. Also known as stream materialization. #2300668 (Job #104865) ** The command identifier (see #1881458) is now exposed to triggers via the new 'commandIdent' variable. #2280769 (Job #105490) ** For 'p4 sync' with a changelist argument, the new -E option causes the command to fail with a message if the changelist is not a committed change. If a command is run with multiple file arguments, a message line indicates any invalid change in an argument. When the command is run as 'p4 sync -E @now' on a replica, the replica waits for any changes that are in transit to be replicated before the sync begins. #2261234 (Job #108124) ** New 'failed-back' trigger and extension types have been added. Either or both may be fired when a standby server becomes the new master and first starts up during a successful 'p4 failback' command. #2255753 (Job #109524) ** 'p4 storage' now reports whether an archive is shelved or committed. Bugs fixed in 2022.2 Patch 3 (2022.2/2531894) (2023/12/11) #2530935 (Job #118342) ** Fixed segmentation violation with real-time monitoring enabled. #2527034 (Job #112432) ** 'p4 fetch' and 'p4 push' commands now update LastFetch/LastPush when user provided filespec argument does not limit remote view. #2523176 (Job #110437) * ** *** **** The network autotune algorithm has been corrected to address the rare cases where large numbers of files being submitted to a Linux server from a Windows client could stall or hang if autotune was enabled (net.autotune=1). #2521554 (Job #114849) ** The fix for job #84375 inadvertently caused issues for the 'SearchBindPasswd' field of the 'p4 ldap' specification, resulting in authentication failures when using that LDAP connection; this has been fixed #2519170 (Job #117156) ** Security fix. Addressed CVE-2023-35767. #2519169 (Job #117155) ** Security fix. Addressed CVE-2023-45849. #2518890 (Job #90618, #117153) * ** *** **** Security fix. Addressed CVE-2023-5759. #2518730 (Job #117154) ** Security fix. Addressed CVE-2023-45319. #2510694 (Job #117392) ** There was a data race between threads in the 'p4 storage -U' command. This has been fixed. #2508491 (Job #116102) * ** *** **** OpenSSL has been upgraded to 3.0.12 #2506626 (Job #117741) * ** cURL (for extensions) has been upgraded 8.4.0 to address multiple cURL CVEs: CVE-2023-38545 and CVE-2023-38546 #2506262 (Job #116191) ** Fixed DVCS fetch, push and zip commands incorrectly reporting a split move across changelists. #2497917 (Job #114933) ** When a lazy copy file is sent using 'p4 unzip', 'p4 push' or 'p4 fetch' and the source is not part of the package, it will be imported as a non-lazy copy file. #2497043 (Job #113319) ** Using 'p4 unzip' with -I option to exclude integration records no longer causes a crash when the source of a lazy copy is not included in the zip. #2496086 (Job #116306) ** Multifile checkpoints and dumps could contain duplicate records. This has been fixed. #2496084 (Job #112713) ** The parallel dump operation, 'p4d -jdp', now supports the '-N threads' option to override the 'db.checkpoint.threads' configurable. #2494347 (Job #117292) ** Parallel checkpoint and dump requests do not honor the 'db.checkpoint.bufsize' configurable. This has been fixed. Note, with this fix, 'filesys.bufsize' in no longer used to determine the checkpoint write size. #2493794 (Job #117270) ** Fixed a component stream validation error when reparenting a stream. #2489963 (Job #117222) ** Ensures that 'p4d -jr' command to replay the checkpoint in a non empty directory does not update the existing database files. #2489807 (Job #106491) ** 'p4 zip' now correctly includes archives for lazy copies when used with a revision range. #2480068 (Job #117093) ** The orphan scanner, 'p4 storage -l', does not work with space in the depotdirectory argument. This has been fixed. #2476244 (Job #114250) ** Concurrent 'p4 unlock' and 'p4 lock' commands can result a deadlock and system hang. This change fixes the problem. Bugs fixed in 2022.2 Patch 2 (2022.2/2468771) (2023/07/25) #2466052 (Job #116141, #116277) ** Fixed problems with upgrade when a stream's view could not be generated. #2462372 (Job #116376) ** The precedence of overlapping ChangeView entries, including those generated for streams with multiple "import @change" Paths, was not honored correctly. This has been fixed. #2458374 (Job #116101) * ** cURL (for extensions) has been upgraded 8.1.2 to address multiple cURL CVEs: CVE-2023-28319 and CVE-2023-28322 #2455674 (Job #114761) ** A 'p4 retype -l' request on a revision with a shelved integration generates incorrect records in the db.storage and db.storagesh tables. This has been fixed. #2452669 (Job #114820) ** 'p4 reload -p' will now correctly report errors to the users and if a journalwait is required, the correct journal offset is now used. #2447644 (Job #115980) * ** *** **** OpenSSL has been upgraded to 1.1.1u #2441682 (Job #115619) ** Fixed a 'p4 zip' bug where one half of a move/delete pair was wrongly declared to be missing. #2441537 (Job #115676) ** The 'p4 failover' command could be run from a server that has been prepared for the 'p4 failback' command by running 'p4d -Fm'. Now 'p4 failover' will fail in this situation with an error message instructing the user to run 'p4 failback' instead. #2441108 (Job #115503) * ** cURL (for extensions) has been upgraded 8.0.1 to address multiple cURL CVEs: CVE-2023-27537, CVE-2023-23916, CVE-2023-23915 and CVE-2023-23914 #2441105 (Job #115687) ** This ensures that the respective intermediary server log is not spammed with the topology server warning related to skipping the capture of the server records in the db.topology table in case of any upstream server that is not upgraded to the version >= 2021.2. #2433554 (Job #115391) ** Fixed stream view generation at a specific change causing an endless loop. #2432065 (Job #114515) ** Running 'p4 reopen' with multiple file arguments that include moved files could cause a member of a moved pair to fail to be reopened. This has been fixed. #2425796 (Job #113467) ** When a file was opened for 'add' with the exclusive open filetype in a distributed environment and was submitted with the 'reopen' option, the exclusive open type would not be set. This has been fixed. #2420407 (Job #112599) ** An integration from a stream client might fail with an error message "The target stream of a stream spec integration must be the stream associated with the current client ...". This error should only occur when using a '-S' parameter with the integration command, but did sometimes occur when not using '-S' when the parent of the associated stream has a noinherit ParentView setting. This has been fixed. #2419898 (Job #113622) ** StreamQWorker is now launched at server startup to finish any leftover processing. Bugs fixed in 2022.2 Patch 1 (2022.2/2407422) (2023/02/14) #2406330 (Job #106649, #114300) ** The Extension API call GetAutoClientApi() no longer creates an invalid ticket when there is a server hostname lookup mismatch. #2404727 (Job #114243) ** Intermediary server (Replica, Proxy, Broker, etc) login no longer leads to the server crash if the commit server starts with an unspecified host address. #2403887 (Job #114346) * ** *** **** OpenSSL has been upgraded to 1.1.1t #2403048 (Job #113841) ** When using the SDP to recover a rotated / numbered journal from an active Server, a sharing violation will no longer occur. #2401810 (Job #113985) ** Using the '-p' option to 'p4 dbstat' with a worklevel of 1 could cause a server crash. This has been fixed. #2400081 (Job #114030) **** Broker now handles MaxMemory when provided by the Helix Core Command Line client (P4). #2398904 (Job #112505) ** The 'p4 group' on a replica working with an older commit server would fail with error: "Unkown field name 'Description'". This change fixes the problem. #2398784 (Job #113891) ** 'p4 fstat' would report a readonly pathPermissions for a stream client share path which was writable. This has been fixed. #2396783 (Job #113923) ** When using the 'filesys.atomic.rename' configuration, an incorrect journal size might be reported. This has been fixed. #2394719 (Job #113904) ** 'p4 shelve -f -c' no longer leads to the deletion of shared shelve archive files on the replica server. #2394518 (Job #113267) ** For 'p4 sync -E @