diff --git a/app/lib/shared/package_memcache.dart b/app/lib/shared/package_memcache.dart index 3a41331ef9..4b2c261628 100644 --- a/app/lib/shared/package_memcache.dart +++ b/app/lib/shared/package_memcache.dart @@ -31,27 +31,27 @@ abstract class UIPackageCache { /// Uses a [Memache] to set/get/invalidate metadata for packages. class AppEnginePackageMemcache implements PackageCache, UIPackageCache { - static const Duration EXPIRATION = const Duration(minutes: 10); - static const String INDEX_PAGE_KEY = 'pub_index'; - static const String KEY_PREFIX = 'dart_package_json'; - static const String UI_KEY_PREFIX = 'dart_package_ui'; - - final Memcache memcache; - final String keyPrefix; - final String uiKeyPrefix; - - AppEnginePackageMemcache(this.memcache, String namespace) - : keyPrefix = (namespace == null || namespace.isEmpty) - ? KEY_PREFIX - : 'ns_${namespace}_$KEY_PREFIX', - uiKeyPrefix = (namespace == null || namespace.isEmpty) - ? UI_KEY_PREFIX - : 'ns_${namespace}_$UI_KEY_PREFIX'; + static const Duration _cacheExpiration = const Duration(minutes: 10); + + final Memcache _memcache; + final String _indexKey; + final String _keyPrefix; + final String _uiKeyPrefix; + + static String _prefixWithNamespace(String prefix, String namespace) => + (namespace == null || namespace.isEmpty) + ? prefix + : 'ns_${namespace}_${prefix}'; + + AppEnginePackageMemcache(this._memcache, String namespace) + : _keyPrefix = _prefixWithNamespace('package_json_', namespace), + _uiKeyPrefix = _prefixWithNamespace('package_ui_', namespace), + _indexKey = _prefixWithNamespace('pub_index', namespace); @override Future> getPackageData(String package) async { - final result = - await _ignoreErrors(memcache.get(_packageKey(package), asBinary: true)); + final result = await _ignoreErrors( + _memcache.get(_packageKey(package), asBinary: true)); if (result != null) _logger.info('memcache["$package"] found'); @@ -64,14 +64,14 @@ class AppEnginePackageMemcache implements PackageCache, UIPackageCache { @override Future setPackageData(String package, List data) { _logger.info('memcache["$package"] setting to new data'); - return _ignoreErrors( - memcache.set(_packageKey(package), data, expiration: EXPIRATION)); + return _ignoreErrors(_memcache.set(_packageKey(package), data, + expiration: _cacheExpiration)); } @override Future getUIPackagePage(String package, String version) async { final result = await _ignoreErrors( - memcache.get(_packageUIKey(package, version), asBinary: true)); + _memcache.get(_packageUIKey(package, version), asBinary: true)); if (result != null) { _logger.info('memcache["$package"] rendered UI found'); @@ -85,17 +85,17 @@ class AppEnginePackageMemcache implements PackageCache, UIPackageCache { @override Future setUIPackagePage(String package, String version, String data) async { _logger.info('memcache["$package"] setting to new rendered UI data'); - return _ignoreErrors(memcache.set( + return _ignoreErrors(_memcache.set( _packageUIKey(package, version), UTF8.encode(data), - expiration: EXPIRATION)); + expiration: _cacheExpiration)); } @override Future invalidateUIPackagePage(String package) async { _logger.info('memcache["$package"] invalidating UI data'); return _ignoreErrors(Future.wait([ - memcache.remove(_packageUIKey(package, null)), - memcache.remove(INDEX_PAGE_KEY), + _memcache.remove(_packageUIKey(package, null)), + _memcache.remove(_indexKey), ])); } @@ -103,15 +103,15 @@ class AppEnginePackageMemcache implements PackageCache, UIPackageCache { Future invalidatePackageData(String package) { _logger.info('memcache["$package"] invalidate entry'); return _ignoreErrors(Future.wait([ - memcache.remove(_packageKey(package)), - memcache.remove(_packageUIKey(package, null)), - memcache.remove(INDEX_PAGE_KEY), + _memcache.remove(_packageKey(package)), + _memcache.remove(_packageUIKey(package, null)), + _memcache.remove(_indexKey), ])); } @override Future getUIIndexPage() async { - final result = await _ignoreErrors(memcache.get(INDEX_PAGE_KEY)); + final result = await _ignoreErrors(_memcache.get(_indexKey)); if (result != null) { _logger.info('memcache[index-page] found rendered UI data'); } else { @@ -124,14 +124,14 @@ class AppEnginePackageMemcache implements PackageCache, UIPackageCache { Future setUIIndexPage(String content) async { _logger.info('memcache[index-page] setting to new rendered UI data'); await _ignoreErrors( - memcache.set(INDEX_PAGE_KEY, content, expiration: EXPIRATION)); + _memcache.set(_indexKey, content, expiration: _cacheExpiration)); } - String _packageKey(String package) => '$keyPrefix$package'; + String _packageKey(String package) => '$_keyPrefix$package'; String _packageUIKey(String package, String version) { - if (version == null) return '$uiKeyPrefix$package'; - return '$uiKeyPrefix$package**$version'; + if (version == null) return '$_uiKeyPrefix$package'; + return '$_uiKeyPrefix$package**$version'; } // We are ignoring any memcache errors and just return `null` in this case.