]> git.michaelhowe.org Git - packages/o/openafs.git/commitdiff
ConvertROtoRW: Use old copyDate for creationDate
authorAndrew Deason <adeason@sinenomine.net>
Thu, 3 Feb 2011 21:40:48 +0000 (15:40 -0600)
committerDerrick Brashear <shadow@dementix.org>
Wed, 2 Nov 2011 02:30:39 +0000 (19:30 -0700)
When we convert an RO volume to an RW, currently we just copy the
copyDate and creationDate from the RO metadata into the RW. But the
copyDate and creationDate fields have different meanings for RW and RO
volumes: for ROs, the creationDate is merely the last time the data
was updated from the RW during a release operation.

So, if the copyDate is older than the creationDate, use the copyDate
as the new RW creationDate instead. This will probably not match the
creationDate of the original RW, but it will be closer to it, and it
will more accurately represent the conceptual "created time" of the
new RW.

Doing this can avoid forcing an unnecessary full dump on a subsequent
release of the resultant RW volume, since the creationDate is more
accurate.

Reviewed-on: http://gerrit.openafs.org/3891
Tested-by: BuildBot <buildbot@rampaginggeek.com>
Reviewed-by: Derrick Brashear <shadow@dementia.org>
(cherry picked from commit f47487db051ba6b51ae12daf7edc09ecfd3c38cd)

Change-Id: I54516a20ebb87d9c482cbc4840e0d236e7c54f8a
Reviewed-on: http://gerrit.openafs.org/5755
Reviewed-by: Derrick Brashear <shadow@dementix.org>
Tested-by: Derrick Brashear <shadow@dementix.org>
src/vol/listinodes.c
src/vol/namei_ops.c

index beed24553c76260e988f60fade14d6c7c11ac197..fd608aa759c132e48c554bab8e52e0da5f748ed9 100644 (file)
@@ -1327,6 +1327,19 @@ convertVolumeInfo(FdHandle_t *fdhr, FdHandle_t *fdhw, afs_uint32 vid)
     vd.uniquifier += 5000;      /* just in case there are still file copies
                                   from the old RW volume around */
 
+    /* For ROs, the copyDate contains the time that the RO volume was actually
+     * created, and the creationDate just contains the last time the RO was
+     * copied from the RW data. So, make the new RW creationDate more accurate
+     * by setting it to copyDate, if copyDate is older. Since, we know the
+     * volume is at least as old as copyDate. */
+    if (vd.copyDate < vd.creationDate) {
+       vd.creationDate = vd.copyDate;
+    } else {
+       /* If copyDate is newer, just make copyDate and creationDate the same,
+        * for consistency with other RWs */
+       vd.copyDate = vd.creationDate;
+    }
+
     p = strrchr(vd.name, '.');
     if (p && !strcmp(p, ".readonly")) {
         memset(p, 0, 9);
index 59267d0ab914e594fd51da5f59d32d9ccc1c69b9..42ae89eaac3ced5f5f96cf3ab2699afb39666188 100644 (file)
@@ -2753,6 +2753,20 @@ convertVolumeInfo(FD_t fdr, FD_t fdw, afs_uint32 vid)
     vd.inUse = 0;
     vd.uniquifier += 5000;     /* just in case there are still file copies from
                                 * the old RW volume around */
+
+    /* For ROs, the copyDate contains the time that the RO volume was actually
+     * created, and the creationDate just contains the last time the RO was
+     * copied from the RW data. So, make the new RW creationDate more accurate
+     * by setting it to copyDate, if copyDate is older. Since, we know the
+     * volume is at least as old as copyDate. */
+    if (vd.copyDate < vd.creationDate) {
+       vd.creationDate = vd.copyDate;
+    } else {
+       /* If copyDate is newer, just make copyDate and creationDate the same,
+        * for consistency with other RWs */
+       vd.copyDate = vd.creationDate;
+    }
+
     p = strrchr(vd.name, '.');
     if (p && !strcmp(p, ".readonly")) {
        memset(p, 0, 9);