Newer
Older
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
\documentclass[a4paper]{jpconf}
\usepackage{url}
\usepackage{graphicx}
\usepackage{float}
\newcommand{\quotes}[1]{``#1''}
\begin{document}
\title{StoRM-2: initial design and development activities}
\author{
A~Ceccanti,
F~Giacomini,
E~Vianello and
E~Ronchieri
}
\address{INFN-CNAF, Bologna, IT}
\ead{
andrea.ceccanti@cnaf.infn.it
}
\begin{abstract}
StoRM is the storage element solution that powers the CNAF Tier-1
data center as well as more than 30 other sites. Experience in
developing, maintaining and operating it at scale suggests that a
significant refactoring of the codebase is necessary to improve
StoRM maintainability, reliability, scalability and ease of
operation in order to meet the data management requirements coming
from HL-LHC and other communities served by the CNAF Tier-1 data
center. In this contribution we highlight the initial StoRM-2
design and development activities.
\end{abstract}
\section{Introduction}
\label{sec:introduction}
Andrea, Giaco, ...:
Main reasons for the refactoring/rewrite:
\begin{itemize}
\item Reduce maintenance and evolution costs, simplify the codebase and introduce appropriate testing
\item Provide horizontal scalability for all StoRM services (the backend cannot be currently replicated)
\item Simplify service operation and deployment (containerization)
\end{itemize}
\section{StoRM 2 high-level architecture}
Andrea:
Describe new StoRM 2 architecture.
\begin{figure}
\centering
\includegraphics[width=.6\textwidth]{high-level-arch.png}
\caption{\label{fig:oidc-providers}The StoRM 2 high level architecture.}
\end{figure}
Cite the Nginx VOMS module~\cite{ref:nginx-voms}.
Briefly describe the communication between FE and BE, based on
Protobuf and gRPC. Show an example of Request/Response specification.
\section{Principles guiding the development work}
Andrea:
\begin{itemize}
\item Test-driven development: $>90\%$ coverage on all code
\item Single repository for all the components (fe,be, clis, etc.)
\item Single versions for all the components
\item Git-flowish branching model
\item Keep a README.md to describe directory contents
\item Keep a CHANGELOG to describe code changes
\item Dockerized development/testing environment
\item Continuous Integration
\item Tracing
\item Uniform logging in all components
\item Uniform configuration for all components
\end{itemize}
\section{The build environment}
Andrea, Giaco:
Describe here the work done on build images. Challenges/solutions/lessons learned.
\section{The new StoRM frontend component}
Andrea, Enrico:
Describe here the new StoRM frontend component
\section{The StoRM-2 backend component}
The StoRM-2 backend is a gRPC server that provides multiple
services. One service responds to \textit{version} requests. Another
service responds to storage-related requests, which represent the main
scope of StoRM. In general there is no direct, one-to-one mapping
between SRM requests arriving at the frontend and requests addressed
to the backend; rather, these represent building blocks that the
frontend can compose in order to prepare the responses to SRM clients.
Among the storage requests addressed to the backend, at the moment
only a couple are implemented: \textit{ls}, in its multiple variations
(for a file or a directory, recursive, up to a given depth, etc.),
returns information about files and directories; \textit{pin},
\textit{unpin} and \textit{pin status} manage the
\verb|user.storm.pinned| attribute of filesystem entities, which is
essential for the implementation of the more complex
\textit{srmPrepareToGet} SRM request.
All the backend requests are currently blocking: a response is sent
back to the frontend only when the request has been fully processed.
The backend also incorporates sub-components of more general utility
to operate on Filesystem Extended Attributes and POSIX Access Control
Lists~\cite{p1003.1e}, adding a layer of safety and expressivity on
top of the native C APIs. They allow to define attributes and ACLs
respectively and to apply them to or read them from filesystem
entities.
For example the following sets the attribute \verb|user.storm.pinned|
of file \verb|myFile.txt| to the pin duration:
{\small
\begin{verbatim}
set_xattr(
storage_dir / "myFile.txt",
StormXAttrName{"pinned"},
XAttrValue{duration}
);
\end{verbatim}
}
The following instead extends the ACL currently assigned to
\verb|myFile.txt| with some additional entries:
{\small
\begin{verbatim}
add_to_access_acl(
storage_dir / "myFile.txt",
{
{User{"storm"}, Perms::Read | Perms::Write},
{Group{"storm"}, Perms::Read},
{other, Perms::None}
}
);
\end{verbatim}
}
The backend is implemented in C++, in the latest standard version
supported by the toolset installed in the reference platform
(currently C++17). The build system is based on CMake.
The backend relies on some other third-party dependencies, the most
important being for interaction with the filesystem (Boost
Filesystem~\cite{ref:boost.fs}), for logging (Boost
Log~\cite{ref:boost.log}) and for handling configuration
(yaml-cpp~\cite{ref:yaml-cpp}).
\section{Test suites and continuous integration}
Eli:
Describe here work done on test suites.
\section{Conclusions and future work}
All:
Long road ahead, no effort. Will StoRM 2 ever see the light
with this sort of commitment from INFN?
\section*{References}
\bibliographystyle{iopart-num}
\bibliography{biblio}
\end{document}