]> git.ipfire.org Git - thirdparty/asterisk.git/commitdiff
main/file.c: Limit media cache usage to remote files.
authorKevin Reeves <kevin@phoneburner.com>
Thu, 21 Nov 2019 18:48:42 +0000 (12:48 -0600)
committerKevin Harwell <kharwell@digium.com>
Thu, 19 Dec 2019 00:45:04 +0000 (18:45 -0600)
When testing for the existance of a file, the media cache is searched even if
the file has no chance of being in it.  This can cause performance issues
as the media cache size increases.

As a result, calls to applications like Read and Playback using local files
must scan through the media cache before playing.  Under load and with a
large cache, this can delay the playback of those files.

This patch updates the function that checks for the existance of a file to
only consult the media cache database if the requested file is a remote path.
It introduces a new is_remote_path() function in main/file.c.

ASTERISK-28625  #close
Reported-by: kevin@phoneburner.com
Change-Id: If91137493732d9034dafa381c081c69274a7dcc9

main/file.c

index 9896c7e0e06de1501c3bb3c28e66fb72b110c1dc..a0616c8d020387ec42be49ebef84eaeae3a1289b 100644 (file)
@@ -640,6 +640,11 @@ static int is_absolute_path(const char *filename)
        return filename[0] == '/';
 }
 
+static int is_remote_path(const char *filename)
+{
+       return strstr(filename, "://") ? 1 : 0;
+}
+
 /*!
  * \brief test if a file exists for a given format.
  * \note result_cap is OPTIONAL
@@ -653,7 +658,7 @@ static int fileexists_test(const char *filename, const char *fmt, const char *la
                return 0;
        }
 
-       if (!ast_media_cache_retrieve(filename, NULL, buf, buflen)) {
+       if (is_remote_path(filename) && !ast_media_cache_retrieve(filename, NULL, buf, buflen)) {
                return filehelper(buf, result_cap, NULL, ACTION_EXISTS);
        }