Major Enhancements

#854976 ** Introduced in 2013.3, improved concurrency through lockless reads is now the default. The default (db.peeking) value is 2. Lockless reads requires that server locks are enabled, since this can cause issues for long duration syncs, the default value for controlling the 'sync' server lock (server.locks.sync) has been changed to 0 (disabled). NOTE: maxlocktime has been changed when peeking is enabled (see change 887850). To revert to the old behavior set the 'db.peeking.usemaxlock' configurable to 1.

#839759 (Bug #3872) ** Given a data center containing multiple roughly identical Linux machines connected by an enterprise-grade LAN and sharing equal access to the same enterprise-grade storage server, Perforce can be deployed to those machines such that:

- The overall Perforce installation appears to end-users and their applications as a single Perforce server.

- As servers are added to the installation, it can horizontally scale as the number of Perforce users increases.

- The installation can withstand the loss of the master server without the need for immediate manual intervention, and without causing extended downtime; the installation will automatically fail over to a standby server and continue service.

To deploy automatic failover support in your Perforce installation, you will need to include several new components in addition to the p4d and p4broker components:

- The p4zk process provides cluster coordination services.

- The p4cmgr toolset provides DevOps support for installation, deployment, configuration, monitoring, and administration.

The p4cmgr toolset will be available in November.

NOTE: This is an early release of clustering, and requires Perforce consulting engagement for deployment.

#906143 (Bug #74413) ** When p4cmgr creates a standby node it initially runs some configuration commands; these commands produce a journal. This setup journal is independent of the cluster-wide journal and it is never replicated. After setup we rename this journal to a name like "journal.2014-10-28T12:47:41.0.bak"; it uses an ISO 8601 timestamp to provide a unique name and appends ".bak" to indicate that these journal records are of purely historical interest. You may examine this journal file if you wish or you may delete it; the cluster software never uses it.

#820746 (Bugs #23901,#39524,#50751,#53891,#65998,#70255,#70256) ** Users can now be authenticated against LDAP servers like OpenLDAP or Active Directory without the need for an external authentication trigger. This feature supports identifying users in the directory by direct mapping, performing searches or using SASL depending on the LDAP server's support. The Perforce Server must be configured to use LDAP/AD authentication by creating an LDAP configuration with the new command 'p4 ldap' and assigning that configuration a priority order by setting the new configurable 'auth.ldap.order.N' with the configuration's name. All auth triggers will be disabled when LDAP auth is enabled. The new AuthMethod field in the user spec is used to decide whether the user authenticates against an LDAP server or the Perforce database. This feature is only available on Linux and Darwin for Intel(x86, x86_64) and Windows platforms.

#820182 (Bug #41143) * P4CHARSET no longer needs to be set for a client to connect to a Unicode mode Perforce Server. Clients will now detect the mode of a Perforce Server and remember it in the environment by setting a variable name with a format of 'P4_<p4port>_CHARSET' to either 'none' or 'auto'. The value of 'none' means the server at the given port is not a Unicode server, while 'auto' means it is a Unicode server. The 'auto' charset value is also new and it means that the client should be examined and a charset value selected based on OS specific properties such as a LANG environment variable. Windows and MacOS X clients can store this new information in system provided utilities. Other platforms, such as Linux, will now set an environment file. The environment file is available on all platforms if a P4ENVIRO environment variable is set to a file path. P4ENVIRO will default to a file '.p4enviro' in the user's home directory for systems which do not have system provided facilities. The p4 enviro file can be shared across platforms. The 'p4 set' command can be used to manipulate or inspect this new environment facility. Note that these special 'P4_<p4port>_CHARSET' values will only appear in 'p4 set' output for the specified or current P4PORT value. For instance 'p4 -p perforce:4666 set' will report on 'P4_perforce:4666_CHARSET' if it is set.

#816591 (Bug #51209) ** A new streams pathType 'import+' allows for the path to be updated. Performs in the same way as 'import' except that no warning messages are provided on 'add/edit/delete' and the user is able to submit to the import path.

#770674 (Bug #1648) ** Client specs now support an optional 'ChangeView' field that locks certain depot paths to a particular changelist level:

ChangeView: //depot/path/...@1000

Revisions belonging to files under those paths will not be visible if they were submitted after the given changelist. Files mapped in the ChangeView may not be submitted.

Minor Enhancements

#907715 * ** The default value for 'net.tcpsize' has been raised from 64K to 512K. This tunable increases the network buffer size, which will provide better performance over high latency network connections.

#898025 (Bug #60850) ** 'p4 unshelve -S' now accepts a '-P' option to specify an arbitrary effective parent stream.

