فهرست منبع

cache non-existing UUIDs

jomo 10 سال پیش
والد
کامیت
b59d6ced07
4فایلهای تغییر یافته به همراه32 افزوده شده و 22 حذف شده
  1. 8 1
      modules/cache.js
  2. 9 5
      modules/helpers.js
  3. 14 15
      modules/networking.js
  4. 1 1
      routes/avatars.js

+ 8 - 1
modules/cache.js

@@ -44,7 +44,14 @@ exp.save_hash = function(uuid, hash) {
 // null when uuid unkown
 exp.get_details = function(uuid, callback) {
   redis.hgetall(uuid, function(err, data) {
-    callback(err, data);
+    var details = null;
+    if (data) {
+      details = {
+        hash: (data.h == "null" ? null : data.h),
+        time: data.t
+      };
+    }
+    callback(err, details);
   });
 };
 

+ 9 - 5
modules/helpers.js

@@ -15,7 +15,11 @@ function get_hash(url) {
 function store_images(uuid, details, callback) {
   // get profile for +uuid+
   networking.get_profile(uuid, function(err, profile) {
-    if (err) {
+    if (err === 0) {
+      // uuid does not exist
+      cache.save_hash(uuid, null);
+      callback(null, null);
+    } else if (err) {
       callback(err, null);
     } else {
       var skinurl = skin_url(profile);
@@ -23,7 +27,7 @@ function store_images(uuid, details, callback) {
         console.log(uuid + " " + skinurl);
         // set file paths
         var hash = get_hash(skinurl);
-        if (details && details.h == hash) {
+        if (details && details.hash == hash) {
           // hash hasn't changed
           console.log(uuid + " hash has not changed");
           cache.update_timestamp(uuid);
@@ -79,15 +83,15 @@ function get_image_hash(uuid, callback) {
     if (err) {
       callback(err, -1, null);
     } else {
-      if (details && details.t + config.local_cache_time >= new Date().getTime()) {
+      if (details && details.time + config.local_cache_time >= new Date().getTime()) {
         // uuid known + recently updated
         console.log(uuid + " uuid known & recently updated");
-        callback(null, 1, details.h);
+        callback(null, (details.hash ? 1 : 0), details.hash);
       } else {
         console.log(uuid + " uuid not known or too old");
         store_images(uuid, details, function(err, hash) {
           if (err) {
-            callback(err, -1, details && details.h);
+            callback(err, -1, details && details.hash);
           } else {
             console.log(uuid + " hash: " + hash);
             callback(null, (hash ? 2 : 3), hash);

+ 14 - 15
modules/networking.js

@@ -17,22 +17,21 @@ exp.get_profile = function(uuid, callback) {
       // profile downloaded successfully
       console.log(uuid + " profile downloaded");
       callback(null, JSON.parse(body));
+    } else if (error) {
+      callback(error, null);
+    } else if (response.statusCode == 204 || response.statusCode == 404) {
+      // we get 204 No Content when UUID doesn't exist (including 404 in case they change that)
+      console.log(uuid + " uuid does not exist");
+      callback(0, null);
+    } else if (response.statusCode == 429) {
+      // Too Many Requests
+      console.warn(uuid + " Too many requests");
+      console.warn(body);
+      callback(null, null);
     } else {
-      if (error) {
-        callback(error, null);
-        return;
-      } else if (response.statusCode == 204 || response.statusCode == 404) {
-        // we get 204 No Content when UUID doesn't exist (including 404 in case they change that)
-        console.log(uuid + " uuid does not exist");
-      } else if (response.statusCode == 429) {
-        // Too Many Requests
-        console.warn(uuid + " Too many requests");
-        console.warn(body);
-      } else {
-        console.error(uuid + " Unknown error:");
-        console.error(response);
-        console.error(body);
-      }
+      console.error(uuid + " Unknown error:");
+      console.error(response);
+      console.error(body);
       callback(null, null);
     }
   });

+ 1 - 1
routes/avatars.js

@@ -35,7 +35,7 @@ router.get('/:uuid', function(req, res) {
         }
       } else if (status == 1 || status == 2) {
         sendimage(200, status == 1, image);
-      } else if (status == 3) {
+      } else if (status == 0 || status == 3) {
         handle_404(def);
       } else {
         console.error("unexpected error/status");