예제 #1
0
//JAVA TO C# CONVERTER WARNING: Method 'throws' clauses are not available in C#:
//ORIGINAL LINE: private void makeSureIndexHasSomeData(org.neo4j.kernel.api.index.IndexProvider provider) throws java.io.IOException, org.neo4j.kernel.api.exceptions.index.IndexEntryConflictException
        private void MakeSureIndexHasSomeData(IndexProvider provider)
        {
            using (IndexAccessor accessor = provider.GetOnlineAccessor(_storeIndexDescriptor, _samplingConfig), IndexUpdater updater = accessor.NewUpdater(IndexUpdateMode.ONLINE))
            {
                updater.Process(IndexEntryUpdate.add(1, _storeIndexDescriptor, Values.of("some string")));
            }
        }
예제 #2
0
        /// <summary>
        /// This test come from a support case where dropping an index would block forever after index sampling failed.
        /// <para>
        /// A fusion index has multiple <seealso cref="IndexSampler index samplers"/> that are called sequentially. If one fails, then the other will never be invoked.
        /// This was a problem for <seealso cref="LuceneIndexSampler"/>. It owns a <seealso cref="org.neo4j.helpers.TaskControl"/> that it will try to release in try-finally
        /// in <seealso cref="LuceneIndexSampler.sampleIndex()"/>. But it never gets here because a prior <seealso cref="IndexSampler"/> fails.
        /// </para>
        /// <para>
        /// Because the <seealso cref="org.neo4j.helpers.TaskControl"/> was never released the lucene accessor would block forever, waiting for
        /// <seealso cref="TaskCoordinator.awaitCompletion()"/>.
        /// </para>
        /// <para>
        /// This situation was solved by making <seealso cref="IndexSampler"/> <seealso cref="System.IDisposable"/> and include it in try-with-resource together with
        /// <seealso cref="IndexReader"/> that created it.
        /// </para>
        /// </summary>
//JAVA TO C# CONVERTER TODO TASK: Most Java annotations will not have direct .NET equivalent attributes:
//ORIGINAL LINE: @Test(timeout = 5_000L) public void failedIndexSamplingMustNotPreventIndexDrop() throws java.io.IOException, org.neo4j.kernel.api.exceptions.index.IndexEntryConflictException
//JAVA TO C# CONVERTER WARNING: Method 'throws' clauses are not available in C#:
        public virtual void FailedIndexSamplingMustNotPreventIndexDrop()
        {
            LuceneIndexProvider luceneProvider = luceneProvider();

            MakeSureIndexHasSomeData(luceneProvider);                 // Otherwise no sampler will be created.

            IndexProvider       failingProvider = failingProvider();
            FusionIndexProvider fusionProvider  = CreateFusionProvider(luceneProvider, failingProvider);

            using (IndexAccessor fusionAccessor = fusionProvider.GetOnlineAccessor(_storeIndexDescriptor, _samplingConfig))
            {
                IndexSamplingJob indexSamplingJob = CreateIndexSamplingJob(fusionAccessor);

                // Call run from other thread
                try
                {
                    indexSamplingJob.run();
                }
                catch (Exception e)
                {
                    assertSame(e, _sampleException);
                }

                // then
                fusionAccessor.Drop();
                // should not block forever
            }
        }
예제 #3
0
        /// <inheritdoc/>
        protected override SqlProvider VisitIndex(IndexProvider provider)
        {
            var       index = provider.Index.Resolve(Handlers.Domain.Model);
            SqlSelect query = BuildProviderQuery(index);

            return(CreateProvider(query, provider));
        }
예제 #4
0
        private IndexPopulator IndexPopulator(IndexDescriptor descriptor)
        {
            IndexSamplingConfig samplingConfig = new IndexSamplingConfig(Config.defaults());
            IndexProvider       indexProvider  = _db.DependencyResolver.resolveDependency(typeof(DefaultIndexProviderMap)).DefaultProvider;

            return(indexProvider.GetPopulator(descriptor.WithId(21), samplingConfig, heapBufferFactory(1024)));
        }
