Add README.md
[time-slider.git] / ChangeLog
1 2011-04-27 Erwann Chenede - <erwann.chenede@oracle.com>
2
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
10
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
14
15 2010-07-29 Niall Power - <niall.power@oracle.com>
16
17         * VERSION: Bump to 0.2.97
18
19 2010-07-08 Niall Power - <niall.power@oracle.com>
20
21         * usr/share/time-slider/lib/time_slider/timesliderd.py:
22           Fix typo when raising exception. Defect #16361
23           RunTimeError -> RuntimeError
24
25 2010-07-05 Niall Power - <niall.power@oracle.com>
26
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".
32           Fixes defect #16388
33
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.
39
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
45
46 2010-06-04 Niall Power - <niall.power@oracle.com>
47
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.
51
52 2010-05-24 Niall Power - <niall.power@oracle.com>
53
54         * usr/share/time-slider/lib/time_slider/setupgui.py:
55           Fix minor function spelling typo
56
57 2010-05-24 Niall Power - <niall.power@oracle.com>
58
59         * usr/share/time-slider/glade/time-slider-setup.glade:
60           Replace GtkFileChooser combo widget with standard
61           GtkComboBox
62
63         * usr/share/time-slider/lib/time_slider/applet.py:
64           User path_tol_volume() from util library instead of
65           private copy
66
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.
80
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.
83
84 2010-05-14 Niall Power - <niall.power@oracle.com>
85
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.
90
91 2010-05-14 Niall Power - <niall.power@oracle.com>
92
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.
97
98 2010-05-14 Erwann Chenede - <erwann.chenede@sun.com>
99
100         * usr/share/time-slider/glade/time-slider-delete.glade:
101           Added Type combobox
102         * usr/share/time-slider/lib/plugin/pluginsmf.py:
103           fix import to call this class from a non standard 
104           location
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
111           or rsync backups.
112         * usr/share/time-slider/lib/time_slider/timesliderd.py:
113           propagated member function destroy name change.
114
115 2010-05-14 Niall Power - <niall.power@oracle.com>
116
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.
122
123 2010-05-14 Niall Power - <niall.power@oracle.com>
124
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
128           extended.
129
130 2010-05-14 Niall Power - <niall.power@oracle.com>
131
132         * etc/dbus-1/system.d/time-slider.conf:
133           Add service and policy definitions for TimSlider.config
134           service.
135
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.
140
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.
150
151         * usr/share/time-slider/lib/time_slider/dbussvc.py:
152           Add class and method definition for TimeSlider Config service
153           notifications.
154
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
158           refresh.
159
160 2010-05-13 Niall Power - <niall.power@oracle.com>
161
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.
165         
166 2010-05-11 Niall Power - <niall.power@oracle.com>
167
168         * usr/share/time-slider/lib/plugin/rsync/backup.py:
169           Tweak the space management of the rsync device for better
170           performance:
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.
176
177 2010-05-11 Niall Power - <niall.power@oracle.com>
178
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.
182
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
186           debugging purposes.
187
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.
191
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.
195
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.
208
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.
212
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.
231  
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.
250
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.
254
255 2010-05-03 Niall Power - <niall.power@oracle.com>
256
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.
260
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>
264
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
269           space.
270
271 2010-05-03 Niall Power - <niall.power@oracle.com>
272
273         * Makefile:
274           Install/uninstall time-slider.desktop into 
275           $(DESTDIR)/usr/share/applications/
276
277 2010-05-02 Niall Power - <niall.power@oracle.com>
278
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
283           cleanly.
284
285 2010-05-02 Niall Power - <niall.power@oracle.com>
286
287         * usr/share/time-slider/lib/time_slider/timesliderd.py:
288           Fix incorrect invocation of util.debug() that caused
289           unconditional verbose output.
290  
291 2010-05-02 Niall Power - <niall.power@oracle.com>
292
293         * usr/share/time-slider/lib/time_slider/timesliderd.py:
294           Fix small typo in monthly calculation.
295
296 2010-05-02 Niall Power - <niall.power@oracle.com>
297
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
302           flag is set.
303
304 2010-05-01 Niall Power - <niall.power@oracle.com>
305
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)
309
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
314           CR #6904417)
315
316 2010-05-01 Niall Power - <niall.power@oracle.com>
317
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 
329           system.
330           Remove duplicate import of os.path modules.
331
332 2010-04-28 Niall Power - <niall.power@oracle.com>
333
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
342           goes offline.
343
344 2010-04-27 Niall Power - <niall.power@oracle.com>
345
346         * usr/share/time-slider/lib/plugin/rsync/backup.py:
347           Remember to also delete log files when deleting backups.
348
349 2010-04-27 Niall Power - <niall.power@oracle.com>
350
351         * usr/share/time-slider/lib/plugin/rsync/backup.py:
352           Exit if effective UID of process is not 0 (root)
353
354 2010-04-27 Niall Power - <niall.power@oracle.com>
355
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
359           deleted.
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.
365
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.
373
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.
378
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.
390
391         * usr/share/time-slider/lib/time_slider/smf.py:
392           Implement set_string_prop() method that allows white space
393           string characters.
394
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
399           churn.
400
401 2010-04-16 Niall Power - <niall.power@sun.com>
402
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)
410
411 2010-04-15 Niall Power - <niall.power@sun.com>
412
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
418           naturally expire.
419
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
423
424 2010-04-13 Niall Power - <niall.power@sun.com>
425
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.
436
437         * usr/share/time-slider/lib/plugin/rsync/rsyncsmf.py: define
438           backup RSYNCDIRPREFIX to "TIMESLIDER".
439
440         * usr/share/time-slider/lib/time_slider/applet.py:
441           Use new backup path format as described above.
442
443         * usr/share/time-slider/lib/time_slider/setupgui.py:
444           Use new backup path format as described above.
445
446         * usr/share/time-slider/lib/time_slider/util.py:
447           Add general purpose syslog wrapper function.
448
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
452           own system. Doh.
453
454 2010-04-01 Niall Power - <niall.power@sun.com>
455
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()
461
462 2010-04-01 Niall Power - <niall.power@sun.com>
463
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()
468
469 2010-04-01 Niall Power - <niall.power@sun.com>
470
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
478           widget.
479
480 2010-03-31 Niall Power - <niall.power@sun.com>
481
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.
486
487 2010-03-31 Niall Power - <niall.power@sun.com>
488
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
504           directory
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.
512
513 2010-03-25 Niall Power - <niall.power@sun.com>
514
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
539           automatic snapshots.
540
541 2010-03-11 Niall Power - <niall.power@sun.com>
542
543         Add rsync plugin (WORK IN PROGRESS), restructure SMF related code
544         and restructure file/directory layout to provide seperate 
545         subdirectories for plugins.
546
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
567           2.6
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.
580           WORK IN PROGRESS
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
587           plugin module
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.
611
612 2010-02-04 Niall Power - <niall.power@sun.com>
613
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.
622
623 2010-02-03 Niall Power - <niall.power@sun.com>
624
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.
636
637 2010-02-02 Niall Power - <niall.power@sun.com>
638
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()
643
644 2010-01-26 Niall Power - <niall.power@sun.com>
645
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
658           where possible.
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
665
666 2009-11-27 Niall Power - <niall.power@sun.com>
667
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.
671
672 2009-11-04 Niall Power - <niall.power@sun.com>
673
674         * VERSION: bump to 0.2.95
675         * Move to python2.6
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
680           notify-send.
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
687           options.
688
689 2009-07-08 Niall Power - <niall.power@sun.com>
690
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.
708
709 2009-05-18 Niall Power - <niall.power@sun.com>
710
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
721  
722 2009-05-13 Harry Fu - <harry.fu@sun.com>
723
724         * VERSION: bump to 0.2.9
725
726 2009-04-10 Erwann Chenede - <erwann.chenede@sun.com>
727
728         * /usr/share/time-slider/lib/time_slider/fileversion.py:
729           used gobject.idle_add instead of gtk.gdk.threads_* fixes
730           7319
731
732 2009-04-09 Erwann Chenede - <erwann.chenede@sun.com>
733
734         * /usr/share/time-slider/lib/time_slider/fileversion.py:
735           removed hard dependency on external thumbnailer and meld 
736           fixes #7502
737
738 2009-04-07  Niall Power <niall.power@sun.com>
739
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
749
750 2009-03-01  Niall Power <niall.power@sun.com>
751
752         * VERSION: bump to 0.2.6
753         * Makefile: Pick up PYTHON environment variable. Enhancement for
754           fix to 6754650
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.
761
762 2009-02-19  Takao Fujiwara  <takao.fujiwara@sun.com>
763
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".
768
769 2009-02-05 Niall Power - <niall.power@sun.com>
770
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
787
788
789 2009-01-23 Erwann Chenede - <erwann.chenede@sun.com>
790
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
798         
799 2009-01-16  Takao Fujiwara  <takao.fujiwara@sun.com>
800
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.
812
813 2009-01-09 Niall Power - <niall.power@sun.com>
814
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
822           snapshots.
823
824 2009-01-09 Erwann Chenede - <erwann.chenede@sun.com>
825
826         * Makefile: added newly introduced file
827         * usr/share/time-slider/lib/time_slider/snapnowui.py: removed print
828
829 2009-01-09 Erwann Chenede - <erwann.chenede@sun.com>
830
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
835
836 2008-12-17 Niall Power - <niall.powr@sun.com>
837
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
848
849 2008-12-17 Niall Power - <niall.power@sun.com>
850
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
855
856 2008-12-12 Niall Power - <niall.power@sun.com>
857
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.
862
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
866
867 2008-12-05 Niall Power - <niall.power@sun.com>
868
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
894           based on them.
895
896 2008-12-02 Niall Power - <niall.power@sun.com>
897
898         * Makefile: Fix install target error that didn't install both glade
899           files
900
901 2008-12-02 Niall Power - <niall.power@sun.com>
902
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
922
923 2008-12-02 Niall Power - <niall.power@sun.com>
924
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
931
932 2008-10-23 Erwann Chenede - <erwann.chenede@sun.com>
933
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 :
940           new icon (4182)
941
942 2008-10-20   Takao Fujiwara  <takao.fujiwara@sun.com>
943
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.
948
949 2008-09-11 Niall Power - <niall.power@sun.com>
950
951         * Initial import of Time Slider service
952