Lorawan-stack: ์‚ญ์ œ๋œ ๊ฒŒ์ดํŠธ์›จ์ด์˜ EUI ์žฌ์‚ฌ์šฉ

์— ๋งŒ๋“  2019๋…„ 08์›” 07์ผ  ยท  7์ฝ”๋ฉ˜ํŠธ  ยท  ์ถœ์ฒ˜: TheThingsNetwork/lorawan-stack

์š”์•ฝ

๊ฒŒ์ดํŠธ์›จ์ด๋ฅผ ์‚ญ์ œํ•œ ๋‹ค์Œ ๋™์ผํ•œ EUI๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ์ƒˆ ๊ฒŒ์ดํŠธ์›จ์ด๋ฅผ ์ถ”๊ฐ€ํ•  ๋•Œ ๊ฒŒ์ดํŠธ์›จ์ด๊ฐ€ ์ด๋ฏธ ์กด์žฌํ•œ๋‹ค๊ณ  ๋ถˆํ‰ํ•˜์—ฌ ์‹คํŒจํ•˜๋Š” ๊ฒฝ์šฐ.

๋ฒˆ์‹ ๋‹จ๊ณ„

  1. ๊ธฐ์กด ๊ฒŒ์ดํŠธ์›จ์ด ์ œ๊ฑฐ
  2. CLI๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ์ถ”๊ฐ€ํ•˜๊ฑฐ๋‚˜
  3. API๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ์ถ”๊ฐ€

์ง€๊ธˆ ๋ฌด์—‡์„ ๋ณผ ์ˆ˜ ์žˆ์Šต๋‹ˆ๊นŒ?

{
    "code": 6,
    "message": "error:pkg/identityserver/store:already_exists (entity already exists)",
    "details": [
        {
            "@type": "type.googleapis.com/ttn.lorawan.v3.ErrorDetails",
            "namespace": "pkg/identityserver/store",
            "name": "already_exists",
            "message_format": "entity already exists",
            "attributes": {
                "field": "gateway_eui",
                "value": "'3135313749005303'"
            },
            "correlation_id": "c0dc6bb73d714702bd8d0be57e83f369"
        }
    ]
}

๋Œ€์‹  ๋ฌด์—‡์„ ๋ณด๊ณ  ์‹ถ์Šต๋‹ˆ๊นŒ?


์ƒˆ ๊ฒŒ์ดํŠธ์›จ์ด๋ฅผ ์„ฑ๊ณต์ ์œผ๋กœ ์ƒ์„ฑ

ํ™˜๊ฒฝ

TTN CLI๋ฅผ ์‚ฌ์šฉํ•˜๋Š” Amazon Linux ๋ฐ API ํ˜ธ์ถœ์„ ์‚ฌ์šฉํ•˜๋Š” Postman

์ด๋ฅผ ๊ตฌํ˜„ํ•˜๊ธฐ ์œ„ํ•ด ์–ด๋–ป๊ฒŒ ์ œ์•ˆํ•ฉ๋‹ˆ๊นŒ?

์‚ฌ์šฉ์ž๊ฐ€ ์‚ญ์ œ๋œ ๊ฒŒ์ดํŠธ์›จ์ด๋ฅผ ์‚ฝ์ž…ํ•˜๋ ค๊ณ  ํ•˜๋ฉด ์‚ญ์ œ๋œ ํ”Œ๋ž˜๊ทธ๋ฅผ false๋กœ ์—…๋ฐ์ดํŠธํ•ฉ๋‹ˆ๋‹ค.

์ด ์ž‘์—…์„ ์ง์ ‘ ์ˆ˜ํ–‰ํ•˜๊ณ  Pull Request๋ฅผ ์ œ์ถœํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๊นŒ?

...

identity server in progress

๋ชจ๋“  7 ๋Œ“๊ธ€

#1121๊ณผ ์•ฝ๊ฐ„ ๋‹ค๋ฅธ ๋ฒ”์œ„๋ฅผ ๊ฐ–๋„๋ก ์ด ๋ฌธ์ œ๋ฅผ ์•ฝ๊ฐ„ ์—…๋ฐ์ดํŠธํ–ˆ์Šต๋‹ˆ๋‹ค. ์ด ๋ฌธ์ œ๋Š” ์ผ๋ฐ˜์ ์œผ๋กœ(์• ํ”Œ๋ฆฌ์ผ€์ด์…˜๋งŒ์ด ์•„๋‹ˆ๋ผ) ์‚ญ์ œ๋œ ์—”ํ„ฐํ‹ฐ๋ฅผ ๋ณต์›ํ•˜๋Š” ๋ฐฉ๋ฒ•์— ๋Œ€ํ•ด ์ž์„ธํžˆ ์„ค๋ช…ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

์ด๋ฒˆ ํ˜ธ์—์„œ๋Š” ์‚ญ์ œ๋œ ๊ฒŒ์ดํŠธ์›จ์ด์™€ ๋™์ผํ•œ EUI๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ์ƒˆ ๊ฒŒ์ดํŠธ์›จ์ด๋ฅผ ์ถ”๊ฐ€ํ•˜๋Š” ๋ฐ ๋” ์ง‘์ค‘ํ•ด ๋ณด๊ฒ ์Šต๋‹ˆ๋‹ค.

https://github.com/TheThingsNetwork/lorawan-stack/issues/604 ๊ด€๋ จ(ID/EUI ๋ฆด๋ฆฌ์Šค)

@htdvisser ๊ฐ€ https://github.com/TheThingsNetwork/lorawan-stack/issues/1703 (ํ˜„์žฌ Next Up์— ์žˆ์Œ)์„ ๊ฐ€์ง€๊ณ  ์žˆ๋‹ค๊ณ  ํ•ด๋„ ์ด์ „์— ์‚ฌ์šฉ๋œ EUI๋กœ ๊ฒŒ์ดํŠธ์›จ์ด๋ฅผ ์ƒ์„ฑํ•  ์ˆ˜ ์žˆ๋Š” ์ผ๋ฐ˜์ ์ธ ์‚ฌ์šฉ ์‚ฌ๋ก€๋ฅผ ์™„์ „ํžˆ ๋‹ค๋ฃจ์ง€๋Š” ์•Š์Šต๋‹ˆ๋‹ค. . ์—”ํ„ฐํ‹ฐ๋ฅผ ์ œ๊ฑฐํ•˜๊ธฐ ์œ„ํ•ด ๊ด€๋ฆฌ์ž๋ฅผ ๋ฐ˜๋ณตํ•˜๋Š” ๊ฒƒ์€ ์ข‹์€ ์‚ฌ์šฉ์ž ๊ฒฝํ—˜์ด ์•„๋‹ˆ๋ฉฐ ์—”ํ„ฐํ‹ฐ๋ฅผ ์ œ๊ฑฐํ•˜๋Š” ๊ฒƒ์€ ๋‹จ์ˆœํžˆ EUI๋ฅผ ํ•ด์ œํ•˜๋Š” ๊ฒƒ๋ณด๋‹ค ๋” ํŒŒ๊ดด์ ์ž…๋‹ˆ๋‹ค.

Afaik ๊ฒŒ์ดํŠธ์›จ์ด๋ฅผ ์‚ญ์ œํ•  ๋•Œ EUI๋ฅผ ๋ฆด๋ฆฌ์Šคํ•˜๋Š” ๋ฐ ๋ณด์•ˆ ๋ฌธ์ œ๊ฐ€ ์—†์Šต๋‹ˆ๋‹ค. ์ด๋ฏธ ์„ ํƒ ์‚ฌํ•ญ์ž…๋‹ˆ๋‹ค. ๊ทธ๊ฒƒ์€ ๋ถ„๋ช…ํžˆ ๋ณต๊ตฌ๋ฅผ ๋ถ€๋ถ„์ ์œผ๋กœ ๋งŒ๋“ค ๊ฒƒ์ž…๋‹ˆ๋‹ค. ์ฆ‰, EUI๊ฐ€ ์‚ฌ๋ผ์กŒ์ง€๋งŒ ์ด๋Š” ์ˆ˜์šฉ ๊ฐ€๋Šฅํ•˜๊ณ  ์‚ญ์ œ ์‹œ ์žฅ์น˜ EUI๊ฐ€ ์ฆ‰์‹œ ํ•ด์ œ๋˜๋Š” ๋ฐฉ์‹๊ณผ๋„ ์ผ์น˜ํ•œ๋‹ค๊ณ  ์ƒ๊ฐํ•ฉ๋‹ˆ๋‹ค.

๊ฒŒ์ดํŠธ์›จ์ด ์‚ญ์ œ ์‹œ EUI๋ฅผ ๋ฆด๋ฆฌ์Šคํ•˜์—ฌ ์ด ๋ฌธ์ œ๋ฅผ ํ•ด๊ฒฐํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๊นŒ? ๊ทธ๋ ‡์ง€ ์•Š๋‹ค๋ฉด ๊ทธ ์ด์œ ๋Š” ๋ฌด์—‡์ž…๋‹ˆ๊นŒ?

์˜ˆ, ์‚ญ์ œ ์‹œ ๊ฒŒ์ดํŠธ์›จ์ด EUI ํ•„๋“œ๋ฅผ nil/NULL๋กœ ์—…๋ฐ์ดํŠธํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ์ถ”๊ฐ€ํ•˜๋Š” ๊ฒƒ์ฒ˜๋Ÿผ ๊ฐ„๋‹จํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค.

// AfterDelete releases the EUI of a Gateway after it is deleted.
func (gtw *Gateway) AfterDelete(db *gorm.DB) error {
    return db.Unscoped().Model(gtw).UpdateColumn("gateway_eui", nil).Error
}

pkg/identityserver/store/hooks.go .

@bafonins ์ด๊ฑฐ ์ฃผ์‹ค ์ˆ˜ ์žˆ๋‚˜์š”?

https://github.com/TheThingsNetwork/lorawan-stack/pull/1843 ์œผ๋กœ ๋ฌธ์ œ๊ฐ€ ํ•ด๊ฒฐ๋˜์ง€ ์•Š์œผ๋ฉด @adamsondelacruz ๋ฅผ ๋‹ค์‹œ ์—ฌ์‹ญ์‹œ์˜ค.

์ด ํŽ˜์ด์ง€๊ฐ€ ๋„์›€์ด ๋˜์—ˆ๋‚˜์š”?
0 / 5 - 0 ๋“ฑ๊ธ‰