예제 #5
0
 private void AssertProviderFound(IndexProvider provider, string providerDescriptorName)
 {
     if (provider == null)
     {
         throw new IndexProviderNotFoundException("Tried to get index provider with name " + providerDescriptorName + " whereas available providers in this session being " + _indexProvidersByName.Keys + ", and default being " + _defaultIndexProvider.ProviderDescriptor.name());
     }
 }
예제 #6
0
        private static IndexProvider MockProvider(System.Type providerClass, string name)
        {
            IndexProvider mock = mock(providerClass);

            when(mock.ProviderDescriptor).thenReturn(new IndexProviderDescriptor(name, "1"));
            return(mock);
        }
예제 #7
0
        public void ShouldThrowExceptionIfHttpCodeIsNot201(
            IndexFor indexFor,
            IndexProvider indexProvider,
            IndexType indexType,
            string createEndpoint,
            string createJson)
        {
            //Arrange
            using (var testHarness = new RestTestHarness
            {
                {
                    MockRequest.PostJson(createEndpoint, createJson),
                    MockResponse.Http(500)
                }
            })
            {
                var graphClient = testHarness.CreateAndConnectGraphClient();

                var indexConfiguration = new IndexConfiguration
                {
                    Provider = indexProvider,
                    Type     = indexType
                };
                Assert.Throws <Exception>(() => graphClient.CreateIndex("foo", indexConfiguration, indexFor));
            }
        }
예제 #8
0
        public void ShouldCreateIndex(
            IndexFor indexFor,
            IndexProvider indexProvider,
            IndexType indexType,
            string createEndpoint,
            string createJson)
        {
            //Arrange
            using (var testHarness = new RestTestHarness
            {
                {
                    MockRequest.PostJson(createEndpoint, createJson),
                    MockResponse.Http(201)
                }
            })
            {
                var graphClient = testHarness.CreateAndConnectGraphClient();

                var indexConfiguration = new IndexConfiguration
                {
                    Provider = indexProvider,
                    Type     = indexType
                };
                graphClient.CreateIndex("foo", indexConfiguration, indexFor);
            }
        }
예제 #9
0
//JAVA TO C# CONVERTER TODO TASK: Most Java annotations will not have direct .NET equivalent attributes:
//ORIGINAL LINE: @Test public void mustSelectCorrectTargetForAllGivenValueCombinations()
        public virtual void MustSelectCorrectTargetForAllGivenValueCombinations()
        {
            // given
            Dictionary <IndexSlot, Value[]> values = FusionIndexTestHelp.ValuesByGroup();

            Value[] allValues = FusionIndexTestHelp.AllValues();

            foreach (IndexSlot slot in Enum.GetValues(typeof(IndexSlot)))
            {
                Value[] group = values[slot];
                foreach (Value value in group)
                {
                    // when
                    IndexProvider selected = _instanceSelector.select(_slotSelector.selectSlot(array(value), GROUP_OF));

                    // then
                    assertSame(OrLucene(_providers[slot]), selected);
                }
            }

            // All composite values should go to lucene
            foreach (Value firstValue in allValues)
            {
                foreach (Value secondValue in allValues)
                {
                    // when
                    IndexProvider selected = _instanceSelector.select(_slotSelector.selectSlot(array(firstValue, secondValue), GROUP_OF));

                    // then
                    assertSame(_providers[LUCENE], selected);
                }
            }
        }
