do a non-blocking file:sync
---------------------------

                 Key: COUCHDB-767
                 URL: https://issues.apache.org/jira/browse/COUCHDB-767
             Project: CouchDB
          Issue Type: Improvement
          Components: Database Core
    Affects Versions: 0.11
            Reporter: Adam Kocoloski
             Fix For: 1.1


I've been taking a close look at couch_file performance in our production 
systems.  One of things I've noticed is that reads are occasionally blocked for 
a long time by a slow call to file:sync.  I think this is unnecessary.  I think 
we could do something like

handle_call(sync, From, #file{name=Name}=File) ->
    spawn_link(fun() -> sync_file(Name, From) end),
    {noreply, File};

and then

sync_file(Name, From) ->
    {ok, Fd} = file:open(Name, [read, raw]),
    gen_server:reply(From, file:sync(Fd)),
    file:close(Fd).

Does anyone see a downside to this?  Individual clients of couch_file still see 
exactly the same behavior as before, only readers are not blocked by syncs 
initiated in the db_updater process.  When data needs to be flushed file:sync 
is _much_ slower than spawning a local process and opening the file again --  
in the neighborhood of 1000x slower even on Linux with its less-than-durable 
use of vanilla fsync.


-- 
This message is automatically generated by JIRA.
-
You can reply to this email to add a comment to the issue online.

Reply via email to