Commit Graph

32 Commits

Author SHA1 Message Date
Cody Cutrer bb48ac7e15 use built in CacheStore#write_multi instead of re-implementing
refs AE-494

[skip-stages=Flakey]

Change-Id: Ic68a5f2dc4d3ed54af8b09b18597fbe9458ffb95
Reviewed-on: https://gerrit.instructure.com/c/canvas-lms/+/328790
Tested-by: Service Cloud Jenkins <svc.cloudjenkins@instructure.com>
Reviewed-by: Aaron Ogata <aogata@instructure.com>
QA-Review: Cody Cutrer <cody@instructure.com>
Product-Review: Cody Cutrer <cody@instructure.com>
2023-09-27 17:22:40 +00:00
Cody Cutrer 2c344da93a fix consul timeouts
fixes AE-377

 * use a basic timeout of 1 second in canvas_rails_switcher.rb
 * fix configuration of timeouts in dynamic settings (it's just a
   single timeout, not a separate read and write timeout)
 * avoid a circular boot problem when consul fails at boot before
   Canvas::Errors is loaded
 * actually avoid trying to contact Consul at all when the circuit
   breaker has tripped
 * reposition consul fail safes - so that they'll trip the circuit
   breaker if they have to be used

Change-Id: I971beaf0a9982f3f18390b558e71b4b3bc230b16
Reviewed-on: https://gerrit.instructure.com/c/canvas-lms/+/324688
Tested-by: Service Cloud Jenkins <svc.cloudjenkins@instructure.com>
Reviewed-by: Jacob Burroughs <jburroughs@instructure.com>
QA-Review: Cody Cutrer <cody@instructure.com>
Product-Review: Cody Cutrer <cody@instructure.com>
2023-08-11 17:45:40 +00:00
Cody Cutrer be8f098d8d fix rescued exception for consul failsafe cache
Change-Id: Ifcabff13ea130c0a1f95ae0b60decdd0265a3ada
Reviewed-on: https://gerrit.instructure.com/c/canvas-lms/+/323774
Tested-by: Service Cloud Jenkins <svc.cloudjenkins@instructure.com>
Reviewed-by: Jacob Burroughs <jburroughs@instructure.com>
QA-Review: Cody Cutrer <cody@instructure.com>
Product-Review: Cody Cutrer <cody@instructure.com>
2023-07-28 14:42:24 +00:00
Cody Cutrer 3b90b979eb ignore permissions errors when attempting to write to Consul failsafe cache files
refs AE-380

Change-Id: Ib6c29da30883fe07008b17faf4e2f9dc4a08cf75
Reviewed-on: https://gerrit.instructure.com/c/canvas-lms/+/323282
Tested-by: Service Cloud Jenkins <svc.cloudjenkins@instructure.com>
Reviewed-by: Jacob Burroughs <jburroughs@instructure.com>
QA-Review: Cody Cutrer <cody@instructure.com>
Product-Review: Cody Cutrer <cody@instructure.com>
2023-07-27 16:52:01 +00:00
Cody Cutrer 014b010c05 implement failsafe local caching of several Consul settings
either used at boot, or on every request (recaptcha)

refs AE-380

Change-Id: I3e75b6063591c4704a01fda807273ca36a93cb44
Reviewed-on: https://gerrit.instructure.com/c/canvas-lms/+/322308
Tested-by: Service Cloud Jenkins <svc.cloudjenkins@instructure.com>
Reviewed-by: Isaac Moore <isaac.moore@instructure.com>
Reviewed-by: Jacob Burroughs <jburroughs@instructure.com>
QA-Review: Cody Cutrer <cody@instructure.com>
Product-Review: Cody Cutrer <cody@instructure.com>
2023-07-12 14:52:34 +00:00
Jacob Burroughs 7dcc507d0a Rubocop for ruby 3.1
[skip-stages=Flakey]

