Hibernate Search + Infinispan + S3 Запретить буквенно-цифровые имена файлов

Мне нужна помощь в настройке Hibernate Search с использованием Infinispan, сохранении индексов на S3

В настоящее время кажется, что он в основном работает, но один из создаваемых им индексных файлов имеет буквенно-цифровое имя, которое возвращается, чтобы вызвать следующую ошибку:

Exception in thread "LuceneIndexesMetadata-CloudCacheStore-3" java.lang.IllegalArgumentException: bucketId: A566834176 (expected: integer)
    at org.infinispan.loaders.bucket.Bucket.setBucketId(Bucket.java:77)
    at org.infinispan.loaders.cloud.CloudCacheStore.readFromBlob(CloudCacheStore.java:446)
    at org.infinispan.loaders.cloud.CloudCacheStore.scanBlobForExpiredEntries(CloudCacheStore.java:291)
    at org.infinispan.loaders.cloud.CloudCacheStore.purge(CloudCacheStore.java:283)
    at org.infinispan.loaders.cloud.CloudCacheStore.purgeInternal(CloudCacheStore.java:335)
    at org.infinispan.loaders.AbstractCacheStore$2.run(AbstractCacheStore.java:111)
    at java.util.concurrent.ThreadPoolExecutor$Worker.runTask(ThreadPoolExecutor.java:895)
    at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:918)
    at java.lang.Thread.run(Thread.java:680)

В качестве примечания: включение сжатия индексов приводит к расширению '.bz2', которое вызывает эту ошибку для каждого файла индекса.

Я не уверен, в чем проблема. Должен ли он создавать индексные файлы только с целыми именами? Есть ли где-нибудь элемент конфигурации, который будет использовать другой метод чтения, который позволит использовать буквенно-цифровые имена (и, таким образом, позволит мне использовать сжатие)?

Возможно, это несоответствие версий. Вот список того, что я сейчас использую:

Hibernate (ядро, entitymanager, поиск, поиск-infinispan): 4.2.0.Final Infinispan (ядро, lucene-каталог, cachestore-cloud): 5.1.8.Final JClouds (ядро, blobstore, allblobstore, provider.aws-s3) : 1.1.1

Вот несколько моих конфигурационных файлов:

постоянство.xml

<?xml version="1.0" encoding="UTF-8"?>
<persistence version="2.0" xmlns="http://java.sun.com/xml/ns/persistence" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://java.sun.com/xml/ns/persistence http://java.sun.com/xml/ns/persistence/persistence_2_0.xsd">
    <persistence-unit name="###">
        <properties>
            <property name="hibernate.dialect" value="org.hibernate.dialect.MySQLDialect"/>
            <property name="hibernate.search.default.directory_provider" value="infinispan"/> 
            <property name="hibernate.search.infinispan.configuration_resourcename" value="infinispan.xml"/>
        </properties>
    </persistence-unit>
</persistence>

infinispan.xml

<infinispan xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="urn:infinispan:config:5.1 http://www.infinispan.org/schemas/infinispan-config-5.1.xsd" xmlns="urn:infinispan:config:5.1">


<!-- *************************** -->
<!-- System-wide global settings -->
<!-- *************************** -->
<global>
    <globalJmxStatistics enabled="false" cacheManagerName="HibernateSearch" allowDuplicateDomains="true" />

    <transport clusterName="HibernateSearch-Infinispan-cluster" distributedSyncTimeout="30000">
        <properties>
            <property name="configurationFile" value="infinispan-s3.xml"/>
        </properties>
    </transport>

    <shutdown hookBehavior="REGISTER" />
</global>


<!-- *************************** -->
<!-- Default "template" settings -->
<!-- *************************** -->
<default>
    <locking lockAcquisitionTimeout="30000" writeSkewCheck="false" concurrencyLevel="500" useLockStriping="false" />

    <!-- Invocation batching is required for use with the Lucene Directory -->
    <invocationBatching enabled="true" />

    <clustering mode="invalidation">
        <!-- Prefer loading all data at startup than later -->
        <stateTransfer timeout="60000" fetchInMemoryState="false" />
        <!-- Network calls are synchronous by default -->
        <sync replTimeout="30000" />
    </clustering>
    <jmxStatistics enabled="false" />
    <eviction maxEntries="-1" strategy="NONE" />
    <expiration maxIdle="300000" />

<loaders passivation="false" shared="false" preload="true">
    <loader class="org.infinispan.loaders.cloud.CloudCacheStore" fetchPersistentState="false" ignoreModifications="false" purgeOnStartup="false">
         <properties>
            <property name="identity" value="${AWS_ACCESS_KEY_ID}"/>
            <property name="password" value="${AWS_SECRET_KEY}"/>
            <property name="bucketPrefix" value="${PARAM2}"/>
            <property name="cloudService" value="aws-s3"/>
            <property name="compress" value="false"/>
        </properties>
        <async
                   enabled="true"
                   flushLockTimeout="15000"
                   threadPoolSize="10"
        />
    </loader>
</loaders>

</default>

<!-- *************************************** -->
<!--  Cache to store Lucene's file metadata  -->
<!-- *************************************** -->
<namedCache
    name="LuceneIndexesMetadata">
    <clustering
        mode="invalidation">
        <stateTransfer
            fetchInMemoryState="false" />
        <!--<sync
            replTimeout="30000" /> -->
    </clustering>
</namedCache>

<!-- **************************** -->
<!--  Cache to store Lucene data  -->
<!-- **************************** -->
<namedCache
    name="LuceneIndexesData">
    <clustering
        mode="invalidation">
        <stateTransfer
            fetchInMemoryState="false" />
        <!--<sync
            replTimeout="30000" /> -->
    </clustering>
</namedCache>

<!-- ***************************** -->
<!--  Cache to store Lucene locks  -->
<!-- ***************************** -->
<namedCache
    name="LuceneIndexesLocking">
    <clustering
        mode="invalidation">
        <stateTransfer
            fetchInMemoryState="false" />
        <!--<sync
            replTimeout="30000" /> -->
    </clustering>
</namedCache>

Any help in getting this correctly configured would be greatly appreciated!


person Dave V    schedule 27.06.2013    source источник
comment
Я думаю, что знаю, что происходит, но все еще не знаю, как решить проблему. Hibernate Search, или Lucene, создает файлы с ведущим «-», например «-566834176». Когда файл помещается на S3, он преобразует «-» в «A», то есть «A566834176». Может ли кто-нибудь пролить свет на то, как предотвратить имена индексных файлов с отрицательными числами?   -  person Dave V    schedule 29.06.2013
comment
Привет, ни Lucene, ни Hibernate Search не создают такие файлы: Infinispan использует числовые идентификаторы корзин, и это, похоже, проблема с интеграцией JClouds. Сообщите о проблеме здесь: issues.jboss.org/browse/ISPN.   -  person Sanne    schedule 02.07.2013
comment
@DaveV, ты когда-нибудь мог решить эту проблему? Если да, то что вам нужно было сделать, чтобы решить эту проблему?   -  person Code Junkie    schedule 21.09.2014


Ответы (1)


Ни Apache Lucene, ни Hibernate Search не создают такие файлы: Infinispan использует числовые идентификаторы сегментов, и в зависимости от хеширования значений этих сегментов некоторые из них могут находиться в негативное пространство: похоже, это проблема с интеграцией JClouds.

Сообщите о проблеме здесь: https://issues.jboss.org/browse/ISPN.

person Sanne    schedule 02.07.2013