IGNITE-16337 Update lucene version to 8.11.2 (#9753)
diff --git a/modules/core/src/main/java/org/apache/ignite/internal/util/IgniteUtils.java b/modules/core/src/main/java/org/apache/ignite/internal/util/IgniteUtils.java
index 552ff47..1ff6f1d 100755
--- a/modules/core/src/main/java/org/apache/ignite/internal/util/IgniteUtils.java
+++ b/modules/core/src/main/java/org/apache/ignite/internal/util/IgniteUtils.java
@@ -363,13 +363,13 @@
/** Empty integers array. */
public static final int[] EMPTY_INTS = new int[0];
- /** Empty longs. */
+ /** Empty longs array. */
public static final long[] EMPTY_LONGS = new long[0];
- /** */
+ /** Empty strings array. */
public static final String[] EMPTY_STRS = new String[0];
- /** Empty longs. */
+ /** Empty fields array. */
public static final Field[] EMPTY_FIELDS = new Field[0];
/** System line separator. */
diff --git a/modules/indexing/src/main/java/org/apache/ignite/internal/processors/query/h2/opt/GridLuceneDirectory.java b/modules/indexing/src/main/java/org/apache/ignite/internal/processors/query/h2/opt/GridLuceneDirectory.java
index acaebc2..ae0edf8 100644
--- a/modules/indexing/src/main/java/org/apache/ignite/internal/processors/query/h2/opt/GridLuceneDirectory.java
+++ b/modules/indexing/src/main/java/org/apache/ignite/internal/processors/query/h2/opt/GridLuceneDirectory.java
@@ -21,15 +21,20 @@
import java.io.IOException;
import java.util.ArrayList;
import java.util.Collection;
+import java.util.Collections;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
import java.util.Set;
import java.util.concurrent.ConcurrentHashMap;
+import java.util.concurrent.atomic.AtomicInteger;
import java.util.concurrent.atomic.AtomicLong;
import org.apache.ignite.IgniteException;
+import org.apache.ignite.internal.util.GridConcurrentHashSet;
import org.apache.ignite.internal.util.offheap.unsafe.GridUnsafeMemory;
import org.apache.ignite.internal.util.typedef.F;
+import org.apache.ignite.internal.util.typedef.internal.U;
+import org.apache.lucene.index.IndexFileNames;
import org.apache.lucene.store.BaseDirectory;
import org.apache.lucene.store.Directory;
import org.apache.lucene.store.IOContext;
@@ -42,13 +47,20 @@
* A memory-resident {@link Directory} implementation.
*/
public class GridLuceneDirectory extends BaseDirectory implements Accountable {
+
/** */
protected final Map<String, GridLuceneFile> fileMap = new ConcurrentHashMap<>();
/** */
+ protected final Set<String> pendingDeletions = new GridConcurrentHashSet<>();
+
+ /** */
protected final AtomicLong sizeInBytes = new AtomicLong();
/** */
+ protected final AtomicInteger nextTmpFileIndex = new AtomicInteger(0);
+
+ /** */
private final GridUnsafeMemory mem;
/**
@@ -71,7 +83,7 @@
List<String> names = new ArrayList<>(fileNames);
- return names.toArray(new String[names.size()]);
+ return names.toArray(U.EMPTY_STRS);
}
/** {@inheritDoc} */
@@ -95,7 +107,10 @@
/** {@inheritDoc} */
@Override public IndexOutput createTempOutput(String prefix, String suffix, IOContext ctx) throws IOException {
- throw new UnsupportedOperationException();
+ String suffixWithIndex = suffix + "_" + Long.toString(nextTmpFileIndex.getAndIncrement(), Character.MAX_RADIX);
+ String name = IndexFileNames.segmentFileName(prefix, suffixWithIndex, "tmp");
+
+ return createOutput(name, ctx);
}
/** {@inheritDoc} */
@@ -128,7 +143,7 @@
GridLuceneFile file = fileMap.remove(name);
if (file != null) {
- file.delete();
+ doDeleteFile0(name, file);
// All files should be closed when Directory is closing.
assert !onClose || !file.hasRefs() : "Possible memory leak, resource is not closed: " + file.toString();
@@ -139,11 +154,27 @@
throw new FileNotFoundException(name);
}
+ /**
+ * Call actual delete operation and add filename to pending deletions set
+ *
+ * @param name File name.
+ * @param file File instance.
+ * @throws IOException If failed
+ *
+ * @see GridLuceneFile#deferredDelete()
+ */
+ private void doDeleteFile0(String name, GridLuceneFile file) throws IOException {
+ // Filename would be removed from pending deletions when
+ // GridLuceneFile.deferredDelete() will finish his job
+ pendingDeletions.add(name);
+ file.delete();
+ }
+
/** {@inheritDoc} */
@Override public IndexOutput createOutput(final String name, final IOContext context) throws IOException {
ensureOpen();
- GridLuceneFile file = new GridLuceneFile(this);
+ GridLuceneFile file = new GridLuceneFile(this, name);
// Lock for using in stream. Will be unlocked on stream closing.
file.lockRef();
@@ -153,7 +184,7 @@
if (existing != null) {
sizeInBytes.addAndGet(-existing.getSizeInBytes());
- existing.delete();
+ doDeleteFile0(name, existing);
}
return new GridLuceneOutputStream(file);
@@ -212,6 +243,11 @@
}
/** {@inheritDoc} */
+ @Override public Set<String> getPendingDeletions() throws IOException {
+ return Collections.unmodifiableSet(pendingDeletions);
+ }
+
+ /** {@inheritDoc} */
@Override public long ramBytesUsed() {
ensureOpen();
diff --git a/modules/indexing/src/main/java/org/apache/ignite/internal/processors/query/h2/opt/GridLuceneFile.java b/modules/indexing/src/main/java/org/apache/ignite/internal/processors/query/h2/opt/GridLuceneFile.java
index 14d363d..e763542 100644
--- a/modules/indexing/src/main/java/org/apache/ignite/internal/processors/query/h2/opt/GridLuceneFile.java
+++ b/modules/indexing/src/main/java/org/apache/ignite/internal/processors/query/h2/opt/GridLuceneFile.java
@@ -37,6 +37,9 @@
private long length;
/** */
+ private final String name;
+
+ /** */
private final GridLuceneDirectory dir;
/** */
@@ -53,8 +56,16 @@
*
* @param dir Directory.
*/
- GridLuceneFile(GridLuceneDirectory dir) {
+ GridLuceneFile(GridLuceneDirectory dir, String name) {
this.dir = dir;
+ this.name = name;
+ }
+
+ /**
+ * @return filename
+ */
+ public String getName() {
+ return name;
}
/**
@@ -106,6 +117,7 @@
void releaseRef() {
refCnt.decrementAndGet();
+ // TODO: https://issues.apache.org/jira/browse/IGNITE-17362
deferredDelete();
}
@@ -149,7 +161,7 @@
}
/**
- * Deletes file and deallocates memory..
+ * Deletes file and deallocates memory.
*/
public void delete() {
if (!deleted.compareAndSet(false, true))
@@ -171,6 +183,7 @@
dir.memory().release(buffers.arr[i], BUFFER_SIZE);
buffers = null;
+ dir.pendingDeletions.remove(name);
}
/**
diff --git a/modules/indexing/src/main/java/org/apache/ignite/internal/processors/query/h2/opt/GridLuceneOutputStream.java b/modules/indexing/src/main/java/org/apache/ignite/internal/processors/query/h2/opt/GridLuceneOutputStream.java
index b4fee1b..d5828a1 100644
--- a/modules/indexing/src/main/java/org/apache/ignite/internal/processors/query/h2/opt/GridLuceneOutputStream.java
+++ b/modules/indexing/src/main/java/org/apache/ignite/internal/processors/query/h2/opt/GridLuceneOutputStream.java
@@ -66,7 +66,7 @@
* @param f File.
*/
public GridLuceneOutputStream(GridLuceneFile f) {
- super("RAMOutputStream(name=\"noname\")", "noname");
+ super("RAMOutputStream(name=\"" + f.getName() + "\")", f.getName());
file = f;
diff --git a/parent/pom.xml b/parent/pom.xml
index 6835b75..5827c7a 100644
--- a/parent/pom.xml
+++ b/parent/pom.xml
@@ -118,7 +118,7 @@
<log4j2.version>2.17.1</log4j2.version>
<log4j.version>1.2.17</log4j.version>
<lucene.bundle.version>7.4.0_1</lucene.bundle.version>
- <lucene.version>7.4.0</lucene.version>
+ <lucene.version>8.11.2</lucene.version>
<lz4.version>1.8.0</lz4.version>
<maven.bundle.plugin.version>3.5.0</maven.bundle.plugin.version>
<maven.checkstyle.plugin.version>3.1.1</maven.checkstyle.plugin.version>