#897437 (Bug #73443) ** 'p4 shelve -d -f' will now delete shelved files that are the source of pending resolves. If this happens, the resolving user will not be able to merge content from the shelf; they must either 'ignore' the missing shelf or revert.

#895042 (Bug #73409) ** An operator user is now allowed to run 'p4 depots'.

#891931 (Bug #70751) ** The new configurable 'dm.shelve.promote' (default 0) can be enabled to make edge servers always promote shelved files to the commit server (rather than use the -p flag). Generally enabling this configurable is a really bad idea, it will cause a lot of unnecessary file transfers for shelve commands that are not intended for sharing.

#891014 (Bug #73744) ** The new configurable 'lbr.autocompress' (default 0) changes the default storage method to compressed text (ctext) rather than rcs format (text). To the user the filetype will still show type 'text'. Its a good idea to set this variable when using the commit/edge configurations or sharing archive files between servers.

#884941 (Bug #73346) ** A new trigger variable "argsQuoted" is available that contains the command arguments as a percent-encoded comma-separated list.

#872401 (Bug #73246) ** 'p4 obliterate' when used with peeking enabled will now be more concurrent with other commands such as 'submit'.

#848368 (Bugs #64910, #72509 ) ** The new configurable 'submit.noretransfer' tells submit to avoid re-transferring files when retrying a failed submit. 'p4 submit -c <change> --noretransfer <1|0> allows a user to override the configured behavior.

#842946 (Bug #72103) ** The new 'p4 prune' command allows the owner of a stream to remove unmodified files from it, as if with 'obliterate -b'.

#846127 (Bugs #28808,#42312,#62352,#72096) ** * The submit and shelve commands, if run from an updated client, now perform additional checks to avoid running the server out of disk space midway through the file transfer phase.

#841159 ** 'p4 reconcile' will now detect files that are open for edit but missing from the client, and reopen them for delete.

#839758 (Bugs #70330,#69700) ** The new command 'p4d [-z] -jv <checkpoint-or-journal>' can be used to verify the basic structural integrity of the checkpoint or journal file, including its MD5 digest.

#832025 (Bug #65733) ** The new configurable 'rpl.forward.login' may be useful in certain replica configurations, particularly those in which multiple replicas are deployed in the same data center as the master.

#835174 ** 'p4 reconcile' will now process multiple file arguments as a single batch so that renamed files can be detected when they're split across different arguments.

#832294 ** An optimization to the client/server protocol for the 'p4 sync' command should result in better throughput when syncing many small files over a high latency network.

#827569 ** 'p4 verify' has been added to the list of files that can run in lockless mode.

#827124 ** 'p4 describe' has been added to the list of files that can run in lockless mode.

#803860 ** The 'p4 pull' command now accepts the -L flag. It is designed for use with standby replica servers.

#801569 (Bug #71136) ** A replica with rpl.pull.position specified will now include notes of type 23 in the replica journal with information about replica statefile and timestamp processing. This is useful for monitoring replication lag.

#801171 ** The new command 'p4 journalcopy' is available. It is designed for use with standby replica servers.

#893342 ** (Bug #52885) By default when the journal is rotated any structured logs are also rotated. When the new dm.rotatelogwithjnl configurable is set to zero, log rotation is not performed at journal rotation.

#796127 ** (Bug #52885) By default logs are rotated at the same time journals are. The new dm.rotatelogwithjnl configurable can be set to zero to disable that.

#795814 ** (Bug #21830) The server daemon will write its PID to a file when supplied the --pid-file option.

#794236 ** (Bug #71514) 'p4 interchanges' now has a '-u' flag that filters results to a particular user.

#793292 ** The 'p4 server' spec now includes a User: field, which can be used to specify the service user that is expected to be used by that server. Also, when the value of the security configurable is 4 or higher, the server now applies several additional checks when accepting replication requests from a remote server. These checks validate the serverid and service user being used by the remote replica server.

#790595 (Bugs #53510, #68485) ** A structured server log may now be associated with a rotation counter by defining the serverlog.counter.N configurable, in which case the counter will be used to generate the file name for the rotated server log. The current value of the counter is also returned in the output of 'p4 logtail -l <log>'.

#786582 ** 'p4 pull -l -s' now includes an additional line of output, identifying the oldest changelist number which has at least one pending transfer.

#785614 (Bug #47379) ** The configurable 'lbr.verify.script.out' can be set to 0 to indicate that files with the +X filetype should not have their digest checked when transmitted from the server to the client.

