오래 못 할 짓 하지 않기
rclone 주요 기능 분석 ( flow 위주 ) 본문
파일 시스템 관련된 기능은 version/cmd.go에 있다.
이 안에 있는 run func에서는 입력받은 명령어를 처리하는 중에
Error가 발생했는지 확인하는 용도.
- Copy
- Move
- Delete
[ Copy ]
Init
> arguments가 제대로 들어왔는지 확인
> arguments에 있는 값들을 fsrc ,name / fdst 로 담아둔다.
> 현재 받은 인자들과 copy 명령어를 통해 Run을 돌린다.
> case1) 만약 srcFile 이름이 없다면, 이는 Dir이란 뜻이므로, 현재 들어온 이름의 dir을 복사한다.
> case2) 파일이 있다면, file을 복사한다.
case1 :
[ case2 ] : 현재 인자들을 가지고 moveOrCopyFile로 들어간다. ( In operations/opertaion.go)
> 파일 주소 설정하고, Dest에 같은 이름의 file이 있는지 판단한다.
> Operation의 기본값을 Move로 잡아두었다가
Copy인 것이 확인되면 Copy 함수(operation/Copy.go)를 실행시켜 해당 반환값을 Op에 담아둔다.
> Copy할 준비를 해서 해당 ctx 정보를 가지고 opertaion/copy의 private함수인 copy로 파일을 복사한다.
> server side로 시도하고, 안 되면 Thread로 돌린다.
요약 :
1. copy/copy.go 에서 copy 명령어 감지 및 인자 관리
2. CopyFile (operations/copy.go)
3. moveOrCopyFile (oprations/operations.go) 에서 저장 src/dest 를 관리하고
명령어에 대해 Move와 Copy를 구분해서 함수를 실행시킨다.
+ 대소문자 Case 검사 및 커버
+ copy인지 확인하여 아니라면(move면) 원본 file 삭제
4. operations/copy.go 에서는 필요한 인자들을 다시 재조합하여 private함수인 copy를 실행
5. 해당 copy 함수에서 serverSide 혹은 manually하게 복사. (이거 좀 고급 기술임)
[ function을 다루는 변수 담기 - case에 따라 그 변수가 어떤 함수를 가리키게 할지 정한다. ]
[ Move ]
Init
> arguments가 제대로 들어왔는지 확인
> arguments에 있는 값들을 fsrc ,name / fdst 로 담아둔다.
> 현재 받은 인자들과 move 명령어를 통해 Run을 돌린다.
> case1) 만약 srcFile 이름이 없다면, 이는 Dir이란 뜻이므로, 현재 들어온 이름의 dir을 Move.
> case2) 파일이 있다면, file을 Move.
operations/operations.go로 넘어감
1. 받은 Context 그대로 그리고 나머지 인자들을 moveOrCopyFile 함수로 넘긴다.
2. MoveTransfer 를 실행시키고 return값을 Op에 담는다. (Copy는 아니므로 그냥 넘어감)
3. 이미 있는 정보인지 확인
4. 대소문자 문제있는지 확인하고, tmp dir만들어서 이래저래 함
5. 다 하고 tmp dir 삭제
[ Delete File ]
1. deletefile/deletefile.go에서 Context를 생성하며 operations.DeleteFile 함수 call
2. operations/DeleteFileWithBackupDir로 넘겨준다.
> 삭제 관련된 명령어가 들어오면, 관련된 정보를 accounting.Stats를 통해 받는다.
> 추가 검사 후에 삭제
fs / types.go 에서
- FS 인터페이스
- Info 인터페이스
- Object
- ObjectInfo
- DirEntry
등 많은 인터페이스가 정의되어있다.
'4학년 > 캡스톤 (Capstone)' 카테고리의 다른 글
[ Erasure Coding ] 통신/부호 이론 Ch1 (0) | 2025.02.05 |
---|---|
Erasure Coding - Reed Solomon (0) | 2025.01.07 |
Go 언어 실습 3 코드 (0) | 2024.12.24 |
Go 언어 실습 2 (0) | 2024.12.24 |
Go 언어 실습 1 (0) | 2024.12.23 |