Skip to content
Merged
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
66 changes: 33 additions & 33 deletions app/lib/shared/package_memcache.dart
Original file line number Diff line number Diff line change
Expand Up @@ -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<List<int>> 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');
Expand All @@ -64,14 +64,14 @@ class AppEnginePackageMemcache implements PackageCache, UIPackageCache {
@override
Future setPackageData(String package, List<int> 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<String> 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');
Expand All @@ -85,33 +85,33 @@ 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),
]));
}

@override
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<String> 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 {
Expand All @@ -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.
Expand Down