AOF Functions

Redis Server Course Redis Technical Support Redis Enterprise Server

AOF Functions

이 문서는 Redis-7.2.7(ent810)을 기준으로 작성했습니다.


Aof.c Functions

  1. aofInfo *aofInfoCreate(void) return zcalloc(sizeof(aofInfo)); // Create an empty aofInfo.
  2. void aofInfoFree(aofInfo *ai) sdsfree(ai->file_name); zfree(ai); // aofInfo 구조체(ai가 가리키는)와 내장된 file_name을 해제합니다.
  3. aofInfo *aofInfoDup(aofInfo *orig) // Deep copy an aofInfo.
  4. sds aofInfoFormat(sds buf, aofInfo *ai) // 'aofInfo'를 문자열로 포맷하면 매니페스트에 한 줄이 생성됩니다.
  5. void aofListFree(void *item) // AOF 목록 요소를 해제
  6. void *aofListDup(void *item) return aofInfoDup(item); // AOF 목록 요소를 복제
  7. aofManifest *aofManifestCreate(void) // 'aofLoadManifestFromDisk'에서 호출될 빈 'aofManifest'를 만듭니다.
  8. void aofManifestFree(aofManifest *am) // aofManifest 구조(am이 가리키는)와 내장된 멤버를 해제합니다.
  9. sds getAofManifestFileName(void) return sdscatprintf(sdsempty(), "%s%s", server.aof_filename, MANIFEST_NAME_SUFFIX);
  10. sds getTempAofManifestFileName(void) return sdscatprintf(sdsempty(), "%s%s%s", TEMP_FILE_NAME_PREFIX, server.aof_filename, MANIFEST_NAME_SUFFIX);
  11. sds getAofManifestAsString(aofManifest *am)
  12. void aofLoadManifestFromDisk(void)
  13. aofManifest *aofLoadManifestFromFile(sds am_filepath) // 'aofLoadManifestFromDisk', 'redis-check-aof' 도구에서 사용되는 일반 매니페스트 로딩 함수입니다.
  14. aofManifest *aofManifestDup(aofManifest *orig) // 'aofManifest'를 새로 만들고 orig를 복사해서 리턴한다.
  15. void aofManifestFreeAndUpdate(aofManifest *am) // 'server.aof_manifest' 포인터를 'am'으로 변경
  16. sds getNewBaseFileNameAndMarkPreAsHistory(aofManifest *am) // BASE 파일 명명 규칙: 'server.aof_filename'.seq.base.format
  17. sds getNewIncrAofName(aofManifest *am) // INCR AOF 명명 규칙: 'server.aof filename'.seq.incr.aof
  18. sds getTempIncrAofName(void) // Get temp INCR type AOF name.
  19. sds getLastIncrAofName(aofManifest *am) // Get the last INCR AOF name or create a new one.
  20. void markRewrittenIncrAofAsHistory(aofManifest *am) // backgroundRewriteDoneHandler()에서 호출합니다.
  21. int writeAofManifestFile(sds buf) // 포맷된 매니페스트 문자열을 디스크에 씁니다.
  22. int persistAofManifest(aofManifest *am) // 'am'이 가리키는 'aofManifest' 정보를 디스크에 저장합니다.
  23. void aofUpgradePrepare(aofManifest *am) // loadAppendOnlyFiles()에서 호출됩니다.
  24. int aofDelHistoryFiles(void) // 'history_aof_list'를 순회하며 삭제 작업을 바이오 스레드에 제출합니다.
  25. void aofDelTempIncrAofFile(void) // 'AOFRW'가 실패했을 때 임시 'INCR AOF'를 정리(삭제)하는 데 사용됩니다.
  26. void aofOpenIfNeededOnServerStart(void) // redis 시작 시 loadDataFromDisk() 이후에 호출됩니다.
  27. int aofFileExist(char *filename) // 파일이 있는지 확인
  28. int openNewIncrAofForAppend(void) // rewriteAppendOnlyFileBackground()에서 호출됩니다.
  29. int aofRewriteLimited(void) // 백그라운드 AOFRW(AOF rewrite) 실행을 제한할지 여부입니다.
    리턴값 '1': 'AOFRW' 실행 불가, '0': 'AOFRW' 실행 가능
    serverCron()에서 aof file size가 커졌을 때 또는 스케줄되어 있을 때
    이 함수를 호출해서 rewriteAppendOnlyFileBackground()을 실행해도 되는지 확인한다.
  30. int aofFsyncInProgress(void) // 현재 BIO 스레드에서 AOf fsync가 진행 중인 경우 true를 반환합니다. flushAppendOnlyFile()에서 사용합니다.
  31. void aof_background_fsync(int fd) // 다른 스레드에서 지정된 파일 설명자(AOF 파일의 설명자)에 대해 fsync()를 수행하는 백그라운드 작업을 시작합니다.
  32. void aof_background_fsync_and_close(int fd) // aof_background_fsync를 기반으로 fd를 닫습니다.
  33. void killAppendOnlyChild(void) // AOFRW 자식 프로세스가 존재하는 경우 이를 종료합니다. stopAppendOnly(), startAppendOnly()에서 사용합니다.
  34. void stopAppendOnly(void) // 사용자가 CONFIG 명령을 사용하여 런타임에 "appendonly yes"에서 "appendonly no"로 전환할 때 호출됩니다.
  35. int startAppendOnly(void) // 사용자가 CONFIG 명령을 사용하여 런타임에 "appendonly no"에서 "appendonly yes"로 전환할 때 호출됩니다.
  36. ssize_t aofWrite(int fd, const char *buf, size_t len) // 이것은 짧은 쓰기 작업이나 시스템 호출이 중단될 경우 재시도하기 위한 쓰기 시스템 호출 래퍼입니다.
  37. void flushAppendOnlyFile(int force) // AOF 버퍼를 디스크에 씁니다.
  38. sds catAppendOnlyGenericCommand(sds dst, int argc, robj **argv) // feedAppendOnlyFile()에서 사용합니다.
  39. sds genAofTimestampAnnotationIfNeeded(int force) // AOF에 대한 타임스탬프 주석을 생성합니다.
  40. void feedAppendOnlyFile(int dictid, robj **argv, int argc) // 명령을 aof 파일에 씁니다.
