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

[feat] 30분마다 종료 조건 검증 후 종료 status로 상태 바꾸는 스케쥴링 로직 구현 #113

Merged
merged 26 commits into from
Jan 19, 2025

Conversation

khyojun
Copy link
Member

@khyojun khyojun commented Jan 19, 2025

PULL REQUEST

#️⃣관련 이슈

🎋 작업중인 브랜치

💡 작업내용

  • 30분마다 종료 조건 검증 후 종료 status로 상태 바꾸는 스케쥴링 로직 구현

🔑 주요 변경사항

  • for update로 mysql에 넥스트 키 락을 통해 갭락의 효과를 얻어(repeatable read 격리) update 도중 반영된 결과에 대해서 중도에 읽을 수 없도록 lock 을 거는 방식으로 진행
  • 시간 확인 할 수 있도록 util 클래스를 통해 시간대로 변환하는 코드 작성
  • 추후에 task executor 설정을 통해 적절한 pool size 및 기타 설정 진행 예정
  • dynamic update 로 필요없는 컬럼까지 업데이트 되는 작업 최적화 하여 변경되는 컬럼만 update 하도록 진행
  • gongbaek time slot entity 에서 발생한 n+1문제 해결

🏞 스크린샷

스크린샷을 첨부해주세요.

날짜 바꾸고 상태 바뀌는지 확인 상태 변경 진행
image image
변경된 결과 for update 비관적 락을 걸어서 동시에 읽으려고 하였을때 일관된 결과를 볼 수 있도록 제한
image image

closes #112

1. 정각, 30분마다 update 쿼리 동작하도록 진행
2. transactional 격리 레벨 repeatable read 동작하도록 명시적으로 작성
@khyojun khyojun added the ⭐ feat New feature label Jan 19, 2025
@khyojun khyojun requested a review from 2hyunjinn January 19, 2025 10:10
@khyojun khyojun self-assigned this Jan 19, 2025
Copy link

Test Results

13 files  13 suites   3s ⏱️
59 tests 59 ✅ 0 💤 0 ❌
63 runs  63 ✅ 0 💤 0 ❌

Results for commit 2bbf578.

@@ -27,4 +29,7 @@ public interface EveryGroupRepository extends JpaRepository<EveryGroupEntity, Lo
boolean isInTime(UserEntity userEntity, double startTime, double endTime,
WeekDate weekDate, Status status);

@Lock(LockModeType.PESSIMISTIC_WRITE)
Copy link
Collaborator

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

closed로 바뀌는 동안은 설정하지 못하도록 하는 것!!! 확인해둘게용!!!!

@Bean
public Executor asyncEveryGroupUpdater() {
ThreadPoolTaskExecutor executor = new ThreadPoolTaskExecutor();
executor.setCorePoolSize(5);
Copy link
Collaborator

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

executor
-> once / every 는 관계 없으므로 동시에 돌린다~!

Copy link
Collaborator

@2hyunjinn 2hyunjinn left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

드디어 자동으로 관리된다!!

@2hyunjinn 2hyunjinn merged commit b8120f9 into main Jan 19, 2025
2 checks passed
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
⭐ feat New feature
Projects
None yet
Development

Successfully merging this pull request may close these issues.

[feat] 30분마다 종료 조건 검증 후 종료 status로 상태 바꾸는 스케쥴링 로직 구현
2 participants