Example #1
0
//JAVA TO C# CONVERTER WARNING: Method 'throws' clauses are not available in C#:
//ORIGINAL LINE: IndexReference getIndexSearcher(IndexIdentifier identifier) throws org.neo4j.internal.kernel.api.exceptions.explicitindex.ExplicitIndexNotFoundKernelException
        internal virtual IndexReference GetIndexSearcher(IndexIdentifier identifier)
        {
            AssertNotClosed();
            IndexReference searcher = _indexSearchers.get(identifier);

            if (searcher == null)
            {
                return(SyncGetIndexSearcher(identifier));
            }
            lock ( searcher )
            {
                /*
                 * We need to get again a reference to the searcher because it might be so that
                 * it was refreshed while we waited. Once in here though no one will mess with
                 * our searcher
                 */
                searcher = _indexSearchers.get(identifier);
                if (searcher == null || searcher.Closed)
                {
                    return(SyncGetIndexSearcher(identifier));
                }
                searcher = RefreshSearcherIfNeeded(searcher);
                searcher.IncRef();
                return(searcher);
            }
        }
Example #2
0
//JAVA TO C# CONVERTER WARNING: Method 'throws' clauses are not available in C#:
//ORIGINAL LINE: private synchronized IndexReference syncGetIndexSearcher(IndexIdentifier identifier) throws org.neo4j.internal.kernel.api.exceptions.explicitindex.ExplicitIndexNotFoundKernelException
        private IndexReference SyncGetIndexSearcher(IndexIdentifier identifier)
        {
            lock (this)
            {
                try
                {
                    IndexReference indexReference = _indexSearchers.get(identifier);
                    if (indexReference == null)
                    {
                        indexReference = _indexReferenceFactory.createIndexReference(identifier);
                        _indexSearchers.put(identifier, indexReference);
                        ConcurrentDictionary <string, DocValuesType> fieldTypes = new ConcurrentDictionary <string, DocValuesType>();
                        IndexSearcher             searcher = indexReference.Searcher;
                        IList <LeafReaderContext> leaves   = searcher.TopReaderContext.leaves();
                        foreach (LeafReaderContext leafReaderContext in leaves)
                        {
                            foreach (FieldInfo fieldInfo in leafReaderContext.reader().FieldInfos)
                            {
                                fieldTypes[fieldInfo.name] = fieldInfo.DocValuesType;
                            }
                        }
                        _indexTypeMap[identifier] = fieldTypes;
                    }
                    else
                    {
                        if (!_readOnly)
                        {
                            lock ( indexReference )
                            {
                                indexReference = RefreshSearcherIfNeeded(indexReference);
                            }
                        }
                    }
                    indexReference.IncRef();
                    return(indexReference);
                }
                catch (IOException e)
                {
                    throw new UncheckedIOException(e);
                }
            }
        }