예제 #10
0
        public void ShouldCreateIndex(
            IndexFor indexFor,
            IndexProvider indexProvider,
            IndexType indexType,
            string createEndpoint,
            string createJson)
        {
            //Arrange
            using (var testHarness = new RestTestHarness
            {
                {
                    MockRequest.PostJson(createEndpoint, createJson),
                    MockResponse.Http(201)
                }
            })
            {
                var graphClient = testHarness.CreateAndConnectGraphClient();

                var indexConfiguration = new IndexConfiguration
                {
                    Provider = indexProvider,
                    Type = indexType
                };
                graphClient.CreateIndex("foo", indexConfiguration, indexFor);
            }
        }
예제 #11
0
 public IndexManagerImpl(System.Func <Transaction> bridge, IndexProvider provider, AutoIndexer <Node> nodeAutoIndexer, RelationshipAutoIndexer relAutoIndexer)
 {
     this._transactionBridge = bridge;
     this._provider          = provider;
     this._nodeAutoIndexer   = nodeAutoIndexer;
     this._relAutoIndexer    = relAutoIndexer;
 }
예제 #12
0
//JAVA TO C# CONVERTER TODO TASK: Most Java annotations will not have direct .NET equivalent attributes:
//ORIGINAL LINE: @Test public void getPopulationFailureMustThrowEvenIfFailureOnOtherIndex()
        public virtual void getPopulationFailureMustThrowEvenIfFailureOnOtherIndex()
        {
            // given
            _provider = NewProvider();

            int            nonFailedIndexId   = NativeIndexProviderTests.INDEX_ID;
            IndexPopulator nonFailedPopulator = _provider.getPopulator(Descriptor(nonFailedIndexId), SamplingConfig(), heapBufferFactory(1024));

            nonFailedPopulator.Create();
            nonFailedPopulator.Close(true);

            int            failedIndexId   = 2;
            IndexPopulator failedPopulator = _provider.getPopulator(Descriptor(failedIndexId), SamplingConfig(), heapBufferFactory(1024));

            failedPopulator.Create();

            // when
            failedPopulator.MarkAsFailed("failure");
            failedPopulator.Close(false);

            // then
            try
            {
                _provider.getPopulationFailure(Descriptor(nonFailedIndexId));
                fail("Should have failed");
            }
            catch (System.InvalidOperationException e)
            {
                // good
                assertThat(e.Message, Matchers.containsString(Convert.ToString(nonFailedIndexId)));
            }
        }
예제 #13
0
        private static IndexProvider MockedIndexProvider(string name)
        {
            IndexProvider provider = mock(typeof(IndexProvider));

            when(provider.ProviderDescriptor).thenReturn(new IndexProviderDescriptor(name, "1"));
            return(provider);
        }
예제 #14
0
        private void InitDefaultProvider()
        {
            string        providerName = _config.get(GraphDatabaseSettings.default_schema_provider);
            IndexProvider configuredDefaultProvider = _indexProvidersByName[providerName];

            requireNonNull(configuredDefaultProvider, () => format("Configured default provider: `%s` not found. Available index providers: %s.", providerName, _indexProvidersByName.Keys.ToString()));
            _defaultIndexProvider = configuredDefaultProvider;
        }
예제 #15
0
 private void FillProvidersSelector(IndexProvider stringProvider, IndexProvider numberProvider, IndexProvider spatialProvider, IndexProvider temporalProvider, IndexProvider luceneProvider)
 {
     _providers.put(STRING, stringProvider);
     _providers.put(NUMBER, numberProvider);
     _providers.put(SPATIAL, spatialProvider);
     _providers.put(TEMPORAL, temporalProvider);
     _providers.put(LUCENE, luceneProvider);
 }
예제 #16
0
        public override IndexProvider Lookup(IndexProviderDescriptor providerDescriptor)
        {
            AssertInit();
            IndexProvider provider = _indexProvidersByDescriptor[providerDescriptor];

            AssertProviderFound(provider, providerDescriptor.Name());
            return(provider);
        }
