myserver-commit
[Top][All Lists]
Advanced

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

[myserver-commit] [SCM] GNU MyServer branch, master, updated. v0.9.2-278


From: Giuseppe Scrivano
Subject: [myserver-commit] [SCM] GNU MyServer branch, master, updated. v0.9.2-278-g4bc0073
Date: Fri, 06 Aug 2010 00:07:11 +0000

This is an automated email from the git hooks/post-receive script. It was
generated because a ref change was pushed to the repository containing
the project "GNU MyServer".

The branch, master has been updated
       via  4bc007332aacd6875146985a77fe47dfaf747cfa (commit)
       via  7af37156b33d4e374013b0bd6bb040d468f03f17 (commit)
       via  3b7670c5c9cd033d25f88b00a43496ddfb0d30b8 (commit)
      from  7a0cb3b6917dbd92bb16b9bda3e92c5395937f07 (commit)

Those revisions listed above that are new to this repository have
not appeared on any other notification email; so we list those
revisions in full, below.

- Log -----------------------------------------------------------------


commit 4bc007332aacd6875146985a77fe47dfaf747cfa
Author: Giuseppe Scrivano <address@hidden>
Date:   Fri Aug 6 02:06:57 2010 +0200

    FilesCache: general refactoring.

diff --git a/myserver/include/base/files_cache/cached_file_buffer.h 
b/myserver/include/base/files_cache/cached_file_buffer.h
index a8c80c8..5473fb6 100644
--- a/myserver/include/base/files_cache/cached_file_buffer.h
+++ b/myserver/include/base/files_cache/cached_file_buffer.h
@@ -48,7 +48,25 @@ public:
 
   const char* getFilename (){return filename.c_str ();}
   const char* getBuffer (){return buffer;}
+
+  time_t getMtime () {return mtime;}
+
+  bool isSymlink () {return S_ISLNK (fstat.st_mode);}
+
+  bool revalidate (const char *res);
+
+  void refreshExpireTime (u_long now) {expireTime = now + MYSERVER_SEC (5);}
+  u_long getExpireTime () {return expireTime;}
 protected:
+
+  /*! Last mtime for this file.  */
+  time_t mtime;
+
+  /*! Specify when to check again the entry validity.  */
+  u_long expireTime;
+
+  struct stat fstat;
+
   Mutex mutex;
   char *buffer;
   u_long refCounter;
diff --git a/myserver/include/base/files_cache/cached_file_factory.h 
b/myserver/include/base/files_cache/cached_file_factory.h
index f012a62..449e333 100644
--- a/myserver/include/base/files_cache/cached_file_factory.h
+++ b/myserver/include/base/files_cache/cached_file_factory.h
@@ -45,7 +45,6 @@ public:
   void setSize (u_long m){size = m;}
   u_long getSize (){return size;}
   u_long getUsedSize (){return usedSize;}
-  u_long getUsed (){return used;}
 
   File *open (const char* file, int flags = 0);
   void nullReferences (CachedFileBuffer* cfb);
@@ -66,9 +65,6 @@ protected:
   /*! Size currently used.  */
   u_long usedSize;
 
-  /*! Number of times the cache was used.  */
-  u_long used;
-
   /*! Cache creation time.  */
   u_long created;
 
@@ -80,28 +76,20 @@ protected:
 
   struct CachedFileFactoryRecord
   {
-    struct stat fstat;
-
     /*! Number of times the cache record was used.  */
     u_long used;
 
     /*! Cache record creation time.  */
     u_long created;
 
-    /*! Last mtime for this file.  */
-    time_t mtime;
-
-    /*! Last time we checked for the mtime of the buffered file.  */
-    u_long lastModTimeCheck;
-
     /*! This entry is not valid and will be removed when refCount = 0.  */
     bool invalidCache;
 
     CachedFileBuffer* buffer;
   };
 
-  list<CachedFileFactoryRecord*> buffersToRemove;
-  HashMap<char*, CachedFileFactoryRecord*> buffers;
+  list<CachedFileFactoryRecord *> buffersToRemove;
+  HashMap<char *, CachedFileFactoryRecord *> buffers;
 };
 
 #endif
