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>