6 proba de collision en fonction de la taille du hash
7 http://en.wikipedia.org/wiki/Birthday_attack
10 - Pouvoir configurer les algos de cryptage
11 - Pouvoir choisir de crypter dans le fileset
12 - Pouvoir choisir de forcer le cryptage dans la definition
15 Lister les fichiers sur le client :
16 - Avoir un mode comme restore
17 - Avoir une api list files client=xxx where=yyy
18 Dans la filed/job.c:handle_client_request, ajouter une commande
19 dans struct s_cmds cmds; et si possible utiliser le code de finlib
20 - A voir, pourquoi ne pas utiliser mark/unmark comme dans une resto
21 pour construire un fileset ?
23 Sauvegarde des postes nomades :
24 - Le client doit pouvoir initier les sauvegardes
25 - Au niveau firewall, il ne doit y avoir que 1 connexion (1)
29 | +-------+ (4) +---------------+
31 +--------+ (5) +-------+ | | | | DIRECTOR |
32 | |<------+ | | | |---->| |
33 | FD | | PROXY | | | PROXY | (3) +-------+-------+
34 | +-------> <-+---> | |
35 +--------+ (6) +-^-----+ (2) | | +-------v-------+
37 | | | +-----> STORAGE |
39 Initiate backup | | +-------+ +---------------+
44 (1) & (2) BEGIN Backup
45 (3) Bconsole like - Run command
46 (4) & (5) DIR -> (PROX <-> PROX) -> FD connection (fileset, storage..)
47 (6) & (7) FD -> (PROX <-> PROX) -> SD
49 - Utilisation d'une sorte proxy https
53 p Ajouter l'historique dans la bconsole
54 - Ajouter une commande pour bloquer un drive
55 - Ajouter de la completion automatique sur les commandes
58 - Avoir un SD sur chaque FD
59 - Avoir une serie de script qui :
60 * bascule le lecteur en local
62 * le script de mtx doit faire ses demandes au director sur
65 - Tout le monde voit le lecteur, et le client doit demander la permission
66 pour despooler son bloc de XG au director.
68 - On fait du round robbin avec tout le monde, et on utilise un disque
71 - 50 clients qui spoolent en local, c'est plus rapide que vers 1 point
76 - Ajouter la gestion des stats dans le client et le sd
77 - Ajouter un M_STATS dans la gestion des messages
78 - générer un format simple UNIXSTAMP|label|unit|value
79 - possibilité d'ajouter ça dans la base de donnée ou dans rrd
83 - apr (apache portable runtime) pour les exemples de chargement
84 de module dynamique (win32, linux, etc...)
85 http://svn.apache.org/viewvc/apr/apr/trunk/dso/
88 http://modules.apache.org/doc/API.html
90 - comment charger les librairies dependantes d'un hook
94 - nommer les hook (a la place d'une structure de pointeur)
96 "action", mod_action_handler
111 - configuration... (ajout automatique avant de charger le fichier de conf)
118 - exemple de hook/module
120 - checksum (MD5/SHA1)
122 - compression (LZO, GZIP, BZIP)
124 - initialiser le jcr avec seulement les hooks utiles
127 - declarer les modules utiles
128 - les options doivent utiliser le nom du module
139 SELECT strftime('%Y-%m-%d', Job.StartTime) FROM Job LIMIT 1;
140 x Voir les groupes d'un client
141 - Overview, pouvoir choisir entre la job_old et l'autre
142 - utiliser des noms de table plus proche (brestore -> bweb ?)
144 Btw., the vertical axis was the number of files
145 while the size of the ballon is the volume (in MB
146 or GB). Those could be switched, though, depending on what looks better.
148 What are you using for color-coding the ballons?
149 That could be a variety of different things like
150 client, client group, backup level (full,
151 incremental, etc.,) that adds context to the size
152 and position that is already present in the chart.
154 x Ajouter mount,umount,release,status pour chaque device
155 - Ajouter le viewfileset dans l'interface de resto
156 x Ajouter la labelisation de bande et l'ajout de media (add et label)
157 - Ajouter la possibilité de lancer des migrations et des
159 - Quand on deplace un media, il faut prendre le enabled depuis
160 la nouvelle localisation (en javascript)
161 o On ajoute une combo (Backup/Migration/Verify)
162 o On peut regarder dans l'historique des job quel est le bon type
163 o Quand on relance, on spécifie le type directement
164 o Il faut adapter le status client pour traiter les autres type
165 de job (par exemple, si c'est pas un backup/restore, pas de status dir)
168 x Ajouter une vue par groupe et par date (sur 7, 15 ou 30 jours)
171 groupe1 v v x w v v v q1
172 |-- s1 v v v v v v v q2
176 ---8<-------8<--------8<--------8<----------8<------------------
178 ALTER TABLE Status ADD COLUMN severity int;
179 UPDATE status SET severity = 15;
180 UPDATE status SET severity = 100 where jobstatus = 'f';
181 UPDATE status SET severity = 90 where jobstatus = 'A';
182 UPDATE status SET severity = 10 where jobstatus = 'T';
184 -- Affiche par groupe et date le statut des jobs (q1)
185 SELECT date_part('day', date) AS day, date, client_group_name, JobStatusLong,
186 JobStatus, nb_job, joberrors
188 SELECT date_trunc('day', job_old.StartTime) AS date,
189 MAX(severity) AS severity,
191 SUM(JobErrors) AS joberrors,
194 JOIN client_group_member USING (ClientId)
195 JOIN client_group USING (client_group_id)
196 JOIN Status USING (JobStatus)
197 WHERE StartTime > '2007-10-01' AND StartTime < '2007-11-19'
199 GROUP BY client_group_name, date
200 ) AS sub JOIN Status USING (severity)
201 ORDER BY client_group_name, date
203 -- Affiche un client_group en detail (q2)
204 SELECT date, client, JobStatusLong, JobStatus, nb_job, joberrors
206 SELECT date_trunc('day', job_old.StartTime) AS date,
207 Client.Name AS client,
208 MAX(severity) AS severity,
210 SUM(JobErrors) AS joberrors
212 JOIN client_group_member USING (ClientId)
213 JOIN client_group USING (client_group_id)
214 JOIN Client USING (ClientId)
215 JOIN Status USING (JobStatus)
216 WHERE StartTime > '2007-10-01'
217 AND client_group_name = '0-SAVES_SIGMA1'
219 GROUP BY client, date
220 ) AS sub JOIN Status USING (severity)
221 ORDER BY client, date
223 ---8<-------8<--------8<--------8<----------8<------------------
225 - Quand on clique dessus on arrive sur la liste des jobs en question
229 x Ajouter une variable pour remplacer NOW() dans les queries
230 origin = arg->{origin} || NOW();
231 - Ajouter des stats en %
233 ---8<-------8<--------8<--------8<----------8<------------------
235 SELECT client_group_name, (nb_ok::float/(nb_ok+nb_other)*100)::numeric(6,3) AS percent_ok
239 SUM(CASE WHEN JobStatus='T' THEN 1
240 ELSE 0 END) AS nb_ok,
241 SUM(CASE WHEN JobStatus='A' THEN 1
242 WHEN JobStatus='f' THEN 1
243 WHEN JobStatus='E' THEN 1
244 WHEN JobStatus='e' THEN 1
245 ELSE 0 END) AS nb_other,
248 JOIN client_group_member USING (ClientId)
249 JOIN client_group USING (client_group_id)
251 WHERE StartTime > '2007-10-01'
252 GROUP BY client_group_name
255 SELECT Name, (nb_ok::float/(nb_ok+nb_other)*100)::numeric(6,3) AS percent_ok
259 SUM(CASE WHEN JobStatus='T' THEN 1
260 ELSE 0 END) AS nb_ok,
261 SUM(CASE WHEN JobStatus='A' THEN 1
262 WHEN JobStatus='f' THEN 1
263 WHEN JobStatus='E' THEN 1
264 WHEN JobStatus='e' THEN 1
265 ELSE 0 END) AS nb_other,
268 JOIN Client USING (ClientId)
270 WHERE StartTime > '2007-10-01'
271 AND JobStatus IN ('T', 'A', 'f', 'E', 'e')
277 ---8<-------8<--------8<--------8<----------8<------------------
280 ------------- x 100 => par groupe de client
283 - Il faut ajouter une estimation des jobs qui auraient
284 du se lancer (a voir avec les schedules)
286 - Affichage en html/csv pour des stats
287 grp, nb client, nb backup, nb ok, nb err, nb cancel,
288 %ok, nb files, nb gig, time
290 - Ajouter la liste des fichiers (quand il n'y en a pas trop)
291 - Ajouter un mode qui compte le nombre de fichier sous bfileview
292 x Ajouter une estimation de progression du backup basé sur le nombre
293 de fichier et le nombre de Mo
294 x Ajouter un bouton suivant/precedant dans la vue des logs
295 x Ajouter la liste des medias qui vont/ont expirer et les pruner
296 x Fixer les purge/prune de multiple volumes
297 x Ajouter une gestion des utilisateurs avec des roles
298 o Liste des roles possibles
312 o Avoir des profiles ayant certains roles
314 * customer (view_stats, view_history, view_log)
315 * production (all - configure)
318 o Pour faire la difference entre les groupes de la vue et
319 les groupes d'acl, il faut ajouter un champs dans la table
320 client_group (visible bool).
322 o Ajout de 4 tables dans le catalogue
323 - bweb_user (userid, username, passwd, comment) passwd with apache ?
324 - bweb_role (roleid, rolename)
325 - bweb_role_member (roleid, userid)
327 - bweb_client_group_acl (client_group_id, userid)
328 - bweb_pool_acl (poolid, userid)
330 o Il faudrait aussi pouvoir choisir le login admin...
332 x On specifie par user si on veut filter par les groupes (gestion un peu
333 chiante, il faut ajouter les hosts dans les groupes, sinon, ils sont
336 x On recupere ce champs quand on check les can_do(); et apres, on le regarde
337 avant d'envoyer le JOIN de filtre. (Attention, admin n'est pas soumis a ca)
339 x On peut ajouter une option dans la Config pour activer ce mode ou pas.
341 x Regarder la possibilite de recuperer toutes les roles au debut pour
342 adapter les pages web... Il n'y a que les menus/actions autorises qui
343 seraient affiches. (bp cancel => role cancel_job, configuration => role configure)
345 * on utilise le commentaire depuis une page web, comme ca
346 on gere la traduction sans toucher a la base
348 CREATE TABLE bweb_user
350 userid serial not null,
351 username text not null,
352 use_acl boolean default false,
353 comment text default '',
354 passwd text default '',
357 CREATE UNIQUE INDEX bweb_user_idx on bweb_user (username);
359 CREATE TABLE bweb_role
361 roleid serial not null,
362 rolename text not null,
363 -- comment text default '',
366 CREATE UNIQUE INDEX bweb_role_idx on bweb_role (rolename);
368 INSERT INTO bweb_role (rolename) VALUES ('r_user_mgnt');
369 INSERT INTO bweb_role (rolename) VALUES ('r_delete_job');
370 INSERT INTO bweb_role (rolename) VALUES ('r_prune');
371 INSERT INTO bweb_role (rolename) VALUES ('r_purge');
372 INSERT INTO bweb_role (rolename) VALUES ('r_group_mgnt');
373 INSERT INTO bweb_role (rolename) VALUES ('r_location_mgnt');
374 INSERT INTO bweb_role (rolename) VALUES ('r_cancel_job');
375 INSERT INTO bweb_role (rolename) VALUES ('r_run_job');
376 INSERT INTO bweb_role (rolename) VALUES ('r_configure');
377 INSERT INTO bweb_role (rolename) VALUES ('r_client_status');
378 INSERT INTO bweb_role (rolename) VALUES ('r_view_job');
380 CREATE TABLE bweb_role_member
382 roleid integer not null,
383 userid integer not null,
384 primary key (roleid, userid)
387 CREATE TABLE bweb_client_group_acl
389 client_group_id integer not null,
390 userid integer not null,
391 primary key (client_group_id, userid)
394 - Integrer brestore en mode javascript
396 .ls_dir(jobid,pathid)
397 .ls_file(jobid,pathid)
398 .get_pathid(jobid,"/")
399 .genbsr (fileid, fileid, fileid, fileid, fileid...)
400 -> on peut utiliser une table dans la base pour faire ca
403 > 1. Unloading tapes assistent.
405 > I'm using a script which selects tapes to unload. The idea is to
406 > remove all volumes from the library that contain a current set of
407 > backups. Basically, find the volumes from the most recent full backups
408 > and all volumes that depend on these. Ignore older fulls and their
409 > differentials and incrementals.
411 > This is to ensure that, at the time volumes are unloaded, a complete
412 > set of backups can be stored safely.
415 Jobs -> Job Zoom -> View Media -> Select them -> Eject
417 Yes, it's a very good idea, i see no difficulty to implement this kind of
421 Media -> Made a Safe backup set
422 -> Select Client(s) -> Select Job(s) -> Backup set
424 I think that i can do some sort of assistant to that.
425 (with next, next next)
428 > While volumes are prepared for unloading, I disable them, so Bacula
429 > will not try to use them. Later, they are automatically re-enabled.
431 x Do you use the Enabled flag for that ? It's a good idea.
433 > Move these volumes (if possible) to the export slots.
435 I have already some code for that, but at this time it doesn't use
436 the mtx-script from bacula. (or bacula-sd commands)
438 I have to change this, so user have a working mtx-scripts, and we use
439 it everywhere. (The best solution is to send command to bacula-dir)
441 > Later, request volumes to fill up the pools so there are usable
442 > volumes for later backups around. Load these volumes from the import
443 > slots to the regular working slots, and do an 'update slots'.
445 I use the Scratch pool for this sort of things, but we could use an other
448 Media -> I/O -> Fill pools -> Select pool(s) -> import selections
451 x Bug dans la determination des jours de la semaine (exemple de la full
452 le premier dimanche du mois)
455 - Avoir la version 2.0 et la version 2.2 en ligne (pour que les utilisateurs
456 ne se trompent pas dans les versions)
457 - Supprimer les (need bacula >= 1.xx) (dans la derniere version)
460 - Faire un test de non regression avec pleins d'erreur
461 o pb inclusion (distante, locale)
462 o pb exclusion (distante, locale)
463 o pb execution de commande
464 o pb de config avec test du -t des differents daemon
465 x Utiliser PQescapeStringConn a la place de PQescapeString
466 - Utiliser la lib pcre
467 - Rendre les scripts bacula-ctl-xxx LSB
468 x Pouvoir utiliser les uid numeriques dans le backup des acl
469 - Avoir un script qui dump la configuration pour faire
471 p modifier l'organisation de la table version (pour pouvoir ajouter
472 les versions de bweb par exemple)
473 - utiliser la meme fonction pour read_close_session et append_close_session
474 x pb dans le message de chargement d'une bande pendant une resto
476 Please mount Volume "R40175" or label a new one for
477 Pas le bon message pour une resto (label a new one)
478 - Impossible de lancer une restauration en meme temps qu'un backup sur
479 un autochanger. Le code dans jobq.c qui controle les MaxConcurrentJobs
480 ne prend pas en compte les autochanger avec plusieurs drives. Ce code
481 fait surement doublon avec le nouveau code de reservation.
482 Il faudrait le simplifier, et compter les jobs de restauration comme les
483 jobs normaux. Le patch précédent ne changeait pas le MaxConcurrentJobs
484 comme il faut à la fin du backup.
487 o Envoyer la liste de tous les fichiers au client dans un format simple
488 /path/ LSTAT # un / a la fin pour un repertoire
491 o Le client construit un hash disque (ou en memoire ou les deux)
492 o A chaque repertoire/fichier on verifie la presence du fichier dans le hash
493 et on peut aussi comparer date/taille/bloc
494 - Si le fichier n'est pas dedans, on le backup
495 - Si le fichier est present on verifie les attributs et on mark le fichier comme vu
496 o A la fin, on parcours tous le hash pour trouver les fichiers qui ne sont pas vu et
497 on envoie la liste des fichiers supprimes avec le fileindex=0 et pourquoi pas la date
498 du jour dans le champ mtime
499 o Utiliser systematiquement l'option ignorecase sous windows
500 p Ajouter une option pour avoir la table de stat
501 Enable Statistic = yes/no
502 Statistic retention = 4 years
503 o use mmap to map hash ? (on 32b, we are limited to 1 or 2GB)
506 ef->data = mmap(NULL, ef->data_size, PROT_READ,
507 MAP_SHARED, fileno(ef->fp), 0);
509 fm = CreateFileMapping((HANDLE) _get_osfhandle (fileno(ef->fp)),
515 ef->data = MapViewOfFile(fm,
523 ef = eet_internal_read(ef);
530 if (ef->data) munmap((void*)ef->data, ef->data_size);
532 if (ef->data) UnmapViewOfFile (ef->data);
535 if (ef->fp) fclose(ef->fp);
537 - Accurate backup (kern)
540 *3. FD does a normal backup and at the same time makes a list of all files on
541 the system (in the FileSet), marking which ones were just now backed up.
542 4. For each file backed up send attributes/data to SD. Note, this is done
543 during step 3 above. Minor difference, the connection with the SD is not
544 dropped at the end of the backup -- see later.
545 *5. Send the list of all files including those backed up to the Dir
546 --> Send to SD and DIR at the same time ?
547 filed/backup.c/encode_and_send_attributes
549 6. Dir computes files and deleted files.
550 7. Dir sends list of additional files (new files) to backup, and list of files
552 8. FD does backup of files Dir says to save.
553 9. FD sends SD attrs of backed up files
554 10. FD sends SD delete records for files Dir wants deleted.
555 *11. FD connection to SD can be closed, this part of the backup is done.
556 *12. FD sends new list of files just backed up to Dir
557 *13. Dir adds newly backed up files to previous list sent by FD
558 *14. Dir "batch" inserts complete new list in the catalog (I forgot the name
559 of the new table). Note this table has nothing to do with the File table.
560 *15. Dir deletes previous list in catalog.
561 *16. Dir does normal batch insert of attributes from SD, but must handle
562 deleted records. Note, this will probably happen at the same time as the
568 x Backup a file that is not in accurate list (change NOCHG to LINK, FILE, etc..)
569 * Manage JobFiles (Deleted compte pour 1 ?)
571 x Utiliser le check_accurate dans find_one et declencher le save_file
572 si besoin en desactivant le incremental.
573 x ne va pas marcher avec le strip path (la recherche est faite avant le strip path)
574 * on peut utiliser le champs LStat de la base pour noter que le fichier est supprimé...
576 CREATE TEMPORARY TABLE btemp2 AS (
577 SELECT max(FileId) as FileId, PathId, FilenameId
578 FROM (SELECT FileId, PathId, FilenameId FROM File WHERE JobId IN (39867,40341)) AS F
579 GROUP BY PathId, FilenameId )
581 SELECT Path.Path, Filename.Name, File.FileIndex, File.JobId, File.LStat
583 SELECT max(FileId) as FileId, PathId, FilenameId
584 FROM (SELECT FileId, PathId, FilenameId FROM File WHERE JobId IN (11,13)) AS F
585 GROUP BY PathId, FilenameId
587 JOIN Filename ON (Filename.FilenameId = Temp.FilenameId)
588 JOIN Path ON (Path.PathId = Temp.PathId)
589 JOIN File ON (File.FileId = Temp.FileId)
593 SELECT File.FileIndex, Path.Path, Filename.Name, File.LStat
594 FROM btemp2 JOIN Path USING (PathId) JOIN Filename USING (FilenameId)
595 JOIN File USING (FileId)
596 WHERE File.FileIndex > 0
601 SELECT DISTINCT ON (PathId, FilenameId) FileIndex, Path, Name, LStat
602 FROM File JOIN Filename USING (FilenameId) JOIN Path USING (PathId) WHERE JobId IN (40341)
603 ORDER BY PathId, FilenameId, JobId DESC
608 - Every dates have to be in ISO format
610 - JobLevel, JobStatus, etc.. have to use C constant T,R,a,A,f...
611 - Sizes are always in bytes (no suffix)
612 - Numbers have to be used without commas
613 - If we change (add) something, we must always add new elements
616 For director status on running jobs, it will be great to display :
617 JobId, Client name, Job Name, Level, Start Time and Status
620 x Utiliser une alist dans les runscripts
631 console = "xxxx", "yyyy", "zzzz"
635 o cleanup bextract to use filed code