Cb-tumblebug: Error can occur in using `ListVmId`

Created on 10 Jun 2021  ยท  2Comments  ยท  Source: cloud-barista/cb-tumblebug

  • Related issues:

    • #546 (ListVmId returns not-prefix-trimmed vmID)

    • #576 (Malformed 'vmId' could be set)

What happened
:

/ns/ns-01/mcis/mock-seoul-jhseo1/vm/mock-seoul-jhseo1-0 ๋ผ๋Š” ์ž์›๋“ค์ด ์žˆ๋Š” ์ƒํƒœ์—์„œ

[์˜ฌ๋ฐ”๋ฅธ ์กฐํšŒ]

โฏ ./id-list-vm.sh mock 1 jhseo1
####################################################################
## 8. VM: List ID
####################################################################
mock-seoul-jhseo1
{
  "idList": [
    "mock-seoul-jhseo1-0"
  ]
}

[์˜ฌ๋ฐ”๋ฅด์ง€ ์•Š์€ ์กฐํšŒ]

โฏ ./id-list-vm.sh mock 1 jhseo
####################################################################
## 8. VM: List ID
####################################################################
mock-seoul-jhseo
{
  "idList": [
    "/ns/ns-01/mcis/mock-seoul-jhseo1/vm/mock-seoul-jhseo1-0"
  ]
}

-> Not found ๊ฐ€ ๋‚˜์™€์•ผ ์ •์ƒ์ธ๋ฐ,
์กฐํšŒ๋˜์ง€ ์•Š์•„์•ผ ํ•˜๋Š” ์ž์›์ด ์กฐํšŒ๋˜๊ณ ,
VM ID ๋งŒ ์ถœ๋ ฅํ•˜๋Š” ๊ฒƒ์ด ์•„๋‹ˆ๋ผ Key-Value store ์˜ Key ์ „์ฒด๊ฐ€ ์ถœ๋ ฅ๋จ

Key-Value store ์‚ฌ์šฉ์ƒ์˜ ์ด์Šˆ๋กœ ์ถ”์ •๋จ

What you expected to happen
:

How to reproduce it (as minimally and precisely as possible)
:

Anything else we need to know?
:

Environment

  • Source version or branch:
  • OS:
  • Others:

Proposed solution
:

Any other context
:

bug

Most helpful comment

@jihoon-seo ์˜ค๋ฅ˜ ๋ถ„์„ ์™„๋ฃŒํ•˜์˜€์Šต๋‹ˆ๋‹ค.

keyValue, err := common.CBStore.GetList(key, true) 

๋กœ ์กฐํšŒ ํ›„,

์•„๋ž˜์™€ ๊ฐ™์ด, ๋ฆฌ์ŠคํŠธ๋ฅผ ์ •๋ฆฌํ•˜๋Š”๋ฐ,

    for _, v := range keyValue {
        if strings.Contains(v.Key, "/vm/") {
            vmList = append(vmList, strings.TrimPrefix(v.Key, (key+"/vm/")))
        }
    }

์˜ค๋ฅ˜๊ฐ€ ๋ฐœ์ƒํ•  ์ˆ˜ ์žˆ๋Š” ์ƒํ™ฉ์ด ๋ณด์ด๋„ค์š”.

mcis ์ด๋ฆ„์œผ๋กœ key ์กฐํšŒ๋ฅผ ํ•˜๋ฉด, ๊ด€๋ จ mcis ์— ๋Œ€ํ•œ key ๋“ค๋งŒ ๋‚˜์˜ฌ ๊ฒƒ์ด๋ผ๊ณ  ๋ดค์œผ๋‚˜,

์˜ˆ๋ฅผ ๋“ค์–ด,
์กฐํšŒํ•˜๋Š” mcis ๊ฐ€ m-ali-is ์ด๊ณ 

m-ali-is-expert, m-ali-is ์ด๋ฆ„์— prefix ๊ด€๊ณ„๊ฐ€ ์žˆ๋Š” 2๊ฐœ์˜ mcis๊ฐ€ ์žˆ๋Š” ์ƒํ™ฉ์ด๋ผ๋ฉด,