◼️ AOF loading
  1. struct client *createAOFClient(void) // AOF 로드용 클라이언트 생성
  2. int loadSingleAppendOnlyFile(char *filename) // AOF 파일을 로드합니다.
    // 📍 명령 실행 수 로그를 남긴다(명령 하나에 여러 키가 입력될 수 있으므로 키 개수는 정확하지 않음)
    // loadAppendOnlyFiles()에서 사용합니다.
  3. int loadAppendOnlyFiles(aofManifest *am) // AOF 파일 로드
    // server.c loadDataFromDisk()에서 사용합니다.
◼️ AOF rewrite

• rioWrite* 함수는 rewrite* 함수 내부에서 사용한다.

  1. int rioWriteBulkObject(rio *r, robj *obj) // rewriteAppendOnlyFileRio() 등 여러 곳에서 사용. rioWriteBulkLongLong(), sdsEncodedObject()를 사용.
  2. static int rioWriteHashIteratorCursor(rio *r, hashTypeIterator *hi, int what) // rewriteHashObject()에서 사용, 성공:non-zero, 실패:0
  3. int rioWriteBulkStreamID(rio *r,streamID *id) // rewriteStreamObject()에서 사용
  4. int rioWriteStreamPendingEntry(rio *r, robj *key, const char *groupname, size_t groupname_len, streamConsumer *consumer, unsigned char *rawid, streamNACK *nack) // rewriteStreamObject()에서 사용
  5. int rioWriteStreamEmptyConsumer(rio *r, robj *key, const char *groupname, size_t groupname_len, streamConsumer *consumer) // rewriteStreamObject()에서 사용
  6. int rewriteListObject(rio *r, robj *key, robj *o) // List 쓰기, 성공:1, 실패:0
  7. int rewriteSetObject(rio *r, robj *key, robj *o) // Set 쓰기, 성공:1, 실패:0
  8. int rewriteSortedSetObject(rio *r, robj *key, robj *o) // ZSet 쓰기, 성공:1, 실패:0
  9. int rewriteHashObject(rio *r, robj *key, robj *o) // Hash 쓰기, 성공:1, 실패:0
  10. int rewriteStreamObject(rio *r, robj *key, robj *o) // // Stream 쓰기, 성공:1, 실패:0
  11. int rewriteModuleObject(rio *r, robj *key, robj *o, int dbid) // 모듈(module) 쓰기, 성공:1, 실패:0
  12. static int rewriteFunctions(rio *aof) // 함수(function) 쓰기, 성공:1, 실패:0
  13. int rewriteAppendOnlyFileRio(rio *aof) // 서버의 모든 데이터를 AOF(text) 파일에 저장한다. 0 ~ server.dbnum.
  14. int rewriteAppendOnlyFile(char *filename) // 'server.aof_use_rdb_preamble'이면 rdbSaveRio()를 호출하고, // 아니면 rewriteAppendOnlyFileRio()를 호출해서 데이터를 저장한다.
◼️ AOF background rewrite
  1. int rewriteAppendOnlyFileBackground(void) // aof.c bgrewriteaofCommand(), startAppendOnly()에서 사용.
    // server.c serverCron()에서 아래 3가지 경우에 실행한다.
    1) AOF rewrite가 스케줄되어 있으면 실행.
    2) AOF 파일 사이즈가 커지면 실행.
    3) server.aof_rewrite_spec_time 지정한 시각에 실행. ent에서 추가.
  2. void bgrewriteaofCommand(client *c) // 'BGREWRITEAOF' 명령 실행
  3. void aofRemoveTempFile(pid_t childpid) // backgroundRewriteDoneHandler() cleanup: 에서 사용, killAppendOnlyChild()에서 사용.
  4. off_t getAppendOnlyFileSize(sds filename, int *status) // AOF 파일 크기. getBaseAndIncrAppendOnlyFilesSize() 등에서 사용.
  5. off_t getBaseAndIncrAppendOnlyFilesSize(aofManifest *am, int *status) // 매니페스트에서 참조하는 모든 AOF 파일의 크기를 가져옵니다(history 제외).
    // loadAppendOnlyFiles()에서 사용
  6. void backgroundRewriteDoneHandler(int exitcode, int bysignal) // serverc checkChildrenDone()에서 사용. serverCron() -> checkChildrenDone()


<< AOF Timestamp RDB SAVE >>

Email 답글이 올라오면 이메일로 알려드리겠습니다.