----- Original Message ----- > Updated Branches: > refs/heads/master 476c1fa97 -> 5d7fb725d > > > TS-1645: increase the file stat resolution on config files > > > Project: http://git-wip-us.apache.org/repos/asf/trafficserver/repo > Commit: > http://git-wip-us.apache.org/repos/asf/trafficserver/commit/5d7fb725 > Tree: > http://git-wip-us.apache.org/repos/asf/trafficserver/tree/5d7fb725 > Diff: > http://git-wip-us.apache.org/repos/asf/trafficserver/diff/5d7fb725 > > Branch: refs/heads/master > Commit: 5d7fb725d4bc0e3f66d476198a69b2ded0a5c15e > Parents: 476c1fa > Author: Yakov Kopel <yko...@websense.com> > Authored: Mon Feb 25 17:09:08 2013 -0800 > Committer: James Peach <jpe...@apache.org> > Committed: Mon Feb 25 17:10:26 2013 -0800 > > ---------------------------------------------------------------------- > CHANGES | 4 ++++ > configure.ac | 5 +++++ > mgmt/Rollback.cc | 12 ++++++------ > mgmt/Rollback.h | 8 ++++++++ > 4 files changed, 23 insertions(+), 6 deletions(-) > ---------------------------------------------------------------------- > > > http://git-wip-us.apache.org/repos/asf/trafficserver/blob/5d7fb725/CHANGES > ---------------------------------------------------------------------- > diff --git a/CHANGES b/CHANGES > index f31f335..c4b4cc4 100644 > --- a/CHANGES > +++ b/CHANGES > @@ -1,6 +1,10 @@ > -*- coding: > utf-8 -*- > Changes with Apache Traffic Server 3.3.1 > > + > + *) [TS-1645] increase the file stat resolution on config files > + Author: Yakov Kopel <yko...@websense.com> > + > *) [TS-1557] update ua_begin_write > Author: Aidan McGurn <aidan.mcg...@openwave.com> > > > http://git-wip-us.apache.org/repos/asf/trafficserver/blob/5d7fb725/configure.ac > ---------------------------------------------------------------------- > diff --git a/configure.ac b/configure.ac > index 69f2bed..09ca9e7 100644 > --- a/configure.ac > +++ b/configure.ac > @@ -1387,6 +1387,11 @@ if test "x${enable_hwloc}" = "xyes"; then > ) > fi > > +# Check for high-resolution timestamps in struct stat > +AC_CHECK_MEMBERS([struct stat.st_mtimespec.tv_nsec]) > +AC_CHECK_MEMBERS([struct stat.st_mtim.tv_nsec]) > + > + > # > # Configure sockopt value for TPROXY. Look at the enable flag. > # Value 'no' means user forced disable, don't check anything else. > > http://git-wip-us.apache.org/repos/asf/trafficserver/blob/5d7fb725/mgmt/Rollback.cc > ---------------------------------------------------------------------- > diff --git a/mgmt/Rollback.cc b/mgmt/Rollback.cc > index 7af7b95..39c747c 100644 > --- a/mgmt/Rollback.cc > +++ b/mgmt/Rollback.cc > @@ -170,9 +170,9 @@ root_access_needed(root_access_needed_) > // But if we can not get it, just give up, assume the error > // is transient and use the current time > if (statFile(ACTIVE_VERSION, &fileInfo) < 0) { > - fileLastModified = fileInfo.st_mtime; > + fileLastModified = TS_ARCHIVE_STAT_MTIME(fileInfo); > } else { > - fileLastModified = time(NULL) - ink_timezone(); > + fileLastModified = (time(NULL) - ink_timezone()) * > 1000000000;
Could we use a constant for this number? I'm pretty sure you got it right every time, but I didn't check - and frankly, I couldn't be arsed to do something, that a computer does way better. > } > > } else { > @@ -183,7 +183,7 @@ root_access_needed(root_access_needed_) > } > } else { > > - fileLastModified = fileInfo.st_mtime; > + fileLastModified = TS_ARCHIVE_STAT_MTIME(fileInfo); > currentVersion = highestSeen + 1; > > // Make sure that we have a backup of the file > @@ -524,12 +524,12 @@ Rollback::internalUpdate(textBuffer * buf, > version_t newVersion, bool notifyChan > > // Now we need to get the modification time off of the new active > file > if (statFile(ACTIVE_VERSION, &fileInfo) >= 0) { > - fileLastModified = fileInfo.st_mtime; > + fileLastModified = TS_ARCHIVE_STAT_MTIME(fileInfo); > } else { > // We really shoudn't fail to stat the file since we just > // created it. If we do, just punt and just use the current > // time. > - fileLastModified = time(NULL) - ink_timezone(); > + fileLastModified = (time(NULL) - ink_timezone()) * 1000000000; > } > > // Check to see if we need to delete an excess backup versions > @@ -995,7 +995,7 @@ Rollback::checkForUserUpdate() > return false; > } > > - if (fileLastModified < fileInfo.st_mtime) { > + if (fileLastModified < TS_ARCHIVE_STAT_MTIME(fileInfo)) { > > // We've been modified, Roll a new version > currentVersion_local = this->getCurrentVersion(); > > http://git-wip-us.apache.org/repos/asf/trafficserver/blob/5d7fb725/mgmt/Rollback.h > ---------------------------------------------------------------------- > diff --git a/mgmt/Rollback.h b/mgmt/Rollback.h > index 40adbde..04e03ed 100644 > --- a/mgmt/Rollback.h > +++ b/mgmt/Rollback.h > @@ -42,6 +42,14 @@ > #define ACTIVE_VERSION 0 > #define INVALID_VERSION -1 > > +#if HAVE_STRUCT_STAT_ST_MTIMESPEC_TV_NSEC > +#define TS_ARCHIVE_STAT_MTIME(t) ((t).st_mtime * 1000000000 + > (t).st_mtimespec.tv_nsec) > +#elif HAVE_STRUCT_STAT_ST_MTIM_TV_NSEC > +#define TS_ARCHIVE_STAT_MTIME(t) ((t).st_mtime * 1000000000 + > (t).st_mtim.tv_nsec) > +#else > +#define TS_ARCHIVE_STAT_MTIME(t) ((t).st_mtime * 1000000000) > +#endif > + > typedef int version_t; > > enum RollBackCodes > > -- Igor Galić Tel: +43 (0) 664 886 22 883 Mail: i.ga...@brainsware.org URL: http://brainsware.org/ GPG: 6880 4155 74BD FD7C B515 2EA5 4B1D 9E08 A097 C9AE