예제 #17
0
//JAVA TO C# CONVERTER TODO TASK: Most Java annotations will not have direct .NET equivalent attributes:
//ORIGINAL LINE: @Before public void setup() throws java.io.IOException, org.neo4j.internal.kernel.api.exceptions.EntityNotFoundException
//JAVA TO C# CONVERTER WARNING: Method 'throws' clauses are not available in C#:
        public virtual void Setup()
        {
            _indexProvider = ProviderCreator.apply(this);
            Rules.fileSystem().mkdirs(_indexProvider.directoryStructure().rootDirectory());
            _populator = _indexProvider.getPopulator(Descriptor, _samplingConfig, heapBufferFactory(1024));
            when(_nodePropertyAccessor.getNodePropertyValue(anyLong(), anyInt())).thenThrow(typeof(System.NotSupportedException));
            _prevAccessCheck = UnsafeUtil.exchangeNativeAccessCheckEnabled(false);
        }
        private StoreIndexDescriptor[] CreateIndexRules(IDictionary <string, int> labelNameIdMap, int propertyId)
        {
            IndexProvider           lookup             = IndexProviderMap.lookup(SchemaIndex.providerName());
            IndexProviderDescriptor providerDescriptor = lookup.ProviderDescriptor;

//JAVA TO C# CONVERTER TODO TASK: Method reference constructor syntax is not converted by Java to C# Converter:
            return(labelNameIdMap.Values.Select(index => IndexDescriptorFactory.forSchema(SchemaDescriptorFactory.forLabel(index, propertyId), providerDescriptor).withId(index)).ToArray(StoreIndexDescriptor[] ::new));
        }
예제 #19
0
//JAVA TO C# CONVERTER TODO TASK: Most Java annotations will not have direct .NET equivalent attributes:
//ORIGINAL LINE: @Before public void setup()
            public virtual void Setup()
            {
                Fs         = PageCacheAndDependenciesRule.fileSystem();
                GraphDbDir = PageCacheAndDependenciesRule.directory().databaseDir();
                PageCache pageCache = PageCacheAndDependenciesRule.pageCache();

                IndexProvider = TestSuite.createIndexProvider(pageCache, Fs, GraphDbDir);
            }
예제 #20
0
//JAVA TO C# CONVERTER WARNING: Method 'throws' clauses are not available in C#:
//ORIGINAL LINE: public org.neo4j.kernel.api.index.IndexProvider lookup(String providerDescriptorName) throws org.neo4j.kernel.impl.api.index.IndexProviderNotFoundException
        public override IndexProvider Lookup(string providerDescriptorName)
        {
            AssertInit();
            IndexProvider provider = _indexProvidersByName[providerDescriptorName];

            AssertProviderFound(provider, providerDescriptorName);
            return(provider);
        }
예제 #21
0
 public FusionIndexProvider(IndexProvider stringProvider, IndexProvider numberProvider, IndexProvider spatialProvider, IndexProvider temporalProvider, IndexProvider luceneProvider, SlotSelector slotSelector, IndexProviderDescriptor descriptor, IndexDirectoryStructure.Factory directoryStructure, FileSystemAbstraction fs, bool archiveFailedIndex) : base(descriptor, directoryStructure)
 {
     this._archiveFailedIndex = archiveFailedIndex;
     this._slotSelector       = slotSelector;
     this._providers          = new InstanceSelector <IndexProvider>();
     this._dropAction         = new FileSystemIndexDropAction(fs, directoryStructure());
     FillProvidersSelector(stringProvider, numberProvider, spatialProvider, temporalProvider, luceneProvider);
     slotSelector.ValidateSatisfied(_providers);
 }
예제 #22
0
        private IndexProvider Put(IndexProviderDescriptor providerDescriptor, IndexProvider provider)
        {
            IndexProvider existing = _indexProvidersByDescriptor.putIfAbsent(providerDescriptor, provider);

            if (!_indexProvidersByName.ContainsKey(providerDescriptor.Name()))
            {
                _indexProvidersByName.Add(providerDescriptor.Name(), provider);
            }
            return(existing);
        }