CBStore.GetList ๋ฅผ ํ–ˆ์„ ๋•Œ, ์•„๋ž˜์™€ ๊ฐ™์ด ๋ฆฌ์ŠคํŠธ๊ฐ€ ์กฐํšŒ๋˜๊ณ ,

{
  "object": [
    "/ns/mz-cbweb99/mcis/m-ali-is",
    "/ns/mz-cbweb99/mcis/m-ali-is-expert",
    "/ns/mz-cbweb99/mcis/m-ali-is-expert/vm/m-ali-is-server-expert",
    "/ns/mz-cbweb99/mcis/m-ali-is/vm/m-ali-is-server"
  ]
}

์—ฌ๊ธฐ์„œ vm ๋ฆฌ์ŠคํŠธ๋ฅผ ๋ฝ‘์•„๋‚ด๊ธฐ ์œ„ํ•ด์„œ
/vm/ ์ด ํฌํ•จ๋œ ์กฐ๊ฑด๋งŒ ๋ณด๊ฒŒ ๋˜๋ฉด.

(์ค‘๊ฐ„) ๊ฒฐ๊ณผ์ ์œผ๋กœ

  • /ns/mz-cbweb99/mcis/m-ali-is/vm/m-ali-is-server (์ •์ƒ์ ์ธ vm key)
  • /ns/mz-cbweb99/mcis/m-ali-is-expert/vm/m-ali-is-server-expert (์ ํ•ฉํ•˜์ง€ ์•Š์€ vm key)

๊ฐ€ ํฌํ•จ๋ฉ๋‹ˆ๋‹ค.

๊ทธ๋ฆฌ๊ณ  /vm/์„ ๊ธฐ์ค€์œผ๋กœ trim์„ ํ•˜๊ฒŒ ๋˜๋Š”๋ฐ,
/ns/mz-cbweb99/mcis/m-ali-is/vm/ ๋Š” ๋ฌธ์ œ ์—†์ด trim์ด ๋˜์–ด m-ali-is-server ๋ฅผ ๋ฝ‘์•„๋‚ด๊ฒŒ ๋˜๊ณ 

/ns/mz-cbweb99/mcis/m-ali-is-expert/vm/m-ali-is-server-expert ๋Š” /vm/์œผ๋กœ ์‹œ์ž‘ ํ•˜์ง€ ์•Š์•„์„œ trim์ด ์ •์ƒ์ ์œผ๋กœ ๋˜์ง€ ์•Š์„ ๊ฒƒ ์ž…๋‹ˆ๋‹ค. ์‚ฌ์šฉํ•˜๋Š” strings.TrimPrefix() ํ•จ์ˆ˜๋ฅผ ๋ณด๋‹ˆ,
์ •์ƒ์ ์ธ trim์ด ๋˜์ง€ ์•Š์œผ๋ฉด, ๊ทธ๋ƒฅ ์ „์ฒด ๊ฐ’์„ ๋ฆฌํ„ดํ•˜๋„ค์š”. ์ฆ‰ /ns/mz-cbweb99/mcis/m-ali-is-expert/vm/m-ali-is-server-expert ๋ฅผ ํ†ต์ฑ„๋กœ ๋ฆฌํ„ดํ•˜๊ฒŒ ๋˜๊ณ ,

func strings.TrimPrefix(s string, prefix string) string
strings.TrimPrefix on pkg.go.dev

TrimPrefix returns s without the provided leading prefix string. If s doesn't start with prefix, s is returned unchanged.

/ns/mz-cbweb99/mcis/m-ali-is-expert/vm/m-ali-is-server-expert ๊ฐ€ ๋งˆ์น˜ vm์˜ id ์ฒ˜๋Ÿผ ์ธ์‹ํ•˜๊ฒŒ ๋ฉ๋‹ˆ๋‹ค.