Change-Id: I6abefdfa9fed6dd4525c8786e93efa548b3710f2
Reviewed-on: https://gerrit.instructure.com/c/canvas-lms/+/319603
Tested-by: Service Cloud Jenkins <svc.cloudjenkins@instructure.com>
Reviewed-by: Isaac Moore <isaac.moore@instructure.com>
QA-Review: Jacob Burroughs <jburroughs@instructure.com>
Product-Review: Jacob Burroughs <jburroughs@instructure.com>
Build-Review: Jacob Burroughs <jburroughs@instructure.com>
Migration-Review: Jacob Burroughs <jburroughs@instructure.com>
2023-06-06 16:44:26 +00:00
Jacob Burroughs 6f0bafa7d1 Remove * from dynamicsettings cache key
Change-Id: If5e931ae6c426fe845e1cb9c6301304f2dd201a4
Reviewed-on: https://gerrit.instructure.com/c/canvas-lms/+/317437
Tested-by: Service Cloud Jenkins <svc.cloudjenkins@instructure.com>
Reviewed-by: Cody Cutrer <cody@instructure.com>
QA-Review: Jacob Burroughs <jburroughs@instructure.com>
Product-Review: Jacob Burroughs <jburroughs@instructure.com>
2023-05-02 17:13:15 +00:00
Cody Cutrer b2b0bff902 rubocop: Style/TernaryParentheses, Style/RedundantParentheses
[skip-stages=Flakey]

Change-Id: I8d860eedd8b199ed3adf0e2bf9162b43096c5347
Reviewed-on: https://gerrit.instructure.com/c/canvas-lms/+/315130
Tested-by: Service Cloud Jenkins <svc.cloudjenkins@instructure.com>
Reviewed-by: Aaron Ogata <aogata@instructure.com>
QA-Review: Cody Cutrer <cody@instructure.com>
Product-Review: Cody Cutrer <cody@instructure.com>
Build-Review: Cody Cutrer <cody@instructure.com>
2023-04-12 14:56:48 +00:00
Cody Cutrer 7c2814caf2 rubocop: Style/ConcatArrayLiterals
Change-Id: I19d66081860377a01fc4c60a947a05765b19ec14
Reviewed-on: https://gerrit.instructure.com/c/canvas-lms/+/315164
Tested-by: Service Cloud Jenkins <svc.cloudjenkins@instructure.com>
Reviewed-by: Aaron Ogata <aogata@instructure.com>
QA-Review: Cody Cutrer <cody@instructure.com>
Product-Review: Cody Cutrer <cody@instructure.com>
2023-04-11 14:48:01 +00:00
Cody Cutrer f46fef5599 rubocop: Style/MapToHash, Style/MapToSet
Change-Id: I75a78a3d86d5875b450d4f32c2f71d8a44a735f4
Reviewed-on: https://gerrit.instructure.com/c/canvas-lms/+/315125
Tested-by: Service Cloud Jenkins <svc.cloudjenkins@instructure.com>
Reviewed-by: Aaron Ogata <aogata@instructure.com>
QA-Review: Cody Cutrer <cody@instructure.com>
Product-Review: Cody Cutrer <cody@instructure.com>
2023-04-11 14:41:55 +00:00
Aaron Ogata 688398d446 remove spammy log
Change-Id: Idc98e6f21bb333147da7b9c20b2e6c4a010324af
Reviewed-on: https://gerrit.instructure.com/c/canvas-lms/+/311696
Tested-by: Service Cloud Jenkins <svc.cloudjenkins@instructure.com>
Reviewed-by: Isaac Moore <isaac.moore@instructure.com>
QA-Review: Aaron Ogata <aogata@instructure.com>
Product-Review: Aaron Ogata <aogata@instructure.com>
2023-02-22 15:47:34 +00:00
Danail Kozhuharov 2a12b050aa Fix faulty Redis-based cache cleanup
During test execution a sequence of tests fail with:
"Only Redis glob strings are supported: /^dynamic_settings\//"

This is because Redis does not support regular expressions
as parameters for "cache.delete_matched(...)"

