Skip to content

Commit

Permalink
DAOS-16209 control: Add MD-on-SSD response flag to trigger display sw…
Browse files Browse the repository at this point in the history
…itch

Signed-off-by: Tom Nabarro <[email protected]>
  • Loading branch information
tanabarr committed Jan 7, 2025
1 parent da773f5 commit 95f188d
Show file tree
Hide file tree
Showing 11 changed files with 617 additions and 575 deletions.
73 changes: 45 additions & 28 deletions src/control/cmd/daos/pretty/pool.go
Original file line number Diff line number Diff line change
@@ -1,5 +1,6 @@
//
// (C) Copyright 2020-2024 Intel Corporation.
// (C) Copyright 2025 Hewlett Packard Enterprise Development LP
//
// SPDX-License-Identifier: BSD-2-Clause-Patent
//
Expand All @@ -20,36 +21,44 @@ import (

const msgNoPools = "No pools in system"

func printPoolTiers(memFileBytes uint64, suss []*daos.StorageUsageStats, w *txtfmt.ErrWriter, fullStats bool) {
mdOnSSD := memFileBytes != 0
func printPoolTierStats(tierStats *daos.StorageUsageStats, w *txtfmt.ErrWriter, fullStats bool) {
fmt.Fprintf(w, " Total size: %s\n", humanize.Bytes(tierStats.Total))
if fullStats {
fmt.Fprintf(w, " Free: %s, min:%s, max:%s, mean:%s\n",
humanize.Bytes(tierStats.Free), humanize.Bytes(tierStats.Min),
humanize.Bytes(tierStats.Max), humanize.Bytes(tierStats.Mean))
return
}

fmt.Fprintf(w, " Free: %s\n", humanize.Bytes(tierStats.Free))
}

func printPoolTiersPMem(suss []*daos.StorageUsageStats, w *txtfmt.ErrWriter, fullStats bool) {
for tierIdx, tierStats := range suss {
if mdOnSSD {
if tierIdx == 0 {
if fullStats {
fmt.Fprintf(w, "- Total memory-file size: %s\n",
humanize.Bytes(memFileBytes))
}
fmt.Fprintf(w, "- Metadata storage:\n")
} else {
fmt.Fprintf(w, "- Data storage:\n")
}
} else {
if tierIdx >= int(daos.StorageMediaTypeMax) {
// Print unknown type tiers.
tierStats.MediaType = daos.StorageMediaTypeMax
}
fmt.Fprintf(w, "- Storage tier %d (%s):\n", tierIdx,
strings.ToUpper(tierStats.MediaType.String()))
if tierIdx >= int(daos.StorageMediaTypeMax) {
// Print unknown type tiers.
tierStats.MediaType = daos.StorageMediaTypeMax
}
fmt.Fprintf(w, "- Storage tier %d (%s):\n", tierIdx,
strings.ToUpper(tierStats.MediaType.String()))

printPoolTierStats(tierStats, w, fullStats)
}
}

fmt.Fprintf(w, " Total size: %s\n", humanize.Bytes(tierStats.Total))
if fullStats {
fmt.Fprintf(w, " Free: %s, min:%s, max:%s, mean:%s\n",
humanize.Bytes(tierStats.Free), humanize.Bytes(tierStats.Min),
humanize.Bytes(tierStats.Max), humanize.Bytes(tierStats.Mean))
func printPoolTiersMdOnSsd(memFileBytes uint64, suss []*daos.StorageUsageStats, w *txtfmt.ErrWriter, fullStats bool) {
for tierIdx, tierStats := range suss {
if tierIdx == 0 {
if fullStats {
fmt.Fprintf(w, "- Total memory-file size: %s\n",
humanize.Bytes(memFileBytes))
}
fmt.Fprintf(w, "- Metadata storage:\n")
} else {
fmt.Fprintf(w, " Free: %s\n", humanize.Bytes(tierStats.Free))
fmt.Fprintf(w, "- Data storage:\n")
}

printPoolTierStats(tierStats, w, fullStats)
}
}

Expand Down Expand Up @@ -94,7 +103,11 @@ func PrintPoolInfo(pi *daos.PoolInfo, out io.Writer) error {
if pi.QueryMask.HasOption(daos.PoolQueryOptionSpace) && pi.TierStats != nil {
fmt.Fprintln(w, "Pool space info:")
fmt.Fprintf(w, "- Target count:%d\n", pi.ActiveTargets)
printPoolTiers(pi.MemFileBytes, pi.TierStats, w, true)
if pi.MdOnSsdActive {
printPoolTiersMdOnSsd(pi.MemFileBytes, pi.TierStats, w, true)
} else {
printPoolTiersPMem(pi.TierStats, w, true)
}
}
return w.Err
}
Expand All @@ -110,7 +123,11 @@ func PrintPoolQueryTargetInfo(pqti *daos.PoolQueryTargetInfo, out io.Writer) err
// Maintain output compatibility with the `daos pool query-targets` output.
fmt.Fprintf(w, "Target: type %s, state %s\n", pqti.Type, pqti.State)
if pqti.Space != nil {
printPoolTiers(pqti.MemFileBytes, pqti.Space, w, false)
if pqti.MdOnSsdActive {
printPoolTiersMdOnSsd(pqti.MemFileBytes, pqti.Space, w, false)
} else {
printPoolTiersPMem(pqti.Space, w, false)
}
}

return w.Err
Expand Down Expand Up @@ -291,7 +308,7 @@ func printVerbosePoolList(pools []*daos.PoolInfo, out io.Writer) error {
if pool.QueryMask.HasOption(daos.PoolQueryOptionSpace) {
hasSpaceQuery = true
// All pools will have the same PMem/MD-on-SSD mode.
hasMdOnSsd = pool.MemFileBytes != 0
hasMdOnSsd = pool.MdOnSsdActive
}
if pool.QueryMask.HasOption(daos.PoolQueryOptionRebuild) {
hasRebuildQuery = true
Expand Down
21 changes: 14 additions & 7 deletions src/control/cmd/daos/pretty/pool_test.go
Original file line number Diff line number Diff line change
@@ -1,5 +1,6 @@
//
// (C) Copyright 2020-2024 Intel Corporation.
// (C) Copyright 2025 Hewlett Packard Enterprise Development LP
//
// SPDX-License-Identifier: BSD-2-Clause-Patent
//
Expand Down Expand Up @@ -291,6 +292,7 @@ Pool space info:
MediaType: daos.StorageMediaTypeNvme,
},
},
MemFileBytes: humanize.GiByte,
},
expPrintStr: fmt.Sprintf(`
Pool %s, ntarget=2, disabled=1, leader=42, version=100, state=Degraded
Expand Down Expand Up @@ -336,7 +338,8 @@ Pool space info:
MediaType: daos.StorageMediaTypeNvme,
},
},
MemFileBytes: 1,
MemFileBytes: humanize.GiByte,
MdOnSsdActive: true,
},
expPrintStr: fmt.Sprintf(`
Pool %s, ntarget=2, disabled=1, leader=42, version=100, state=Degraded
Expand All @@ -345,7 +348,7 @@ Pool health info:
- Rebuild busy, 42 objs, 21 recs
Pool space info:
- Target count:1
- Total memory-file size: 1 B
- Total memory-file size: 1.1 GB
- Metadata storage:
Total size: 2 B
Free: 1 B, min:0 B, max:0 B, mean:0 B
Expand Down Expand Up @@ -528,6 +531,7 @@ Target: type unknown, state new
MediaType: daos.StorageMediaTypeNvme,
},
},
MemFileBytes: 3000000000,
},
expPrintStr: `
Target: type unknown, state drain
Expand Down Expand Up @@ -555,7 +559,8 @@ Target: type unknown, state drain
MediaType: daos.StorageMediaTypeNvme,
},
},
MemFileBytes: 3000000000,
MemFileBytes: 3000000000,
MdOnSsdActive: true,
},
expPrintStr: `
Target: type unknown, state down_out
Expand Down Expand Up @@ -861,7 +866,8 @@ two 00000002-0002-0002-0002-000000000002 Destroying [3-5] 100 GB 80 GB
Rebuild: &daos.PoolRebuildStatus{
State: daos.PoolRebuildStateBusy,
},
QueryMask: daos.DefaultPoolQueryMask,
QueryMask: daos.DefaultPoolQueryMask,
MemFileBytes: 1,
},
},
verbose: true,
Expand All @@ -872,7 +878,7 @@ one 00000001-0001-0001-0001-000000000001 Degraded [0-2] 100 GB 80 GB 8%
`,
},
"verbose; one pool; mdonssd": {
"verbose; one pool; MD-on-SSD": {
pools: []*daos.PoolInfo{
{
Label: "one",
Expand All @@ -888,8 +894,9 @@ one 00000001-0001-0001-0001-000000000001 Degraded [0-2] 100 GB 80 GB 8%
Rebuild: &daos.PoolRebuildStatus{
State: daos.PoolRebuildStateDone,
},
QueryMask: daos.DefaultPoolQueryMask,
MemFileBytes: 1,
QueryMask: daos.DefaultPoolQueryMask,
MemFileBytes: 1,
MdOnSsdActive: true,
},
},
verbose: true,
Expand Down
7 changes: 4 additions & 3 deletions src/control/cmd/dmg/pretty/pool.go
Original file line number Diff line number Diff line change
@@ -1,5 +1,6 @@
//
// (C) Copyright 2020-2024 Intel Corporation.
// (C) Copyright 2025 Hewlett Packard Enterprise Development LP
//
// SPDX-License-Identifier: BSD-2-Clause-Patent
//
Expand Down Expand Up @@ -76,7 +77,7 @@ func getPoolCreateRespRows(tierBytes []uint64, tierRatios []float64, numRanks in
return
}

func getPoolCreateRespRowsMDOnSSD(tierBytes []uint64, tierRatios []float64, numRanks int, memFileBytes uint64) (title string, rows []txtfmt.TableRow) {
func getPoolCreateRespRowsMdOnSsd(tierBytes []uint64, tierRatios []float64, numRanks int, memFileBytes uint64) (title string, rows []txtfmt.TableRow) {
title = "Pool created with "
tierName := "Metadata"

Expand Down Expand Up @@ -137,8 +138,8 @@ func PrintPoolCreateResponse(pcr *control.PoolCreateResp, out io.Writer, opts ..

var title string
var tierRows []txtfmt.TableRow
if pcr.MemFileBytes > 0 {
title, tierRows = getPoolCreateRespRowsMDOnSSD(pcr.TierBytes, tierRatios, numRanks,
if pcr.MdOnSsdActive {
title, tierRows = getPoolCreateRespRowsMdOnSsd(pcr.TierBytes, tierRatios, numRanks,
pcr.MemFileBytes)
} else {
title, tierRows = getPoolCreateRespRows(pcr.TierBytes, tierRatios, numRanks)
Expand Down
Loading

0 comments on commit 95f188d

Please sign in to comment.