I will. Thanks! On Wed, Sep 7, 2016 at 6:37 AM, Ravikumar Govindarajan < [email protected]> wrote:
> Created JIRA issue. Please do go through it. Not sure if community will > find this useful > https://issues.apache.org/jira/browse/BLUR-481 > > On Mon, Sep 5, 2016 at 9:50 PM, Aaron McCurry <[email protected]> wrote: > > > Hey Ravi. Not sure if you attached the patch on email or not. The mail > > system removes attachments. You can open an issue here: > > > > https://issues.apache.org/jira/browse/BLUR > > > > Or post it to a gist or if it really is small you can just include in an > > email. > > > > Thanks! > > > > Aaron > > > > On Tue, Aug 30, 2016 at 1:44 AM, Ravikumar Govindarajan < > > [email protected]> wrote: > > > > > PF the small patch we made for this. We had a specific requirement to > > > solve. Don't know how useful it will be for the community! > > > > > > > > > > > > On Thu, Aug 25, 2016 at 11:40 AM, Ravikumar Govindarajan < > > > [email protected]> wrote: > > > > > >> Sure, will share the patch in a couple of days... > > >> > > >> On Tue, Aug 23, 2016 at 9:18 PM, Aaron McCurry <[email protected]> > > >> wrote: > > >> > > >>> Cool, sounds good. If you could send me the changes you have made > that > > >>> would be great. It would make it easier to integrate your changes > back > > >>> into the project. Thanks! > > >>> > > >>> Aaron > > >>> > > >>> On Wed, Aug 17, 2016 at 8:40 AM, Ravikumar Govindarajan < > > >>> [email protected]> wrote: > > >>> > > >>> > I removed _cacheValueQuietRefCannotBeReleased & instead directly > > used > > >>> a > > >>> > ByteArrayCacheValue every-time fillQuietly() is called. > > >>> > > > >>> > Now searches seem to work correctly. Not sure if it's because of > > >>> clone() or > > >>> > may be something else... > > >>> > > > >>> > FYI, I modified ByteArrayCacheValue to use a Store-Buffer to go > easy > > >>> on gc > > >>> > > > >>> > On Wed, Aug 10, 2016 at 8:12 PM, Aaron McCurry <[email protected] > > > > >>> wrote: > > >>> > > > >>> > > I'm not sure why that IOE is happening but if you want to change > > the > > >>> > quiet > > >>> > > behavior this is where you can control it. There's a config and > an > > >>> > object > > >>> > > there to change the behavior. > > >>> > > > > >>> > > https://github.com/apache/incubator-blur/blob/master/ > > >>> > > blur-store/src/main/java/org/apache/blur/store/ > > >>> > > BlockCacheDirectoryFactoryV2.java#L171 > > >>> > > > > >>> > > On Wed, Aug 10, 2016 at 10:37 AM, Ravikumar Govindarajan < > > >>> > > [email protected]> wrote: > > >>> > > > > >>> > > > Aaron, > > >>> > > > > > >>> > > > Just one more help... > > >>> > > > > > >>> > > > I hardcoded _quiet=true in CacheIndexInput.java and started the > > >>> > > > shard-server. It seems to mangle the cached-bytes & results in > > >>> > > IOException > > >>> > > > during searches. Merges however work smoothly... > > >>> > > > > > >>> > > > I do know that _quiet is meant only for merge. But there is a > > >>> use-case > > >>> > I > > >>> > > am > > >>> > > > working on, which will need this setting during searches > also... > > >>> > > > > > >>> > > > Any quick suggestions for this issue? > > >>> > > > > > >>> > > > -- > > >>> > > > Ravi > > >>> > > > > > >>> > > > On Thu, Aug 4, 2016 at 2:43 PM, Aaron McCurry < > > [email protected]> > > >>> > > wrote: > > >>> > > > > > >>> > > > > Ok. Thanks! I will patch the code and run some tests. > > >>> > > > > > > >>> > > > > On Monday, August 1, 2016, Ravikumar Govindarajan < > > >>> > > > > [email protected]> wrote: > > >>> > > > > > > >>> > > > > > We did a simple expiry check. Works fine as of now... > > >>> > > > > > > > >>> > > > > > private CacheValue lookup(boolean quietly) { > > >>> > > > > > > > >>> > > > > > CacheValue cacheValue = _indexInputCache.get(_key. > > >>> > getBlockId()); > > >>> > > > > > > > >>> > > > > > if(cacheValue == null || *cacheValue.isExpired()*) { > > >>> > > > > > > > >>> > > > > > .... > > >>> > > > > > > > >>> > > > > > } > > >>> > > > > > > > >>> > > > > > } > > >>> > > > > > > > >>> > > > > > On Sun, Jul 31, 2016 at 2:14 AM, Aaron McCurry < > > >>> [email protected] > > >>> > > > > > <javascript:;>> wrote: > > >>> > > > > > > > >>> > > > > > > Ok I have to look into it. Do you have a patch > available? > > >>> > > > > > > > > >>> > > > > > > On Thu, Jul 28, 2016 at 4:47 AM, Ravikumar Govindarajan < > > >>> > > > > > > [email protected] <javascript:;>> wrote: > > >>> > > > > > > > > >>> > > > > > > > One issue we found in CacheIndexInput.java which is > > >>> causing NPE > > >>> > > > > > > > > > >>> > > > > > > > private CacheValue lookup(boolean quietly) { > > >>> > > > > > > > > > >>> > > > > > > > CacheValue cacheValue = _indexInputCache.get(_key. > > >>> > > > getBlockId()); > > >>> > > > > > > > > > >>> > > > > > > > ....... > > >>> > > > > > > > > > >>> > > > > > > > return cacheValue; > > >>> > > > > > > > > > >>> > > > > > > > //There is no eviction check for the CacheValue > > >>> returned > > >>> > > from > > >>> > > > > > > > IndexInputCache, causing NPE > > >>> > > > > > > > > > >>> > > > > > > > } > > >>> > > > > > > > > > >>> > > > > > > > Also, lookup method blindly adds to _indexInputCache > > before > > >>> > > > > returning. > > >>> > > > > > > > Instead, it would be better if it is done inside the > > >>> null-check > > >>> > > > > loop... > > >>> > > > > > > > > > >>> > > > > > > > On Fri, Jul 22, 2016 at 6:09 PM, Ravikumar > Govindarajan < > > >>> > > > > > > > [email protected] <javascript:;>> > wrote: > > >>> > > > > > > > > > >>> > > > > > > > > Thanks for the feedback Aaron > > >>> > > > > > > > > > > >>> > > > > > > > > On Thu, Jul 21, 2016 at 6:42 PM, Aaron McCurry < > > >>> > > > [email protected] > > >>> > > > > > <javascript:;>> > > >>> > > > > > > > wrote: > > >>> > > > > > > > > > > >>> > > > > > > > >> On Thu, Jul 21, 2016 at 1:55 AM, Ravikumar > > Govindarajan > > >>> < > > >>> > > > > > > > >> [email protected] <javascript:;>> > > wrote: > > >>> > > > > > > > >> > > >>> > > > > > > > >> > Just now saw BlockLocks code. It is documented to > be > > >>> > > > > thread-safe. > > >>> > > > > > > > >> Apologize > > >>> > > > > > > > >> > for the trouble... > > >>> > > > > > > > >> > > > >>> > > > > > > > >> > Btw, a small nit. The below method is not > returning > > >>> true. > > >>> > Is > > >>> > > > > that > > >>> > > > > > > > >> > intentional? > > >>> > > > > > > > >> > > > >>> > > > > > > > >> > boolean releaseIfValid(long address) { > > >>> > > > > > > > >> > > > >>> > > > > > > > >> > if (address >= _address && address < > > >>> _maxAddress) { > > >>> > > > > > > > >> > > > >>> > > > > > > > >> > long offset = address - _address; > > >>> > > > > > > > >> > > > >>> > > > > > > > >> > int index = (int) (offset / _chunkSize); > > >>> > > > > > > > >> > > > >>> > > > > > > > >> > _locks.clear(index); > > >>> > > > > > > > >> > > > >>> > > > > > > > >> > } > > >>> > > > > > > > >> > > > >>> > > > > > > > >> > return false; > > >>> > > > > > > > >> > > > >>> > > > > > > > >> > } > > >>> > > > > > > > >> > > > >>> > > > > > > > >> > > >>> > > > > > > > >> In my 30 second review I think you are right. It > > should > > >>> > > > probably > > >>> > > > > > > return > > >>> > > > > > > > >> true. However I want to alanyze what happens with > the > > >>> > current > > >>> > > > > code > > >>> > > > > > > so I > > >>> > > > > > > > >> can write a test that proves there is a problem > > (because > > >>> > there > > >>> > > > > > > probably > > >>> > > > > > > > >> is) > > >>> > > > > > > > >> and fix it. > > >>> > > > > > > > >> > > >>> > > > > > > > >> > > >>> > > > > > > > >> > > > >>> > > > > > > > >> > Also, I thought a background thread can attempt > > >>> merging > > >>> > > > sparsely > > >>> > > > > > > > >> populated > > >>> > > > > > > > >> > slabs into one single slab & release free-mem (in > > >>> 128MB > > >>> > > > chunks) > > >>> > > > > > back > > >>> > > > > > > > to > > >>> > > > > > > > >> > OS... > > >>> > > > > > > > >> > > > >>> > > > > > > > >> > > >>> > > > > > > > >> I think this is a good idea, I just didn't get to > > >>> writing > > >>> > it. > > >>> > > > > > > > >> > > >>> > > > > > > > >> > > >>> > > > > > > > >> > > > >>> > > > > > > > >> > You think it could be beneficial or it would make > it > > >>> > > > needlessly > > >>> > > > > > > > complex? > > >>> > > > > > > > >> > > > >>> > > > > > > > >> > > >>> > > > > > > > >> I think for dedicated servers is might be overkill, > > but > > >>> for > > >>> > a > > >>> > > > > mixed > > >>> > > > > > > > >> workload environment (think docker containers and > the > > >>> like) > > >>> > it > > >>> > > > > would > > >>> > > > > > > be > > >>> > > > > > > > >> useful. > > >>> > > > > > > > >> > > >>> > > > > > > > >> Aaron > > >>> > > > > > > > >> > > >>> > > > > > > > >> > > >>> > > > > > > > >> > > > >>> > > > > > > > >> > On Wed, Jul 20, 2016 at 11:38 PM, Aaron McCurry < > > >>> > > > > > [email protected] <javascript:;> > > >>> > > > > > > > > > >>> > > > > > > > >> > wrote: > > >>> > > > > > > > >> > > > >>> > > > > > > > >> > > I don't think there is a race condition because > > the > > >>> > > > allocation > > >>> > > > > > > > occurs > > >>> > > > > > > > >> > > atomically in the BlockLocks class. Do see a > > >>> problem? > > >>> > > Let > > >>> > > > me > > >>> > > > > > > know. > > >>> > > > > > > > >> > > > > >>> > > > > > > > >> > > Aaron > > >>> > > > > > > > >> > > > > >>> > > > > > > > >> > > On Wed, Jul 20, 2016 at 9:19 AM, Ravikumar > > >>> Govindarajan > > >>> > < > > >>> > > > > > > > >> > > [email protected] > <javascript:;>> > > >>> wrote: > > >>> > > > > > > > >> > > > > >>> > > > > > > > >> > > > I came across the following in > > >>> > > > > > > > >> SlabAllocationCacheValueBufferPool.java. > > >>> > > > > > > > >> > > Is > > >>> > > > > > > > >> > > > the below method thread-safe? > > >>> > > > > > > > >> > > > > > >>> > > > > > > > >> > > > @Override > > >>> > > > > > > > >> > > > > > >>> > > > > > > > >> > > > public CacheValue getCacheValue(int > > >>> cacheBlockSize) > > >>> > { > > >>> > > > > > > > >> > > > > > >>> > > > > > > > >> > > > validCacheBlockSize(cacheBlockSize); > > >>> > > > > > > > >> > > > > > >>> > > > > > > > >> > > > int numberOfChunks = getNumberOfChunks( > > >>> > > > cacheBlockSize); > > >>> > > > > > > > >> > > > > > >>> > > > > > > > >> > > > ... > > >>> > > > > > > > >> > > > > > >>> > > > > > > > >> > > > } > > >>> > > > > > > > >> > > > > > >>> > > > > > > > >> > > > > > >>> > > > > > > > >> > > > It does allocation in a tight-loop using > > >>> BlockLocks, > > >>> > > Slab > > >>> > > > & > > >>> > > > > > > > Chunks. > > >>> > > > > > > > >> Is > > >>> > > > > > > > >> > > > there a race-condition where 2 threads can > pick > > >>> same > > >>> > > slab > > >>> > > > & > > >>> > > > > > > chunk? > > >>> > > > > > > > >> > > > > > >>> > > > > > > > >> > > > > >>> > > > > > > > >> > > > >>> > > > > > > > >> > > >>> > > > > > > > > > > >>> > > > > > > > > > > >>> > > > > > > > > > >>> > > > > > > > > >>> > > > > > > > >>> > > > > > > >>> > > > > > >>> > > > > >>> > > > >>> > > >> > > >> > > > > > >
