오래 못 할 짓 하지 않기

rclone 주요 기능 분석 ( flow 위주 ) 본문

4학년/캡스톤 (Capstone)

rclone 주요 기능 분석 ( flow 위주 )

쫑알bot 2024. 12. 27. 14:09
728x90

파일 시스템 관련된 기능은 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)

operation/copy.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