[Prévia] [Próxima] [Prévia por assunto] [Próxima por assunto]
[Índice cronológico] [Índice de assunto]

Re: Metodo SYNC



 > Francisco Reverbel wrote:
 > > 
 > > Luis Campos de Carvalho writes:
 > >  >
 > >  >      Pessoal, eu gostaria de saber o que deve fazer o metodo sync do DBFile.
 > >  >
 > >  >      Eu acho que ele deve sincronizar o DBFile no disco, mas isso apenas se
 > >  > faz necessario para o pessoal dos niveis superiores ( Page e DBMan ). O DBFile
 > >  > nao precisa de sync, pois tudo o que vem / e vai dele eh diretamente gravado no
 > >  > RandomAccessFile...
 > > 
 > > Sim, tudo que é escrito num DBFile é imediatamente escrito num
 > > RandomAccessFile. Mas isso não significa que os dados sejam
 > > imediatamente escritos em disco. O método write do RandomAccesssFile
 > > simplesmente chama a system call write() do Linux. Como o Linux tem
 > > buffers de I/O, para garantir que os dados sejam imediatamente escritos
 > > em disco você precisa executar a system call fsync() do Linux (veja a
 > > man page: man 2 fsync).
 > > 
 > > O método sync() da class java.io.FileDescriptor executa a system call
 > > fsync().
 > > 
 > > Reverbel
 > 
 > Entao o metodo sync so deve dar fsync no raf????

Sim, o metodo sync() da classe DBFile só dá um fsync() no FileDescriptor
do raf. 

 > eu achei que o sync procurava por todas as paginas de um dbfile no
 > bufferpool, e forcava a escrita em disco de cada uma delas....Afinal,
 > o que exatamente o metodo sync faz???? 

Não, a classe DBFile não sabe nada sobre buffers e nem conhece o buffer
pool. O BufferManager é quem conhece e usa os DBFiles. Os métodos flush
e flushAll das classes BufferManager e Page chamam o método sync da
classe DBFile. (É para isso que temos o sync no DBFile. Lembre-se que
todo acesso a disco é feito através da classe DBFile.)

Reverbel