#780804 ** The 'p4 reload -p' argument can now be specified either as the P4PORT of the remote server, or the serverid of the remote server. If a serverid is specified, the server spec for that server must contain the correct P4PORT value in its Address: field.

#777628 ** When using 'p4 reload -c <client> -p <port>' to migrate your unlocked workspace from one Edge Server to another, it is no longer necessary to first issue the 'p4 unload -c <client>' command to the remote Edge Server. The reload command will automatically issue the 'p4 unload' command for you, and will wait for it to complete, prior to reloading your workspace into the new Edge Server.

#775711 ** If the 'monitor' configurable is set to a value of 5 or higher, the server will track certain information about database table locks in the db.monitor table, and will make it available via the new '-L' flag to 'p4 monitor show'. This feature has a non-trivial performance impact, so (on platforms where it is available), the 'monitor.lsof' feature of change 771259 is preferable.

#771259 (Bug #71647) ** On a Linux server, the new configurable 'monitor.lsof' may be set as follows: 'monitor.lsof=/usr/bin/lsof -F pln', varying the executable path as necessary for your system. Once set, this configurable enables the new '-L' flag to 'p4 monitor show', which will include information about locked files as part of the monitoring output.

Bug Fixes

#931334 (Bug #74855) ** 'p4 interchanges' will now exclude changes that have been integrated individually between files that do not share a single common base.

#926940 (Bug #74435) ** Operations transferring many files via a proxy with most transfers not cached by the proxy could hang. Most likely to happen with a broker between the proxy and a server. Fixed.

#926889 (Bug #74020) ** When migrating client workspaces from commit servers to edge servers, promoted shelves are no longer accessible on the edge server they are bound to. This change allows 'describe -S' to automatically pull metadata and content to the server with the correct ownership.

#907803 (Bug #74832) ** Under high concurrency, BTree is corrupt errors might appear along with BTCursor::find status 0 messages but the table is not actually corrupt. Fixed.

#895107 (Bug #73953) ** If a replica fails to take a checkpoint, an error message about the failure is now written to the replica's log file.

#893234 (Bug #73768) ** 'p4 clean' will no longer attempt to take exclusive depot file locks in a distributed environment.

#892218 (Bug #72136) ** Unloading many clients could cause large db.have tables ( > 100MB ) to loop allocating pages.

#887850 (Bug #71527) ** Perforce servers with 'peeking' enabled would still have processes killed by MaxLockTime when not holding blocking locks.

#886584 (Bug #73402) ** 'p4 renameuser' would fail to completely rename the user.

#886135 (Bug #34561,#73503) ** 'p4 resolve' using options to ignore whitespace or line endings (ie -dw, -db, -dl) could cause the target of the integration to be erroneously recorded as a 'copy' when whitespace differences exist and are not copied to the target. This has been fixed by recording this condition correctly as a 'merge'. Before this was fixed, files that had been shelved in this situation could not be unshelved easily.

#883281 (Bug #73071) ** 'p4 client [-o] -S <stream> name' without the -s "switch" now reports an error should the target 'name' client exist with either a different stream, or without a stream defined. Former behavior was to ignore the -S <stream>.

#879410 (Bug #73373) ** 'p4 reconcile' elapsed time performance has been significantly improved when detecting files to open for add.

#877282 (Bug #73316) ** Spec depot entries now generate corresponding server.locks files only if that spec depot entry is stored in RCS format.

#876857 (Bug #73314) * ** *** TCP keepalive variables can now be set on Windows with these restrictions, due to limitations in the Windows API: - net.keepalive.count can not be set. - both net.keepalive.idle and net.keepalive.interval must be set if either one is set; neither should be set to 0.

#874560 (Bug #71729) ** Unshelving +l files in a distributed environment could result in inconsistent error messages if the user had other files opened in his workspace. This has been fixed.

#871169 (Bug #72759) * Filetype detection with P4CHARSET=utf8 now detects non-UTF8 files as either text or binary in a manner more consistent with other charset settings.

#850073 (Bug #72842) ** 'p4 submit' will no longer record revisions with invalid archive paths after unshelving an integrated file through a branch view.

#849717 (Bug #42041) ** The Server will now report the correct Windows error when the posix library file descriptor table is depleted.

#849566 (Bug #72816) ** The Edge Server algorithm for handling the replication of a large 'p4 obliterate' command is now more efficient.

#846643 (Bug #72162) ** Comands which must find lazy copies, i.e. obliterate, retype, and fstat -Oz could cause stack overflows when there are many branches against the same file. Fixed.

#846319 (Bug #70919) ** The filesys.*.min configurables now default to 250MB.

