1 2011-04-27 Erwann Chenede - <erwann.chenede@oracle.com>
3 * VERSION: Bump to 0.2.98
4 * usr/share/time-slider/lib/time_slider/applet.py
5 usr/share/time-slider/lib/time_slider/deletegui.py
6 usr/share/time-slider/lib/time_slider/setupgui.py
7 usr/share/time-slider/lib/time_slider/snapnowui.py
8 usr/share/time-slider/lib/time_slider/timesliderd.py :
9 Fix for 7038498 removed Primary Administrator references
11 * usr/share/time-slider/lib/time_slider/util.py
12 usr/share/time-slider/lib/time_slider/zfs.py :
13 Fix for 6996354 gracefully handle snapshot failure
15 2010-07-29 Niall Power - <niall.power@oracle.com>
17 * VERSION: Bump to 0.2.97
19 2010-07-08 Niall Power - <niall.power@oracle.com>
21 * usr/share/time-slider/lib/time_slider/timesliderd.py:
22 Fix typo when raising exception. Defect #16361
23 RunTimeError -> RuntimeError
25 2010-07-05 Niall Power - <niall.power@oracle.com>
27 * usr/share/time-slider/lib/time_slider/setupgui.py:
28 Don't set filesystem tree view size request based on
29 number of filesystems: Doesn't scale well. Set fixed
30 initial size instead. Fixes defect #16319
31 Correct misspellings of "writable and "administrator".
34 * usr/share/time-slider/lib/time_slider/zfs.py:
35 Check returned value of bisect.bisect_left() is within
36 index range of list before trying to dereference it and
37 causing IndexError exceptions. Fixes defect #16377.
38 Thanks to Tim Foster for this fix.
40 2010-06-16 Niall Power - <niall.power@oracle.com>
41 * usr/share/time-slider/lib/plugin/rsync/backup.py:
42 Remove accidental clobbering of tempSchedule list so
43 that non-archived backups can be expired as per normal
44 schedule retention rules. Opensolaris defect #16280
46 2010-06-04 Niall Power - <niall.power@oracle.com>
48 * usr/share/time-slider/lib/time_slider/applet.py:
49 Register menu callback in Note class instantiation to
50 avoid multiple registration of same callback.
52 2010-05-24 Niall Power - <niall.power@oracle.com>
54 * usr/share/time-slider/lib/time_slider/setupgui.py:
55 Fix minor function spelling typo
57 2010-05-24 Niall Power - <niall.power@oracle.com>
59 * usr/share/time-slider/glade/time-slider-setup.glade:
60 Replace GtkFileChooser combo widget with standard
63 * usr/share/time-slider/lib/time_slider/applet.py:
64 User path_tol_volume() from util library instead of
67 * usr/share/time-slider/lib/time_slider/setupgui.py:
68 Replace standard GtkFileChooser logic with custom combo
69 box implementation that is more tailored towards selecting
70 a backup device rather than a generic path. Is able to
71 handle an offline/unmounted previously configured backup
72 device gracefully (impossible with stock widget). Doesn't
73 show meaningless shortcuts like Home, Documents, etc. either
74 Cleanup of code, renamed variables to use camel case and
75 made unnecessarily public class variables private.
76 Changed order of target validation tests to check if the
77 device supports posix style links before checking if it's
78 empty. Means user doesn't have to delete everything on a
79 PCFS/FAT32 device only then to find out it's still unsuitable.
81 * usr/share/time-slider/lib/time_slider/util.py: Move previously
82 private function path_to_volume(path) here so it can be shared.
84 2010-05-14 Niall Power - <niall.power@oracle.com>
86 * usr/share/time-slider/lib/time_slider/applet.py:
87 Use icon list hinted by gio.Volume instead of hardcoded
88 harddisk icon when possible when displaying notifications.
89 Makes icon more context specific to type of backup device.
91 2010-05-14 Niall Power - <niall.power@oracle.com>
93 * usr/share/time-slider/lib/time_slider/applet.py:
94 Determine volume name of rsync target if available and
95 display that instead of the raw mount point in
96 notifications. More user friendly.
98 2010-05-14 Erwann Chenede - <erwann.chenede@sun.com>
100 * usr/share/time-slider/glade/time-slider-delete.glade:
102 * usr/share/time-slider/lib/plugin/pluginsmf.py:
103 fix import to call this class from a non standard
105 * usr/share/time-slider/lib/time_slider/deletegui.py:
106 implemented rsync backup visualization and deletion
107 * usr/share/time-slider/lib/time_slider/zfs.py:
108 renamed member function destroy_snapshot to destroy
109 to reflect allow polymorphic call in deletegui.py
110 as the list of backup to delete can now be snapshots
112 * usr/share/time-slider/lib/time_slider/timesliderd.py:
113 propagated member function destroy name change.
115 2010-05-14 Niall Power - <niall.power@oracle.com>
117 * usr/share/time-slider/lib/plugin/rsync/backup.py:
118 Fix list ValueError in list_pending_snapshots() caused
119 when rsync plugin is enabled but no fileystems are
120 selected for backup. Check that zfs returns something
121 more than a blank in such cases.
123 2010-05-14 Niall Power - <niall.power@oracle.com>
125 * usr/share/time-slider/glade/time-slider-setup.glade:
126 Fix resizing issue that prevented list view from expanding
127 to occupy all extra space when window gets vertically
130 2010-05-14 Niall Power - <niall.power@oracle.com>
132 * etc/dbus-1/system.d/time-slider.conf:
133 Add service and policy definitions for TimSlider.config
136 * usr/share/time-slider/lib/plugin/rsync/backup.py:
137 Deal with backup device being mounted under variable
138 removable media mount points if not found in it's expected
139 location. Find and validate alternate mount points.
141 * usr/share/time-slider/lib/time_slider/applet.py:
142 Refactored to allow more modular notification management.
143 Improved rsync device monitoring by implementing both gio.File
144 and gio.Volume monitors so we can track mounting/unmounting of
145 static mounts like nfs/zfs and variable mount points for
146 hotpluggable devices. Validate rsync target is correct using
147 SMF configuration key. Listen to TimeSlider.Config D-Bus events
148 and refresh configuration when D-Bus notification is received.
149 Add menu item to enable launching of setup GUI from the applet.
151 * usr/share/time-slider/lib/time_slider/dbussvc.py:
152 Add class and method definition for TimeSlider Config service
155 * usr/share/time-slider/lib/time_slider/setupgui.py:
156 Register with system D-Bus and send notification of changes
157 to time-slider and rsync plugin services so the applet can
160 2010-05-13 Niall Power - <niall.power@oracle.com>
162 * usr/share/time-slider/lib/plugin/rsync/backup.py:
163 Fix list IndexError exception caused by looking
164 for non-existent backups on an empty device.
166 2010-05-11 Niall Power - <niall.power@oracle.com>
168 * usr/share/time-slider/lib/plugin/rsync/backup.py:
169 Tweak the space management of the rsync device for better
171 - don't scan for deleteables unless the device starts to
172 exceed threshhold capacity.
173 - Rescan capacity periodically during rsync backup thread
174 lifecycle and rescan for deleteable backups only if
175 device exceeds threshold capacity level.
177 2010-05-11 Niall Power - <niall.power@oracle.com>
179 * var/svc/manifest/system/filesystem/auto-snapshot.xml:
180 Update service bundle name and version number to
181 SUNWtime-slider and 0.2.96 respectively.
183 * var/svc/manifest/application/time-slider-plugin.xml:
184 Add 2 new properties to define cleanup threshhold level of
185 rsync backup device and verbosity of rsync output for
188 * usr/share/time-slider/lib/time_slider/util.py: Adjust
189 signature of util.debug() to make the verbose argument
190 mandatory instead of automatic.
192 * usr/share/time-slider/lib/plugin/rsync/rsyncsmf.py:
193 Add 2 new methods to retrieve cleanup threshhold and rsync
194 verbosity properties from the rsync SMF service instance.
196 * usr/share/time-slider/lib/plugin/rsync/backup.py:
197 Cleanup variable naming, making class private variables
198 actually private using leading "_" character.
199 Rename RsyncBackup class to RsyncProcess to me more descriptive.
200 Add support for rsync verbosity in RsyncProcess class.
201 Implement better cleanup and space management mechanism:
202 - Removes old backups in parallel to new rsync backups running
203 in a separate thread if space falls below threshhold level.
204 - Identifies what backups can and can't be deleted for a given
205 new rsync backup based on age and number of backups left for
206 the associated filesystem.
207 - Cleanup threshhold tuneable via SMF atic.
209 * usr/share/time-slider/lib/plugin/rsync/rsyncsmf.py:
210 Add 2 new methods to retrieve cleanup threshhold and rsync
211 verbosity properties from the rsync SMF service instance.
213 * usr/share/time-slider/lib/plugin/rsync/backup.py:
214 Add check to make sure config key on target device matches that
215 stored in SMF before commencing backups.
216 Cleanup variable naming, making class private variables
217 actually private using leading "_" character.
218 Rename RsyncBackup class to RsyncProcess to me more descriptive.
219 Add support for rsync verbosity in RsyncProcess class.
220 Implement better cleanup and space management mechanism:
221 - Removes old backups in parallel to new rsync backups running
222 in a separate thread if space falls below threshhold level.
223 Avoids having to make rough, inaccurate guesses about size
224 required for new backups because it responds in real time.
225 - Identifies what backups can and can't be deleted for a given
226 new rsync backup based on age and number of backups left for
227 the associated filesystem.
228 - Cleanup threshhold tuneable via SMF.
229 - Doesn't try to backup snapshots older than what's already on
230 the backup device if device is almost full.
232 2010-05-05 Niall Power - <niall.power@oracle.com>
233 * usr/share/time-slider/lib/plugin/rsync/backup.py:
234 Redesigned queue management and backlog mechanism. Backs up
235 most recent snapshot set first, then works backwards through
236 the queue. Stops backup mechanism falling too far behind while
237 still allowing backup of older snapshots to take place if
238 time and space permit.
239 Enhancements to filesystem layout of backups - added seperate
240 folders for partial transfers, log files, trash folder and lock
241 files. Added file locking mechanism to prevent deletion by other
242 tools of backups in use (eg during incremental backups).
243 Added trash mechanism, replaces in place deletion of snapshots
244 which messes up directory mtimes and incremental backups.
245 Instead, expired backups are moved to a .trash folder and a new
246 method: empty_trash_folders() cleans it up after before starting
247 the next snapshot set backup.
248 Fix bug in list_pending_snapshots() where ctime of snapshots was
249 returned as a string instead of a long.
251 * usr/share/time-slider/lib/plugin/rsync/rsyncsmf.py: Add new
252 filesystem suffix definitions for partial backups, trash
253 folders, backup lock files and backup log files.
255 2010-05-03 Niall Power - <niall.power@oracle.com>
257 * usr/share/time-slider/lib/time_slider/timesliderd.py:
258 Determine if <zpool/remedial-cleanup> SMF property is set to true.
259 Do not perform remedial cleanups if it's value is false.
261 * usr/share/time-slider/lib/time_slider/timeslidersmf.py:
262 Add new method: get_remedial_cleanup() to indicate the value of
263 property <zpool/remedial-cleanup>
265 * var/svc/manifest/application/time-slider.xml:
266 Add new SMF property: <zpool/remedial-cleanup> as boolean with
267 default value of 'true'. Indicates that time-sliderd should
268 perform remedial cleanups when snapshotted pool runs low on
271 2010-05-03 Niall Power - <niall.power@oracle.com>
274 Install/uninstall time-slider.desktop into
275 $(DESTDIR)/usr/share/applications/
277 2010-05-02 Niall Power - <niall.power@oracle.com>
279 * lib/svc/method/time-slider:
280 Remove any legacy zfs-auto-snapshot cron jobs in
281 zfssnap's crontab that may not have been removed
282 if the old auto-snapshot services were not stopped
285 2010-05-02 Niall Power - <niall.power@oracle.com>
287 * usr/share/time-slider/lib/time_slider/timesliderd.py:
288 Fix incorrect invocation of util.debug() that caused
289 unconditional verbose output.
291 2010-05-02 Niall Power - <niall.power@oracle.com>
293 * usr/share/time-slider/lib/time_slider/timesliderd.py:
294 Fix small typo in monthly calculation.
296 2010-05-02 Niall Power - <niall.power@oracle.com>
298 * usr/share/time-slider/lib/plugin/rsync/backup.py:
299 Instantiate RsyncBackup objects with verbose flag
300 passed through. Remove "--progress" argument from
301 rsync and add "-vv" argument instead if verbose
304 2010-05-01 Niall Power - <niall.power@oracle.com>
306 * usr/share/time-slider/lib/plugin/plugin.py: Fix some
307 incorrect invocations that didn't pass verbose
308 parameter (and were therefore no-ops)
310 * usr/share/time-slider/lib/time_slider/timesliderd.py:
311 Fix monthly period calculation. Now handles period
312 increments > 12 months and period increments that
313 land on december (originally logged as bugster
316 2010-05-01 Niall Power - <niall.power@oracle.com>
318 * usr/share/time-slider/lib/time_slider/setupgui.py:
319 Cache all GUI configuration values at startup and
320 use them later to compare changes in configuration
321 state. Only apply the minimum set of configuration
322 changes necessary instead of previous method of
323 blindly applying everything, even if unchanged.
324 Configuration is much much faster now, especially
325 for minor configuration changes.
326 Recognise previously configured backup devices and
327 ask the user if they want to start using it again
328 instead of rejecting it as belonging to another
330 Remove duplicate import of os.path modules.
332 2010-04-28 Niall Power - <niall.power@oracle.com>
334 * usr/share/time-slider/lib/plugin/rsync/backup.py:
335 Add removal of partial backups missing a matching
336 snapshot in the backup queue. They are zombies.
337 When catching an rsync exception, change directory
338 to "/" so that pfexec doesn't freak out when trying
339 to release the snapshot. pfexec bails out when it
340 tries to add cwd to it's path if cwd is non-existent
341 which can be the case if the backup device suddenly
344 2010-04-27 Niall Power - <niall.power@oracle.com>
346 * usr/share/time-slider/lib/plugin/rsync/backup.py:
347 Remember to also delete log files when deleting backups.
349 2010-04-27 Niall Power - <niall.power@oracle.com>
351 * usr/share/time-slider/lib/plugin/rsync/backup.py:
352 Exit if effective UID of process is not 0 (root)
354 2010-04-27 Niall Power - <niall.power@oracle.com>
356 * usr/share/time-slider/lib/plugin/rsync/backup.py:
357 Send rsync loggint to individual log files on the backup
358 device. Delete log files when corresponding backup gets
360 Create rsync backups in a temporary directory first and
361 move to permanent location when completed. Prevents
362 incomplete backups appearing in backup view in Nautilus.
363 Also use "--inplace" rsync option to allow resumption of
364 partial (interrupted) backups.
366 * usr/share/time-slider/lib/plugin/rsync/rsyncsmf.py:
367 Add shared key get/set methods for rsync SMF instance.
368 Use new "set_string_prop" Smf class method for setting
369 rsync target directory so that path names containing
370 spaces can be correctly set. Conversely, strip out '\ '
371 space formatting characters returned by SMF in
372 get_target_dir() method.
374 * usr/share/time-slider/lib/plugin/rsync/trigger.py:
375 Don't tag new snapshots whose filesystems are not mounted
376 Prevents piling up of snapshots from unmounted BEs. Might
377 be best to make this behaviour configurable via SMF.
379 * usr/share/time-slider/lib/time_slider/setupgui.py:
380 Clean up OK button clicked callback by farming out several
381 validation checks to separate methods. Add rsync config
382 checking method to chek configuration/selection of rsync
383 target device. Implement shared key checking to validate/
384 identify pre-configured backup devices. Rejects devices
385 configured for use on other systems. Add checks to ensure
386 target device is writable by root and supports hard links
387 as required for rsync incremental backups. Add a random
388 key generation function. Perform basic space checking on
389 rsync target device to see if it's big enough.
391 * usr/share/time-slider/lib/time_slider/smf.py:
392 Implement set_string_prop() method that allows white space
395 * var/svc/manifest/application/time-slider-plugin.xml:
396 Remove rsync plugin's property override of
397 <plugin/trigger_on> and inherit defaults instead. Backing
398 up frequent snapshots caused near constant backup disk
401 2010-04-16 Niall Power - <niall.power@sun.com>
403 * usr/share/time-slider/lib/time_slider/zfs.py: Fix bug in
404 method "create_auto_snapshot_set() where it would skip
405 the entire pool if the root of the pool was tagged and
406 all datastets under the root inherited from it. Also,
407 use sorted lists and binary searching to speed up the
408 operation and avoid making repeated unnecessary calls
409 to Dataset.list_children() (the data is already provided)
411 2010-04-15 Niall Power - <niall.power@sun.com>
413 * usr/share/time-slider/lib/plugin/rsync/backup.py: Clean up
414 dangling holds on snapshots left by abnormally terminated
415 rsync transfers from previous invocations. Also, release
416 snapshot holds if an Rsync exception is caught during
417 transfer. Allows time-sliderd to delete snapshots when they
420 2010-04-13 Niall Power - <niall.power@sun.com>
421 * usr/share/time-slider/lib/time_slider/setupgui.py:
422 Fix broken target directory retrieval from FileChooser button
424 2010-04-13 Niall Power - <niall.power@sun.com>
426 * usr/share/time-slider/lib/plugin/rsync/backup.py: Create a
427 RsyncBackup class to run rsync backup commands in a
428 separate thread. Define Rsync exception clases and map
429 to expected rsync exit codes.
430 Modify toplevel backup path for backups to begin with:
431 <SMF defined target dir>/TIMESLIDER/<nodename>/
432 Deal with rsync exceptions raised and place into maintenance
433 state if non recoverable.
434 Try to recover space on target directory (work in progress)
435 Add debugging and error logging output.
437 * usr/share/time-slider/lib/plugin/rsync/rsyncsmf.py: define
438 backup RSYNCDIRPREFIX to "TIMESLIDER".
440 * usr/share/time-slider/lib/time_slider/applet.py:
441 Use new backup path format as described above.
443 * usr/share/time-slider/lib/time_slider/setupgui.py:
444 Use new backup path format as described above.
446 * usr/share/time-slider/lib/time_slider/util.py:
447 Add general purpose syslog wrapper function.
449 * var/svc/manifest/application/time-slider-plugin.xml:
450 remove accidental definition of <plugin/target_dir>
451 Set to empty string value "" instead of a directory on my
454 2010-04-01 Niall Power - <niall.power@sun.com>
456 * usr/share/time-slider/lib/time_slider/timesliderd.py: insert a
457 'h' character between hour and minute values of auto snapshot
458 labels as a subsitute for the previously removed ':' character
459 used in time stamps. Makes life easier for nautilus component
460 and plays nicely with strptime()
462 2010-04-01 Niall Power - <niall.power@sun.com>
464 * usr/share/time-slider/lib/time_slider/applet.py: gio FileMonitor
465 events are inconsistent between UFS/ZFS filesystem mounting.
466 Ignore event type from gio FileMonitor and verify backup target
467 status manually using os.stat()
469 2010-04-01 Niall Power - <niall.power@sun.com>
471 * usr/share/time-slider/lib/time_slider/applet.py: Improve string
472 formatting on notifications and tooltips. Stop the status icon
473 blinking once the notification has been closed.
474 * usr/share/time-slider/lib/time_slider/setupgui.py: Forgot to
475 connect rsync folder selection to rsync SMF instance
476 configuration. Added. Also use get_current_folder() instead of
477 get_filename() to get correct folder from FileChooserButton
480 2010-03-31 Niall Power - <niall.power@sun.com>
482 * usr/share/time-slider/lib/time_slider/applet.py: Restrict manual
483 synchronisation menu item to priviliged users only (root or
484 users assigned Primary Administrator profile). Also, don't
485 bother popping up a right click menu if it's empty.
487 2010-03-31 Niall Power - <niall.power@sun.com>
489 * usr/share/time-slider/lib/plugin/rsync/backup.py: Implement cleanup
490 of expired backups on rsync target directory. Uses same rules as
491 time-slider as defined by each auto-snapshot schedule's SMF instance
492 * usr/share/time-slider/lib/plugin/rsync/rsyncsmf.py: Add a method to
493 return the list of archived schedules (ie. ones that don't get
494 cleaned according to the normal schedule retention rules)
495 * usr/share/time-slider/lib/time_slider/applet.py: add a
496 'Synchronize Now' menu item to the applet. Added gio based file
497 monitoring to keep track of when the rsync backup target directory
498 is mounted/unmounted and adjust menu sensitivty accordingly.
499 * usr/share/time-slider/lib/time_slider/autosnapsmf.py: Define
500 SNAPLABELPREFIX as a constant for snapshot label names
501 * usr/share/time-slider/lib/time_slider/setupgui.py: Modify RBAC
502 rules to ensure that setup GUI is run with euid of root which is
503 necessary for validation and initialisation of rsync backup target
505 * usr/share/time-slider/lib/time_slider/timesliderd.py: use
506 SNAPLABELPREFIX constant instead of local multiply defined values.
507 * var/svc/manifest/application/time-slider-plugin.xml: Override
508 "plugin/trigger_on" value in rsync plugin manifest. Add a new
509 property "rsync/archived_schedules" to define snapshot schedules
510 that are archived as long as possible and not purged according
511 to the normal schule retention rules.
513 2010-03-25 Niall Power - <niall.power@sun.com>
515 * etc/dbus-1/system.d/time-slider.conf: add policies for
516 rsync plugin's dbus service and methods.
517 * usr/share/time-slider/lib/plugin/rsync/backup.py: restructure script
518 to perform backups via a Gobject mainloop which is necessary to allow
519 it to send dbus notifications correctly. Adjust backup target dir
520 to use a rsync plugin specific subdirectory on the target dir
521 (.time-slider/rsync) - prevents borkage of mount points with
522 unmounted filesystems. Use "-a" option with rsync command which
523 covers all the desired arguments fo our rsync usage case (archival)
524 Add dbus method invocations. General cleanup and removal of commented
525 out code. Use lockfile to prevent multiple instances running at once.
526 * usr/share/time-slider/lib/plugin/rsync/rsyncsmf.py: Add definitions
527 for backup subdirectory and filesystem property tag constants.
528 * usr/share/time-slider/lib/plugin/rsync/trigger.py: Use constants as
529 defined in rsyncsmf.py
530 * usr/share/time-slider/lib/time_slider/applet.py: Incorporate new
531 RsyncNote class and other pieces from Krishnan Parthasarathi. Thanks
532 Krishan. Added signal handlers and tooltips/popups for dbus events
533 sent from rsync plugin.
534 * usr/share/time-slider/lib/time_slider/dbussvc.py: New dbus signal
535 definitions added, including a few from Krishnan.
536 * usr/share/time-slider/lib/time_slider/setupgui.py: Perform validation
537 on target directory for rsync. Not exhaustive yet. Checks that target
538 directory isn't on a file system or pool that's been selected for
541 2010-03-11 Niall Power - <niall.power@sun.com>
543 Add rsync plugin (WORK IN PROGRESS), restructure SMF related code
544 and restructure file/directory layout to provide seperate
545 subdirectories for plugins.
547 * Makefile: Add/remove files to (un)install rules.
548 * usr/lib/time-sliderd: Fix script invocation to invoke python2.6
549 explicitly (ie. do not use /usr/bin/env to source it)
550 * usr/share/time-slider/glade/time-slider-setup.glade: Add in UI
551 features to enable rsync backup configuration
552 * usr/share/time-slider/lib/time_slider/__init__.py: adjust sys.path
553 to allow importation from the plugin directory
554 * usr/share/time-slider/lib/time_slider/autosnapsmf.py: Refactor to
555 inehrit from the smf base object class (smf.py)
556 * usr/share/time-slider/lib/time_slider/deletegui.py: Remove import
557 of smfmanager module.
558 * usr/share/time-slider/lib/time_slider/setupgui.py: Remove import of
559 smfmanager module. Implement UI logic and view for rsync
560 configuration (filechooser, list view check buttons etc.)
561 Tie in with rsync plugin SMF backend. WORK IN PROGRESS.
562 * usr/share/time-slider/lib/time_slider/timesliderd.py: Drop use of old
563 smfmanager class and replace with new smf and timeslidersmf modules
564 * usr/share/time-slider/lib/time_slider/zfs.py: Misc. cleanups. Define
565 proper Exception classes for ZFS and ZPool errors and raise them when
566 appropriate. Old style string based exceptions not supported in python
568 * var/svc/manifest/application/time-slider-plugin.xml: Define rsync
569 plugin SMF instance and properties.
570 * usr/lib/time-slider-zfssend: Removed. Replaced by:
571 usr/lib/time-slider/plugins/zfssend/zfssend
572 * usr/share/time-slider/lib/time_slider/plugin.py: Removed. Replaced by:
573 usr/share/time-slider/lib/plugin/plugin.py
574 * usr/share/time-slider/lib/time_slider/zfssend.py: Removed. Replaced by:
575 usr/share/time-slider/lib/plugin/zfssend/zfssend.py
576 * lib/svc/method/time-slider-rsync: Added. Starts stops rsync plugin SMF
577 instance and sets up cron job for rsync-backup script.
578 * usr/lib/time-slider/plugins/rsync/rsync-backup: Added. Performs
579 asynchronouse rsync backup of zfs snapshots previously tagged for backup.
581 * usr/lib/time-slider/plugins/rsync/rsync-trigger: Provides trigger
582 mechanisem for time-slider to call when snapshots created. Queues up
583 zfs snapshots for later backup using rsync-backup script.
584 * usr/lib/time-slider/plugins/zfssend/zfssend: Replacement of
585 usr/lib/time-slider-zfssend
586 * usr/share/time-slider/lib/plugin/__init__.py: Added. Initialises new
588 * usr/share/time-slider/lib/plugin/plugin.py: Replacement of:
589 usr/share/time-slider/lib/time_slider/plugin.py
590 * usr/share/time-slider/lib/plugin/pluginsmf.py: Added. Defines plugin
591 SMF class specialised for time-slider plugin SMF instances
592 * usr/share/time-slider/lib/plugin/rsync/__init__.py: Added. Initialises
593 new rsync plugin module.
594 * usr/share/time-slider/lib/plugin/rsync/backup.py: Added. Main code
595 block for rsync-backup script.
596 * usr/share/time-slider/lib/plugin/rsync/rsyncsmf.py: Added. Defines
597 SMF class specialised for rsync plugin SMF instance.
598 * usr/share/time-slider/lib/plugin/rsync/trigger.py: Added. Main code
599 block for rsync-trigger script.
600 * usr/share/time-slider/lib/plugin/zfssend/__init__.py: Added.
601 Initialises zfssend plugin module.
602 * usr/share/time-slider/lib/plugin/zfssend/zfssend.py: Replacement for
603 usr/share/time-slider/lib/time_slider/zfssend.py
604 * usr/share/time-slider/lib/time_slider/smf.py: Added. Provides cleaner
605 and more structured base class for generic SMF instances and and is
606 inherited by timeslidersmf, pluginsmf, rsyncsmf derived classes.
607 Provides common methods to enable/disable and get/set property values
608 and refresh and query service state.
609 * usr/share/time-slider/lib/time_slider/timeslidersmf.py: Defines
610 SMF class and methods specific to the time-slider SMF instances.
612 2010-02-04 Niall Power - <niall.power@sun.com>
614 * Makefike: Add lib/svc/method/time-slider-plugin to
615 install/uninstall rules.
616 * lib/svc/method/time-slider-plugin: Added.
617 Provides simple, generic plugin start method.
618 * var/svc/manifest/application/time-slider-plugin.xml:
619 Added comments for time-slider-plugin method, advising
620 that non trivial plugin instances should provide their
621 own specific methods.
623 2010-02-03 Niall Power - <niall.power@sun.com>
625 * var/svc/manifest/application/time-slider.xml:
626 Define new property "zfs/sep". Taken for zfs-auto-snapshot,
627 allows custom definition of a separator character for snapshot
628 datestamps that can work on filesystems that previously choked
629 on the ":" characted such as CIFS, PCFS.
630 * usr/share/time-slider/lib/time_slider/smfmanager.py: Added new
631 method to get zfs/sep property.
632 * usr/share/time-slider/lib/time_slider/timesliderd.py: modify
633 snapshot creation and listing operations to use the new zfs/sep
634 property, while maintaining compatibility with old snapshot
635 datestamps that used the ":" character.
637 2010-02-02 Niall Power - <niall.power@sun.com>
639 * usr/share/time-slider/lib/time_slider/plugin.py:
640 Fix invalid function call "debug()" should be "util.debug()" when
641 reporting disabled plugin in PluginManager.refresh()
642 Missing "()" in method call Plugin.is_running() in Plugin.refresh()
644 2010-01-26 Niall Power - <niall.power@sun.com>
646 * VERSION: bump to 0.2.96
647 * Use explicit path: "/usr/bin/python2.6" to reference python interpreter
648 instead of relying on "/usr/bin/env" to find it.
649 * Add plugin framework to enable user defined plugins to be executed after
650 snapshots get taken by time-sliderd. Plugins are based on the SMF service
651 framework and plugins are defined as instances of the base SMV service:
652 svc:/application/time-slider/plugin
653 * Provide a "zfs-send" plugin as a replacement for the zfs-auto-snapshot
654 provided "backup-save-cmd" property.
655 * Add util.py to define two commoonly used utility functions: debug/logging
656 and command spawning. Reduces lines of code and duplication.
657 * Refactor all python files to use util.run_command() convenience function
659 * Fix a bug where time-sliderd emits warnings and tries to cleanup pools
660 upon which it creates no snapshots. Also make time-sliderd more descriminating
661 in general and able to identify snapshots it created from backups of snapshots
662 it create (via zfs send/receive) by checking for the auto-snapshot property
663 corresponding to the filesystem/volume of snapshots.
664 * TODO: SMF code is a bit all over the place and could do with proper stucturing
666 2009-11-27 Niall Power - <niall.power@sun.com>
668 * usr/share/time-slider/lib/time_slider/timesliderd.py: fixed a date
669 calculation bug whereby a schedule with a period in months next falls
670 due on December. Was getting incorrectly modulused to 0.
672 2009-11-04 Niall Power - <niall.power@sun.com>
674 * VERSION: bump to 0.2.95
676 * Drop dependency on zfs-auto-snapshot methods and implement our own
677 snapshotting mechanism in the form of time-sliderd
678 * Add dbus system bus notification and notification applet, replacing
679 the previous ugly hack of su to logged in user ID and running
681 * Enhance all .py modules to use python subprocess module when spawning
682 commands instead of os.popen.
683 * Add SMF manifest for system/filesystem/auto-snapshot to replace
684 systems snapshot configuration previously supplied by
685 zfs-auto-snapshot. Generally compatible but cleaned up by dropping
686 some of zfs-auto-snapshot's more quirky or deprecated configuration
689 2009-07-08 Niall Power - <niall.power@sun.com>
691 * VERSION: bump to 0.2.10
692 * Fix defect 8667 in following source files:
693 * usr/share/time-slider/lib/time_slider/cleanupmanager.py: Refactor
694 code to modified zfs.py APIs, remove some dead code, make capacity
695 checks conditional where possible.
696 * usr/share/time-slider/lib/time_slider/deletegui.py: minor code
697 refactoring to match zfs.py API changes.
698 * usr/share/time-slider/lib/time_slider/setupgui.py: Remove references
699 to zfscontroller module which has been removed. Uses zfs.py
700 exclusively now. Refactor for zfs.py changes
701 * usr/share/time-slider/lib/time_slider/zfscontroller.py: removed.
702 Very little functionality and nothing that shouldn't be in zfs.py
703 * usr/share/time-slider/lib/time_slider/zfs/py: New class definition
704 for "Datasets" which stores all system snapshots, filesystems and
705 volumes in a cache. Existing Dataset, Filesystem, Snapshot and Volume
706 class methods now use the global Datasets cache for querying and
707 listing instead of making zfs(1m) spawned commands.
709 2009-05-18 Niall Power - <niall.power@sun.com>
711 * usr/share/time-slider/lib/time_slider/cleanupmanager.py
712 Cleanup both Filesystem and Volume snapshots. Fixes d.o.o 8454
713 * usr/share/time-slider/lib/time_slider/setupgui.py: Prepend private
714 class methods with "__" in accordance with python coding standards.
715 * usr/share/time-slider/lib/time_slider/smfmanager.py: Use predefined
716 macros for ZFS commands instead of hardcoding path in the code.
717 * usr/share/time-slider/lib/time_slider/zfs.py: Improve object
718 hierarchy and inheritance tree. Rename some methods for improved
719 clarity of purpose. Improve method and function documentation.
720 Add capability to deal with ZFS volumes. Fixes d.o.o 8454 & 8685
722 2009-05-13 Harry Fu - <harry.fu@sun.com>
724 * VERSION: bump to 0.2.9
726 2009-04-10 Erwann Chenede - <erwann.chenede@sun.com>
728 * /usr/share/time-slider/lib/time_slider/fileversion.py:
729 used gobject.idle_add instead of gtk.gdk.threads_* fixes
732 2009-04-09 Erwann Chenede - <erwann.chenede@sun.com>
734 * /usr/share/time-slider/lib/time_slider/fileversion.py:
735 removed hard dependency on external thumbnailer and meld
738 2009-04-07 Niall Power <niall.power@sun.com>
740 * usr/share/time-slider/lib/time_slider/cleanupmanager.py
741 * usr/share/time-slider/lib/time_slider/deletegui.py
742 * usr/share/time-slider/lib/time_slider/smfmanager.py
743 * usr/share/time-slider/lib/time_slider/zfs.py
744 * usr/share/time-slider/lib/time_slider/zfscontroller.py:
745 Use macro substitution to specify full paths to all spawned
746 commands (zfs, zpool, svcadm, svccfg, svcprop, pfexec) so that
747 commands work independently of user's PATH environment.
748 Fixes opensolaris defect #7396
750 2009-03-01 Niall Power <niall.power@sun.com>
752 * VERSION: bump to 0.2.6
753 * Makefile: Pick up PYTHON environment variable. Enhancement for
755 * usr/share/time-slider/lib/time_slider/setupgui.py: Allow filesystems
756 to inherit properties from their parent instead of locally tagging
757 every filesystem with the required property setting.
758 * usr/share/time-slider/lib/time_slider/zfs.py: Add an "inherit" argument
759 to Filesystem.commit_state() to allow the fileystem to inherit from
760 it's parent when setting the auto-snapshot property.
762 2009-02-19 Takao Fujiwara <takao.fujiwara@sun.com>
764 * usr/share/time-slider/lib/time_slider/deletegui.py: updated
765 the comments because translators are confused it.
766 * usr/share/time-slider/lib/time_slider/snapnowui.py: updated
767 the gettext "%s" so that translators can change the oder of "%s".
769 2009-02-05 Niall Power - <niall.power@sun.com>
771 * VERSION: bump to 0.2.5
772 * Makefile: don't install .pyc files, but generate them as part
773 of "install:" rule. Fixes bugster: 6754650
774 * py-compile.py: Prepend "DESTDIR" to compile python bytecode
775 within the installed directory tree.
776 * usr/share/time-slider/lib/time_slider/__init__.pyc: removed
777 * usr/share/time-slider/lib/time_slider/cleanupmanager.pyc: removed
778 * usr/share/time-slider/lib/time_slider/deletegui.pyc: removed
779 * usr/share/time-slider/lib/time_slider/fileversion.pyc: removed
780 * usr/share/time-slider/lib/time_slider/notification.pyc: removed
781 * usr/share/time-slider/lib/time_slider/rbac.pyc: removed
782 * usr/share/time-slider/lib/time_slider/setupgui.pyc: removed
783 * usr/share/time-slider/lib/time_slider/smfmanager.pyc: removed
784 * usr/share/time-slider/lib/time_slider/snapnowui.pyc: removed
785 * usr/share/time-slider/lib/time_slider/zfs.pyc: removed
786 * usr/share/time-slider/lib/time_slider/zfscontroller.pyc: removed
789 2009-01-23 Erwann Chenede - <erwann.chenede@sun.com>
791 * VERSION: bump version to 0.2.4
792 * Makefile : added new files
793 * usr/lib/time-slider-version
794 * usr/share/time-slider/glade/time-slider-version.glade
795 * usr/share/time-slider/lib/time_slider/fileversion.py
796 * usr/share/time-slider/lib/time_slider/fileversion.pyc :
797 Initial implementation of the file version explorer app
799 2009-01-16 Takao Fujiwara <takao.fujiwara@sun.com>
801 * po/POTFILES.in: Update with the latest files.
802 * usr/share/time-slider/glade/time-slider-delete.glade:
803 * usr/share/time-slider/glade/time-slider-setup.glade:
804 * usr/share/time-slider/glade/time-slider-snapshot.glade:
805 Update to remove "translatable" tag for GTK textdomain.
806 * usr/share/time-slider/lib/time_slider/deletegui.py:
807 Update to localize date and add the encoding conversion.
808 * usr/share/time-slider/lib/time_slider/setupgui.py:
809 Update to localize "legacy".
810 * usr/share/time-slider/lib/time_slider/snapnowui.py:
811 Update to add gettext.
813 2009-01-09 Niall Power - <niall.power@sun.com>
815 * VERSION: bump version to 0.2.3
816 * usr/share/time-slider/glade/time-slider-delete.glade:
817 add progress dialog for snapshot scanning feedback
818 * usr/share/time-slider/lib/time_slider/deletegui.py:
819 restructure initialisation code and run snapshot scanning in it's
820 own thread so that feedback can be give to user via a progress dialog
821 Prevents the app appearing dead when dealing with huge numbers of
824 2009-01-09 Erwann Chenede - <erwann.chenede@sun.com>
826 * Makefile: added newly introduced file
827 * usr/share/time-slider/lib/time_slider/snapnowui.py: removed print
829 2009-01-09 Erwann Chenede - <erwann.chenede@sun.com>
831 * usr/lib/time-slider-snapshot:
832 * usr/share/time-slider/glade/time-slider-snapshot.glade:
833 * usr/share/time-slider/lib/time_slider/snapnowui.py:
834 Initial implementation of the snapshot now dialog
836 2008-12-17 Niall Power - <niall.powr@sun.com>
838 * VERSION: bump version to 0.2.2
839 * lib/svc/method/time-slider: remove "set -x" command which errantly turns
840 on debug mode. Fixes bugzilla defect #5067
841 * usr/share/time-slider/glade/time-slider-setup.glade: Change mnemonic key for
842 "Custom" radio button from "C" to "u". C is already in use by "Cancel" button.
843 Fixes bugzilla defect #3986
844 * usr/share/time-slider/lib/time_slider/setupgui.py: Change error dialog text to
845 instruct user to consult "svcs -xv" instead of "svcs(1) man page" for more info
846 when time-slider SMF instance is placed into offline state by SMF.
847 Fixes bugzilla defect #5804
849 2008-12-17 Niall Power - <niall.power@sun.com>
851 * usr/share/time-slider/lib/time_slider/cleanupmanager.py: Check
852 ps commmand output before accessing it by catching IndexError
853 exceptions. Prevents root's mailbox being spammed by cron.
854 Fixes bugster #6758575
856 2008-12-12 Niall Power - <niall.power@sun.com>
858 * usr/share/time-slider/lib/time_slider/cleanupmanager.py: Implement
859 destruction of older snapshots since zfs-auto-snapshot only does
860 snapshot destruction recursively and we break the recursion by
861 deleting individual snapshots instead of recursive sets.
863 2008-12-05 Niall Power - <niall.power@sun.com>
864 * usr/share/time-slider/lib/time_slider/setupgui.py
865 Fixed a patch generation problem when launching time-slider-delete
867 2008-12-05 Niall Power - <niall.power@sun.com>
869 * VERSION: bumped to 0.2.1
870 * Makefile: Minor cleanups
871 * usr/share/time-slider/lib/time_slider/cleanupmanager.py: add
872 perform_purge method to clean up zero sized snapshots under
873 safe circumstances so that the system doesn't become cluttered
874 with too many permanently zero sized snapshots.
875 Rewrote emercency space makeing cleanup alogorithm in run_cleanup
876 to be more efficient and spawn far fewer shell commands. No longer
877 usr/share/time-slider/lib/time_slider/setupgui.py: Change error dialog text to
878 instruct user to consult "svcs -xv" instead of "svcs(1) man page" for more info
879 when time-slider SMF instance is placed into offline state by SMF.
880 Fixes bugzilla defect #5804
881 does recursive snapshot deletion since the above changes will break
882 the recursive snapshot chain in most cases and recursive deletion
883 is now overkill since individual snapshots should be larger in size
884 and yield larger space savings per snapshot deleted.
885 Fixed notification bug where notification would happen twice if
886 gnome-session is launched via dbus-launch.
887 * usr/share/time-slider/lib/time_slider/deletegui.py: move
888 __get_cloned_snapshots() method to a public function in zfs.py
889 * usr/share/time-slider/lib/time_slider/notification.py: fix typo
890 bug in send_to_desktop() where initial warning level was set to
891 90000 which broke desktop notification. Should be 0.
892 * usr/share/time-slider/lib/time_slider/zfs.py: Add new function:
893 list_cloned_snapshots() to list snapshots that have cloned filesystem
896 2008-12-02 Niall Power - <niall.power@sun.com>
898 * Makefile: Fix install target error that didn't install both glade
901 2008-12-02 Niall Power - <niall.power@sun.com>
903 * VERSION: bumped to 0.2.0
904 * Makefile: added new files to install and uninstall targets
905 * data/Makefile: adjusted for renamed .desktop.in file
906 * usr/share/time-slider/glade/time-slider-setup.glade: Added launch
907 button for snapshot deletion GUI. Rename window title from
908 "Time Slider Setup" to "Time Slider Manager"
909 * usr/share/time-slider/lib/time_slider/setupgui.py: add launch handler
910 for time-slider-delete
911 * usr/share/time-slider/lib/time_slider/zfs.py: Add utility functions
912 for time-slider-delete for listing and creating snapshot objects
913 * data/time-slider.desktop.in renamed from time-slider-setup.desktop.in
914 * usr/lib/time-slider-delete: Added new snapshot deleter program to
915 allow snapshot browsing/deletion.
916 * usr/share/applications/time-slider.desktop: renamef from
917 time-slider-setup.desktop
918 * usr/share/time-slider/glade/time-slider-delete.glade: Added glade UI
919 file for snapshot delete GUI
920 * usr/share/time-slider/lib/time_slider/deletegui.py: Added main python
921 code for listing and deleting snapshots
923 2008-12-02 Niall Power - <niall.power@sun.com>
925 * py-compile.py: Added to insure pyc files are in sync with
926 .py sources. Fixes bugster #6754650
927 * VERSION: Added version file. Bump to 0.1.5
928 * SUNWgnome-time-slider.spec: removd because spec file is
929 in spec-files-other repository on opensolaris.org
930 * Makefile: added "dist" target for creating dist bz2 tarballs
932 2008-10-23 Erwann Chenede - <erwann.chenede@sun.com>
934 * usr/share/icons/hicolor/16x16/apps/time-slider-setup.png
935 * usr/share/icons/hicolor/24x24/apps/time-slider-setup.png
936 * usr/share/icons/hicolor/32x32/apps/time-slider-setup.png
937 * usr/share/icons/hicolor/36x36/apps/time-slider-setup.png
938 * usr/share/icons/hicolor/48x48/apps/time-slider-setup.png
939 * usr/share/icons/hicolor/72x72/apps/time-slider-setup.png :
942 2008-10-20 Takao Fujiwara <takao.fujiwara@sun.com>
944 * Makefile: Updated to load po/Makefile and data/Makefile.
945 * data/Makefile: Added to generate .desktop files.
946 * data/time-slider-setup.desktop.in: Added for intltool.
947 * po: Added for intltool.
949 2008-09-11 Niall Power - <niall.power@sun.com>
951 * Initial import of Time Slider service