๊ฒฐ๊ณผ์ ์œผ๋กœ

  • /ns/mz-cbweb99/mcis/m-ali-is/vm/m-ali-is-server
  • /ns/mz-cbweb99/mcis/m-ali-is/vm//ns/mz-cbweb99/mcis/m-ali-is-expert/vm/m-ali-is-server-expert

๊ฐ€ ๋งŒ๋“ค์–ด์ง‘๋‹ˆ๋‹ค.

All 2 comments

@jihoon-seo

cb-store๊ฐ€ ์ œ๊ณตํ•˜๋Š” API ๊ธฐ๋Šฅ์€ ๋‹ค์Œ๊ณผ ๊ฐ™์Šต๋‹ˆ๋‹ค.

  • cb-sore: GetList("/xxx")

    • "/xxx"๋ฅผ prefix๋กœ(์•ž์—์„œ๋ถ€ํ„ฐ) ๋งŒ์กฑํ•˜๋Š”(ํฌํ•จํ•˜๋Š”) ๋ชจ๋“  ํ‚ค fetch
    • ๊ธฐ๋Šฅ์œผ๋กœ ๋ณด๋ฉด, API ์ด๋ฆ„์ด GetList๋ณด๋‹ค๋Š” PrefixFind ๋“ฑ์ด ์ ํ•ฉํ•˜๊ธด ํ•˜๋„ค์š”
    • cb-store: Get(/xxx")
    • "/xxx" ๋™์ผํ•œ ํ‚ค๋งŒ fetch
  • ์œ„์™€ ๊ฐ™์€ ์˜๋„์˜ ๊ธฐ๋Šฅ์€

    • GetList()์™€ Get()์„ ์กฐํ•ฉํ•˜๋ฉด ๋ ๋“ฏํ•ฉ๋‹ˆ๋‹ค.

@jihoon-seo ์˜ค๋ฅ˜ ๋ถ„์„ ์™„๋ฃŒํ•˜์˜€์Šต๋‹ˆ๋‹ค.

keyValue, err := common.CBStore.GetList(key, true) 

๋กœ ์กฐํšŒ ํ›„,

์•„๋ž˜์™€ ๊ฐ™์ด, ๋ฆฌ์ŠคํŠธ๋ฅผ ์ •๋ฆฌํ•˜๋Š”๋ฐ,

    for _, v := range keyValue {
        if strings.Contains(v.Key, "/vm/") {
            vmList = append(vmList, strings.TrimPrefix(v.Key, (key+"/vm/")))
        }
    }

์˜ค๋ฅ˜๊ฐ€ ๋ฐœ์ƒํ•  ์ˆ˜ ์žˆ๋Š” ์ƒํ™ฉ์ด ๋ณด์ด๋„ค์š”.

mcis ์ด๋ฆ„์œผ๋กœ key ์กฐํšŒ๋ฅผ ํ•˜๋ฉด, ๊ด€๋ จ mcis ์— ๋Œ€ํ•œ key ๋“ค๋งŒ ๋‚˜์˜ฌ ๊ฒƒ์ด๋ผ๊ณ  ๋ดค์œผ๋‚˜,

์˜ˆ๋ฅผ ๋“ค์–ด,
์กฐํšŒํ•˜๋Š” mcis ๊ฐ€ m-ali-is ์ด๊ณ 

m-ali-is-expert, m-ali-is ์ด๋ฆ„์— prefix ๊ด€๊ณ„๊ฐ€ ์žˆ๋Š” 2๊ฐœ์˜ mcis๊ฐ€ ์žˆ๋Š” ์ƒํ™ฉ์ด๋ผ๋ฉด,

CBStore.GetList ๋ฅผ ํ–ˆ์„ ๋•Œ, ์•„๋ž˜์™€ ๊ฐ™์ด ๋ฆฌ์ŠคํŠธ๊ฐ€ ์กฐํšŒ๋˜๊ณ ,

{
  "object": [
    "/ns/mz-cbweb99/mcis/m-ali-is",
    "/ns/mz-cbweb99/mcis/m-ali-is-expert",
    "/ns/mz-cbweb99/mcis/m-ali-is-expert/vm/m-ali-is-server-expert",
    "/ns/mz-cbweb99/mcis/m-ali-is/vm/m-ali-is-server"
  ]
}

์—ฌ๊ธฐ์„œ vm ๋ฆฌ์ŠคํŠธ๋ฅผ ๋ฝ‘์•„๋‚ด๊ธฐ ์œ„ํ•ด์„œ
/vm/ ์ด ํฌํ•จ๋œ ์กฐ๊ฑด๋งŒ ๋ณด๊ฒŒ ๋˜๋ฉด.

(์ค‘๊ฐ„) ๊ฒฐ๊ณผ์ ์œผ๋กœ

  • /ns/mz-cbweb99/mcis/m-ali-is/vm/m-ali-is-server (์ •์ƒ์ ์ธ vm key)
  • /ns/mz-cbweb99/mcis/m-ali-is-expert/vm/m-ali-is-server-expert (์ ํ•ฉํ•˜์ง€ ์•Š์€ vm key)

๊ฐ€ ํฌํ•จ๋ฉ๋‹ˆ๋‹ค.

๊ทธ๋ฆฌ๊ณ  /vm/์„ ๊ธฐ์ค€์œผ๋กœ trim์„ ํ•˜๊ฒŒ ๋˜๋Š”๋ฐ,
/ns/mz-cbweb99/mcis/m-ali-is/vm/ ๋Š” ๋ฌธ์ œ ์—†์ด trim์ด ๋˜์–ด m-ali-is-server ๋ฅผ ๋ฝ‘์•„๋‚ด๊ฒŒ ๋˜๊ณ 

/ns/mz-cbweb99/mcis/m-ali-is-expert/vm/m-ali-is-server-expert ๋Š” /vm/์œผ๋กœ ์‹œ์ž‘ ํ•˜์ง€ ์•Š์•„์„œ trim์ด ์ •์ƒ์ ์œผ๋กœ ๋˜์ง€ ์•Š์„ ๊ฒƒ ์ž…๋‹ˆ๋‹ค. ์‚ฌ์šฉํ•˜๋Š” strings.TrimPrefix() ํ•จ์ˆ˜๋ฅผ ๋ณด๋‹ˆ,
์ •์ƒ์ ์ธ trim์ด ๋˜์ง€ ์•Š์œผ๋ฉด, ๊ทธ๋ƒฅ ์ „์ฒด ๊ฐ’์„ ๋ฆฌํ„ดํ•˜๋„ค์š”. ์ฆ‰ /ns/mz-cbweb99/mcis/m-ali-is-expert/vm/m-ali-is-server-expert ๋ฅผ ํ†ต์ฑ„๋กœ ๋ฆฌํ„ดํ•˜๊ฒŒ ๋˜๊ณ ,

func strings.TrimPrefix(s string, prefix string) string
strings.TrimPrefix on pkg.go.dev

TrimPrefix returns s without the provided leading prefix string. If s doesn't start with prefix, s is returned unchanged.

/ns/mz-cbweb99/mcis/m-ali-is-expert/vm/m-ali-is-server-expert ๊ฐ€ ๋งˆ์น˜ vm์˜ id ์ฒ˜๋Ÿผ ์ธ์‹ํ•˜๊ฒŒ ๋ฉ๋‹ˆ๋‹ค.

๊ฒฐ๊ณผ์ ์œผ๋กœ

  • /ns/mz-cbweb99/mcis/m-ali-is/vm/m-ali-is-server
  • /ns/mz-cbweb99/mcis/m-ali-is/vm//ns/mz-cbweb99/mcis/m-ali-is-expert/vm/m-ali-is-server-expert

๊ฐ€ ๋งŒ๋“ค์–ด์ง‘๋‹ˆ๋‹ค.

Was this page helpful?
0 / 5 - 0 ratings

Related issues

seokho-son picture seokho-son  ยท  5Comments

jihoon-seo picture jihoon-seo  ยท  6Comments

seokho-son picture seokho-son  ยท  5Comments

seokho-son picture seokho-son  ยท  5Comments

seokho-son picture seokho-son  ยท  5Comments