### PROOF

- Warning

- The classes TProofDataSetManager and TProofDataSetManagerFile have been renamed TDataSetManager and TDataSetManagerFile

- New functionality

- Add support for session queuing in the scheduler. This allows to control the number of sessions allowed to process queries concurrently. The feature is enabled by a new parameter 'queue:fifo' in the 'xpd.schedparam' directive. In case of static worker assignment (default, random, round-robin) the max number of running sessions can be limited by another new parameter 'mxrun'; for example
  xpd.schedparam default mxrun:3 queue:fifo
  will run concurrently only 3 sessions. Additional requests are queued and run as soon as one of the running sessions goes idle. The current policy is FIFO, so that there is a rotation among queued sessions. In the case of load-based worker assignment, the max number of running queries is determined dynamically.
- Add support for repeat functionality in the xrd.worker directive. To avoid repeating the same line N times one can just add 'repeat=N' in the line; for example
  xpd.worker worker proofwrks:2093 repeat=4
  will define 4 workers on port 2093 of machine 'proofwrks'.
- Add support for port specification via the directive 'xpd.port'
- Enable variable substitution in 'xpd.' directives using the standard Scalla mechanism described in http://xrootd.slac.stanford.edu/doc/dev/Syntax_config.htm .
- Build also a binary named 'xproofd' which runs a xrootd daemon with only the XrdProofdProtocol (i.e. no data serving).
  This simplifies setups when data serving is not needed and also allows to better disantagle problems related to one specific protocol. The new binary accepts the same arguments as 'xrootd' and parses the same directives form the same configuration file, with the exception of 'xpd.protocol xproofd libXrdProofd.so' which should now be dropped. AN alternative port can be specified via the new 'xpd.port' directive (see above).
- Add support for 'MasterOnly' mode in starting a PROOF session. This avoids starting the workers when one wants just to browse the datasets or retrieve results. To start a session in 'MasterOnly' mode enter "masteronly" as second argument to TProof::Open, e.g.
  root[] TProof *p = TProof::Open("<masterurl>", "masteronly")
- Add full support for placeholders <uid>, <gid>, <group> and <homedir> for the directives specified via 'xpd.putenv'
- Add the configuration directive 'proofservparents' to allow specifying a different list of parent names for the 'proofserv' tasks. This is needed to avoid untimely killing of 'proofserv' instances in test setups when multiple instances of the daemons are running on the same machines under different names.
- Add the possibility to switch to asynchronous mode while running synchronously. A new button "Run in background" has been added to the dialog box. The behaviour of Ctrl-C has also been modified: the user is prompted for a choice among continuing asynchronously, stopping (terminating) or aborting the query.
- Add the possibility to define the dataset information sources via the directive 'xpd.datasetsrc'. In this way the permissions should be set correctly and the related problems disappear.
- Record the logs from the ROOT version validation tests (proofserv forked in test mode). In case of failure - or if the debug flag is on - the log files are kept under <xproof_adminpath>/rootsysvalidation/root.<tag>.log (the <tag> has all the '/' replaced by '-'). This should facilitate understanding the problems when in case of validation failures.
- Add support for automatic running of PROOF sessions in valgrind. The second argument of TProof::Open is used to trigger the relevant settings. To valgrind the master session start PROOF with TProof::Open("<master>","valgrind=master"); to valgrind two workers sessions use TProof::Open("<master>","valgrind=workers"); to valgrind master and 2 workers, use TProof::Open("<master>","valgrind=master+workers"). Other combinations are available.
  The valgrind logs are available with the tag '<ordinal>-valgrind' in the log dialog or form TProofMgr::GetSessionLogs() .
  To add options to valgrind execute TProof::AddEnvVar("PROOF_WRAPPERCMD", "valgrind_opts:<options>") before starting the session.
- Add new static TProof::LogViewer("<master>") to graphically browse the session logs independently of the progress dialog. The improved log window allows to chose a different master and/or session and displays human readable information about the starting time of the session being browsed.
- A set of scripts for quick interaction with a dataset manager via PROOF are available under $ROOTSYS/etc/proof/utils/pq2 . The scripts are prefixed pq2 (proof quick query - or proof-dq2) and allow to {browse, register, remove, verify} datasets on a given PROOF master. See $ROOTSYS/etc/proof/utils/pq2/README for more information.

- Improvements

- Enable by default schema evolution in TMessage; can be disabled setting 'Proof.SchemaEvolution: 0' .
- Extend the functionality of the dataset API to obtaine information on per-server base; add also two new methods:

