On Mittwoch, 29. August 2007, Howard Chu wrote:
rhafer@suse.de wrote:
Full_Name: Ralf Haferkamp Version: HEAD OS: URL: ftp://ftp.openldap.org/incoming/ Submission from: (NULL) (89.166.180.39)
While the results of a query are being cached, slapo-pcache will answer queries that match the same template from the cache that is currently being populated. This means that subsequent queries will get incomplete results until the original query is completely cached.
I don't see how that is possible. The query-in-progress isn't added to the cache until the final result is received. Until then, query_containment should not know anything is there to answer with.
Hm, current HEAD first calls add_query, which adds the CachedQuery to the cache and after that calls cache_entries to add the entries of that Query to the cache. That means that query_containment already know about the Query before its result is completely cached. In RE23 it is just the other way arround (first cache_entries() then add_query()). I see two possible solution:
1. Switch back to the old behaviour. But I guess the change was made for a reason. I don't know that yet. Seems the change happend between r1.95 and r1.96 of pcache.c (log message: "Fix concurrency issues").
2. Protect the cached query with an rw_lock. Writelock it while cache_entries() is executing and readlock it during searches. This would give us the behaviour that Ando suggested in the discussion of ITS#5112. (pcache would not try to cache the same search request mulitple times, but block the second request until the first one is cached and then answer it from the cache)