| Commit message (Collapse) | Author | Age | Files | Lines |
|
|
|
|
|
| |
This retains the existing behavior of
ActiveSupport::Cache.expand_cache_key (as used by etaging) where the
cache key includes the version.
|
| |
|
|
|
|
|
|
|
|
|
|
|
|
|
| |
tjschuck/require_as_notifications_in_cache"
This reverts commit b86631d9d9f12d834868ff44735ff551668bfb8a, reversing
changes made to 8776a7139757d0b264785c774d4e7f37d4bc1ac7.
ActiveSupport::Notifications is loaded using autoload that is defined by
the top level file of `active_support`. All the frameworks of Rails
requires the top level files before using any of the others files inside
the framework because the top level file is what setup the autoload
hooks and require the common dependencies.
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| |
Right now, if you install the current release version of Active Support (5.0.2) and try to use its cache implementation standalone by requiring `active_support/cache`, it crashes with `NameError: uninitialized constant ActiveSupport::Notifications`. `AS::Notifications` is used in `cache.rb` down around [line 555](https://github.com/rails/rails/blob/8776a7139757d0b264785c774d4e7f37d4bc1ac7/activesupport/lib/active_support/cache.rb#L555).
Here's a quick repro script:
```ruby
require "bundler/inline"
gemfile(true) do
source "https://rubygems.org"
gem "activesupport", "5.0.2"
end
require "active_support/cache"
cache_store = ActiveSupport::Cache::MemoryStore.new
cache_store.write('test', 'okay')
puts cache_store.read('test')
```
However, any version _newer_ than 5.0.2 passes.
This is because [this commit](https://github.com/rails/rails/commit/75924c4517c8f87712d3f59c11f10152ed57b9d8) inadvertently included `AS::Notifications` into `AS::Cache` (thus fixing the issue) by mixing [`AS::Deprecation` into `AS::Duration`](https://github.com/rails/rails/blob/75924c4517c8f87712d3f59c11f10152ed57b9d8/activesupport/lib/active_support/duration.rb#L4), giving you a nice require chain of [`Cache` including `Time`][1] [including `Duration`][2] [including `Deprecation`][3] [including `Behaviors`][4] [including `Notifications`][5]. Phew.
Aside from being not very explicit, the fact that the fixing is specifically done by `AS::Deprecation` means that this fix is probably only temporary (until the deprecation is removed).
This PR just makes the inclusion explicit to future-proof against this breakage.
(Ideally, this would also be backported to `5-0-stable` to get picked up in any subsequent point release.)
See also: https://github.com/rails/rails/pull/14667
[1]: https://github.com/rails/rails/blob/75924c4517c8f87712d3f59c11f10152ed57b9d8/activesupport/lib/active_support/cache.rb#L6
[2]: https://github.com/rails/rails/blob/75924c4517c8f87712d3f59c11f10152ed57b9d8/activesupport/lib/active_support/time.rb#L2
[3]: https://github.com/rails/rails/blob/75924c4517c8f87712d3f59c11f10152ed57b9d8/activesupport/lib/active_support/duration.rb#L4
[4]: https://github.com/rails/rails/blob/75924c4517c8f87712d3f59c11f10152ed57b9d8/activesupport/lib/active_support/deprecation.rb#L16
[5]: https://github.com/rails/rails/blob/75924c4517c8f87712d3f59c11f10152ed57b9d8/activesupport/lib/active_support/deprecation/behaviors.rb#L1
|
|
|
|
|
|
| |
These files are not using `strip_heredoc`.
Closes #27976
|
| |
|
| |
|
| |
|
| |
|
| |
|
|\
| |
| | |
remove unused require `benchmark`
|
| |
| |
| |
| | |
`Benchmark` was removed at 4215e9a
|
|\ \
| | |
| | | |
add check of argument
|
| |/
| |
| |
| |
| |
| |
| | |
`#fetch_multi` in case did not cache hit, to write a cache using the block value.
https://github.com/rails/rails/blob/master/activesupport/lib/active_support/cache.rb#L383..L384
Therefore, block is a need to pass always, I think should check first.
|
|/
|
|
| |
Single backticks don't work with rdoc.
|
|\
| |
| |
| | |
Remove parameter "options = nil" for #clear
|
| |
| |
| |
| |
| |
| | |
Move new CHANGELOG entry top [ci skip]
Remove parameter "options = nil" for #clear
|
| |
| |
| |
| |
| |
| |
| |
| | |
Style/SpaceBeforeBlockBraces
Style/SpaceInsideBlockBraces
Style/SpaceInsideHashLiteralBraces
Fix all violations in the repository.
|
| | |
|
|/
|
|
|
| |
The current code base is not uniform. After some discussion,
we have chosen to go with double quotes by default.
|
|
|
|
|
|
|
|
|
| |
ActiveSupport::Cache::Store#fetch [ci skip]
The related option of this method, `expires_in` is documented
as expecting an `ActiveSupport::Duration` value. To minimize any sort of
ambiguity between duration options, this change also documents
`race_condition_ttl` accepting `ActiveSupport::Duration`.
|
|\
| |
| |
| | |
Fix forced cache miss for fetch when called without a block.
|
| |
| |
| |
| |
| |
| | |
- Raised an argument error if no block is passed to #fetch with
'force: true' option is set.
- Added tests for the same.
|
|\ \
| |/
|/| |
Document consistency [ci skip]
|
| | |
|
|/ |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| |
Reevaluating the log output generated from this instrumentation,
we've found that it wasn't all that useful in practice.
```
Caches multi read:
- views/david/2/4184ab71db6849621a4d8820fcd2c0ad
- views/david/2/4184ab71db6849621a4d8820fcd2c0ad
- views/david/3/4184ab71db6849621a4d8820fcd2c0ad
- views/david/3/4184ab71db6849621a4d8820fcd2c0ad
```
If rendering many templates the output is inscrutable, and it's impossible
to see how many cache misses there were.
Revert ca6aba7f30 and implement a better way later.
|
|\
| |
| |
| |
| |
| | |
[ci skip]
Change output timming of sample code
|
| |
| |
| |
| | |
- Expect returns "new value 1" but, retuns nil, because output at thread is not finished. Move val_1 output to finished thread.
|
|/
|
|
|
|
|
|
| |
Fixes https://github.com/rails/rails/issues/22477.
When I improved the caching instrumentation in
edd33c08d98723ae9bb89cf7f019277117ed6414, I inadvertently changed the
order of AS notifications when there is a cache miss.
|
| |
|
| |
|
|
|
|
| |
this themselves
|
|\
| |
| | |
When testing cache issues, it is useful to log the actual key, including namespace
|
| |
| |
| |
| | |
full key that actually used by the underline cache implementation
|
| |
| |
| |
| |
| | |
Before this change, you couldn't tell if a read was a hit or not when
you called fetch.
|
|/ |
|
|
|
|
| |
an issue with the redis cache, where this code will sometimes throw an error out of SETEX when passing 0 as the `expires_at`.
|
| |
|
| |
|
|
|
|
|
|
|
|
|
|
| |
Adds `read_multi` instrumentation formatted as:
Caches multi read:
- views/david/2/4184ab71db6849621a4d8820fcd2c0ad
- views/david/2/4184ab71db6849621a4d8820fcd2c0ad
- views/david/3/4184ab71db6849621a4d8820fcd2c0ad
- views/david/3/4184ab71db6849621a4d8820fcd2c0ad
|
| |
|
|
|
|
|
|
|
|
|
| |
This code was there just to convert entries generated in Rails
4.0.0.beta1 applications to a supported format.
It is almost unlikely that any existent application have this cache
entry format in their caches at the point that Rails 5 will be released
so we don't need this code anymore.
|
|
|
|
|
|
|
| |
We should convert when @v is defined not @value.
The test was calling value first that already converts the entry so we
are not catching this bug.
|
| |
|
|\
| |
| |
| | |
Always instrument ActiveSupport::Cache
|
|/
|
|
|
|
|
|
| |
The current approach is broken because it uses a thread local value
which means on multi-threaded environments it has to be turned on
per thread. Secondly, ActiveSupport::Notifications does not
instrument items when there are not subscribers so this flag is
unnecessary.
|
|
|
|
|
|
|
| |
The current implementation of `fetch_multi` returns an array and has no
means to easily backtrack which names yielded which results. By changing
the return value to a Hash we retain the name information. Hash#values
can be used on the response if only the values are needed.
|
| |
|
|\ |
|