You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@trafficserver.apache.org by jp...@apache.org on 2013/02/26 02:10:52 UTC

git commit: TS-1645: increase the file stat resolution on config files

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 <yk...@websense.com>
Authored: Mon Feb 25 17:09:08 2013 -0800
Committer: James Peach <jp...@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 <yk...@websense.com>
+
   *) [TS-1557] update ua_begin_write
    Author: Aidan McGurn <ai...@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;
       }
 
     } 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


Re: git commit: TS-1645: increase the file stat resolution on config files

Posted by Igor Galić <i....@brainsware.org>.

----- 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 <yk...@websense.com>
> Authored: Mon Feb 25 17:09:08 2013 -0800
> Committer: James Peach <jp...@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 <yk...@websense.com>
> +
>    *) [TS-1557] update ua_begin_write
>     Author: Aidan McGurn <ai...@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.galic@brainsware.org
URL: http://brainsware.org/
GPG: 6880 4155 74BD FD7C B515  2EA5 4B1D 9E08 A097 C9AE