On Wed, 2019-08-28 at 21:16 +0000, Verma, Vishal L wrote:
On Wed, 2019-08-28 at 13:47 -0700, Scargall, Steve wrote:
> Hi Jeff,
>
> The issue is more of repetition. On an 8-socket system, should a
> user really be expected to type 'ndctl create-namespace' eight times
> vs. running 'ndctl create-namespace --region=all' once? SAP HANA is
> an example app the requires one namespace per region. Scripting is a
> viable solution, but that requires somebody to write the script and do
> all the error checking & handling. Each OEM/ISV/SysAdmin would have
> their own script. Pushing the logic to ndctl seems to be a reasonable
> approach and let the user handle any errors returned by ndctl.
A scripted solution can indeed be really simple - e.g.:
# while read -r region; do ndctl create-namespace --region="$region";
done < <(ndctl list --bus=nfit_test.0 -R | jq -r '.[].dev')
{
"dev":"namespace5.0",
"mode":"fsdax",
"map":"dev",
"size":"62.00 MiB (65.01 MB)",
"uuid":"c8014457-c268-4f22-8eae-6386fbf08ceb",
"sector_size":512,
"align":2097152,
"blockdev":"pmem5"
}
{
"dev":"namespace4.0",
"mode":"fsdax",
"map":"dev",
"size":"30.00 MiB (31.46 MB)",
"uuid":"f9498ef6-cdd6-46c7-95f1-86469546ecb9",
"sector_size":512,
"align":2097152,
"blockdev":"pmem4"
}
> The ndctl-man-page implies the 'ndctl create-namespace --region=all'
> feature exists today:
>
> -r, --region=
>
> A regionX device name, or a region id number. The keyword
> all can be specified to carry out the operation on every region in the
> system, optionally filtered by bus id (see --bus= option).
>
This is true, but unfortunately, the implementation has treated create-
namespace as an exception to this since the start, and I agree with Jeff
that changing its behavior now can cause other Hyrum's law-esqe [1]
breakage.
I think however it should be easy to make a compromise, and retain the
legacy behavior of create-namespace, while creating a new create-
namespace-greedy command with the new semantics.
.. And it doesn't even need to be a new command, a simple --greedy
option to create-namespace should be sufficient.