Skip to content
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

Redis 관련 api 개발 #32

Closed
wants to merge 24 commits into from
Closed

Redis 관련 api 개발 #32

wants to merge 24 commits into from

Conversation

jj1kim
Copy link

@jj1kim jj1kim commented Aug 7, 2024

Redis 관련 api 개발입니다.

총 4개 (큐에 넣기, 큐에서 빼기, 큐의 원소 수 세기, id로 원소 존재 여부 확인) 이며, 각자 로컬에서 작동 테스트는 마쳤습니다.

ttl의 경우 queue로 레디스를 사용할 경우에 queue 내의 원소 별로 지정하는게 불가능하다고 해서 설정하지 않았습니다.

또한 전에 말씀드렸던 인코딩 이슈의 경우 큰 따옴표가 처리 되어서 내려온다면 딱히 레디스에 넣을 때는 관련 처리를 할 필요가 없을 것으로 판단됩니다.

@jj1kim jj1kim requested a review from minkyu97 August 7, 2024 13:56
@minkyu97 minkyu97 requested review from woohm402 and minkyu97 and removed request for minkyu97 and woohm402 August 7, 2024 14:43
@minkyu97
Copy link
Collaborator

minkyu97 commented Aug 7, 2024

@woohm402 private 으로 바꾸니까 제한이 많네 ㅠ 브랜치 보호도 안 되고 리뷰어도 1명까지밖에 안되고..

@woohm402
Copy link
Member

woohm402 commented Aug 7, 2024

오호

jj1kim and others added 20 commits August 8, 2024 01:21
## 추가된 기능
- request 에 다음 필드들이 추가
  - stdin, expected_stdout, time_limit, memory_limit, fields
- Field enum을 추가
- reponse 를 구체화
  - 요구한 필드만 내보내는 기능을 추가
- 바뀐 request, response 스키마에 따라 api 테스트 스펙 수정

## 테스트 방법
docker 로 서버를 띄운 후 bru run 실행
## 기존 코드의 문제점

- `http://127.0.0.1:8080` 이 반복되어 하드코딩되어있었습니다. dev 에 bru 를 쏘기 어려웠습니다.
- request header `content-type: application/json` 도 반복되어 있었습니다.
- ci 에서 java 테스트가 터졌습니다.

## 리팩토링 방법

- bruno의 env 기능을 활용했습니다.
- java 테스트는 그냥 없앴습니다. 리퀘스트는 여전히 존재해서, gui로 테스트 가능합니다
## 날짜
- 2024.08.09

## 주제
- CI를 self-hosted runner에서 돌린다

## 맥락
- GitHub Actions 에서 기본 제공하는 Linux 버전들은 모두 cgroup 2를 기본으로 하고 있어서 호두를 돌릴 수
없다

## 결정
- 따라서 cgroup 1 으로 세팅되어 있는 hodu dev 를 이용한다

## 관련 링크
- https://wafflestudio.slack.com/archives/C07DDPK0TD4/p1723136745919759

## 논의 참여자
@minkyu97 @woohm402
## 추가된 기능
- cgroup v1 을 사용하는 `[email protected]` 로 버전을 내립니다.
- `time_limit_exceeded`, `memory_limit_exceeded` 구현합니다.
- `InternalError` 추가합니다.
   - Error 로 처리하는 게 맞을 것 같긴 한데.. 일단 이대로 가볼게요 다음 PR에서 고치고
- 이에 맞춰 bru 테스트들 수정합니다.

## 테스트 방법
- bru run

## 관련 링크
- https://wafflestudio.slack.com/archives/C07DDPK0TD4/p1723124939221679
## 기존 코드의 문제점
기존에는 hodu core 의 채점 결과로부터 응답 스키마를 생성하는 코드가 너무 장황하고 boilerplaty 했다.
그리고 채점 중 에러 발생 시 에러를 캐치하지 않아서 요청이 abort 되었다.

## 리팩토링 방법
serde 의 다양한 속성들을 이용하여 응답 스키마 생성 로직을 단순화한다.
그리고 futures 크레이트를 추가하여 채점 중 발생한 에러를 핸들링 할 수 있도록 한다.

## 관련 링크
https://serde.rs/remote-derive.html
https://doc.rust-lang.org/std/panic/struct.AssertUnwindSafe.html

https://docs.rs/futures/latest/futures/future/trait.FutureExt.html#method.catch_unwind
## 추가된 기능
time_limit 인자에 float을 허용합니다.

## 테스트 방법
서버 띄운 후 bru run 또는 time_limit 에 실수를 넣어서 직접 요청
## 추가된 기능
채점 시 각 라인 끝의 공백들을 제거합니다.

## 테스트 방법
expected_stdout 의 각 라인에 carriage return, 공백 등을 넣어가면서 테스트

## 관련 링크
## 추가된 기능
메모리가 터지는 것을 방지하기 위해 동시 채점 수를 제한합니다.

## 테스트 방법
동시에 여러 요청을 날리며 log를 찍어봅니다.
테스트를 위해 python의 aiohttp 라이브러리르 이용하여 동시에 요청하는 상황을 시뮬레이션해보았습니다.

## 관련 링크
https://wafflestudio.slack.com/archives/C07DDPK0TD4/p1723207545909049
## 추가된 기능
컴파일러 옵션을 설정할 수 있는 기능을 추가하고, BOJ 언어 정보를 참고하여 c++, c, java 의 기본 컴파일러 옵션을
아래와 같이 지정한다.
- c++ : -O2 -static -std=gnu17
- c : -O2 -static -std=gnu11
- java : --release 17 -encoding UTF-8 -J-Xms1024m -JXmx1920m -J-Xss512m
기본 컴파일러 옵션(최적화 등)은 덮어씌울 수 있으며, 기본 컴파일러 인자(출력 바이너리 등)은 덮어씌울 수 없다. 

## 테스트 방법
compile_options 인자를 바꾸어가며 결과가 달라지는지 테스트한다.
c++ 의 O2 옵션을 주거나 주지 않았을 때 큰 차이가 나는 것을 알 수 있다.

## 관련 링크
https://help.acmicpc.net/language/info
https://wafflestudio.slack.com/archives/C07DDPK0TD4/p1723218224088249
## 버그 설명
`-std=gnu++17` 옵션을 줘야하는데 `-std=gnu17` 을 주고 있었습니다.
경고만 뜰 뿐 돌아는 가는데 혹시 몰라서 수정합니다.

## 해결책
컴파일러 옵션 수정

## 관련 링크
https://help.acmicpc.net/language/info
## 버그 설명
- SG가 InternalError로 내려가고 있어서 SegFault 상황에서 InternalError가 떨어지고 있었다

## 해결책
- SG를 RuntimeError로 판단하도록 변경한다

## 관련 링크

-
https://wafflestudio.slack.com/archives/C07DDPK0TD4/p1723428998079919?thread_ts=1723427262.058969&cid=C07DDPK0TD4
## 기존 코드의 문제점
- ci때마다 docker system prune 을 하다 보니 써야 되는 이미지도 날라갔습니다.

## 리팩토링 방법
- 이미지는 안 날아가도록 빌드캐시만 날립니다.

## 관련 링크
- https://wafflestudio.slack.com/archives/C07DDPK0TD4/p1723225631557579
@jj1kim jj1kim closed this Sep 24, 2024
@jj1kim jj1kim deleted the feature/redis branch September 24, 2024 06:09
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

Successfully merging this pull request may close these issues.

3 participants