Lorawan-stack: ์ค‘๋ณต ๋œ ์ƒ๊ด€ ID

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

์š”์•ฝ

์ผ๋ถ€ ์ด๋ฒคํŠธ์˜ ์ƒ๊ด€ ๊ด€๊ณ„ ID (์˜ˆ : gs.up.receive ๋ฐ as.up.receive )๊ฐ€ ์ค‘๋ณต๋ฉ๋‹ˆ๋‹ค.

์žฌํ˜„ ๋‹จ๊ณ„

  1. ์ด๋ฒคํŠธ ๊ตฌ๋… (์˜ˆ : ttn-lw-cli events subscribe --gateway-id ...

์ง€๊ธˆ ๋ฌด์—‡์„ ๋ด…๋‹ˆ๊นŒ?

์˜ˆ๋ฅผ ๋“ค๋ฉด :

{
  "name": "gs.up.receive",
  "time": "2019-05-10T08:48:36.397803Z",
  "identifiers": [
    {
      "gateway_ids": {
        "gateway_id": "tektelic-micro",
        "eui": "647FDAFFFE0059AB"
      }
    }
  ],
  "data": {
    "@type": "type.googleapis.com/ttn.lorawan.v3.UplinkMessage",
    "raw_payload": "QKogASYAkdgBU2NToyoatD/C",
    "settings": {
      "data_rate": {
        "lora": {
          "bandwidth": 125000,
          "spreading_factor": 7
        }
      },
      "coding_rate": "4/5",
      "frequency": "867900000",
      "timestamp": 3375161699
    },
    "rx_metadata": [
      {
        "gateway_ids": {
          "gateway_id": "tektelic-micro",
          "eui": "647FDAFFFE0059AB"
        },
        "timestamp": 3375161699,
        "rssi": 2,
        "snr": 10,
        "uplink_token": "ChwKGgoOdGVrdGVsaWMtbWljcm8SCGR/2v/+AFmrEOPCs8kM"
      }
    ],
    "received_at": "2019-05-10T08:48:36.397329Z",
    "correlation_ids": [
      "gs:conn:01DAGEFV4TBH5K9AVAX86NPDXM",
      "gs:uplink:01DAGEW31DQZQNSCQPJ28KGFMF"
    ],
    "gateway_channel_index": 4
  },
  "correlation_ids": [
    "gs:conn:01DAGEFV4TBH5K9AVAX86NPDXM",
    "gs:uplink:01DAGEW31DQZQNSCQPJ28KGFMF",
    "gs:conn:01DAGEFV4TBH5K9AVAX86NPDXM",
    "gs:uplink:01DAGEW31DQZQNSCQPJ28KGFMF"
  ],
  "origin": "Johans-MacBook-Pro.local"
}

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

correlation_ids ์ค‘๋ณต ํ•ญ๋ชฉ ์—†์Œ

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

์ƒ๊ด€ ๊ด€๊ณ„ ID๋Š” ์•„๋งˆ๋„ ๋‘ ๋ฒˆ ์ถ”๊ฐ€ ๋  ๊ฒƒ์ž…๋‹ˆ๋‹ค. ์ด๊ฒƒ์€ ์ปจํ…์ŠคํŠธ์—์žˆ์„ ๋•Œ ์ƒ๊ด€ ID๊ฐ€ ์ถ”๊ฐ€๋˜๋Š” ์ด๋ฒคํŠธ ํŒจํ‚ค์ง€์—์žˆ์„ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

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

์˜ˆ

bug shared

๊ฐ€์žฅ ์œ ์šฉํ•œ ๋Œ“๊ธ€

@rvolosatovs ์˜ ๋ณ‘ํ•ฉ ์•Œ๊ณ ๋ฆฌ์ฆ˜์„ ์‚ฌ์šฉํ•˜๋Š” ๊ฒƒ์„ ์„ ํ˜ธํ•ฉ๋‹ˆ๋‹ค (๋‚ด ์˜๊ฒฌ ์ฐธ์กฐ). ์ƒ๊ด€ ๊ด€๊ณ„ ID๋ฅผ ๋ณ‘ํ•ฉํ•˜๊ธฐ์œ„ํ•œ ํšจ์œจ์ ์ธ ๊ตฌํ˜„์„ ๋งŒ๋“œ๋Š” ๋ฐ ์ด๋ฏธ ์‹œ๊ฐ„์„ ๋ณด๋ƒˆ์œผ๋ฏ€๋กœ ํ›จ์”ฌ ๋œ ํšจ์œจ์ ์ด๊ณ  ์ •๋ ฌ๋˜์ง€ ์•Š์€ ID๋ฅผ ๋ฐ˜ํ™˜ํ•˜๋Š” @ pgalic96 ์˜ ์ œ์•ˆ ๋œ ๋งต ๊ตฌํ˜„๊ณผ ๋ณ‘ํ•ฉ /

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

@htdvisser ๋ฌธ์ œ๋Š” ์ด๋ฒคํŠธ ํŽ˜์ด๋กœ๋“œ์˜ ์ƒ๊ด€ ID๊ฐ€ ์ปจํ…์ŠคํŠธ์˜ ID์— ์ถ”๊ฐ€๋˜๋Š” ๊ฒƒ ๊ฐ™์Šต๋‹ˆ๋‹ค.

ctx := events.ContextWithCorrelationID(ctx, fmt.Sprintf("gs:uplink:%s", events.NewCorrelationID()))
msg.CorrelationIDs = append(msg.CorrelationIDs, events.CorrelationIDsFromContext(ctx)...)
registerReceiveUplink(ctx, conn.Gateway(), msg)

์ƒ๊ด€ ๊ด€๊ณ„ ID๋Š” ctx ๋ฐ msg ( GetCorrelationIDs() ํ†ตํ•ด)์— ๋ชจ๋‘ ์žˆ์œผ๋ฏ€๋กœ ์ด๋ฒคํŠธ์—์„œ ์ค‘๋ณต๋ฉ๋‹ˆ๋‹ค.

์—ฌ๊ธฐ์„œ ๊ณ ์œ ์„ฑ์„ ํ™•์ธํ•ด์•ผํ•ฉ๋‹ˆ๊นŒ?

https://github.com/TheThingsNetwork/lorawan-stack/blob/master/pkg/events/events.go#L148

์˜ˆ, pkg/events/correlation_context.go ์˜ ๋ณ‘ํ•ฉ ์•Œ๊ณ ๋ฆฌ์ฆ˜์„ ์ž์ฒด func ( mergeCorrelationIDs )๋กœ ์ด๋™ํ•˜์—ฌ pkg/events/events.go .

    if cids := data.GetCorrelationIDs(); len(cids) > 0 {
        cids = append(cids[:0:0], cids...)
        sort.Strings(cids)
        evt.innerEvent.CorrelationIDs = mergeCorrelationIDs(evt.innerEvent.CorrelationIDs, cids)
    }

evt.innerEvent.CorrelationIDs ์„ ์ •๋ ฌํ•ด์•ผํ•œ๋‹ค๋Š” ๋ฉ”๋ชจ๋ฅผ ์ถ”๊ฐ€ํ•ด์•ผํ•ฉ๋‹ˆ๋‹ค (์ปจํ…์ŠคํŠธ์˜ ์ƒ๊ด€ ๊ด€๊ณ„ ID๊ฐ€ ์ •๋ ฌ๋˜๊ธฐ ๋•Œ๋ฌธ์ž…๋‹ˆ๋‹ค).

@ pgalic96 ์ƒํƒœ๋Š” ๋ฌด์—‡์ž…๋‹ˆ๊นŒ?

๋ฌผ๊ฑด์œผ๋กœ ๋ฐ”๋น ์„œ ๋‹ค์Œ๊ณผ ๊ฐ™์ด ๊ณ ์œ ์„ฑ์„ ํ™•์ธํ–ˆ์Šต๋‹ˆ๋‹ค.

if data, ok := data.(interface{ GetCorrelationIDs() []string }); ok {
        mapCorrelationIds := make(map[string]struct{})
        for _, correlationID := range evt.innerEvent.CorrelationIDs {
            mapCorrelationIds[correlationID] = struct{}{}
        }
        for _, correlationID := range data.GetCorrelationIDs() {
            if _, ok := mapCorrelationIds[correlationID]; !ok {
                evt.innerEvent.CorrelationIDs = append(evt.innerEvent.CorrelationIDs, correlationID)
            }
        }
    }

์•„์ง ํ…Œ์ŠคํŠธ๋ฅผ ์ž‘์„ฑํ•˜์ง€ ์•Š์•˜์ง€๋งŒ TestCorrelationID ๋กœ ์ด๋ฒคํŠธ๋ฅผ ์ƒ์„ฑ ํ•œ ๋‹ค์Œ ํŽ˜์ด๋กœ๋“œ์— ๋™์ผํ•œ TestCorrelationID ์„ ์ œ๊ณต ํ•œ ๋‹ค์Œ ๋ฉ”์‹œ์ง€์˜ CorrelationID ๊ธธ์ด๊ฐ€ ๋‹ค์Œ๊ณผ ๊ฐ™์€์ง€ ํ™•์ธํ•ฉ๋‹ˆ๋‹ค. ์‹ค์ œ๋กœ 2๊ฐ€ ์•„๋‹ˆ๋ผ 1์ž…๋‹ˆ๋‹ค.

evt.innerEvent.CorrelationIDs ๋Š” ์ด๋Ÿฌํ•œ ๋ฐฉ์‹์œผ๋กœ ์ค‘๋ณต ์ œ๊ฑฐ๋˜์ง€ ์•Š์ง€๋งŒ ๋ณ€์ˆ˜ ์ด๋ฆ„์„ ์ œ์™ธํ•˜๋ฉด ์ผ๋ฐ˜์ ์œผ๋กœ๋ณด๊ธฐ ์ข‹์Šต๋‹ˆ๋‹ค.

@rvolosatovs ์˜ ๋ณ‘ํ•ฉ ์•Œ๊ณ ๋ฆฌ์ฆ˜์„ ์‚ฌ์šฉํ•˜๋Š” ๊ฒƒ์„ ์„ ํ˜ธํ•ฉ๋‹ˆ๋‹ค (๋‚ด ์˜๊ฒฌ ์ฐธ์กฐ). ์ƒ๊ด€ ๊ด€๊ณ„ ID๋ฅผ ๋ณ‘ํ•ฉํ•˜๊ธฐ์œ„ํ•œ ํšจ์œจ์ ์ธ ๊ตฌํ˜„์„ ๋งŒ๋“œ๋Š” ๋ฐ ์ด๋ฏธ ์‹œ๊ฐ„์„ ๋ณด๋ƒˆ์œผ๋ฏ€๋กœ ํ›จ์”ฌ ๋œ ํšจ์œจ์ ์ด๊ณ  ์ •๋ ฌ๋˜์ง€ ์•Š์€ ID๋ฅผ ๋ฐ˜ํ™˜ํ•˜๋Š” @ pgalic96 ์˜ ์ œ์•ˆ ๋œ ๋งต ๊ตฌํ˜„๊ณผ ๋ณ‘ํ•ฉ /

@ pgalic96 ์ƒํƒœ ์—…๋ฐ์ดํŠธ๋ฅผ ์ค„ ์ˆ˜ ์žˆ์Šต๋‹ˆ๊นŒ?

์ด๋ฒˆ ์ฃผ์—๋Š” ์•„์ง ์ž‘์—…ํ•˜์ง€ ์•Š์•˜๊ณ  ๋‚ด์ผ ์‹œํ—˜ ํ›„์— ์ถœ๊ทผํ–ˆ์Šต๋‹ˆ๋‹ค. ๋‚ด์ผ ๋งˆ๋ฌด๋ฆฌํ•˜๋ ค๊ณ  ๋…ธ๋ ฅํ•  ๊ฒƒ์ž…๋‹ˆ๋‹ค.

@htdvisser ์ œ์•ˆ์— ๋”ฐ๋ผ ์ฝ”๋“œ๋ฅผ ๋ณ€๊ฒฝ

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