- TProof::SetDataSetTreeName(<dataset>,<treename>): set/change the default tree name in the TFileCollection;
- TProof::ExistsDataSet(<dataset>): check by-name the availability of a given dataset;

- In ProofBench,

- Load the macro before executing it. This allows to circumvent a problem recently fixed giving less dependency on the server version.
- In make_dset.C, simplification of the body and of the signature, eliminating one redundant argument

- In TProofOutputFile, improve flexibility in defining the URL for the local files server. The "LOCALDATASERVER" env is tested, which can defined with placeholders via the xpd.putenv directive in the xrootd/xproofd config files.
- Improving parsing of lines with memory info. This solves occasional crashes while generating the memory plots.
- In TProofMgr::GetSessionLogs:

- add the possibility to postpone the retrieval of the logs files when the TProofLog object is created. This improved functionality is exploited in the log window.
- add decoding of the session starting time and full information about the master URL

- Enable new xrootd configuration options, including the possibility to set the compiler and linker
- Cleanup of the TProofMgr functions DetachSession and ShutdownSession, and better handling of the internal list registration, to fix potential segvs when reopening a PROOF session inside the same ROOT session.
- Optimize the way results are transferred and merged:

- Output objects are added to the same TMessage until a HWM is reached (default 1MB; controlled by 'ProofServ.MsgSizeHWM'); this limits the number of transfers in the case of large numbers of small objects.
- Reasonably small histograms (GetSize() < MsgSizeHWM) are merged in one-go at the end instead of one-by-one to exploit, for example, the better performance of TH1::Merge on the full list of histos.
- Add possibility to compress the messages; this is controlled by ProofServ.CompressMessage <compression_level>
  The default is still 'no compression' but this will allow to study the impact of compression.

- Add sort of 'progress' counter for merging is now shown on the client:
  root [n] p->Process(...)
  ...
  Mst-0: merging output objects ... / (4 workers still sending)
  This asserts socket activity and fixes the timeout problems during long merging phases reported in a few cases.
- In TFileMerger, create directly the output file at the final destination do not make a local copy in the temp directory first (if needed, one can always set the temporary destination to temp followed by a TFile::Cp to the final destination); this allows to avoid reported problems with small temp partitions (see Forum).
- In XrdProofConn, enable cycling through the authentication protocol presented by the server. This only holds for the choice of the protocol, because the server currently supports only one full handshake.
- In test/stressProof.cxx, avoid interferences between the settings used for the PROOF tutorial and possible local settings (daemon, dataset manager).
- Add possibility to control the automatic re-loading of the <proof.conf> file via the keyword 'reload:1'/'reload:0' in the xpd.resource directive.
- Move the validation of <proof.conf> at the moment of use; this allows to specify a file path and to dynamically create/modify/destroy the file; used by PoD.
- Improve displaying speed of large log files

- Fixes

- Fix two severe bugs in the way TTreeCache was used in PROOF: one bug was de facto disactivating the cache; the other was causing a std::bad_alloc exception to be thrown on workers when opening a remote file after a local one.
- Fix several problems in TChain::Draw including

- drawing into an existing histogram, i.e. chain->Draw("var>>myhist");

- treatment of histogram merging in case of small statistics, i.e. when
  the autobinning is not or only partially active;

- usage of existing canvases when different histogram names are specified;

- Fix a problem causing a duplication of the final feedback object

- Fix problem with determining the subdir name in TFileMerger::MergeRecursive on Windows
- Make sure that the default sandbox is under $HOME/.proof
- Fix a problem with dataset validation in multi-level master setups
- Fix a problem with ordinal numbers in multi-master setups
- Fix a problem with defining the internal paths for executables when configuring with '--prefix'
- Fix backward-incompatibility issue giving the error message "unknown action code: 5112"
- Fix a few problems with file retrieval from the cache
- Fix a problem with iteration of a std::list occasionally causing seg-violations in TXSocket
- Fix a few problems preventing correct usage of entry lists in PROOF
- Fix a problem with the permissions of the credentials files created under <sandbox>/.creds
- Fix a potential problem while determining the log paths in log retrieval
- Do not use vnsprintf in the XrdProofd plug-in, potential source of deadlocks.
- Fix a problem overwriting the local environment settings for the xrootd sec modules
- In XrdProofdProofServMgr::Destroy, fix segv in message creation when all sessions are destroyed at once
- Fix a problem determining the relative time order of old sessions for log retrieval
- In TProof::HandleInputMessage, fix possible double delete after kPROOF_STOPPROCESS
- Fix a couple of issues on reconnection to a running session (some dialog buttons not in the correct state; logs not correctly redirected)
- Fix a problem creating spurious warnings during 'draw' queries