-
Notifications
You must be signed in to change notification settings - Fork 2
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
Change OpLogFilter::agent_id
to be optional
#724
Comments
@sophie-cluml, @sehkone OpLogFilter agent_id Optional로 변경에 대한 요구사항을 만족하기 위해 내용을 분석해보았습니다. 내용파악
적용하기 위한 선적용 조건
key구조 변경시 이점
데이터 필터링 예시 적재된 데이터 timestamp 3 - 5 구간 조회 timestamp 3 - 5 구간, piglet 조회 |
OpLog가 저장되는 테이블의 키의 start key를 timestamp로 하고, mid key를 0을 하고, end key 를 agent id로 하자는 것으로 이해가 됩니다. 이에 대해 저는 동의하는 방향입니다. 이 테이블의 변경이 sensor 모듈이나 ai 엔진 모듈에의 영향도 없다고 보고 있습니다. UI 상에도 영향이 없을 것으로 보입니다. 마이그레이션 코드가 필요하다는 것을 제외하고는, 검색 상 UI에 모든/특정 agent, 시간 순서대로 보여줄 수 있는 작업도 간단해질 것으로 보입니다. 다만, 제안주신 사항들에 조금 더 정확히 sync가 되기 위하여, 다음 사항들에 대해 알려주시면 좋을 것 같습니다.
|
@sophie-cluml
|
답변 감사합니다. 전체적인 방향에 대해 이해했습니다. 다만, 다음은 sync를 맞출 수 있으면 좋을 것 같습니다.
이 부분은 KeyExtractor 와 test code 상 구현이 서로 상이한 점이 있어서, 어디를 보느냐에 따라 mid key를 무엇으로 보는지 차이가 발생한 것 같습니다. test code가 기존에 잘못 mid key를 0 으로 잡고 있는 것을 덕분에 발견하게 되어서, 이 이슈의 진행과 함께 또는 별개로, test code를 적절히 수정하는 것이 필요할 것 같습니다.
https://github.com/aicers/giganto/blob/main/src/graphql/log.rs#L87-L90
https://github.com/aicers/giganto/blob/main/src/graphql/log/tests.rs#L531-L536 |
0이 중간에 삽입된 것은 StorageKeyBuilder.start_key에서 넣어주고 있는 값입니다. 참고 : draft pr 올린곳에서는 아직 ingest 부분이 수정되어있진 않습니다. |
@henry0715-dev 제가 잘못 알고 있었네요. 알려주셔서 감사합니다! |
제 생각엔 이대로 진행해도 될것 같습니다. @sehkone 다른 의견 있으실까요? |
|
timestamp만 사용할 경우 동일한 시간대에 oplog가 들어온 경우 마지막 요청 agentId에 대해서만 값이 저장되어 기대한 결과를 얻지 못할 가능성이 있습니다. 예시
조회 결과 |
제 질문은 같은 agent id로부터도 동일한 timestamp 입력이 없냐는 것이었어요. |
그러니까 제 질문은 각 모듈에서 timestamp가 동일한 것으로 찍힐 가능성이 아예 없냐는 것이에요. 우리 모듈들이 멀티 쓰레딩으로 동작하고 있기 때문에 질문하는 것입니다. |
멀티 쓰레딩으로 동작하는 환경에서 timestamp 동일한 것으로 찍힐 가능성은 있습니다. |
"로깅"은 각 모듈이 하는 것이고 key를 만드는 것은 Giganto가 하는 것입니다. Thread ID를 추가하여 로깅한다는 말은 각 모듈이 그렇게 한다는 것인가요? 매 로그마다 thread ID를 넣자는 것인가요? 적절해 보이지 않는데요. |
Timestamp를 키로 사용할 때 중복을 방지하는 방식으로 우리가 현재 사용 중인 방법이 두 가지가 있습니다.
|
기존에 구현되어있는 key 구조 agentId-0-timestamp 도 동일한 이슈가 있을 수 있어 보입니다. |
이것과 관련해서는 제가 이미 아래와 같이 이야기를 했습니다. 즉, agentId-0-timestamp 이 구조는 더 이상 논의의 대상이 아닙니다. 저는 agent ID도 없애면 어떠냐, 그리고 심지어 셋으로 구분되어 있는 키 구조를 사용하지 않으면 어떠냐, 라고 이야기한 것이지요.
|
key 구조에 대해서는 timestamp와 serial number를 결합에 대해서 잡아보도록 하겠습니다. |
�다른 작업으로 인하여 pending 상태로 변경합니다. |
@sehkone
수정 관련 코드 : git code |
|
현재 아래와 같이 구성되어있습니다.
|
그렇다면, 다른 타입과 마찬가지로 source 필드가 들어가는 게 더 낫습니다. |
REproduce 쪽 테스트 포함해서 source 필드 추가하는 것으로 검토해보도록 하겠습니다. |
Close #724 The RocksDB keys in the `oplog` are currently in the form agent_id-0-timestamp. This change modifies the keys to the form timestamp-0-sequence.
Close #724 The RocksDB keys in the `oplog` are currently in the form agent_id-0-timestamp. This change modifies the keys to the form timestamp-0-sequence.
Close #724 The RocksDB keys in the `oplog` are currently in the form agent_id-0-timestamp. This change modifies the keys to the form timestamp-0-sequence.
Close #724 The RocksDB keys in the `oplog` are currently in the form agent_id-0-timestamp. This change modifies the keys to the form timestamp-0-sequence.
Close #724 The RocksDB keys in the `oplog` are currently in the form agent_id-0-timestamp. This change modifies the keys to the form timestamp-0-sequence.
Background
OpLogFilter::agent_id
가None
인 경우를 지원해야 합니다.Tasks
The text was updated successfully, but these errors were encountered: