\documentclass [compress, t]{beamer}
\usepackage{styles/beamerthemeMarseille}
\usepackage[latin1]{inputenc}
\usepackage{epsfig}
\usepackage{graphicx}
\usepackage{graphics}
\usepackage{subfigure}
\usepackage{color}
\usepackage{algorithmic}
\usepackage{algorithm}
\usepackage{pgfarrows, pgfnodes}
\usepackage{url}
\usepackage{textcomp}
\usepackage{url}\urlstyle{sf}
\usepackage{xspace} 
\usepackage{listings}

% Beamer Options
\setbeamercovered{dynamic}
\setbeamertemplate{blocks}[rounded][shadow=true]
%\setbeamertemplate{background canvas}[vertical shading][bottom=white,top=structure.fg!20]

%%%% macros %%%%

% Macros
\newcommand{\cmt}    {{\em CMT}\@\xspace}%
\newcommand{\svn}    {{\em SVN}\@\xspace}%
\newcommand{\cvs}    {{\em CVS}\@\xspace}%

\setbeamercovered{dynamic}

\definecolor{rltgreen}{rgb}{0,0.5,0}
\pgfdeclareimage[height=0.5cm]{LogoLAL}{logos/logo}
\logo{ \pgfuseimage{LogoLAL} }

\title{SVN evaluation and proposal for Atlas, \\ Atlas software week}
\author{Christian Arnault, Vincent Garonne\\
\{arnault,garonne\}@lal.in2p3.fr}
\institute{Laboratoire de l'accélérateur Linéaire}
\date {April 7, 2006} % \today

\begin{document}

% Transparent: Première page 
\begin{frame}
\maketitle
%\textcolor{gray}{\it \scriptsize }
\end{frame}

%------------------------------- SECTION -------------------------%
\section*{Outline}

%------------------------------- SLIDE -------------------------%
\frame
{
% \frametitle{Outline}
 \vfill
   \begin{block}{Outline}
 \tableofcontents[hideallsubsections]
 \end{block}
}

%------------------------------- SECTION -------------------------%
\section[svn introduction]{\svn in a nutshell} 

%------------------------------- SLIDE -------------------------%
\frame
{
 \frametitle{\svn in a nutshell}
 \begin{block}{What is Subversion (or SVN) ?}
\begin{itemize}
            \item  Source code management system
            \item  Open Source project (\url{http://subversion.tigris.org/})
             \item \svn has new features that cover many limitations of \cvs
             \item Subversion commands are very similar to \cvs, most of 
             the time it's a matter of  replacing \texttt{"cvs"} with \texttt{"svn"}~\cite{cvscrossover}
\end{itemize}
\end{block}

\begin{block}{Questions for Atlas}
As we have observed limitations/weird behaviors of \cvs:
\begin{itemize}
\item Is it appropriate to do a swap  ? 
\item Is the atlas developer is enough 
perturbed :) by the multi-projects structure without adding that ? 
\end{itemize}
\end{block}
}

%------------------------------- SECTION -------------------------%
\section[CVS/SVN comparison]{\cvs versus \svn} 

%------------------------------- SLIDE -------------------------%
\frame
{
\frametitle{\cvs versus \svn}
\begin{itemize}
      \item \svn really works faster than \cvs :
      \begin{itemize}
      \setbeamertemplate{itemize items}[circle]      
          \item Transmits less information through the network 
           \item Supports more operations for offline mode, e.g
           client sends deltas to server when committing
        \end{itemize}
%      \item More details :  
\end{itemize}
\scriptsize
\begin{table}[htb] 
\begin{center}
\begin{tabular}{|l|c|c|}
\hline
\texttt { \large \bf \textcolor{blue}{Source code management system}} & {\bf \large  \textcolor{blue}{\cvs} } & {\bf \large  \textcolor{blue}{\svn}}  \\ 
\hline
\hline
\texttt {\bf Atomic Commits } & \textcolor{red}{No} & \textcolor{green}{\em Yes} \\ \hline
\texttt    {\bf Efficient (constant-time) tagging } & \textcolor{red}{No} & \textcolor{green}{\em Yes} \\ \hline
\texttt {\bf File renames handles cleanly (renaming, moving)} & \textcolor{red}{No} & \textcolor{green}{\em Yes} \\ \hline
\texttt {\bf Advanced Merging Features} & \textcolor{red}{No} & \textcolor{green}{\em Yes} \\ \hline
\texttt {\bf Manipulation of all the file types} & \textcolor{red}{No} & \textcolor{green}{\em Yes} \\ \hline
\texttt {\bf Easy Development on Branches} & \textcolor{red}{No} & \textcolor{green}{\em Yes} \\ \hline
\texttt {\bf Easy Server Administration} & \textcolor{red}{No} & \textcolor{green}{\em Yes} \\ \hline
\texttt {\bf Remote Repository Replication} & \textcolor{red}{No} & \textcolor{green}{\em Yes} \\ \hline
\texttt {\bf Scalable Performance and Admin} & \textcolor{red}{No} & \textcolor{green}{\em Yes} \\ \hline
\texttt {\bf Advanced repository permissions Features}  & \textcolor{red}{No} & \textcolor{green}{\em Yes} \\ \hline
\texttt {\bf Web Browser Interfaces} & \textcolor{red}{No} & \textcolor{green}{\em Yes} \\ \hline
\texttt {\bf HTTP proxy to connect the server} & \textcolor{red}{No} & \textcolor{green}{\em Yes} \\ \hline
\end{tabular} 
\end{center}
\end{table}
** For more infos, look~\cite{svnvscvs}
}

%------------------------------- SECTION -------------------------%
\section[Proposal]{Proposal for Atlas} 

%------------------------------- SLIDE -------------------------%
\frame
{
\frametitle{Scenario for Atlas}

\begin{block}{ Roadmap}
\begin{enumerate}
      \item Convert the Atlas CVS repository into a Subversion one
      \begin{itemize}
               \setbeamertemplate{itemize items}[circle]      
                \item  A tool exists,  \texttt{"cvs2svn"} (\url{http://cvs2svn.tigris.org})
       \end{itemize}
      \item Provide tools to provide synchronization operations between \cvs and \svn repositories 
       \begin{itemize}
                 \setbeamertemplate{itemize items}[circle]      
                  \item  For a certain period,  we will have both system running at the same time
                   \item remark: iterative transition is less painful for the developers :) 
       \end{itemize}
       \item Incorporate \svn in the complex Atlas software management chain, it supposes impact to :
       \begin{itemize}
                  \setbeamertemplate{itemize items}[circle]      
                   \item CMT
                   \item Tag Collector
                   \item Nicos 
       \end{itemize}
       \item If successful, we could do the permanent failover; if not ... :(
\end{enumerate}
\end{block}
}

%------------------------------- SLIDE -------------------------%
\frame
{
  \frametitle{CVS repository conversion}
   \begin{block}{Conversion script}
    For better understandings, we have developed our own 
   \texttt{cvs2svn} python script {\small (\texttt{\url{/afs/cern.ch/atlas/scripts/cvs2svn.py}})}:
   \begin{itemize}
                  \setbeamertemplate{itemize items}[circle] 
                   \item Keeps the history of all tags up to HEAD
                   \item Skips the intermediate commits between 2 tags
                   \item Can be applied iteratively
   \end{itemize}      
   \end{block}
   \begin{block}{Definition of a repository organization}
   \begin{itemize}
   \item SVN gives full freedom in term of internal structure
    \item Tags, branches are views to the source history 
   \begin{itemize}
       \setbeamertemplate{itemize items}[circle] 
        \item  in CVS, they are metada applied to individual files)
     and appear like directory structures
   \end{itemize}
   \item  Views can be freely modified and have revision number
 \end{itemize}
  \end{block}
  }

%------------------------------- SLIDE -------------------------%
\frame
{
\frametitle{Converting CVS Repository to Subversion}
 \begin{block}{}
 \begin{itemize}
\item We have selected the following organization for each project/package/tag:\\
\texttt{\textcolor{blue}{
<project>/.../<package>/trunk/...\\
<project>/.../<package>/tags/<tag>/...}}
\end{itemize}
\end{block}

 \begin{block}{}
 \begin{itemize}
 \item The complete Atlas cvs repository has been converted to a svn one. The svn url is :\\
       {\small   \texttt{\url{file:///afs/cern.ch/atlas/software/svnrepository/repository}}}
\item It takes a looong time to do that the first time
 \begin{itemize}
         \setbeamertemplate{itemize items}[circle] 
          \item Try different \svn backends: Berkley DB,  \underline{\svn file system} 
          \item It takes me ~one week  to complete the procedure, e.g. 8 hours for the AtlasCore project
          \item but update will only concern recent tags
\end{itemize}
\end{itemize}
\end{block}
}

%------------------------------- SLIDE -------------------------%
\frame
{
\frametitle{Conversion validation and management tools}

\begin{block}{Conversion validation tools}
\begin{itemize}
\item We have implemented several tests to check the quality of the 
conversion: 
\begin{itemize}
         \setbeamertemplate{itemize items}[circle] 
         \item  Comparing the sources at each tag with diff tests
          \item Comparing the list of tags for a packages
         \item Check global structure of the \svn repository
         \item \url{/afs/cern.ch/atlas/scripts/testcvs2svn.py}
\end{itemize}
\end{itemize}
\end{block}

\begin{block}{Management tools}
\begin{itemize}
\item We have also implemented a script which re-organizes the SVN repository:\\
\texttt{ \textcolor{blue}{
<project>/.../<package>/trunk/...\\
<project>/.../<package>/<tag>/...}}
\end{itemize}
\end{block}
}


%            \item A "CVS complient" script is available at cern 
%                     \texttt{/afs/cern.ch/atlas/scripts/asvn}
%             \item \url{http://uimon.cern.ch/twiki/bin/view/Atlas/StudiesForUsingSVNInAtlas}

%------------------------------- SLIDE -------------------------%
\frame
{
\frametitle{Performance and scalability}
 \begin{block}{Test stress scenario}
We define the following {\bf action} for an user: 
\begin{itemize}
           \item User selects ramdomly a package
           \item  He extracts and modifies it, then register it until the operation is succesful
           \item Then he sleeps $n$ seconds with $n$ sort randomly $ \in [1, T_{max}]$
\end{itemize}
\end{block}

\begin{block}{Experiment parameters}
\begin{itemize}
\item We have done experiments with different:
\begin{itemize}
            \setbeamertemplate{itemize items}[circle] 
             \item Total number of users (10, \textcolor{blue}{100}, 1000)
             \item Total number of packages (10, \textcolor{blue}{1000}, 10.000)
\end{itemize}
\item Concurrent user actions were launched by a multi-threaded program 
({\small\texttt{\url{/afs/cern.ch/user/v/vgaronne/svnTestStress}}})
\end{itemize}
\end{block}
}

%------------------------------- SLIDE -------------------------%
\frame{
\frametitle{Performance and scalability - Results}
\begin{block}{}
\begin{itemize}
\item Let ${\cal R}atio$ be the ratio  $\frac {Total~number~of~users} {{Total~number~of~packages}}$
\end{itemize}
\end{block}

\begin{block}{}
We obtained :
\small
\begin{center}
\begin{tabular}{ccc} 
\hline  ${\cal R}atio$ & $T_{max}$ & Average action time (s)  \\ \hline 
0.01 & 3600.0& 1.34   \\ 
0.01 & 100.0& 1.06     \\ 
0.01 & 10.0     & 1.38   \\ 
\textcolor{blue}{0.1} & \textcolor{blue}{ 3600.0}  & \textcolor{blue}{5.77}     \\
0.1&  100.0& 4.26         \\ 
\textcolor{blue}{0.1} & \textcolor{blue}{10.0} &  \textcolor{blue}{6.96}          \\ 
1.0 & 3600.0  & 7.42   \\ 
1.0 & 100.0& 7.06         \\ 
1.0 & 10.0& 8.88\\
\end{tabular}
\end{center}
{\footnotesize\textcolor{blue}{**In blue, the values relevant for Atlas}}
\end{block}
}

%------------------------------- SLIDE -------------------------%
\frame{
\frametitle{Synchronization operations}
\begin{block} {Mainly at the user level:}
\begin{itemize}
             \item We proposed a script \texttt{"asvn"} that mimics the CVS syntax for SVN, including the synchronization operations on tags:
             \begin{itemize}
                        \setbeamertemplate{itemize items}[circle] 
                        \item Non exhaustive commands are: checkin,  checkout , tag, ...
                        \item Provides also cmt specific commands working with SVN, e.g. 
                        recursive checkout,  svntags, svnsubprojects, ...
                        \item see \url{/afs/cern.ch/atlas/scripts/asvn}                         
             \end{itemize}             
             \item \textcolor{red} {We assume that when users switch completely to svn for a package, 
             they will not work anymore with \cvs for this package, otherwise we will have integrity problems}             
             \item The synchronization operation should be trigered at the user/developer level during tag operations\\
                \texttt{> asvn --sync tag Package-00-00-01 Package}
\end{itemize}
\end{block}
}

%------------------------------- SLIDE -------------------------%
\frame{
\frametitle{Impact to the Atlas software management chain and tools}

\begin{block} {Impact to the work model}
\begin{itemize}
\item  No real change is expected
\end{itemize}
\end{block}

\begin{block} {Impact to the tools}
\begin{itemize}
                                \item CMT: The \texttt{"asvn"} script previously presented covers theses aspects
                                 \item Tag Collector: Need an interface to SVN, but should much simpler than the interface to CVS. If not  possible immediately, 
                                     we could go on  temporally with the synchronized Atlas CVS repository
                               \item  NICOS: Normaly only concerned with checkout operations ?
\end{itemize}
\end{block}
}

%------------------------------- SECTION -------------------------%
\section{Conclusion}

%------------------------------- SLIDE -------------------------%
\frame{
\frametitle{Conclusion}

\begin{block} {}
\begin{itemize}
\item All the necessary tools are in place for begin using SVN in Atlas
\item Testing by real users, will help to tune and improve these tools
\item Doing more tests for validating the atlas svn repository
\item  Implementing the interface to SVN in Tag Collector, depends 
          on TC team availability
\end{itemize}
\end{block} 

\begin{block} {Futur}
\begin{itemize} 
           \item  SVN brings lots of new interesting features, that we could used incrementally :
            \begin{itemize} 
                      \setbeamertemplate{itemize items}[circle] 
                      \item Metadata features
                      \item  Real Multi-repository
                       \item  Directory management
                       \item Transparent branch management
          \end{itemize}
\end{itemize}
\end{block} 
}

%------------------------------- SECTION -------------------------%
\section*{References}

%------------------------------- SLIDE -------------------------%
\frame[allowframebreaks]
{
\frametitle{References}
\nocite{subversion}
\nocite{cvs2svn}
\bibliographystyle{unsrt}
\bibliography{CMT06-04-2006-sit}
}

\end{document}
%------------------------------- End Of File -------------------------%