예제 #23
0
 private void WriteFailure(string indexName, StringBuilder builder, IndexProvider provider, StoreIndexDescriptor descriptor)
 {
     try
     {
         string failure = provider.GetPopulationFailure(descriptor);
         builder.Append(indexName);
         builder.Append(": ");
         builder.Append(failure);
         builder.Append(' ');
     }
     catch (System.InvalidOperationException)
     {               // Just catch
     }
 }
예제 #24
0
 private void SetItemIndex(object item, int index)
 {
     if (IndexProvider != null)
     {
         IndexProvider.SetIndex(item, index);
     }
     else
     {
         if (ItemContainerGenerator.ContainerFromItem(item) is LuiAccordionItem itemContainer)
         {
             itemContainer.Index = index;
         }
     }
 }
예제 #25
0
//JAVA TO C# CONVERTER TODO TASK: Most Java annotations will not have direct .NET equivalent attributes:
//ORIGINAL LINE: @Test public void shouldReportInitialStateAsPopulatingIfPopulationStartedButIncomplete()
        public virtual void ShouldReportInitialStateAsPopulatingIfPopulationStartedButIncomplete()
        {
            // given
            _provider = NewProvider();
            IndexPopulator populator = _provider.getPopulator(Descriptor(), SamplingConfig(), heapBufferFactory(1024));

            populator.Create();

            // when
            InternalIndexState state = _provider.getInitialState(Descriptor());

            // then
            assertEquals(InternalIndexState.POPULATING, state);
            populator.Close(true);
        }
예제 #26
0
//JAVA TO C# CONVERTER TODO TASK: Most Java annotations will not have direct .NET equivalent attributes:
//ORIGINAL LINE: @Test public void shouldReportInitialStateAsOnlineIfPopulationCompletedSuccessfully()
        public virtual void ShouldReportInitialStateAsOnlineIfPopulationCompletedSuccessfully()
        {
            // given
            _provider = NewProvider();
            IndexPopulator populator = _provider.getPopulator(Descriptor(), SamplingConfig(), heapBufferFactory(1024));

            populator.Create();
            populator.Close(true);

            // when
            InternalIndexState state = _provider.getInitialState(Descriptor());

            // then
            assertEquals(InternalIndexState.ONLINE, state);
        }
예제 #27
0
 private int GetItemIndex(object item)
 {
     if (IndexProvider != null)
     {
         return(IndexProvider.GetIndex(item));
     }
     else
     {
         if (ItemContainerGenerator.ContainerFromItem(item) is LuiAccordionItem itemContainer)
         {
             return(itemContainer.Index);
         }
     }
     return(-2);
 }
예제 #28
0
//JAVA TO C# CONVERTER TODO TASK: Most Java annotations will not have direct .NET equivalent attributes:
//ORIGINAL LINE: @Test public void shouldReportInitialStateAsFailedIfMarkedAsFailed()
        public virtual void ShouldReportInitialStateAsFailedIfMarkedAsFailed()
        {
            // given
            _provider = NewProvider();
            IndexPopulator populator = _provider.getPopulator(Descriptor(), SamplingConfig(), heapBufferFactory(1024));

            populator.Create();
            populator.MarkAsFailed("Just some failure");
            populator.Close(false);

            // when
            InternalIndexState state = _provider.getInitialState(Descriptor());

            // then
            assertEquals(InternalIndexState.FAILED, state);
        }
