cells icon indicating copy to clipboard operation
cells copied to clipboard

Default cache key produces clashes

Open samstickland opened this issue 5 years ago • 4 comments

If there are two cells in the same namespace the same cache will be produced by default, which of course causes all sorts of problems in production.

In caching.rb we have:

def state_cache_key(state, key_parts={})
  expand_cache_key([controller_path, state, key_parts])
end

https://github.com/trailblazer/cells/blob/master/lib/cell/caching.rb#L30

And in cell.rb

def controller_path
  @controller_path ||= File.join(util.underscore(name.sub(/(::Cell.+)/, '')), views_dir)
end

https://github.com/trailblazer/trailblazer-cells/blob/master/lib/trailblazer/cell.rb#L36

This means that a cells called SomeNamespace::Cell::One and SomeNamespace::Cell::Two will produce the same controller_path and hence the same cache key.

I can't see why we simply wouldn't the class name for cache key?

Our workaround for this is currently:

cache :show do
  self.class.name
end

etc.

I think the first code should be:

def state_cache_key(state, key_parts={})
  expand_cache_key([self.class.name, state, key_parts])
end

samstickland avatar Jan 15 '21 18:01 samstickland

As example, this was the result of a cache key clash in production!

image

samstickland avatar Jan 15 '21 18:01 samstickland

@samstickland Thanks for reporting this! Created #494 for same but with the difference of using snake case style for naming instead of direct class names.

yogeshjain999 avatar Jun 13 '21 18:06 yogeshjain999

@yogeshjain999 also found https://github.com/trailblazer/trailblazer-cells/issues/13 which is a the same bug.

apotonick avatar Jun 22 '21 07:06 apotonick

@yogeshjain999 Can't we fix this in Trailblazer::Cell? I think it's a problem there and not in the cells gem?

apotonick avatar Jun 22 '21 07:06 apotonick