diff --git a/myserver/src/base/files_cache/cached_file_buffer.cpp 
b/myserver/src/base/files_cache/cached_file_buffer.cpp
index 9b76c47..d1a96b1 100644
--- a/myserver/src/base/files_cache/cached_file_buffer.cpp
+++ b/myserver/src/base/files_cache/cached_file_buffer.cpp
@@ -45,6 +45,26 @@
 
 /*!
   Load a file in the buffer.
+  \param file The file object.
+ */
+CachedFileBuffer::CachedFileBuffer (File* file)
+{
+  u_long nbr;
+  factoryToNotify = 0;
+  refCounter = 0;
+  fileSize = file->getFileSize ();
+  buffer = new char[fileSize];
+  filename.assign (file->getFilename ());
+  file->seek (0);
+  file->read (buffer, fileSize, &nbr);
+
+  mtime = file->getLastModTime ();
+
+  file->fstat (&fstat);
+}
+
+/*!
+  Load a file in the buffer.
   \param filename The name of the file.
  */
 CachedFileBuffer::CachedFileBuffer (const char* filename)
@@ -63,6 +83,10 @@ CachedFileBuffer::CachedFileBuffer (const char* filename)
 
   file.read (buffer, fileSize, &nbw);
 
+  mtime = file.getLastModTime ();
+
+  file.fstat (&fstat);
+
   file.close ();
 }
 
@@ -131,26 +155,18 @@ CachedFileBuffer::CachedFileBuffer (const char* buffer, 
u_long size)
 }
 
 /*!
-  Load a file in the buffer.
-  \param file The file object.
+  Destroy the object.
  */
-CachedFileBuffer::CachedFileBuffer (File* file)
+CachedFileBuffer::~CachedFileBuffer ()
 {
-  u_long nbr;
-  factoryToNotify = 0;
-  refCounter = 0;
-  fileSize = file->getFileSize ();
-  buffer = new char[fileSize];
-  filename.assign (file->getFilename ());
-  file->seek (0);
-  file->read (buffer, fileSize, &nbr);
+  mutex.destroy ();
+  delete [] buffer;
 }
 
 /*!
-  Destroy the object.
+  Check if the resource is still valid.
  */
-CachedFileBuffer::~CachedFileBuffer ()
+bool CachedFileBuffer::revalidate (const char *res)
 {
-  mutex.destroy ();
-  delete [] buffer;
+  return FilesUtility::getLastModTime (res) == getMtime ();
 }