예제 #29
0
        private void SetupMocks()
        {
            IndexSlot[] aliveSlots = FusionVersion.aliveSlots();
            _aliveProviders = new IndexProvider[aliveSlots.Length];
            _providers      = new Dictionary <IndexSlot, IndexProvider>(typeof(IndexSlot));
            fill(_providers, IndexProvider.EMPTY);
            for (int i = 0; i < aliveSlots.Length; i++)
            {
                switch (aliveSlots[i])
                {
                case STRING:
                    IndexProvider @string = MockProvider(typeof(StringIndexProvider), "string");
                    _providers[STRING] = @string;
                    _aliveProviders[i] = @string;
                    break;

                case NUMBER:
                    IndexProvider number = MockProvider(typeof(NumberIndexProvider), "number");
                    _providers[NUMBER] = number;
                    _aliveProviders[i] = number;
                    break;

                case SPATIAL:
                    IndexProvider spatial = MockProvider(typeof(SpatialIndexProvider), "spatial");
                    _providers[SPATIAL] = spatial;
                    _aliveProviders[i]  = spatial;
                    break;

                case TEMPORAL:
                    IndexProvider temporal = MockProvider(typeof(TemporalIndexProvider), "temporal");
                    _providers[TEMPORAL] = temporal;
                    _aliveProviders[i]   = temporal;
                    break;

                case LUCENE:
                    IndexProvider lucene = MockProvider(typeof(IndexProvider), "lucene");
                    _providers[LUCENE] = lucene;
                    _aliveProviders[i] = lucene;
                    break;

                default:
                    throw new Exception();
                }
            }
            _fusionIndexProvider = new FusionIndexProvider(_providers[STRING], _providers[NUMBER], _providers[SPATIAL], _providers[TEMPORAL], _providers[LUCENE], FusionVersion.slotSelector(), _descriptor, NONE, mock(typeof(FileSystemAbstraction)), false);
            _instanceSelector    = new InstanceSelector <IndexProvider>(_providers);
        }
예제 #30
0
        /* getPopulator */

//JAVA TO C# CONVERTER TODO TASK: Most Java annotations will not have direct .NET equivalent attributes:
//ORIGINAL LINE: @Test public void getPopulatorMustThrowIfInReadOnlyMode()
        public virtual void getPopulatorMustThrowIfInReadOnlyMode()
        {
            // given
            _provider = NewReadOnlyProvider();

            try
            {
                // when
                _provider.getPopulator(Descriptor(), SamplingConfig(), heapBufferFactory(1024));
                fail("Should have failed");
            }
            catch (System.NotSupportedException)
            {
                // then
                // good
            }
        }
예제 #31
0
//JAVA TO C# CONVERTER TODO TASK: Most Java annotations will not have direct .NET equivalent attributes:
//ORIGINAL LINE: @Test void throwIfToManyInstances()
        internal virtual void ThrowIfToManyInstances()
        {
            // given
            Dictionary <IndexSlot, IndexProvider> instances = new Dictionary <IndexSlot, IndexProvider>(typeof(IndexSlot));

            foreach (IndexSlot indexSlot in Enum.GetValues(typeof(IndexSlot)))
            {
                instances[indexSlot] = IndexProvider.EMPTY;
            }
            IndexProvider mockedIndxProvider = mock(typeof(IndexProvider));

            instances[NUMBER] = mockedIndxProvider;
            InstanceSelector <IndexProvider> instanceSelector = new InstanceSelector <IndexProvider>(instances);

            // when, then
            assertThrows(typeof(System.ArgumentException), () => validateSelectorInstances(instanceSelector));
        }
예제 #32
0
        public void ShouldThrowExceptionIfHttpCodeIsNot201(
            IndexFor indexFor,
            IndexProvider indexProvider,
            IndexType indexType,
            string createEndpoint,
            string createJson)
        {
            //Arrange
            using (var testHarness = new RestTestHarness
            {
                {
                    MockRequest.PostJson(createEndpoint, createJson),
                    MockResponse.Http(500)
                }
            })
            {
                var graphClient = testHarness.CreateAndConnectGraphClient();

                var indexConfiguration = new IndexConfiguration
                {
                    Provider = indexProvider,
                    Type = indexType
                };
                Assert.Throws<Exception>(() => graphClient.CreateIndex("foo", indexConfiguration, indexFor));
            }
        }