본문 바로가기
프로그래밍 놀이터/Database

[Sqlite] 1802 error 의 정체는?

by 돼지왕왕돼지 2018. 12. 18.

[Sqlite] 1802 error 의 정체는?



https://sqlite.org/rescode.html#ioerr_fstat

android app update, fstat, i/o 에러, lstat, sqlite 1802 error, SQLITE_IOERR, sqlite_ioerr_fstat, stat, VFS layer, 파일 정보 읽어오는 함수


-

Sqlite 의 1802 error 는 SQLITE_IOERR_FSTAT 이다.

이는 SQLITE_IOERR 의 확장 에러 코드로 VFS layer 에서 fstat() 함수를 호출하면서 발생한 I/O 에러를 이야기한다.



-

VFS(Virtual File System) 는 무엇인가?

http://aroundck.tistory.com/4925


간단히 이야기하면, SQLite 가 OS 와 communicate 하는 channel 이라고 보면 된다.



-

그럼 fstat 은 무엇인가?

stat, lstat 등과 함께 fstat 은 아래와 같은 형태의 파일 정보를 읽어오는 함수이다.


struct stat {

     dev_t           st_dev;        /*ID of device containing file */

     ino_t            st_ino;          /*inode number*/

     mode_t       st_mode;     /*protection*/

     nlink_t         st_nlink;       /*number of hard links*/

     uid_t            st_uid;          /*user ID of owner*/

     gid_t            st_gid;          /*group ID of owner*/

     dev_t           st_rdev;        /*device ID (if special file)*/

     off_t             st_size;         /*total size, in byte*/

     blksize_t      st_blksize;    /*blocksize for file system I/O*/

     blkcnt_t       st_blocks;     /*number of 512B blocks allocated*/

     time_t;        st_atime;      /*time of last access*/

     time_t;        st_mtime;     /*time of last modification*/

     time_t         st_xtime;       /*time of last status change*/

};



-

필자가 해당 에러를 마딱뜨렸던 케이스는 

Android 에서 앱 업데이트하면서 background 에서 DB Table 을 지우는 케이스였다.


해당 Table 을 지우는 코드 직전에 또 다른 Table 을 지우는 것이 성공한 것으로 보아,

앱 업데이트 과정에서 file update 등이 발생하고, 그러면서 fstat 을 호출하는 것에서 exception 이 발생한 것으로 보인다.

( 혹시 다른 원인을 찾아내면 해당 글을 다시 업데이트 하겠다. )


위의 가정이 맞다면, 이는 피할 수 없는 에러의 형태 중 하나이기 때문에 try catch 로 방어해야한다고 생각한다.




댓글0