pixl-server-storage 3.0.13 → 3.0.17

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/engines/Redis.js CHANGED
@@ -39,10 +39,8 @@ module.exports = Class.create({
39
39
 
40
40
  this.keyPrefix = (r_config.keyPrefix || '').replace(/^\//, '');
41
41
  if (this.keyPrefix && !this.keyPrefix.match(/\/$/)) this.keyPrefix += '/';
42
- delete r_config.keyPrefix;
43
42
 
44
43
  this.keyTemplate = (r_config.keyTemplate || '').replace(/^\//, '').replace(/\/$/, '');
45
- delete r_config.keyTemplate;
46
44
 
47
45
  r_config.return_buffers = true;
48
46
  r_config.retry_strategy = function(opts) {
@@ -50,7 +48,7 @@ module.exports = Class.create({
50
48
  return Math.min(opts.attempt * 100, 3000);
51
49
  };
52
50
 
53
- this.redis = Redis.createClient(r_config);
51
+ this.redis = Redis.createClient( Tools.copyHashRemoveKeys(r_config, { keyPrefix:1, keyTemplate:1 }) );
54
52
 
55
53
  this.redis.on('error', function(err) {
56
54
  if (!self.storage.started) return callback(err);
@@ -44,10 +44,8 @@ module.exports = Class.create({
44
44
 
45
45
  this.keyPrefix = (r_config.keyPrefix || '').replace(/^\//, '');
46
46
  if (this.keyPrefix && !this.keyPrefix.match(/\/$/)) this.keyPrefix += '/';
47
- delete r_config.keyPrefix;
48
47
 
49
48
  this.keyTemplate = (r_config.keyTemplate || '').replace(/^\//, '').replace(/\/$/, '');
50
- delete r_config.keyTemplate;
51
49
 
52
50
  r_config.clusterOpts.clusterRetryStrategy = function(attempts) {
53
51
  if (attempts > r_config.connectRetries) return false;
package/engines/S3.js CHANGED
@@ -37,13 +37,9 @@ module.exports = Class.create({
37
37
 
38
38
  this.keyPrefix = (s3_config.keyPrefix || '').replace(/^\//, '');
39
39
  if (this.keyPrefix && !this.keyPrefix.match(/\/$/)) this.keyPrefix += '/';
40
- delete s3_config.keyPrefix;
41
40
 
42
41
  this.keyTemplate = (s3_config.keyTemplate || '').replace(/^\//, '').replace(/\/$/, '');
43
- delete s3_config.keyTemplate;
44
-
45
42
  this.fileExtensions = !!s3_config.fileExtensions;
46
- delete s3_config.fileExtensions;
47
43
 
48
44
  if (this.debugLevel(10)) {
49
45
  // S3 has a logger API but it's extremely verbose -- restrict to level 10 only
@@ -70,7 +66,7 @@ module.exports = Class.create({
70
66
  delete s3_config.cache;
71
67
 
72
68
  AWS.config.update( aws_config );
73
- this.s3 = new AWS.S3( s3_config );
69
+ this.s3 = new AWS.S3( Tools.copyHashRemoveKeys(s3_config, { keyPrefix:1, keyTemplate:1, fileExtensions:1, cache:1 }) );
74
70
  },
75
71
 
76
72
  prepKey: function(key) {
@@ -131,7 +127,7 @@ module.exports = Class.create({
131
127
  if (done) return; else done = true;
132
128
 
133
129
  if (err) {
134
- self.logError('s3', "Failed to store object: " + key + ": " + err.message);
130
+ self.logError('s3', "Failed to store object: " + key + ": " + (err.message || err), err);
135
131
  }
136
132
  else self.logDebug(9, "Store complete: " + key);
137
133
 
@@ -162,7 +158,7 @@ module.exports = Class.create({
162
158
  if (done) return; else done = true;
163
159
 
164
160
  if (err) {
165
- self.logError('s3', "Failed to store stream: " + key + ": " + err.message);
161
+ self.logError('s3', "Failed to store stream: " + key + ": " + (err.message || err), err);
166
162
  }
167
163
  else self.logDebug(9, "Stream store complete: " + key);
168
164
 
@@ -197,8 +193,15 @@ module.exports = Class.create({
197
193
  if (done) return; else done = true;
198
194
 
199
195
  if (err) {
200
- if (err.code != 'NoSuchKey') {
201
- self.logError('s3', "Failed to head key: " + key + ": " + err.message);
196
+ if ((err.code == 'NoSuchKey') || (err.code == 'NotFound')) {
197
+ // key not found, special case, don't log an error
198
+ // always include "Not found" in error message
199
+ err = new Error("Failed to head key: " + key + ": Not found");
200
+ err.code = "NoSuchKey";
201
+ }
202
+ else {
203
+ // some other error
204
+ self.logError('s3', "Failed to head key: " + key + ": " + (err.message || err), err);
202
205
  }
203
206
  callback( err, null );
204
207
  return;
@@ -253,7 +256,7 @@ module.exports = Class.create({
253
256
  }
254
257
  else {
255
258
  // some other error
256
- self.logError('s3', "Failed to fetch key: " + key + ": " + err.message);
259
+ self.logError('s3', "Failed to fetch key: " + key + ": " + (err.message || err), err);
257
260
  }
258
261
  callback( err, null );
259
262
  return;
@@ -281,7 +284,10 @@ module.exports = Class.create({
281
284
  self.logDebug(9, "JSON fetch complete: " + key, self.debugLevel(10) ? body : null);
282
285
  }
283
286
 
284
- callback( null, body );
287
+ callback( null, body, {
288
+ mod: Math.floor((new Date(data.LastModified)).getTime() / 1000),
289
+ len: data.ContentLength
290
+ } );
285
291
  } );
286
292
  },
287
293
 
@@ -298,7 +304,7 @@ module.exports = Class.create({
298
304
  var proceed = false;
299
305
 
300
306
  download.on('error', function(err) {
301
- if (proceed) self.logError('s3', "Failed to download key: " + key + ": " + err.message);
307
+ if (proceed) self.logError('s3', "Failed to download key: " + key + ": " + (err.message || err), err);
302
308
  });
303
309
  download.once('end', function() {
304
310
  self.logDebug(9, "S3 stream download complete: " + key);
@@ -313,8 +319,8 @@ module.exports = Class.create({
313
319
  if (done) return; else done = true;
314
320
 
315
321
  if (err) {
316
- if (err.code != 'NoSuchKey') {
317
- self.logError('s3', "Failed to head key: " + key + ": " + err.message);
322
+ if ((err.code != 'NoSuchKey') && (err.code != 'NotFound')) {
323
+ self.logError('s3', "Failed to head key: " + key + ": " + (err.message || err), err);
318
324
  }
319
325
  download.destroy();
320
326
  callback( err, null );
@@ -349,7 +355,7 @@ module.exports = Class.create({
349
355
  var proceed = false;
350
356
 
351
357
  download.on('error', function(err) {
352
- if (proceed) self.logError('s3', "Failed to download key: " + key + ": " + err.message);
358
+ if (proceed) self.logError('s3', "Failed to download key: " + key + ": " + (err.message || err), err);
353
359
  });
354
360
  download.once('end', function() {
355
361
  self.logDebug(9, "S3 stream download complete: " + key);
@@ -364,8 +370,8 @@ module.exports = Class.create({
364
370
  if (done) return; else done = true;
365
371
 
366
372
  if (err) {
367
- if (err.code != 'NoSuchKey') {
368
- self.logError('s3', "Failed to head key: " + key + ": " + err.message);
373
+ if ((err.code != 'NoSuchKey') && (err.code != 'NotFound')) {
374
+ self.logError('s3', "Failed to head key: " + key + ": " + (err.message || err), err);
369
375
  }
370
376
  download.destroy();
371
377
  callback( err, null );
@@ -408,7 +414,7 @@ module.exports = Class.create({
408
414
  if (done) return; else done = true;
409
415
 
410
416
  if (err) {
411
- self.logError('s3', "Failed to delete object: " + key + ": " + err.message);
417
+ self.logError('s3', "Failed to delete object: " + key + ": " + (err.message || err), err);
412
418
  }
413
419
  else self.logDebug(9, "Delete complete: " + key);
414
420
 
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "pixl-server-storage",
3
- "version": "3.0.13",
3
+ "version": "3.0.17",
4
4
  "description": "A key/value/list storage component for the pixl-server framework.",
5
5
  "author": "Joseph Huckaby <jhuckaby@gmail.com>",
6
6
  "homepage": "https://github.com/jhuckaby/pixl-server-storage",
package/storage.js CHANGED
@@ -34,7 +34,8 @@ module.exports = Class.create({
34
34
  },
35
35
  max_recent_events: 0,
36
36
  cache_key_match: '',
37
- expiration_updates: false
37
+ expiration_updates: false,
38
+ lower_case_keys: true
38
39
  },
39
40
 
40
41
  locks: null,
@@ -130,6 +131,7 @@ module.exports = Class.create({
130
131
  this.logEventTypes = this.config.get('log_event_types');
131
132
  this.maxRecentEvents = this.config.get('max_recent_events');
132
133
  this.expHash = this.config.get('expiration_updates');
134
+ this.lowerKeys = this.config.get('lower_case_keys');
133
135
 
134
136
  this.cacheKeyRegex = null;
135
137
  if (this.config.get('cache_key_match')) {
@@ -139,7 +141,9 @@ module.exports = Class.create({
139
141
 
140
142
  normalizeKey: function(key) {
141
143
  // downconvert unicode, lower-case, alphanum-dash-dot-slash only, strip leading and trailing slashes
142
- return unidecode(key).toLowerCase().replace(/[^\w\-\.\/]+/g, '').replace(/\/+/g, '/').replace(/^\//, '').replace(/\/$/, '');
144
+ key = '' + key;
145
+ if (this.lowerKeys) key = key.toLowerCase();
146
+ return unidecode(key).replace(/[^\w\-\.\/]+/g, '').replace(/\/+/g, '/').replace(/^\//, '').replace(/\/$/, '');
143
147
  },
144
148
 
145
149
  isBinaryKey: function(key) {