Skip to content

Commit

Permalink
manually parse device id string
Browse files Browse the repository at this point in the history
Signed-off-by: Anton Sergunov <anton.sergunov@flant.com>
  • Loading branch information
asergunov committed Feb 26, 2025
1 parent c6aaac4 commit a9387b1
Show file tree
Hide file tree
Showing 3 changed files with 38 additions and 4 deletions.
12 changes: 9 additions & 3 deletions images/agent/src/internal/controller/llv/reconciler.go
Original file line number Diff line number Diff line change
Expand Up @@ -21,6 +21,7 @@ import (
"errors"
"fmt"
"reflect"
"strconv"
"strings"
"sync"
"time"
Expand Down Expand Up @@ -610,13 +611,18 @@ func (r *Reconciler) deleteLVIfNeeded(ctx context.Context, vgName string, llv *v
r.log.Error(err, fmt.Sprintf("[deleteLVIfNeeded] can't find pool map for LV %s in VG %s", llv.Spec.ActualLVNameOnTheNode, vgName))
return true, err
}
if lv.Data.ThinID == nil {
if lv.Data.ThinID == "" {
err = fmt.Errorf("missing deviceId for thin volume %s", llv.Spec.ActualLVNameOnTheNode)
return true, err
}
ranges, err := utils.ThinVolumeUsedRanges(ctx, r.log, superblock, utils.LVMThinDeviceID(*lv.Data.ThinID))
thinID, err := strconv.Atoi(lv.Data.ThinID)
if err != nil {
err = fmt.Errorf("finding used ranges for deviceId %d in thin pool %s", lv.Data.ThinID, lv.Data.PoolName)
err = fmt.Errorf("deviceId %s is not a number", lv.Data.ThinID)
return true, err
}
ranges, err := utils.ThinVolumeUsedRanges(ctx, r.log, superblock, utils.LVMThinDeviceID(thinID))
if err != nil {
err = fmt.Errorf("finding used ranges for deviceId %d in thin pool %s", thinID, lv.Data.PoolName)
return true, err
}
usedRanges = &ranges
Expand Down
2 changes: 1 addition & 1 deletion images/agent/src/internal/type.go
Original file line number Diff line number Diff line change
Expand Up @@ -157,7 +157,7 @@ type LVData struct {
CopyPercent string `json:"copy_percent"`
ConvertLv string `json:"convert_lv"`
LvTags string `json:"lv_tags"`
ThinID *uint64 `json:"thin_id,omitempty"`
ThinID string `json:"thin_id"`
MetadataLv string `json:"metadata_lv"`
LVDmPath string `json:"lv_dm_path"`
}
Expand Down
28 changes: 28 additions & 0 deletions images/agent/src/internal/utils/commands_test.go
Original file line number Diff line number Diff line change
Expand Up @@ -285,5 +285,33 @@ func TestCommands(t *testing.T) {
assert.Equal(t, string(pv.LVAttr[0]), "t")
}
})

t.Run("Unmarshal_LV_Empty_ThinDeviceID", func(t *testing.T) {
// TODO: Cleanup
js := ` {
"report": [
{
"lv": [
{"lv_name":"[lvol0_pmspare]", "vg_name":"vg-1", "lv_attr":"ewi-------", "lv_size":"4194304", "pool_lv":"", "origin":"", "data_percent":"", "metadata_percent":"", "move_pv":"", "mirror_log":"", "copy_percent":"", "convert_lv":"", "vg_uuid":"QVh4uj-O6Wa-6TT8-XdU7-xCQu-M4gR-x9IY36", "lv_tags":"", "thin_id":"2", "metadata_lv":"", "lv_dm_path":"/dev/mapper/vg--1-lvol0_pmspare"},
{"lv_name":"thin-1", "vg_name":"vg-1", "lv_attr":"twi-a-tz--", "lv_size":"104857600", "pool_lv":"", "origin":"", "data_percent":"0.00", "metadata_percent":"10.84", "move_pv":"", "mirror_log":"", "copy_percent":"", "convert_lv":"", "vg_uuid":"QVh4uj-O6Wa-6TT8-XdU7-xCQu-M4gR-x9IY36", "lv_tags":"", "thin_id":"", "metadata_lv":"[thin-1_tmeta]", "lv_dm_path":"/dev/mapper/vg--1-thin--1"},
{"lv_name":"[thin-1_tdata]", "vg_name":"vg-1", "lv_attr":"Twi-ao----", "lv_size":"104857600", "pool_lv":"", "origin":"", "data_percent":"", "metadata_percent":"", "move_pv":"", "mirror_log":"", "copy_percent":"", "convert_lv":"", "vg_uuid":"QVh4uj-O6Wa-6TT8-XdU7-xCQu-M4gR-x9IY36", "lv_tags":"", "thin_id":"", "metadata_lv":"", "lv_dm_path":"/dev/mapper/vg--1-thin--1_tdata"},
{"lv_name":"[thin-1_tmeta]", "vg_name":"vg-1", "lv_attr":"ewi-ao----", "lv_size":"4194304", "pool_lv":"", "origin":"", "data_percent":"", "metadata_percent":"", "move_pv":"", "mirror_log":"", "copy_percent":"", "convert_lv":"", "vg_uuid":"QVh4uj-O6Wa-6TT8-XdU7-xCQu-M4gR-x9IY36", "lv_tags":"", "thin_id":"", "metadata_lv":"", "lv_dm_path":"/dev/mapper/vg--1-thin--1_tmeta"},
{"lv_name":"thin-5", "vg_name":"vg-1", "lv_attr":"twi-a-tz--", "lv_size":"54525952", "pool_lv":"", "origin":"", "data_percent":"0.00", "metadata_percent":"10.84", "move_pv":"", "mirror_log":"", "copy_percent":"", "convert_lv":"", "vg_uuid":"QVh4uj-O6Wa-6TT8-XdU7-xCQu-M4gR-x9IY36", "lv_tags":"", "thin_id":"", "metadata_lv":"[thin-5_tmeta]", "lv_dm_path":"/dev/mapper/vg--1-thin--5"},
{"lv_name":"[thin-5_tdata]", "vg_name":"vg-1", "lv_attr":"Twi-ao----", "lv_size":"54525952", "pool_lv":"", "origin":"", "data_percent":"", "metadata_percent":"", "move_pv":"", "mirror_log":"", "copy_percent":"", "convert_lv":"", "vg_uuid":"QVh4uj-O6Wa-6TT8-XdU7-xCQu-M4gR-x9IY36", "lv_tags":"", "thin_id":"", "metadata_lv":"", "lv_dm_path":"/dev/mapper/vg--1-thin--5_tdata"},
{"lv_name":"[thin-5_tmeta]", "vg_name":"vg-1", "lv_attr":"ewi-ao----", "lv_size":"4194304", "pool_lv":"", "origin":"", "data_percent":"", "metadata_percent":"", "move_pv":"", "mirror_log":"", "copy_percent":"", "convert_lv":"", "vg_uuid":"QVh4uj-O6Wa-6TT8-XdU7-xCQu-M4gR-x9IY36", "lv_tags":"", "thin_id":"", "metadata_lv":"", "lv_dm_path":"/dev/mapper/vg--1-thin--5_tmeta"}
]
}
]
,
"log": [
]
}
`

pvs, err := unmarshalLVs([]byte(js))
if assert.NoError(t, err) {
assert.Equal(t, "vg-1", pvs[0].VGName)
}
})
})
}

0 comments on commit a9387b1

Please sign in to comment.