Permalink
Browse files

PERF: simplify and shrink the translation cache

FIX: leaking objects into the translation cache causing sidekiq to grow
  • Loading branch information...
SamSaffron committed Mar 30, 2015
1 parent 586cca3 commit 830ce05fe64fd310d26d7da87ea6e4076696b7c8
@@ -25,8 +25,9 @@ def description

protected

def i18n(field, vars={})
I18n.t("post_action_types.#{object.name_key}.#{field}", vars)
def i18n(field, vars=nil)
key = "post_action_types.#{object.name_key}.#{field}"
vars ? I18n.t(key, vars) : I18n.t(key)
end

end
@@ -2,8 +2,9 @@ class TopicFlagTypeSerializer < PostActionTypeSerializer

protected

def i18n(field, vars={})
I18n.t("topic_flag_types.#{object.name_key}.#{field}", vars)
def i18n(field, vars=nil)
key = "topic_flag_types.#{object.name_key}.#{field}"
vars ? I18n.t(key,vars) : I18n.t(key)
end

end
@@ -34,7 +34,7 @@ def load_translations(*filenames)
class << self
alias_method :translate_no_cache, :translate
alias_method :reload_no_cache!, :reload!
LRU_CACHE_SIZE = 2000
LRU_CACHE_SIZE = 300

def reload!
@loaded_locales = []
@@ -59,25 +59,16 @@ def load_locale(locale)
end
end

def translate(*args)
def translate(key, *args)
load_locale(config.locale) unless @loaded_locales.include?(config.locale)
return translate_no_cache(key, *args) if args.length > 0

@cache ||= LruRedux::ThreadSafeCache.new(LRU_CACHE_SIZE)
found = true
k = [args, config.locale, config.backend.object_id]
t = @cache.fetch(k) { found = false }
unless found
load_locale(config.locale) unless @loaded_locales.include?(config.locale)
begin
t = translate_no_cache(*args)
rescue MissingInterpolationArgument
options = args.last.is_a?(Hash) ? args.pop.dup : {}
options.merge!(locale: config.default_locale)
key = args.shift
t = translate_no_cache(key, options)
ensure
t = @cache[k] = t.freeze
end
k = "#{key}#{config.locale}#{config.backend.object_id}"

@cache.getset(k) do
translate_no_cache(key).freeze
end
t
end

alias_method :t, :translate

0 comments on commit 830ce05

Please sign in to comment.