Skip to content

Commit 1a2273b

Browse files
lvcaclaudegemini-code-assist[bot]Copilot
authored
Index refactoring replication (#2828)
* First step of refactoring in index interfaces Co-Authored-By: Claude <[email protected]> * Fixed lsm vector serialization Co-Authored-By: Claude <[email protected]> * Fixed lsm vector compaction Co-Authored-By: Claude <[email protected]> * Update engine/src/main/java/com/arcadedb/database/Binary.java Co-authored-by: gemini-code-assist[bot] <176961590+gemini-code-assist[bot]@users.noreply.github.com> * Update engine/src/main/java/com/arcadedb/engine/PaginatedComponent.java Co-authored-by: gemini-code-assist[bot] <176961590+gemini-code-assist[bot]@users.noreply.github.com> * Update engine/src/main/java/com/arcadedb/schema/IndexMetadata.java Co-authored-by: Copilot <[email protected]> * Update engine/src/main/java/com/arcadedb/index/lsm/LSMTreeIndex.java Co-authored-by: Copilot <[email protected]> * Update engine/src/main/java/com/arcadedb/schema/LSMVectorIndexMetadata.java Co-authored-by: Copilot <[email protected]> * Update engine/src/main/java/com/arcadedb/schema/TypeLSMVectorIndexBuilder.java Co-authored-by: Copilot <[email protected]> * Update engine/src/main/java/com/arcadedb/index/vector/LSMVectorIndex.java Co-authored-by: Copilot <[email protected]> * Update engine/src/main/java/com/arcadedb/index/vector/LSMVectorIndex.java Co-authored-by: Copilot <[email protected]> * Update engine/src/main/java/com/arcadedb/schema/BucketLSMVectorIndexBuilder.java Co-authored-by: Copilot <[email protected]> * Revert "Update engine/src/main/java/com/arcadedb/schema/IndexMetadata.java" This reverts commit 076345d. --------- Co-authored-by: Claude <[email protected]> Co-authored-by: gemini-code-assist[bot] <176961590+gemini-code-assist[bot]@users.noreply.github.com> Co-authored-by: Copilot <[email protected]>
1 parent a49d1e0 commit 1a2273b

30 files changed

+1034
-886
lines changed

engine/src/main/java/com/arcadedb/database/Binary.java

Lines changed: 23 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -261,6 +261,18 @@ public void putLong(final long value) {
261261
buffer.putLong(value);
262262
}
263263

264+
@Override
265+
public void putFloat(final int index, final float value) {
266+
checkForAllocation(index, FLOAT_SERIALIZED_SIZE);
267+
buffer.putFloat(index, value);
268+
}
269+
270+
@Override
271+
public void putFloat(final float value) {
272+
checkForAllocation(buffer.position(), FLOAT_SERIALIZED_SIZE);
273+
buffer.putFloat(value);
274+
}
275+
264276
@Override
265277
public int putString(final int index, final String value) {
266278
return putBytes(index, value.getBytes(DatabaseFactory.getDefaultCharset()));
@@ -448,6 +460,17 @@ public long getLong(final int index) {
448460
return buffer.getLong(index);
449461
}
450462

463+
@Override
464+
public float getFloat(final int index) {
465+
return buffer.getFloat(index);
466+
}
467+
468+
@Override
469+
public float getFloat() {
470+
checkForFetching(FLOAT_SERIALIZED_SIZE);
471+
return buffer.getFloat();
472+
}
473+
451474
@Override
452475
public String getString() {
453476
return new String(getBytes(), DatabaseFactory.getDefaultCharset());

engine/src/main/java/com/arcadedb/database/BinaryStructure.java

Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -54,6 +54,12 @@ public interface BinaryStructure {
5454

5555
void putLong(long value);
5656

57+
float getFloat(int i);
58+
59+
void putFloat(int index, float value);
60+
61+
void putFloat(float value);
62+
5763
int putString(int index, String value);
5864

5965
int putString(String value);
@@ -104,6 +110,8 @@ public interface BinaryStructure {
104110

105111
long getLong(int index);
106112

113+
float getFloat();
114+
107115
String getString();
108116

109117
String getString(int index);

engine/src/main/java/com/arcadedb/engine/BasePage.java

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -98,6 +98,10 @@ public int readInt(final int index) {
9898
return this.content.getInt(PAGE_HEADER_SIZE + index);
9999
}
100100

101+
public float readFloat(final int index) {
102+
return this.content.getFloat(PAGE_HEADER_SIZE + index);
103+
}
104+
101105
public long readUnsignedInt(final int index) {
102106
return (long) this.content.getInt(PAGE_HEADER_SIZE + index) & 0xffffffffL;
103107
}

engine/src/main/java/com/arcadedb/engine/PaginatedComponent.java

Lines changed: 23 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -20,6 +20,7 @@
2020

2121
import com.arcadedb.database.DatabaseInternal;
2222
import com.arcadedb.database.TransactionContext;
23+
import com.arcadedb.index.IndexException;
2324

2425
import java.io.*;
2526
import java.util.concurrent.atomic.*;
@@ -32,9 +33,10 @@
3233
* @author Luca Garulli ([email protected])
3334
*/
3435
public abstract class PaginatedComponent extends Component {
35-
protected final PaginatedComponentFile file;
36-
protected final int pageSize;
37-
protected final AtomicInteger pageCount = new AtomicInteger();
36+
public static final String TEMP_EXT = "temp_";
37+
protected final PaginatedComponentFile file;
38+
protected final int pageSize;
39+
protected final AtomicInteger pageCount = new AtomicInteger();
3840

3941
protected PaginatedComponent(final DatabaseInternal database, final String name, final String filePath, final String ext,
4042
final ComponentFile.MODE mode,
@@ -106,4 +108,22 @@ public int getTotalPages() {
106108
}
107109
return pageCount.get();
108110
}
111+
112+
public void removeTempSuffix() {
113+
final String fileName = file.getFilePath();
114+
115+
final int extPos = fileName.lastIndexOf('.');
116+
if (fileName.substring(extPos + 1).startsWith(TEMP_EXT)) {
117+
final String newFileName = fileName.substring(0, extPos) + "." + fileName.substring(extPos + TEMP_EXT.length() + 1);
118+
119+
try {
120+
file.rename(newFileName);
121+
database.getFileManager().renameFile(fileName, newFileName);
122+
} catch (final IOException e) {
123+
throw new IndexException(
124+
"Cannot rename temporary index file '" + file.getFilePath() + "' to '" + newFileName + "' (exists=" + (new File(
125+
file.getFilePath()).exists()) + ")", e);
126+
}
127+
}
128+
109129
}

engine/src/main/java/com/arcadedb/engine/TransactionManager.java

Lines changed: 7 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -25,6 +25,7 @@
2525
import com.arcadedb.exception.SchemaException;
2626
import com.arcadedb.exception.TimeoutException;
2727
import com.arcadedb.exception.TransactionException;
28+
import com.arcadedb.index.vector.LSMVectorIndex;
2829
import com.arcadedb.log.LogManager;
2930
import com.arcadedb.utility.LockManager;
3031

@@ -364,9 +365,14 @@ public boolean applyChanges(final WALFile.WALTransaction tx, final Map<Integer,
364365
database.getPageManager().removePageFromCache(modifiedPage.pageId);
365366

366367
final PaginatedComponent component = (PaginatedComponent) database.getSchema().getFileById(txPage.fileId);
367-
if (component != null)
368+
if (component != null) {
368369
component.updatePageCount(modifiedPage.pageId.getPageNumber() + 1);
369370

371+
final Object mainComponent = component.getMainComponent();
372+
if (mainComponent instanceof LSMVectorIndex idx)
373+
idx.markIndexDirty();
374+
}
375+
370376
if (file.getFileId() == dictionaryId)
371377
involveDictionary = true;
372378

engine/src/main/java/com/arcadedb/index/IndexFactory.java

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -29,7 +29,7 @@ public void register(final String type, final IndexFactoryHandler handler) {
2929
map.put(type, handler);
3030
}
3131

32-
public IndexInternal createIndex(final IndexBuilder builder) {
32+
public IndexInternal createIndex(final IndexBuilder<?> builder) {
3333
final String indexType = builder.getIndexType().name();
3434
final IndexFactoryHandler handler = map.get(indexType);
3535

engine/src/main/java/com/arcadedb/index/IndexInternal.java

Lines changed: 6 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -19,6 +19,7 @@
1919
package com.arcadedb.index;
2020

2121
import com.arcadedb.engine.Component;
22+
import com.arcadedb.schema.IndexMetadata;
2223
import com.arcadedb.schema.Type;
2324
import com.arcadedb.serializer.json.JSONObject;
2425
import com.arcadedb.utility.ExcludeFromJacocoGeneratedReport;
@@ -37,11 +38,13 @@ enum INDEX_STATUS {UNAVAILABLE, AVAILABLE, COMPACTION_SCHEDULED, COMPACTION_IN_P
3738

3839
boolean compact() throws IOException, InterruptedException;
3940

40-
void setMetadata(String name, String[] propertyNames, int associatedBucketId);
41+
IndexMetadata getMetadata();
4142

42-
boolean setStatus(INDEX_STATUS[] expectedStatuses, INDEX_STATUS newStatus);
43+
void setMetadata(IndexMetadata metadata);
44+
45+
void setMetadata(JSONObject indexJSON);
4346

44-
void applyMetadataFromSchema(JSONObject indexJSON);
47+
boolean setStatus(INDEX_STATUS[] expectedStatuses, INDEX_STATUS newStatus);
4548

4649
void close();
4750

engine/src/main/java/com/arcadedb/index/TypeIndex.java

Lines changed: 8 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -26,6 +26,7 @@
2626
import com.arcadedb.exception.NeedRetryException;
2727
import com.arcadedb.index.lsm.LSMTreeIndexAbstract;
2828
import com.arcadedb.schema.DocumentType;
29+
import com.arcadedb.schema.IndexMetadata;
2930
import com.arcadedb.schema.Schema;
3031
import com.arcadedb.schema.Type;
3132
import com.arcadedb.serializer.BinaryComparator;
@@ -46,6 +47,7 @@ public class TypeIndex implements RangeIndex, IndexInternal {
4647
private final DocumentType type;
4748
private boolean valid = true;
4849
private IndexInternal associatedIndex;
50+
private IndexMetadata metadata;
4951

5052
public TypeIndex(final String logicName, final DocumentType type) {
5153
this.logicName = logicName;
@@ -366,12 +368,12 @@ public String toString() {
366368
}
367369

368370
@Override
369-
public void setMetadata(final String name, final String[] propertyNames, final int associatedBucketId) {
371+
public void setMetadata(IndexMetadata metadata) {
370372
throw new UnsupportedOperationException("setMetadata");
371373
}
372374

373375
@Override
374-
public void applyMetadataFromSchema(final JSONObject indexJSON) {
376+
public void setMetadata(final JSONObject indexJSON) {
375377
throw new UnsupportedOperationException("applyMetadataFromSchema");
376378
}
377379

@@ -510,4 +512,8 @@ private IndexInternal getFirstUnderlyingIndex() {
510512
throw new IndexException("Index '" + getName() + "' is not valid. Probably has been drop or rebuilt");
511513
return indexesOnBuckets.getFirst();
512514
}
515+
516+
public IndexMetadata getMetadata() {
517+
return metadata;
518+
}
513519
}

engine/src/main/java/com/arcadedb/index/lsm/LSMTreeFullTextIndex.java

Lines changed: 11 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -31,6 +31,7 @@
3131
import com.arcadedb.index.TempIndexCursor;
3232
import com.arcadedb.index.TypeIndex;
3333
import com.arcadedb.schema.IndexBuilder;
34+
import com.arcadedb.schema.IndexMetadata;
3435
import com.arcadedb.schema.Schema;
3536
import com.arcadedb.schema.Type;
3637
import com.arcadedb.serializer.json.JSONObject;
@@ -209,6 +210,11 @@ public boolean compact() throws IOException, InterruptedException {
209210
return underlyingIndex.compact();
210211
}
211212

213+
@Override
214+
public IndexMetadata getMetadata() {
215+
return underlyingIndex.getMetadata();
216+
}
217+
212218
@Override
213219
public boolean isCompacting() {
214220
return underlyingIndex.isCompacting();
@@ -225,8 +231,8 @@ public String getMostRecentFileName() {
225231
}
226232

227233
@Override
228-
public void setMetadata(final String name, final String[] propertyNames, final int associatedBucketId) {
229-
underlyingIndex.setMetadata(name, propertyNames, associatedBucketId);
234+
public void setMetadata(final IndexMetadata metadata) {
235+
underlyingIndex.setMetadata(metadata);
230236
}
231237

232238
@Override
@@ -235,8 +241,8 @@ public boolean setStatus(final INDEX_STATUS[] expectedStatuses, final INDEX_STAT
235241
}
236242

237243
@Override
238-
public void applyMetadataFromSchema(final JSONObject indexJSON) {
239-
underlyingIndex.applyMetadataFromSchema(indexJSON);
244+
public void setMetadata(final JSONObject indexJSON) {
245+
underlyingIndex.setMetadata(indexJSON);
240246
}
241247

242248
@Override
@@ -317,7 +323,7 @@ public boolean supportsOrderedIterations() {
317323

318324
@Override
319325
public boolean isAutomatic() {
320-
return underlyingIndex.propertyNames != null;
326+
return underlyingIndex.getPropertyNames() != null;
321327
}
322328

323329
@Override

0 commit comments

Comments
 (0)