https://bugzilla.redhat.com/show_bug.cgi?id=1603615 indicates
a case when pg calc conflicts with mon_max_pg_per_osd, and does not
allow pool creation when this limit is 200. Hence, increase this limit
to avoid this.
mgr/dashboard: Color variables for color codes
Assign variables to colors present in css files
Changed navigation icons padding because the notification dropdown was going out of window. Fixes: http://tracker.ceph.com/issues/24575 Signed-off-by: Kanika Murarka <kmurarka@redhat.com>
c-ares is a C library for asynchronous DNS requests, seastar requires
c-ares 1.13.0 or up. but xenial and EPEL offer 1.10.0, so we need to
build and ship it as part of Ceph.
common/config: change md_config_obs_impl's template param to ConfigProxy
we were using LockPolicy as this tempalte class's template parameter,
but turns out ConfigProxy is a better parameter for it. as ConfigProxy is
"closer" to md_config_obs_impl than LockPolicy is.
common/config: change md_config_impl<> back to plain class
now that all of the variables that change depending on seastar/alien
have been extracted out of md_config_impl<>, there is no need to make it
a template anymore.
* ceph.spec.in: c-ares-devel and fmt-devel are installed as
dependencies fo seastar.
* install-deps.sh: libfmt-dev is missing in xenial, so we only
install libc-ares-dev for ubuntu in install-deps.sh .
* cmake: build libfmt if it's not found.
libfmt is a library for fast printf() support in C++, it is used by
seastar. but it's missing in xenial. so we need to ship it in our dist
tarball and build if if it's not found in system.
common/config: extract ObserverMgr from md_config_impl<>
crimson will have sharded<PGShard> (name may vary in future), and
underlying ObjectStore instances. they will be consumers of crimson
ConfigProxy, and will register them as an observer of config changes.
but as always, in crimson osd, world is sharded, each ConfigProxy will
only take care of the sharded services living on the shard which it is
in charge of. in other words, unlike alien's ConfigProxy, the
"observers" data structure is not shared, they are sharded as well. so
we need to extract the observers out of md_config_impl<>, and move it
into ConfigProxy.
This, in turn, means that when jewel tunables are set we do not actually
encode the jewel tunables. At least, luminous doesn't; jewel uses a
different code path to decode how to encode the OSDMap.
This, in turn, leads to crc errors:
- luminous mons running
- require_osd_release is jewel
- jewel tunables are set. mon in-memory crushmap gets chooseleaf_stable=1
- osds are luminous, but don't see the new field in the crushmap
- upgrade finishes, and require_osd_Release becomes luminous
- the full osdmap encodes the chooseleaf_stable field, finally, and it
is 1
- the osds try to encode the same thing, but their crushmap has 0.
-> crc mismatch
common/config: extract "changed" from md_config_impl<> to ConfigValues
for the same reason why we moved ObserverMgr out of md_config_impl<>,
"changed" cannot be shared among shards, we should move "changed" out of
md_config_impl. we can put "changed" into ConfigValues or
ConfigProxy, IMHO, it would be simpler if "changed" resides in
ConfigValues: less fragmented this way.
common/config: move _apply_changes() calls up into ConfigProxy
see also the previous the commit, to reuse injectargs() and
set_mon_vals() in seastar's ConfigProxy, we need to move apply_changes()
call out of them, as this call is implemented differently in seastar's
ConfigProxy.
finalize_reexpand_meta() is not used by OSD at this moment, so we leave
it as it is for now.
* move _apply_changes() calls up into ConfigProxy
* move update_legacy_vals() out of _apply_changes() into the
callers of the latter. as it changes "values", in seastar's ConfigProxy,
it belongs to the first step of changing a config value
common/config: promote lock from md_config_t to ConfigProxy
seastar's ConfigProxy and alien's ConfigProxy follow different threading
models and expose different methods. the former updates a setting with 3
steps:
1. create a local copy of current setting, and apply the proposed change
to the copy
2. populate the updated change with a foreign_ptr<> to all shards
(including itself)
3. on each shards, call apply_changes() to get the interested observers
updated, please note, apply_changes() should only update the local
observers on current shard.
while the alien's ConfigProxy do all the job in a single synchronized
call,
but we can split it into a finer-grained steps:
1. apply the proposed change in-place
2. apply_changes() to get the interested observers updated.
so, to reuse the code across these two implementations, for instance,
set_mon_vals() will be implemented in ConfigProxy instead, so we can
have different behavior in different ConfigProxy classes. if we keep
using the existing single-piece md_config_t::set_mon_vals(), we have no
chance to differentiate the apply_changes() for seastar port. but the
alien implementation requires a grand lock protecting set_val() and
apply_changes(), so we have to move the lock from md_config_t up to
ConfigProxy. it's also simpler this way, as we don't need an extra layer
to have a dummy Mutex for seastar's ConfigProxy. as only the alien's
ConfigProxy requires the lock.
mgr/dashboard: Remove angular build progress logs during cmake
Currently Angular CLI is polluting the jenkins logs, by inserting a new line
each time the build process is updated.
With this change Angular CLI will only output the necessary information about
the start and end of the build.
mgr/dashboard: Hide progress bar in case of an error
- Enhance datatable to handle loading errors.
- Add warning panel component
- Modify the icon of the error panel component
- Use cd-[info|warning|error]-panel in the cd-view-cache component
example/librados: remove dependency on Boost system library
109e6022beb0920f2a4746bd8c541e975494f251 introduced "-lboost_system" into
example/librados/Makefile but the Boost system library is no longer required
to compile and link hello_world.cc.
Nathan Cutler [Mon, 12 Feb 2018 16:05:35 +0000 (17:05 +0100)]
build/ops: rpm: provide files moved from ceph-test
d7b493a7108a68302bc0f48337bf3c253a720266 moved three binaries from the
ceph-test package to other packages, causing trouble with upgrades in
test lab environments (users typically do not install the ceph-test
package).
While the original upgrade troubles have already been addressed, RPM
has a "Provides" mechanism for easing the pain, so it makes sense to
use it.
John Spray [Tue, 10 Jul 2018 16:40:49 +0000 (12:40 -0400)]
mgr: generic self test command
Avoid need for each module to expose a self-test
command: they can just implement the method,
and then get it called via the selftest module.
As well as fewer LOC, this means that the self
test commands are not cluttering the interface
for end users, as they've invisible until
the selftest module is loaded.
John Spray [Thu, 14 Dec 2017 11:24:18 +0000 (06:24 -0500)]
mgr: enable inter-module calls
This is being done by passing native CPython objects
back and forth. It's safe because sub-interpreters in CPython
share memory allocation infrastructure and share the GIL.
With a view to PEP554, we limit inter-interpreter calls
to pickleable objects, so that this may be implemented
using byte-arrays in future.
This infrastructure should enable:
- the dashboard to display the status of other modules, for
example the set of progress indicators from `progress`
- dashboard and restful to share an underlying long running
job mechanism.