diff --git a/myserver/src/base/files_cache/cached_file_factory.cpp 
b/myserver/src/base/files_cache/cached_file_factory.cpp
index 3695bcb..2d90150 100644
--- a/myserver/src/base/files_cache/cached_file_factory.cpp
+++ b/myserver/src/base/files_cache/cached_file_factory.cpp
@@ -64,11 +64,11 @@ CachedFileFactory::CachedFileFactory (u_long size)
 }
 
 /*!
-  Clean the used resources.
+  Clean the usedm resources.
  */
 void CachedFileFactory::clean ()
 {
-  HashMap<char*, CachedFileFactoryRecord*>::Iterator it = buffers.begin ();
+  HashMap<char *, CachedFileFactoryRecord*>::Iterator it = buffers.begin ();
   for (; it != buffers.end (); it++)
     {
       delete (*it)->buffer;
@@ -120,7 +120,6 @@ u_long CachedFileFactory::getMinSize ()
 void CachedFileFactory::initialize (u_long size)
 {
   setSize (size);
-  used = 0;
   maxSize = 0;
   minSize = 0;
   usedSize = 0;
@@ -146,23 +145,18 @@ File* CachedFileFactory::open (const char* filename, int 
flags)
   try
     {
       record = buffers.get (filename);
-      buffer = record ? record->buffer : 0;
+      buffer = record ? record->buffer : NULL;
 
-      used++;
-
-      /*
-        If the file on the file system has a different mtime then don't use
-        the cache, in this way when opened instance of this file will be closed
-        the null reference callback can be called and the file reloaded.
-      */
       if (record)
         {
-          record->invalidCache = FilesUtility::getLastModTime (filename)
-            != record->mtime;
-          record->lastModTimeCheck = ticks;
+          if (buffer->getExpireTime () <= ticks)
+            {
+              buffer->refreshExpireTime (ticks);
+              record->invalidCache = ! buffer->revalidate (filename);
+            }
 
           bool noSymlink = (! (flags & File::NO_FOLLOW_SYMLINK))
-            && S_ISLNK (record->fstat.st_mode);
+            && buffer->isSymlink ();
 
           if (record->invalidCache || noSymlink)
             {
@@ -192,11 +186,12 @@ File* CachedFileFactory::open (const char* filename, int 
flags)
               delete file;
               return NULL;
             }
+
           fileSize = file->getFileSize ();
           purgeRecords ();
-          if ((minSize != 0 && fileSize < minSize) ||
-              (maxSize != 0 && fileSize > maxSize)  ||
-              (fileSize > size - usedSize))
+          if (minSize && fileSize < minSize
+              || maxSize && fileSize > maxSize
+              || fileSize > size - usedSize)
             {
               mutex.unlock ();
               return file;
@@ -205,14 +200,13 @@ File* CachedFileFactory::open (const char* filename, int 
flags)
             {
               record = new CachedFileFactoryRecord ();
               buffer = new CachedFileBuffer (file);
-              record->mtime = file->getLastModTime ();
-              file->fstat (&record->fstat);
               file->close  ();
               delete file;
 
               buffer->setFactoryToNotify (this);
               record->created = ticks;
               record->buffer = buffer;
+              buffer->refreshExpireTime (ticks);
               buffers.put ((char *) filename, record);
               usedSize += fileSize;
             }
@@ -239,12 +233,15 @@ File* CachedFileFactory::open (const char* filename, int 
flags)
 void CachedFileFactory::nullReferences (CachedFileBuffer* cfb)
 {
   CachedFileFactoryRecord* record;
-  float averageUsage;
   float bufferAverageUsage;
   float spaceUsage;
   u_long ticks = getTicks ();
-  mutex.lock ();
 
+  spaceUsage = (float) usedSize / size;
+  if (spaceUsage < 0.65f)
+    return;
+
+  mutex.lock ();
   try
     {
       record = buffers.get (cfb->getFilename ());
@@ -254,14 +251,11 @@ void CachedFileFactory::nullReferences (CachedFileBuffer* 
cfb)
           return;
         }
 
-      spaceUsage = (float)usedSize / size;
-      averageUsage = (float)used * 1000.0f / (ticks - created);
       bufferAverageUsage = (float)record->used * 1000.0f /
         (ticks - record->created);
 
-      if (((spaceUsage > 0.65f) && (bufferAverageUsage < averageUsage)
-           && ((ticks - record->created) > 10000))
-          || (spaceUsage > 0.9f)
+      if ((spaceUsage > 0.65f && (ticks - record->created) > 10000)
+          || spaceUsage > 0.9f
           || record->invalidCache)
         {
           record = buffers.remove (cfb->getFilename ());
@@ -282,7 +276,7 @@ void CachedFileFactory::nullReferences (CachedFileBuffer* 
cfb)
  */
 u_long CachedFileFactory::purgeRecords ()
 {
-  list<CachedFileFactoryRecord*>::iterator it = buffersToRemove.begin ();
+  list<CachedFileFactoryRecord *>::iterator it = buffersToRemove.begin ();
   u_long ret = 0;
 
   while (it != buffersToRemove.end ())



commit 7af37156b33d4e374013b0bd6bb040d468f03f17
Author: Giuseppe Scrivano <address@hidden>
Date:   Thu Aug 5 21:48:56 2010 +0200

    Change the default server.min_file_cache value.

diff --git a/myserver/binaries/myserver.default.xml 
b/myserver/binaries/myserver.default.xml
index 9ef7099..921eab1 100755
--- a/myserver/binaries/myserver.default.xml
+++ b/myserver/binaries/myserver.default.xml
@@ -79,7 +79,7 @@
   <DEFINE name="server.max_file_cache" value="1048576" />
 
   <!--MIN CACHE SIZE FOR SINGLE STATIC FILE-->
-  <DEFINE name="server.min_file_cache" value="1048576" />
+  <DEFINE name="server.min_file_cache" value="0" />
 
   <!-- ENABLE HOME DIRECTORY PER USER -->
   <DEFINE name="http.use_home_directory" value="NO" />



commit 3b7670c5c9cd033d25f88b00a43496ddfb0d30b8
Author: Giuseppe Scrivano <address@hidden>
Date:   Thu Aug 5 19:31:15 2010 +0200

    CachedFile: Raise an exception on invalid operations.

diff --git a/myserver/include/base/exceptions/exceptions.h 
b/myserver/include/base/exceptions/exceptions.h
index d985c5d..6061894 100644
--- a/myserver/include/base/exceptions/exceptions.h
+++ b/myserver/include/base/exceptions/exceptions.h
@@ -90,7 +90,7 @@ class AbstractServerException: public exception
       return gnulib::strerror (localErrno);
     }
 
-    enum LoggingLevel getLogLevel()
+    enum LoggingLevel getLogLevel ()
     {
       return logLevel;
     }
diff --git a/myserver/src/base/files_cache/cached_file.cpp 
b/myserver/src/base/files_cache/cached_file.cpp
index 1291e4f..8c43eec 100644
--- a/myserver/src/base/files_cache/cached_file.cpp
+++ b/myserver/src/base/files_cache/cached_file.cpp
@@ -22,6 +22,8 @@
 #include <include/base/file/files_utility.h>
 #include <include/base/files_cache/cached_file.h>
 
+#include <include/base/exceptions/checked.h>
+
 #ifndef WIN32
 # include <fcntl.h>
 # include <unistd.h>
@@ -60,6 +62,8 @@ CachedFile::CachedFile (CachedFileBuffer* cfb)
  */
 int CachedFile::writeToFile (const char* buffer, u_long buffersize, u_long* 
nbw)
 {
+  errno = EBADF;
+  checked::raiseException ();
   return -1;
 }
 
@@ -72,6 +76,8 @@ int CachedFile::writeToFile (const char* buffer, u_long 
buffersize, u_long* nbw)
  */
 int CachedFile::openFile (const char* nfilename, u_long opt)
 {
+  errno = ENOENT;
+  checked::raiseException ();
   return -1;
 }
 
@@ -80,7 +86,7 @@ int CachedFile::openFile (const char* nfilename, u_long opt)
  */
 Handle CachedFile::getHandle ()
 {
-  return (Handle)-1;
+  return (Handle) -1;
 }
 
 /*!
@@ -140,6 +146,8 @@ int CachedFile::read (char* buffer, u_long buffersize, 
u_long* nbr)
  */
 int CachedFile::createTemporaryFile (const char *, bool)
 {
+  errno = EINVAL;
+  checked::raiseException ();
   return -1;
 }
 
@@ -179,6 +187,8 @@ int CachedFile::seek (u_long initialByte)
  */
 int CachedFile::write (const char* buffer, u_long len, u_long *nbw)
 {
+  errno = EBADF;
+  checked::raiseException ();
   return -1;
 }
 

-----------------------------------------------------------------------

Summary of changes:
 myserver/binaries/myserver.default.xml             |    2 +-
 myserver/include/base/exceptions/exceptions.h      |    2 +-
 .../include/base/files_cache/cached_file_buffer.h  |   18 +++++++
 .../include/base/files_cache/cached_file_factory.h |   16 +------
 myserver/src/base/files_cache/cached_file.cpp      |   12 ++++-
 .../src/base/files_cache/cached_file_buffer.cpp    |   46 ++++++++++++------
 .../src/base/files_cache/cached_file_factory.cpp   |   50 +++++++++-----------
 7 files changed, 86 insertions(+), 60 deletions(-)


hooks/post-receive
-- 
GNU MyServer



reply via email to

[Prev in Thread] Current Thread [Next in Thread]