#844511 (Bug #71329) ** p4 -ztag changes on a Unicode server would report a partial unicode character if there were 31 characters and only the last one was a utf8 multibyte character. Fixed to truncate.

#840450 (Bug #72691) ** The "Connection from <network partner> broken" error message is now correctly logged to the server's structured error log, if defined.

#839295 (Bug #72676) ** 'p4 submit -e' of a promoted shelved change from an edge server will not copy the files to the commit server since the change lives on the commit server and the files are already there.

#836790 (Bug #72535) ** A replica might fail to perform an on-demand file transfer from its master server for a revision with no stored file size or digest information.

#835387 (Bug #72437) ** Repeated updates to shelved files in a short period will no longer cause replica servers to stall waiting for the archive transfers of the shelved files to complete.

#835083 (Bug #72129 ) ** The combination of converting a task stream to a non-task stream while 'db.peeking' is set would fail due to lock-ordering. This has been fixed.

#834034 (Bugs #71960,#72441) ** In general, you should never need to set the ServerID field in a 'p4 client' form, but if you do set the field, the server now validates it more carefully.

#833834 (Bug #72158) ** If external authentication is enabled, the 'p4 admin resetpassword' command is now refused with an error message. Please use the mechanisms of your external authentication system to enforce the password reset policy.

#831471 (Bug #72307) ** Case insensitive servers were matching client roots with client paths with a case sensitive match. Fixed.

#821026 (Bug #72180) ** Triggers now set %serverip% to IP address rather than to hostname.

#819489 (Bug #72151) ** 'p4 annotate -I' now works correctly with the '-dw' flag.

#817214 (Bug #72119) ** A readonly replica now allows the command 'p4 clean' to run.

#814054 (Bug #71394) ** Previously if 'p4 shelve -r' should have resulted in all files being removed from an existing shelved change, the command would report "No files to shelve" and do nothing. Now the command removes all shelved files and deletes the shelved change.

#813973 (Bug #71087) ** 'p4 fstat //...@=change' will no longer scan the db.revsx (spec depot) table, since spec depot files do not have changelists.

#813774 (Bug #68895) ** 'p4 diff -du' will now skip deleted files, similar to other 'p4 diff' options.

#812768 (Bug #71782) ** Multiple resolves performed sequentially could produce false "tampered" errors on submit. This has been fixed.

#811430 (Bug #71922) ** A Windows replica server would fail to transfer an unloaded client, label, or task stream created by 'unload -z'.

#809156 (Bug #68666) ** Replica servers now treat the '-n' form of the following commands as read-only: add, edit, open, delete, move, rename, unshelve, archive, and restore.

#808573 (Bug #71835) ** The Windows server using an SSL port can crash during 'p4 admin restart'.

#808325 (Bug #71961) ** 'p4 sync --parallel' would fail with the message "Can't clobber writable file" if the file was changed from filetype binary+w to filetype binary (or text+w to text) by the revision being sync'd.

#806284 (Bug #71893) ** A replica with lbr.replication=shared would incorrectly attempt to fetch a missing archive file from its master server. Also, it was incorrectly using the rpl.verify.cache setting if it was enabled; now a shared-archive replica does not validate its archives except when told to via 'p4 verify'.

#804390,#834897 (Bugs #71847,#72545) ** 'p4 renameuser' was incorrectly processing group entries, protection table entries, and properties if there existed a group by the same name as the user being renamed.

#802639 (Bug #71592) ** In a distributed environment, force deleting an edge server client directly from a commit server could leave orphaned exclusive locks from that client that could not be deleted.

#801991 (Bug #71750) ** On Windows, a protects table entry that uses an IPv4 address with CIDR notation may not match the correct addresses if it has an octet that begins with a 0 digit and has a following octet whose value is greater than 7.

#795201 (Bug #68844) ** 'p4 help describe' regarding restricted changelists was confusing. This has been fixed.

#794744 (Bug #71525) ** The 'unload -a' command, in a distributed installation, now restricts its scope to clients and/or labels that are owned by the Edge Server where the command was run.

#886610 (Bug #63251) ** The forwarding replica and edge server configurations now accept the optional username argument on the 'p4 login' and 'p4 logout' commands.

#780053 (Bug #69512) ** 'p4 populate' no longer accepts multiple toFile arguments.

#773380 (Bug #70808) ** A multi-link chain of forwarding replicas could incorrectly re-process certain journal records during a journal rotation.

#771609 (Bug #21726) ** 'p4 filelog' and 'p4 integrated' now filter out integration records for which the user does not have 'list' access to both the source and target.