The accepted format is glob
(see https://redis.io/commands/keys/)

fixes DE-1463
flag=none

test plan:
- existing tests pass and the above error is not found in the flaky failures

Change-Id: I411faef90bb4b0f7b7e3e3ff948453cac23e5a19
Reviewed-on: https://gerrit.instructure.com/c/canvas-lms/+/305400
Tested-by: Service Cloud Jenkins <svc.cloudjenkins@instructure.com>
Reviewed-by: Aaron Ogata <aogata@instructure.com>
QA-Review: Aaron Ogata <aogata@instructure.com>
Product-Review: Aaron Ogata <aogata@instructure.com>
2022-11-16 16:40:53 +00:00
Jacob Burroughs d499d836cb Cache dynamic settings in request cache
fixes FOO-2727

Change-Id: I64c5d7ddaed195a84da93e8b4b49231a7c3a30de
Reviewed-on: https://gerrit.instructure.com/c/canvas-lms/+/286494
Tested-by: Service Cloud Jenkins <svc.cloudjenkins@instructure.com>
Reviewed-by: Ben Rinaca <brinaca@instructure.com>
QA-Review: Jacob Burroughs <jburroughs@instructure.com>
Product-Review: Jacob Burroughs <jburroughs@instructure.com>
2022-03-07 22:38:17 +00:00
Jacob Burroughs bb7797b4ed Revert "Cache dynamic settings in request cache"
This reverts commit b9d45dbc1d.

Reason for revert: breaks prod database.yml because of the to_prepare

Change-Id: I3db4c5cbad77168ede014f9924049f458f05cb3f
Reviewed-on: https://gerrit.instructure.com/c/canvas-lms/+/284097
Reviewed-by: Andrea Cirulli <andrea.cirulli@instructure.com>
Tested-by: Service Cloud Jenkins <svc.cloudjenkins@instructure.com>
QA-Review: Andrea Cirulli <andrea.cirulli@instructure.com>
Product-Review: Andrea Cirulli <andrea.cirulli@instructure.com>
2022-02-15 18:19:12 +00:00
Jacob Burroughs b9d45dbc1d Cache dynamic settings in request cache
Change-Id: I148bc0ebd4b623af650ee27ea6ee73c8ed64c11c
Reviewed-on: https://gerrit.instructure.com/c/canvas-lms/+/284870
Tested-by: Service Cloud Jenkins <svc.cloudjenkins@instructure.com>
Reviewed-by: Ben Rinaca <brinaca@instructure.com>
QA-Review: Jacob Burroughs <jburroughs@instructure.com>
Product-Review: Jacob Burroughs <jburroughs@instructure.com>
2022-02-15 17:02:19 +00:00
Cody Cutrer c2cba46851 RuboCop: Style/StringLiterals, Style/StringLiteralsInInterpolation
[skip-stages=Flakey]

auto-corrected

Change-Id: I4a0145abfd50f126669b20f3deaeae8377bac24d
Reviewed-on: https://gerrit.instructure.com/c/canvas-lms/+/279535
Tested-by: Cody Cutrer <cody@instructure.com>
QA-Review: Cody Cutrer <cody@instructure.com>
Product-Review: Cody Cutrer <cody@instructure.com>
Migration-Review: Cody Cutrer <cody@instructure.com>
Reviewed-by: Jacob Burroughs <jburroughs@instructure.com>
2021-11-25 14:03:06 +00:00
Cody Cutrer 4d43809cae RuboCop: Style/PercentLiteralDelimiters
[skip-stages=Flakey]

auto-corrected, with a post-review looking for multiline strings
to convert to heredocs

Change-Id: I7f7afb11edd63415cde10866822dd2ac5ba0d8be
Reviewed-on: https://gerrit.instructure.com/c/canvas-lms/+/278669
Tested-by: Service Cloud Jenkins <svc.cloudjenkins@instructure.com>
Reviewed-by: Jacob Burroughs <jburroughs@instructure.com>
QA-Review: Cody Cutrer <cody@instructure.com>
Product-Review: Cody Cutrer <cody@instructure.com>
Migration-Review: Cody Cutrer <cody@instructure.com>
2021-11-18 23:05:50 +00:00
Cody Cutrer 80bce90260 RuboCop: Performance
[skip-stages=Flakey]

auto-corrected

Change-Id: I3c37291f9cc0d104b90c4a4e6023d6069954bc37
Reviewed-on: https://gerrit.instructure.com/c/canvas-lms/+/278347
Tested-by: Service Cloud Jenkins <svc.cloudjenkins@instructure.com>
Reviewed-by: Jacob Burroughs <jburroughs@instructure.com>
QA-Review: Cody Cutrer <cody@instructure.com>
Product-Review: Cody Cutrer <cody@instructure.com>
2021-11-17 20:03:38 +00:00
Cody Cutrer ddfd72ca17 RuboCop: Style/RedundantBegin
[skip-stages=Flakey]

auto-corrected

Change-Id: I6a29a9d2fa1057e2278c105a8331d2c79e496897
Reviewed-on: https://gerrit.instructure.com/c/canvas-lms/+/277904
Tested-by: Service Cloud Jenkins <svc.cloudjenkins@instructure.com>
Reviewed-by: Simon Williams <simon@instructure.com>
QA-Review: Cody Cutrer <cody@instructure.com>
Product-Review: Cody Cutrer <cody@instructure.com>
2021-11-11 02:19:27 +00:00
Cody Cutrer 274ea77dff RuboCop: Style/Alias
(auto-correct)

also tweak a couple other cops

Change-Id: I22c7b178d468b5107251437434fcd3d0a4b572f1
Reviewed-on: https://gerrit.instructure.com/c/canvas-lms/+/275260
Tested-by: Service Cloud Jenkins <svc.cloudjenkins@instructure.com>
Reviewed-by: Rob Orton <rob@instructure.com>
QA-Review: Cody Cutrer <cody@instructure.com>
Product-Review: Cody Cutrer <cody@instructure.com>
2021-10-05 21:12:23 +00:00
Evan Battaglia 2489525d5c Fix usage of Diplomat::Kv.txn() part 2
opts (to use the global datacenter) should be used

refs INTEROP-7008
flag=none

Test plan:
- I'm using the updated function to fix up all the regions now, on test,
  beta, and soon prod. (Just getting the keys from iad, pushing global,
  and for each region resetting the cache.)

Change-Id: I08a0de5d541dc7fc9824fbfc2de4e49a7467dd24
Reviewed-on: https://gerrit.instructure.com/c/canvas-lms/+/274905
Reviewed-by: Jacob Burroughs <jburroughs@instructure.com>
QA-Review: Evan Battaglia <ebattaglia@instructure.com>
Product-Review: Evan Battaglia <ebattaglia@instructure.com>
Tested-by: Service Cloud Jenkins <svc.cloudjenkins@instructure.com>
2021-10-01 16:35:01 +00:00
Cody Cutrer dd8fc67c41 RuboCop: Layout gems
Change-Id: Ie49d89234f4ffed27236a1713d072a00f637a253
Reviewed-on: https://gerrit.instructure.com/c/canvas-lms/+/274064
Tested-by: Service Cloud Jenkins <svc.cloudjenkins@instructure.com>
Reviewed-by: Simon Williams <simon@instructure.com>
QA-Review: Cody Cutrer <cody@instructure.com>
Product-Review: Cody Cutrer <cody@instructure.com>
2021-09-22 15:35:24 +00:00
Evan Battaglia 4b20a465de Fix usage of Diplomat::Kv.txn()
It takes string, rather than symbol, keys. This was breaking key
rotation (Lti::KeyStorage and Canvas::Oauth::KeyStorage).

Fixes INTEROP-7008
flag=none

Test plan:
- I copied and pasted the new method definition into beta & prod consoles
  and ran rotate_keys (those were scheduled to be done and just failed
  running today anyway)

Change-Id: I619406d06d4593b49abd80e0cf9a7dee1a52a442
Reviewed-on: https://gerrit.instructure.com/c/canvas-lms/+/272640
Reviewed-by: Jacob Burroughs <jburroughs@instructure.com>
Tested-by: Service Cloud Jenkins <svc.cloudjenkins@instructure.com>
QA-Review: Evan Battaglia <ebattaglia@instructure.com>
Product-Review: Evan Battaglia <ebattaglia@instructure.com>
2021-09-01 18:18:46 +00:00
Cody Cutrer 8acc8f54a6 fix dynamic settings initializer
just load settings from consul.yml to avoid circular references at boot

Change-Id: I405e8541cc46e58f2447d33c87d99d6906da5ca9
Reviewed-on: https://gerrit.instructure.com/c/canvas-lms/+/271102
Tested-by: Service Cloud Jenkins <svc.cloudjenkins@instructure.com>
Reviewed-by: Simon Williams <simon@instructure.com>
QA-Review: Cody Cutrer <cody@instructure.com>
Product-Review: Cody Cutrer <cody@instructure.com>
2021-08-10 19:56:34 +00:00
Cody Cutrer b5945df961 handle consul retries down in DynamicSettings
so that everyone gets the benefits, not just instfs

also include a new circuit breaker so that if consul is unresponsive for more than the
retry interval, we just let failures through quickly for a while

Change-Id: I9ba757c8529c1011ca771612f592f289c6a844b6
Reviewed-on: https://gerrit.instructure.com/c/canvas-lms/+/270789
Tested-by: Service Cloud Jenkins <svc.cloudjenkins@instructure.com>
Reviewed-by: Simon Williams <simon@instructure.com>
QA-Review: Cody Cutrer <cody@instructure.com>
Product-Review: Cody Cutrer <cody@instructure.com>
2021-08-10 15:19:33 +00:00
Cody Cutrer f5d0cc64bc add failsafe option for DynamicSettings
so that we're not re-implementing it at multiple callsites

also remove unused error classes

Change-Id: I938d705729f2208532b4522eddbc8edfa4f2031f
Reviewed-on: https://gerrit.instructure.com/c/canvas-lms/+/269561
Tested-by: Service Cloud Jenkins <svc.cloudjenkins@instructure.com>
Reviewed-by: Jacob Burroughs <jburroughs@instructure.com>
QA-Review: Cody Cutrer <cody@instructure.com>
Product-Review: Cody Cutrer <cody@instructure.com>
2021-08-02 18:27:59 +00:00
Cody Cutrer 4b8056b800 handle more diplomat errors for consul failsafes
Change-Id: Ic2024fb471e05cde1e40329b5063c7d8bc966ed5
Reviewed-on: https://gerrit.instructure.com/c/canvas-lms/+/269555
Reviewed-by: Ethan Vizitei <evizitei@instructure.com>
Tested-by: Service Cloud Jenkins <svc.cloudjenkins@instructure.com>
QA-Review: Cody Cutrer <cody@instructure.com>
Product-Review: Cody Cutrer <cody@instructure.com>
2021-07-20 20:00:26 +00:00
Jacob Burroughs fae809a968 Fix consul recursion with 1 return
Change-Id: I5c1a9f260afc56887881f98cdab08ad3a25c45f3
Reviewed-on: https://gerrit.instructure.com/c/canvas-lms/+/263980
Reviewed-by: Simon Williams <simon@instructure.com>
Tested-by: Service Cloud Jenkins <svc.cloudjenkins@instructure.com>
QA-Review: Jacob Burroughs <jburroughs@instructure.com>
Product-Review: Jacob Burroughs <jburroughs@instructure.com>
2021-04-30 16:38:32 +00:00
Jacob Burroughs 5f02893cb5 Fix diplomat recursion
Since we cache by full key anyway, there is no good reason
to convert it into a recursive hash only to convert it right back

Change-Id: Ifb356e38a2ac5e6e0477ebc5913e0d9128622489
Reviewed-on: https://gerrit.instructure.com/c/canvas-lms/+/263932
Reviewed-by: Ethan Vizitei <evizitei@instructure.com>
Tested-by: Service Cloud Jenkins <svc.cloudjenkins@instructure.com>
QA-Review: Jacob Burroughs <jburroughs@instructure.com>
Product-Review: Jacob Burroughs <jburroughs@instructure.com>
2021-04-29 19:53:43 +00:00
Jacob Burroughs bca8bd4629 Migrate to diplomat
Change-Id: I82363dedbd2397830a9beadf33b1cc59123136c8
Reviewed-on: https://gerrit.instructure.com/c/canvas-lms/+/263429
Reviewed-by: Cody Cutrer <cody@instructure.com>
Tested-by: Service Cloud Jenkins <svc.cloudjenkins@instructure.com>
QA-Review: Jacob Burroughs <jburroughs@instructure.com>
Product-Review: Jacob Burroughs <jburroughs@instructure.com>
2021-04-29 17:00:51 +00:00
Ethan Vizitei 82d824c587 default dynamic_settings logger to Rails.logger
Some parts of the app depend on parsing
STDOUT, which can result in surprises
if we put things in STDOUT because of
an unexpected initialization order.

Change-Id: Iab12602861d7e32fa5aea5c1a71dd05d0005b89b
Reviewed-on: https://gerrit.instructure.com/c/canvas-lms/+/259943
Reviewed-by: Jacob Burroughs <jburroughs@instructure.com>
Tested-by: Service Cloud Jenkins <svc.cloudjenkins@instructure.com>
QA-Review: Ethan Vizitei <evizitei@instructure.com>
Product-Review: Ethan Vizitei <evizitei@instructure.com>
2021-03-04 20:40:02 +00:00
Ethan Vizitei 68487bf761 extract dynamic settings to it's own gem
refs FOO-1615
flag=none

first step of verifying modularization path for
chunks of behavior inside canvas.

take a dependency on config_file to minimize
unnecessary injection

move initialization of dynamic_settings to one place.
leave pointer in previous initializer file.

TEST PLAN:
  1) nothing changes at runtime
  2) dynamic settings specs can be run
     quickly on their own

Change-Id: I1bfbd5b8dfedb9835953d9fc663259c17b76ce7f
Reviewed-on: https://gerrit.instructure.com/c/canvas-lms/+/258762
Tested-by: Service Cloud Jenkins <svc.cloudjenkins@instructure.com>
Reviewed-by: Jacob Burroughs <jburroughs@instructure.com>
QA-Review: Ethan Vizitei <evizitei@instructure.com>
Product-Review: Ethan Vizitei <evizitei@instructure.com>
2021-03-01 19:18:01 +00:00