diff --git a/core/src/main/java/com/orientechnologies/orient/core/index/engine/OBaseIndexEngine.java b/core/src/main/java/com/orientechnologies/orient/core/index/engine/OBaseIndexEngine.java index d8ea15b6b6a..e215beae37c 100755 --- a/core/src/main/java/com/orientechnologies/orient/core/index/engine/OBaseIndexEngine.java +++ b/core/src/main/java/com/orientechnologies/orient/core/index/engine/OBaseIndexEngine.java @@ -2,6 +2,7 @@ import com.orientechnologies.common.serialization.types.OBinarySerializer; import com.orientechnologies.common.util.ORawPair; +import com.orientechnologies.orient.core.config.IndexEngineData; import com.orientechnologies.orient.core.encryption.OEncryption; import com.orientechnologies.orient.core.id.ORID; import com.orientechnologies.orient.core.index.OIndexDefinition; @@ -36,6 +37,8 @@ void create( OEncryption encryption) throws IOException; + void load(IndexEngineData data); + void delete(OAtomicOperation atomicOperation) throws IOException; void clear(OAtomicOperation atomicOperation) throws IOException; diff --git a/core/src/main/java/com/orientechnologies/orient/core/index/engine/OIndexEngine.java b/core/src/main/java/com/orientechnologies/orient/core/index/engine/OIndexEngine.java index 92524f7ec0e..1199b51da73 100755 --- a/core/src/main/java/com/orientechnologies/orient/core/index/engine/OIndexEngine.java +++ b/core/src/main/java/com/orientechnologies/orient/core/index/engine/OIndexEngine.java @@ -20,7 +20,6 @@ package com.orientechnologies.orient.core.index.engine; -import com.orientechnologies.orient.core.config.IndexEngineData; import com.orientechnologies.orient.core.id.ORID; import com.orientechnologies.orient.core.index.OIndexKeyUpdater; import com.orientechnologies.orient.core.storage.impl.local.paginated.atomicoperations.OAtomicOperation; @@ -64,6 +63,4 @@ boolean validatedPut( default int getEngineAPIVersion() { return VERSION; } - - void load(IndexEngineData data); } diff --git a/core/src/main/java/com/orientechnologies/orient/core/index/engine/OV1IndexEngine.java b/core/src/main/java/com/orientechnologies/orient/core/index/engine/OV1IndexEngine.java index eb9ccb598a8..60259bdaf05 100755 --- a/core/src/main/java/com/orientechnologies/orient/core/index/engine/OV1IndexEngine.java +++ b/core/src/main/java/com/orientechnologies/orient/core/index/engine/OV1IndexEngine.java @@ -1,10 +1,6 @@ package com.orientechnologies.orient.core.index.engine; -import com.orientechnologies.common.serialization.types.OBinarySerializer; -import com.orientechnologies.orient.core.config.IndexEngineData; -import com.orientechnologies.orient.core.encryption.OEncryption; import com.orientechnologies.orient.core.id.ORID; -import com.orientechnologies.orient.core.metadata.schema.OType; import com.orientechnologies.orient.core.storage.impl.local.paginated.atomicoperations.OAtomicOperation; import java.util.stream.Stream; @@ -20,14 +16,5 @@ default int getEngineAPIVersion() { return API_VERSION; } - void load(IndexEngineData data); - - void load( - final String name, - final int keySize, - final OType[] keyTypes, - final OBinarySerializer keySerializer, - final OEncryption encryption); - boolean isMultiValue(); } diff --git a/core/src/main/java/com/orientechnologies/orient/core/index/engine/v1/OCellBTreeMultiValueIndexEngine.java b/core/src/main/java/com/orientechnologies/orient/core/index/engine/v1/OCellBTreeMultiValueIndexEngine.java index 4ea491d4a93..7271c4da88a 100755 --- a/core/src/main/java/com/orientechnologies/orient/core/index/engine/v1/OCellBTreeMultiValueIndexEngine.java +++ b/core/src/main/java/com/orientechnologies/orient/core/index/engine/v1/OCellBTreeMultiValueIndexEngine.java @@ -4,7 +4,6 @@ import com.orientechnologies.common.serialization.types.OBinarySerializer; import com.orientechnologies.common.util.ORawPair; import com.orientechnologies.orient.core.config.IndexEngineData; -import com.orientechnologies.orient.core.db.record.OCurrentStorageComponentsFactory; import com.orientechnologies.orient.core.db.record.OIdentifiable; import com.orientechnologies.orient.core.encryption.OEncryption; import com.orientechnologies.orient.core.exception.OStorageException; @@ -232,15 +231,13 @@ private void doClearSVTree(final OAtomicOperation atomicOperation) { @Override public void load(IndexEngineData data) { - OCurrentStorageComponentsFactory cf = storage.getComponentsFactory(); final OEncryption encryption = OAbstractPaginatedStorage.loadEncryption(data.getEncryption(), data.getEncryptionOptions()); String name = data.getName(); int keySize = data.getKeySize(); OType[] keyTypes = data.getKeyTypes(); - OBinarySerializer keySerializer = - cf.binarySerializerFactory.getObjectSerializer(data.getKeySerializedId()); + OBinarySerializer keySerializer = storage.resolveObjectSerializer(data.getKeySerializedId()); if (mvTree != null) { //noinspection unchecked @@ -257,28 +254,6 @@ public void load(IndexEngineData data) { } } - @Override - public void load( - final String name, - final int keySize, - final OType[] keyTypes, - @SuppressWarnings("rawtypes") final OBinarySerializer keySerializer, - final OEncryption encryption) { - if (mvTree != null) { - //noinspection unchecked - mvTree.load(name, keySize, keyTypes, keySerializer, encryption); - } else { - assert svTree != null; - assert nullTree != null; - - final OType[] sbTypes = calculateTypes(keyTypes); - - svTree.load(name, keySize + 1, sbTypes, new CompositeKeySerializer(), null); - nullTree.load( - nullTreeName, 1, new OType[] {OType.LINK}, OCompactedLinkSerializer.INSTANCE, null); - } - } - @Override public boolean remove(final OAtomicOperation atomicOperation, Object key, ORID value) { try { diff --git a/core/src/main/java/com/orientechnologies/orient/core/index/engine/v1/OCellBTreeSingleValueIndexEngine.java b/core/src/main/java/com/orientechnologies/orient/core/index/engine/v1/OCellBTreeSingleValueIndexEngine.java index 5b9bb97fcce..54283ec1912 100755 --- a/core/src/main/java/com/orientechnologies/orient/core/index/engine/v1/OCellBTreeSingleValueIndexEngine.java +++ b/core/src/main/java/com/orientechnologies/orient/core/index/engine/v1/OCellBTreeSingleValueIndexEngine.java @@ -4,7 +4,6 @@ import com.orientechnologies.common.serialization.types.OBinarySerializer; import com.orientechnologies.common.util.ORawPair; import com.orientechnologies.orient.core.config.IndexEngineData; -import com.orientechnologies.orient.core.db.record.OCurrentStorageComponentsFactory; import com.orientechnologies.orient.core.encryption.OEncryption; import com.orientechnologies.orient.core.id.ORID; import com.orientechnologies.orient.core.index.OIndexDefinition; @@ -127,15 +126,13 @@ private void doClearTree(OAtomicOperation atomicOperation) throws IOException { @Override public void load(IndexEngineData data) { - OCurrentStorageComponentsFactory cf = storage.getComponentsFactory(); final OEncryption encryption = OAbstractPaginatedStorage.loadEncryption(data.getEncryption(), data.getEncryptionOptions()); String name = data.getName(); int keySize = data.getKeySize(); OType[] keyTypes = data.getKeyTypes(); - OBinarySerializer keySerializer = - cf.binarySerializerFactory.getObjectSerializer(data.getKeySerializedId()); + OBinarySerializer keySerializer = storage.resolveObjectSerializer(data.getKeySerializedId()); sbTree.load(name, keySize, keyTypes, keySerializer, encryption); try { versionPositionMap.open(); @@ -145,23 +142,6 @@ public void load(IndexEngineData data) { } } - @Override - public void load( - String indexName, - final int keySize, - final OType[] keyTypes, - final OBinarySerializer keySerializer, - final OEncryption encryption) { - //noinspection unchecked - sbTree.load(indexName, keySize, keyTypes, keySerializer, encryption); - try { - versionPositionMap.open(); - } catch (final IOException e) { - throw OException.wrapException( - new OIndexException("Error during VPM load of index " + indexName), e); - } - } - @Override public boolean remove(OAtomicOperation atomicOperation, Object key) { try { diff --git a/core/src/main/java/com/orientechnologies/orient/core/sharding/auto/OAutoShardingIndexEngine.java b/core/src/main/java/com/orientechnologies/orient/core/sharding/auto/OAutoShardingIndexEngine.java index 98d49320d99..60fd797fa45 100755 --- a/core/src/main/java/com/orientechnologies/orient/core/sharding/auto/OAutoShardingIndexEngine.java +++ b/core/src/main/java/com/orientechnologies/orient/core/sharding/auto/OAutoShardingIndexEngine.java @@ -25,7 +25,6 @@ import com.orientechnologies.common.util.OCommonConst; import com.orientechnologies.common.util.ORawPair; import com.orientechnologies.orient.core.config.IndexEngineData; -import com.orientechnologies.orient.core.db.record.OCurrentStorageComponentsFactory; import com.orientechnologies.orient.core.db.record.OIdentifiable; import com.orientechnologies.orient.core.encryption.OEncryption; import com.orientechnologies.orient.core.id.ORID; @@ -159,11 +158,9 @@ public void create( @Override public void load(IndexEngineData data) { - OCurrentStorageComponentsFactory cf = this.storage.getComponentsFactory(); - OBinarySerializer keySerializer = - cf.binarySerializerFactory.getObjectSerializer(data.getValueSerializerId()); + OBinarySerializer keySerializer = storage.resolveObjectSerializer(data.getKeySerializedId()); OBinarySerializer valueSerializer = - cf.binarySerializerFactory.getObjectSerializer(data.getKeySerializedId()); + storage.resolveObjectSerializer(data.getValueSerializerId()); Map engineProperties = data.getEngineProperties(); final OEncryption encryption = diff --git a/core/src/main/java/com/orientechnologies/orient/core/storage/impl/local/OAbstractPaginatedStorage.java b/core/src/main/java/com/orientechnologies/orient/core/storage/impl/local/OAbstractPaginatedStorage.java index 1416315c3ab..bec4cb06f10 100755 --- a/core/src/main/java/com/orientechnologies/orient/core/storage/impl/local/OAbstractPaginatedStorage.java +++ b/core/src/main/java/com/orientechnologies/orient/core/storage/impl/local/OAbstractPaginatedStorage.java @@ -2727,16 +2727,11 @@ public int loadExternalIndexEngine( public int addIndexEngine( final OIndexMetadata indexMetadata, final Map engineProperties) { final String engineName = indexMetadata.getName(); - final String algorithm = indexMetadata.getAlgorithm(); - final String indexType = indexMetadata.getType(); final OIndexDefinition indexDefinition = indexMetadata.getIndexDefinition(); - final boolean isAutomatic = indexMetadata.getIndexDefinition().isAutomatic(); - final boolean multivalue = indexMetadata.isMultivalue(); - final int version = indexMetadata.getVersion(); try { if (indexDefinition == null) { - throw new OIndexException("Index definition hav to be provided"); + throw new OIndexException("Index definition has to be provided"); } final OType[] keyTypes = indexDefinition.getTypes(); if (keyTypes == null) { @@ -2750,8 +2745,6 @@ public int addIndexEngine( final int keySize = determineKeySize(indexDefinition); - final boolean nullValuesSupport = !indexDefinition.isNullValuesIgnored(); - checkBackupRunning(); stateLock.writeLock().lock(); try { @@ -2781,25 +2774,21 @@ public int addIndexEngine( final int binaryFormatVersion = getConfiguration().getBinaryFormatVersion(); final byte valueSerializerId = indexMetadata.getValueSerializerId(binaryFormatVersion); - OBinarySerializer valueSerializer = - getComponentsFactory() - .binarySerializerFactory - .getObjectSerializer(valueSerializerId); final OBaseIndexEngine engine = addIndexEngineInternal( atomicOperation, engineName, - algorithm, - indexType, - valueSerializer, - isAutomatic, - version, - multivalue, + indexMetadata.getAlgorithm(), + indexMetadata.getType(), + resolveObjectSerializer(valueSerializerId), + indexDefinition.isAutomatic(), + indexMetadata.getVersion(), + indexMetadata.isMultivalue(), engineProperties, keySerializer, keySize, keyTypes, - nullValuesSupport); + !indexDefinition.isNullValuesIgnored()); final OContextConfiguration ctxCfg = configuration.getContextConfiguration(); @SuppressWarnings("deprecation") @@ -2812,17 +2801,17 @@ public int addIndexEngine( new IndexEngineData( engine.getId(), engineName, - algorithm, - indexType, + indexMetadata.getAlgorithm(), + indexMetadata.getType(), true, - version, + indexMetadata.getVersion(), engine.getEngineAPIVersion(), - multivalue, + indexMetadata.isMultivalue(), valueSerializerId, keySerializer.getId(), - isAutomatic, + indexDefinition.isAutomatic(), keyTypes, - nullValuesSupport, + !indexDefinition.isNullValuesIgnored(), keySize, cfgEncryption, cfgEncryptionKey, @@ -2830,7 +2819,7 @@ public int addIndexEngine( ((OClusterBasedStorageConfiguration) configuration) .addIndexEngine(atomicOperation, engineName, engineData); - if (multivalue && engine.hasRidBagTreesSupport()) { + if (indexMetadata.isMultivalue() && engine.hasRidBagTreesSupport()) { final OSBTreeBonsaiLocal tree = new OSBTreeBonsaiLocal<>( engineName, OIndexRIDContainerSBTree.INDEX_FILE_EXTENSION, this); @@ -2853,6 +2842,10 @@ public int addIndexEngine( } } + public OBinarySerializer resolveObjectSerializer(final byte serializerId) { + return getComponentsFactory().binarySerializerFactory.getObjectSerializer(serializerId); + } + private OBaseIndexEngine addIndexEngineInternal( final OAtomicOperation atomicOperation, final String engineName, diff --git a/core/src/main/java/com/orientechnologies/orient/core/storage/index/engine/OHashTableIndexEngine.java b/core/src/main/java/com/orientechnologies/orient/core/storage/index/engine/OHashTableIndexEngine.java index 2d704ed2967..4ae25c94e38 100755 --- a/core/src/main/java/com/orientechnologies/orient/core/storage/index/engine/OHashTableIndexEngine.java +++ b/core/src/main/java/com/orientechnologies/orient/core/storage/index/engine/OHashTableIndexEngine.java @@ -24,7 +24,6 @@ import com.orientechnologies.common.util.OCommonConst; import com.orientechnologies.common.util.ORawPair; import com.orientechnologies.orient.core.config.IndexEngineData; -import com.orientechnologies.orient.core.db.record.OCurrentStorageComponentsFactory; import com.orientechnologies.orient.core.db.record.OIdentifiable; import com.orientechnologies.orient.core.encryption.OEncryption; import com.orientechnologies.orient.core.id.ORID; @@ -215,11 +214,9 @@ private void doClearTable(OAtomicOperation atomicOperation) throws IOException { @Override public void load(IndexEngineData data) { - OCurrentStorageComponentsFactory cf = this.storage.getComponentsFactory(); - OBinarySerializer keySerializer = - cf.binarySerializerFactory.getObjectSerializer(data.getKeySerializedId()); + OBinarySerializer keySerializer = storage.resolveObjectSerializer(data.getKeySerializedId()); OBinarySerializer valueSerializer = - cf.binarySerializerFactory.getObjectSerializer(data.getValueSerializerId()); + storage.resolveObjectSerializer(data.getValueSerializerId()); final OEncryption encryption = OAbstractPaginatedStorage.loadEncryption(data.getEncryption(), data.getEncryptionOptions()); diff --git a/core/src/main/java/com/orientechnologies/orient/core/storage/index/engine/OSBTreeIndexEngine.java b/core/src/main/java/com/orientechnologies/orient/core/storage/index/engine/OSBTreeIndexEngine.java index 197c0a258c2..28fd11eedb3 100755 --- a/core/src/main/java/com/orientechnologies/orient/core/storage/index/engine/OSBTreeIndexEngine.java +++ b/core/src/main/java/com/orientechnologies/orient/core/storage/index/engine/OSBTreeIndexEngine.java @@ -24,7 +24,6 @@ import com.orientechnologies.common.serialization.types.OBinarySerializer; import com.orientechnologies.common.util.ORawPair; import com.orientechnologies.orient.core.config.IndexEngineData; -import com.orientechnologies.orient.core.db.record.OCurrentStorageComponentsFactory; import com.orientechnologies.orient.core.encryption.OEncryption; import com.orientechnologies.orient.core.id.ORID; import com.orientechnologies.orient.core.index.OIndexDefinition; @@ -166,16 +165,13 @@ private void doClearTree(OAtomicOperation atomicOperation) throws IOException { @Override public void load(IndexEngineData data) { - OCurrentStorageComponentsFactory cf = this.storage.getComponentsFactory(); final OEncryption encryption = OAbstractPaginatedStorage.loadEncryption(data.getEncryption(), data.getEncryptionOptions()); sbTree.load( data.getName(), - (OBinarySerializer) - cf.binarySerializerFactory.getObjectSerializer(data.getKeySerializedId()), - (OBinarySerializer) - cf.binarySerializerFactory.getObjectSerializer(data.getValueSerializerId()), + (OBinarySerializer) storage.resolveObjectSerializer(data.getKeySerializedId()), + (OBinarySerializer) storage.resolveObjectSerializer(data.getValueSerializerId()), data.getKeyTypes(), data.getKeySize(), data.isNullValuesSupport(), diff --git a/core/src/main/java/com/orientechnologies/orient/core/storage/index/sbtreebonsai/local/OSBTreeBonsaiLocal.java b/core/src/main/java/com/orientechnologies/orient/core/storage/index/sbtreebonsai/local/OSBTreeBonsaiLocal.java index a53fffad130..1ccef183011 100755 --- a/core/src/main/java/com/orientechnologies/orient/core/storage/index/sbtreebonsai/local/OSBTreeBonsaiLocal.java +++ b/core/src/main/java/com/orientechnologies/orient/core/storage/index/sbtreebonsai/local/OSBTreeBonsaiLocal.java @@ -626,18 +626,11 @@ public boolean load(final OBonsaiBucketPointer rootBucketPointer) { this); //noinspection unchecked keySerializer = - (OBinarySerializer) - storage - .getComponentsFactory() - .binarySerializerFactory - .getObjectSerializer(rootBucket.getKeySerializerId()); + (OBinarySerializer) storage.resolveObjectSerializer(rootBucket.getKeySerializerId()); //noinspection unchecked valueSerializer = (OBinarySerializer) - storage - .getComponentsFactory() - .binarySerializerFactory - .getObjectSerializer(rootBucket.getValueSerializerId()); + storage.resolveObjectSerializer(rootBucket.getValueSerializerId()); return !rootBucket.isDeleted(); }