Ildar Absalyamov has uploaded a new change for review.
https://asterix-gerrit.ics.uci.edu/540
Change subject: Fist version of LSM-based statistics
......................................................................
Fist version of LSM-based statistics
Change-Id: I43711cb94933e155b0f384d83893c8b76128ca59
---
M asterix-app/src/main/java/org/apache/asterix/file/DatasetOperations.java
M
asterix-app/src/main/java/org/apache/asterix/file/ExternalIndexingOperations.java
M asterix-app/src/main/java/org/apache/asterix/file/IndexOperations.java
M
asterix-app/src/main/java/org/apache/asterix/file/SecondaryBTreeOperationsHelper.java
M
asterix-app/src/main/java/org/apache/asterix/file/SecondaryIndexOperationsHelper.java
M asterix-app/src/main/resources/asterix-build-configuration.xml
M
asterix-common/src/main/java/org/apache/asterix/common/config/AsterixStorageProperties.java
M
asterix-external-data/src/main/java/org/apache/asterix/external/indexing/dataflow/HDFSLookupAdapterFactory.java
M
asterix-metadata/src/main/java/org/apache/asterix/metadata/bootstrap/MetadataBootstrap.java
M
asterix-metadata/src/main/java/org/apache/asterix/metadata/declared/AqlMetadataProvider.java
A
asterix-om/src/main/java/org/apache/asterix/dataflow/data/nontagged/valueproviders/AqlOrdinalPrimitiveValueProviderFactory.java
A
asterix-om/src/main/java/org/apache/asterix/dataflow/data/nontagged/valueproviders/DatePrimitiveValueProviderFactory.java
A
asterix-om/src/main/java/org/apache/asterix/dataflow/data/nontagged/valueproviders/DateTimePrimitiveValueProviderFactory.java
A
asterix-om/src/main/java/org/apache/asterix/dataflow/data/nontagged/valueproviders/DayTimeDurationPrimitiveValueProviderFactory.java
A
asterix-om/src/main/java/org/apache/asterix/dataflow/data/nontagged/valueproviders/TimePrimitiveValueProviderFactory.java
A
asterix-om/src/main/java/org/apache/asterix/dataflow/data/nontagged/valueproviders/YearMonthDurationPrimitiveValueProviderFactory.java
M
asterix-om/src/main/java/org/apache/asterix/formats/nontagged/AqlTypeTraitProvider.java
M
asterix-transactions/src/main/java/org/apache/asterix/transaction/management/resource/ExternalBTreeLocalResourceMetadata.java
M
asterix-transactions/src/main/java/org/apache/asterix/transaction/management/resource/LSMBTreeLocalResourceMetadata.java
19 files changed, 694 insertions(+), 291 deletions(-)
git pull ssh://asterix-gerrit.ics.uci.edu:29418/asterixdb
refs/changes/40/540/1
diff --git
a/asterix-app/src/main/java/org/apache/asterix/file/DatasetOperations.java
b/asterix-app/src/main/java/org/apache/asterix/file/DatasetOperations.java
index 013e021..dd96a49 100644
--- a/asterix-app/src/main/java/org/apache/asterix/file/DatasetOperations.java
+++ b/asterix-app/src/main/java/org/apache/asterix/file/DatasetOperations.java
@@ -31,6 +31,7 @@
import org.apache.asterix.common.exceptions.ACIDException;
import org.apache.asterix.common.exceptions.AsterixException;
import
org.apache.asterix.common.ioopcallbacks.LSMBTreeIOOperationCallbackFactory;
+import
org.apache.asterix.dataflow.data.nontagged.valueproviders.AqlOrdinalPrimitiveValueProviderFactory;
import org.apache.asterix.formats.base.IDataFormat;
import org.apache.asterix.metadata.MetadataManager;
import org.apache.asterix.metadata.declared.AqlMetadataProvider;
@@ -60,6 +61,7 @@
import
org.apache.hyracks.storage.am.lsm.btree.dataflow.LSMBTreeDataflowHelperFactory;
import org.apache.hyracks.storage.am.lsm.common.api.ILSMMergePolicyFactory;
import
org.apache.hyracks.storage.am.lsm.common.dataflow.LSMTreeIndexCompactOperatorDescriptor;
+import org.apache.hyracks.storage.am.statistics.common.SynopsisType;
import org.apache.hyracks.storage.common.file.ILocalResourceFactoryProvider;
import org.apache.hyracks.storage.common.file.LocalResource;
@@ -68,8 +70,8 @@
private static Logger LOGGER =
Logger.getLogger(DatasetOperations.class.getName());
public static JobSpecification
createDropDatasetJobSpec(CompiledDatasetDropStatement datasetDropStmt,
- AqlMetadataProvider metadataProvider) throws AlgebricksException,
HyracksDataException, RemoteException,
- ACIDException, AsterixException {
+ AqlMetadataProvider metadataProvider)
+ throws AlgebricksException, HyracksDataException,
RemoteException, ACIDException, AsterixException {
String dataverseName = null;
if (datasetDropStmt.getDataverseName() != null) {
@@ -119,12 +121,13 @@
IndexDropOperatorDescriptor primaryBtreeDrop = new
IndexDropOperatorDescriptor(specPrimary,
AsterixRuntimeComponentsProvider.RUNTIME_PROVIDER,
AsterixRuntimeComponentsProvider.RUNTIME_PROVIDER,
- splitsAndConstraint.first, new
LSMBTreeDataflowHelperFactory(new AsterixVirtualBufferCacheProvider(
- dataset.getDatasetId()), compactionInfo.first,
compactionInfo.second,
+ splitsAndConstraint.first,
+ new LSMBTreeDataflowHelperFactory(new
AsterixVirtualBufferCacheProvider(dataset.getDatasetId()),
+ compactionInfo.first, compactionInfo.second,
new
PrimaryIndexOperationTrackerProvider(dataset.getDatasetId()),
AsterixRuntimeComponentsProvider.RUNTIME_PROVIDER,
LSMBTreeIOOperationCallbackFactory.INSTANCE,
- storageProperties.getBloomFilterFalsePositiveRate(),
true, filterTypeTraits,
- filterCmpFactories, btreeFields, filterFields, !temp));
+ storageProperties.getBloomFilterFalsePositiveRate(),
true, filterTypeTraits, filterCmpFactories,
+ btreeFields, filterFields, !temp, false, null, null));
AlgebricksPartitionConstraintHelper.setPartitionConstraintInJobSpec(specPrimary,
primaryBtreeDrop,
splitsAndConstraint.second);
@@ -183,12 +186,14 @@
AsterixRuntimeComponentsProvider.RUNTIME_PROVIDER,
AsterixRuntimeComponentsProvider.RUNTIME_PROVIDER,
splitsAndConstraint.first, typeTraits, comparatorFactories,
bloomFilterKeyFields,
new LSMBTreeDataflowHelperFactory(new
AsterixVirtualBufferCacheProvider(dataset.getDatasetId()),
- compactionInfo.first, compactionInfo.second, new
PrimaryIndexOperationTrackerProvider(dataset
- .getDatasetId()),
AsterixRuntimeComponentsProvider.RUNTIME_PROVIDER,
- LSMBTreeIOOperationCallbackFactory.INSTANCE,
storageProperties
- .getBloomFilterFalsePositiveRate(), true,
filterTypeTraits, filterCmpFactories,
- btreeFields, filterFields, !temp),
localResourceFactoryProvider,
- NoOpOperationCallbackFactory.INSTANCE);
+ compactionInfo.first, compactionInfo.second,
+ new
PrimaryIndexOperationTrackerProvider(dataset.getDatasetId()),
+ AsterixRuntimeComponentsProvider.RUNTIME_PROVIDER,
LSMBTreeIOOperationCallbackFactory.INSTANCE,
+ storageProperties.getBloomFilterFalsePositiveRate(),
true, filterTypeTraits, filterCmpFactories,
+ btreeFields, filterFields, !temp,
+ storageProperties.getStatisticsSynopsisType() !=
SynopsisType.None, typeTraits
+
AqlOrdinalPrimitiveValueProviderFactory.INSTANCE),
+ localResourceFactoryProvider,
NoOpOperationCallbackFactory.INSTANCE);
AlgebricksPartitionConstraintHelper.setPartitionConstraintInJobSpec(spec,
indexCreateOp,
splitsAndConstraint.second);
spec.addRoot(indexCreateOp);
@@ -238,16 +243,19 @@
AsterixRuntimeComponentsProvider.RUNTIME_PROVIDER,
AsterixRuntimeComponentsProvider.RUNTIME_PROVIDER,
splitsAndConstraint.first, typeTraits, comparatorFactories,
blooFilterKeyFields,
new LSMBTreeDataflowHelperFactory(new
AsterixVirtualBufferCacheProvider(dataset.getDatasetId()),
- compactionInfo.first, compactionInfo.second, new
PrimaryIndexOperationTrackerProvider(
- dataset.getDatasetId()),
AsterixRuntimeComponentsProvider.RUNTIME_PROVIDER,
- LSMBTreeIOOperationCallbackFactory.INSTANCE,
- storageProperties.getBloomFilterFalsePositiveRate(),
true, filterTypeTraits,
- filterCmpFactories, btreeFields, filterFields, !temp),
NoOpOperationCallbackFactory.INSTANCE);
- AlgebricksPartitionConstraintHelper
- .setPartitionConstraintInJobSpec(spec, compactOp,
splitsAndConstraint.second);
+ compactionInfo.first, compactionInfo.second,
+ new
PrimaryIndexOperationTrackerProvider(dataset.getDatasetId()),
+ AsterixRuntimeComponentsProvider.RUNTIME_PROVIDER,
LSMBTreeIOOperationCallbackFactory.INSTANCE,
+ storageProperties.getBloomFilterFalsePositiveRate(),
true, filterTypeTraits, filterCmpFactories,
+ btreeFields, filterFields, !temp,
+ storageProperties.getStatisticsSynopsisType() !=
SynopsisType.None, typeTraits,
+ AqlOrdinalPrimitiveValueProviderFactory.INSTANCE),
+ NoOpOperationCallbackFactory.INSTANCE);
+
AlgebricksPartitionConstraintHelper.setPartitionConstraintInJobSpec(spec,
compactOp,
+ splitsAndConstraint.second);
- AlgebricksPartitionConstraintHelper
- .setPartitionConstraintInJobSpec(spec, compactOp,
splitsAndConstraint.second);
+
AlgebricksPartitionConstraintHelper.setPartitionConstraintInJobSpec(spec,
compactOp,
+ splitsAndConstraint.second);
spec.addRoot(compactOp);
return spec;
}
diff --git
a/asterix-app/src/main/java/org/apache/asterix/file/ExternalIndexingOperations.java
b/asterix-app/src/main/java/org/apache/asterix/file/ExternalIndexingOperations.java
index 1b7bd1e..13f6218 100644
---
a/asterix-app/src/main/java/org/apache/asterix/file/ExternalIndexingOperations.java
+++
b/asterix-app/src/main/java/org/apache/asterix/file/ExternalIndexingOperations.java
@@ -27,11 +27,6 @@
import java.util.List;
import java.util.Map;
-import org.apache.hadoop.conf.Configuration;
-import org.apache.hadoop.fs.FileStatus;
-import org.apache.hadoop.fs.FileSystem;
-import org.apache.hadoop.fs.Path;
-
import org.apache.asterix.common.api.ILocalResourceMetadata;
import org.apache.asterix.common.config.AsterixStorageProperties;
import org.apache.asterix.common.config.DatasetConfig.DatasetType;
@@ -80,6 +75,10 @@
import
org.apache.asterix.transaction.management.service.transaction.AsterixRuntimeComponentsProvider;
import
org.apache.asterix.translator.CompiledStatements.CompiledCreateIndexStatement;
import
org.apache.asterix.translator.CompiledStatements.CompiledIndexDropStatement;
+import org.apache.hadoop.conf.Configuration;
+import org.apache.hadoop.fs.FileStatus;
+import org.apache.hadoop.fs.FileSystem;
+import org.apache.hadoop.fs.Path;
import
org.apache.hyracks.algebricks.common.constraints.AlgebricksPartitionConstraint;
import
org.apache.hyracks.algebricks.common.constraints.AlgebricksPartitionConstraintHelper;
import org.apache.hyracks.algebricks.common.exceptions.AlgebricksException;
@@ -107,6 +106,7 @@
public static final List<List<String>> FILE_INDEX_FIELD_NAMES = new
ArrayList<List<String>>();
public static final ArrayList<IAType> FILE_INDEX_FIELD_TYPES = new
ArrayList<IAType>();
+
static {
FILE_INDEX_FIELD_NAMES.add(new ArrayList<String>(Arrays.asList("")));
FILE_INDEX_FIELD_TYPES.add(BuiltinType.ASTRING);
@@ -128,8 +128,8 @@
public static boolean datasetUsesHiveAdapter(ExternalDatasetDetails ds) {
String adapter = ds.getAdapter();
- return (adapter.equalsIgnoreCase("hive") || adapter
-
.equalsIgnoreCase("org.apache.asterix.external.dataset.adapter.HIVEAdapter"));
+ return (adapter.equalsIgnoreCase("hive")
+ ||
adapter.equalsIgnoreCase("org.apache.asterix.external.dataset.adapter.HIVEAdapter"));
}
public static boolean isValidIndexName(String datasetName, String
indexName) {
@@ -154,7 +154,8 @@
return IndexingConstants.getBuddyBtreeComparatorFactories();
}
- public static ArrayList<ExternalFile>
getSnapshotFromExternalFileSystem(Dataset dataset) throws AlgebricksException {
+ public static ArrayList<ExternalFile>
getSnapshotFromExternalFileSystem(Dataset dataset)
+ throws AlgebricksException {
ArrayList<ExternalFile> files = new ArrayList<ExternalFile>();
ExternalDatasetDetails datasetDetails = (ExternalDatasetDetails)
dataset.getDatasetDetails();
try {
@@ -176,9 +177,9 @@
if (fileStatuses[i].isDirectory()) {
listSubFiles(dataset, fs, fileStatuses[i], files);
} else {
- files.add(new ExternalFile(dataset.getDataverseName(),
dataset.getDatasetName(),
- nextFileNumber,
fileStatuses[i].getPath().toUri().getPath(), new Date(fileStatuses[i]
- .getModificationTime()),
fileStatuses[i].getLen(),
+ files.add(new ExternalFile(dataset.getDataverseName(),
dataset.getDatasetName(), nextFileNumber,
+ fileStatuses[i].getPath().toUri().getPath(),
+ new
Date(fileStatuses[i].getModificationTime()), fileStatuses[i].getLen(),
ExternalFilePendingOp.PENDING_NO_OP));
}
}
@@ -223,7 +224,7 @@
public static JobSpecification buildFilesIndexReplicationJobSpec(Dataset
dataset,
ArrayList<ExternalFile> externalFilesSnapshot, AqlMetadataProvider
metadataProvider, boolean createIndex)
- throws MetadataException, AlgebricksException {
+ throws MetadataException, AlgebricksException {
JobSpecification spec = JobSpecificationUtils.createJobSpecification();
IAsterixPropertiesProvider asterixPropertiesProvider =
AsterixAppContextInfo.getInstance();
AsterixStorageProperties storageProperties =
asterixPropertiesProvider.getStorageProperties();
@@ -232,21 +233,21 @@
ILSMMergePolicyFactory mergePolicyFactory = compactionInfo.first;
Map<String, String> mergePolicyFactoryProperties =
compactionInfo.second;
Pair<IFileSplitProvider, AlgebricksPartitionConstraint>
secondarySplitsAndConstraint = metadataProvider
-
.splitProviderAndPartitionConstraintsForFilesIndex(dataset.getDataverseName(),
- dataset.getDatasetName(),
getFilesIndexName(dataset.getDatasetName()), true);
+
.splitProviderAndPartitionConstraintsForFilesIndex(dataset.getDataverseName(),
dataset.getDatasetName(),
+ getFilesIndexName(dataset.getDatasetName()), true);
IFileSplitProvider secondaryFileSplitProvider =
secondarySplitsAndConstraint.first;
FilesIndexDescription filesIndexDescription = new
FilesIndexDescription();
ILocalResourceMetadata localResourceMetadata = new
ExternalBTreeLocalResourceMetadata(
- filesIndexDescription.EXTERNAL_FILE_INDEX_TYPE_TRAITS,
- filesIndexDescription.FILES_INDEX_COMP_FACTORIES, new int[] {
0 }, false, dataset.getDatasetId(),
- mergePolicyFactory, mergePolicyFactoryProperties);
+ filesIndexDescription.EXTERNAL_FILE_INDEX_TYPE_TRAITS,
filesIndexDescription.FILES_INDEX_COMP_FACTORIES,
+ new int[] { 0 }, false, dataset.getDatasetId(),
mergePolicyFactory, mergePolicyFactoryProperties);
PersistentLocalResourceFactoryProvider localResourceFactoryProvider =
new PersistentLocalResourceFactoryProvider(
localResourceMetadata, LocalResource.ExternalBTreeResource);
ExternalBTreeDataflowHelperFactory indexDataflowHelperFactory = new
ExternalBTreeDataflowHelperFactory(
- mergePolicyFactory, mergePolicyFactoryProperties, new
SecondaryIndexOperationTrackerProvider(
- dataset.getDatasetId()),
AsterixRuntimeComponentsProvider.RUNTIME_PROVIDER,
- LSMBTreeIOOperationCallbackFactory.INSTANCE,
storageProperties.getBloomFilterFalsePositiveRate(),
- ExternalDatasetsRegistry.INSTANCE.getDatasetVersion(dataset),
true);
+ mergePolicyFactory, mergePolicyFactoryProperties,
+ new
SecondaryIndexOperationTrackerProvider(dataset.getDatasetId()),
+ AsterixRuntimeComponentsProvider.RUNTIME_PROVIDER,
LSMBTreeIOOperationCallbackFactory.INSTANCE,
+ storageProperties.getBloomFilterFalsePositiveRate(),
+ ExternalDatasetsRegistry.INSTANCE.getDatasetVersion(dataset),
true, false, null, null);
ExternalFilesIndexOperatorDescriptor externalFilesOp = new
ExternalFilesIndexOperatorDescriptor(spec,
AsterixRuntimeComponentsProvider.RUNTIME_PROVIDER,
AsterixRuntimeComponentsProvider.RUNTIME_PROVIDER,
secondaryFileSplitProvider, indexDataflowHelperFactory,
localResourceFactoryProvider,
@@ -260,7 +261,7 @@
/**
* This method create an indexing operator that index records in HDFS
- *
+ *
* @param jobSpec
* @param itemType
* @param dataset
@@ -297,7 +298,7 @@
* deleteedFiles should contain files that are no longer there in the file
system
* appendedFiles should have the new file information of existing files
* The method should return false in case of zero delta
- *
+ *
* @param dataset
* @param metadataFiles
* @param addedFiles
@@ -309,7 +310,7 @@
*/
public static boolean isDatasetUptodate(Dataset dataset,
List<ExternalFile> metadataFiles,
List<ExternalFile> addedFiles, List<ExternalFile> deletedFiles,
List<ExternalFile> appendedFiles)
- throws MetadataException, AlgebricksException {
+ throws MetadataException, AlgebricksException {
boolean uptodate = true;
int newFileNumber = metadataFiles.get(metadataFiles.size() -
1).getFileNumber() + 1;
@@ -340,9 +341,10 @@
} else {
// Same file name, Different file mod date -> delete
and add
metadataFile.setPendingOp(ExternalFilePendingOp.PENDING_DROP_OP);
- deletedFiles.add(new
ExternalFile(metadataFile.getDataverseName(), metadataFile
- .getDatasetName(), 0,
metadataFile.getFileName(), metadataFile.getLastModefiedTime(),
- metadataFile.getSize(),
ExternalFilePendingOp.PENDING_DROP_OP));
+ deletedFiles
+ .add(new
ExternalFile(metadataFile.getDataverseName(), metadataFile.getDatasetName(), 0,
+ metadataFile.getFileName(),
metadataFile.getLastModefiedTime(),
+ metadataFile.getSize(),
ExternalFilePendingOp.PENDING_DROP_OP));
fileSystemFile.setPendingOp(ExternalFilePendingOp.PENDING_ADD_OP);
fileSystemFile.setFileNumber(newFileNumber);
addedFiles.add(fileSystemFile);
@@ -382,8 +384,8 @@
if (metadataFile.getPendingOp() ==
ExternalFilePendingOp.PENDING_NO_OP) {
metadataFile.setPendingOp(ExternalFilePendingOp.PENDING_DROP_OP);
deletedFiles.add(new
ExternalFile(metadataFile.getDataverseName(), metadataFile.getDatasetName(),
- newFileNumber, metadataFile.getFileName(),
metadataFile.getLastModefiedTime(), metadataFile
- .getSize(), metadataFile.getPendingOp()));
+ newFileNumber, metadataFile.getFileName(),
metadataFile.getLastModefiedTime(),
+ metadataFile.getSize(), metadataFile.getPendingOp()));
newFileNumber++;
uptodate = false;
}
@@ -421,13 +423,15 @@
metadataProvider.getMetadataTxnContext());
IndexDropOperatorDescriptor btreeDrop = new
IndexDropOperatorDescriptor(spec,
AsterixRuntimeComponentsProvider.RUNTIME_PROVIDER,
AsterixRuntimeComponentsProvider.RUNTIME_PROVIDER,
- splitsAndConstraint.first, new
LSMBTreeDataflowHelperFactory(new AsterixVirtualBufferCacheProvider(
- dataset.getDatasetId()), compactionInfo.first,
compactionInfo.second,
+ splitsAndConstraint.first,
+ new LSMBTreeDataflowHelperFactory(new
AsterixVirtualBufferCacheProvider(dataset.getDatasetId()),
+ compactionInfo.first, compactionInfo.second,
new
SecondaryIndexOperationTrackerProvider(dataset.getDatasetId()),
AsterixRuntimeComponentsProvider.RUNTIME_PROVIDER,
LSMBTreeIOOperationCallbackFactory.INSTANCE,
- storageProperties.getBloomFilterFalsePositiveRate(),
false, null, null, null, null, !temp));
- AlgebricksPartitionConstraintHelper
- .setPartitionConstraintInJobSpec(spec, btreeDrop,
splitsAndConstraint.second);
+ storageProperties.getBloomFilterFalsePositiveRate(),
false, null, null, null, null, !temp,
+ false, null, null));
+
AlgebricksPartitionConstraintHelper.setPartitionConstraintInJobSpec(spec,
btreeDrop,
+ splitsAndConstraint.second);
spec.addRoot(btreeDrop);
return spec;
@@ -443,9 +447,9 @@
else if (file.getPendingOp() ==
ExternalFilePendingOp.PENDING_APPEND_OP) {
for (ExternalFile appendedFile : appendedFiles) {
if (appendedFile.getFileName().equals(file.getFileName()))
{
- files.add(new ExternalFile(file.getDataverseName(),
file.getDatasetName(),
- file.getFileNumber(), file.getFileName(),
file.getLastModefiedTime(), appendedFile
- .getSize(),
ExternalFilePendingOp.PENDING_NO_OP));
+ files.add(new ExternalFile(file.getDataverseName(),
file.getDatasetName(), file.getFileNumber(),
+ file.getFileName(),
file.getLastModefiedTime(), appendedFile.getSize(),
+ ExternalFilePendingOp.PENDING_NO_OP));
}
}
}
@@ -549,7 +553,7 @@
new SecondaryIndexOperationTrackerProvider(ds.getDatasetId()),
AsterixRuntimeComponentsProvider.RUNTIME_PROVIDER,
LSMBTreeIOOperationCallbackFactory.INSTANCE,
storageProperties.getBloomFilterFalsePositiveRate(),
- ExternalDatasetsRegistry.INSTANCE.getDatasetVersion(ds), true);
+ ExternalDatasetsRegistry.INSTANCE.getDatasetVersion(ds), true,
false, null, null);
}
private static ExternalBTreeWithBuddyDataflowHelperFactory
getBTreeDataflowHelperFactory(Dataset ds, Index index,
@@ -557,17 +561,16 @@
AsterixStorageProperties storageProperties, JobSpecification spec)
{
return new
ExternalBTreeWithBuddyDataflowHelperFactory(mergePolicyFactory,
mergePolicyFactoryProperties,
new SecondaryIndexOperationTrackerProvider(ds.getDatasetId()),
- AsterixRuntimeComponentsProvider.RUNTIME_PROVIDER,
- LSMBTreeWithBuddyIOOperationCallbackFactory.INSTANCE,
+ AsterixRuntimeComponentsProvider.RUNTIME_PROVIDER,
LSMBTreeWithBuddyIOOperationCallbackFactory.INSTANCE,
storageProperties.getBloomFilterFalsePositiveRate(), new int[]
{ index.getKeyFieldNames().size() },
- ExternalDatasetsRegistry.INSTANCE.getDatasetVersion(ds), true);
+ ExternalDatasetsRegistry.INSTANCE.getDatasetVersion(ds), true,
false, null, null);
}
@SuppressWarnings("rawtypes")
private static ExternalRTreeDataflowHelperFactory
getRTreeDataflowHelperFactory(Dataset ds, Index index,
ILSMMergePolicyFactory mergePolicyFactory, Map<String, String>
mergePolicyFactoryProperties,
AsterixStorageProperties storageProperties, AqlMetadataProvider
metadataProvider, JobSpecification spec)
- throws AlgebricksException, AsterixException {
+ throws AlgebricksException, AsterixException {
int numPrimaryKeys = getRIDSize(ds);
List<List<String>> secondaryKeyFields = index.getKeyFieldNames();
secondaryKeyFields.size();
@@ -594,8 +597,8 @@
.getSerializerDeserializer(nestedKeyType);
secondaryRecFields[i] = keySerde;
- secondaryComparatorFactories[i] =
AqlBinaryComparatorFactoryProvider.INSTANCE.getBinaryComparatorFactory(
- nestedKeyType, true);
+ secondaryComparatorFactories[i] =
AqlBinaryComparatorFactoryProvider.INSTANCE
+ .getBinaryComparatorFactory(nestedKeyType, true);
secondaryTypeTraits[i] =
AqlTypeTraitProvider.INSTANCE.getTypeTrait(nestedKeyType);
valueProviderFactories[i] =
AqlPrimitiveValueProviderFactory.INSTANCE;
}
@@ -743,14 +746,15 @@
ILSMMergePolicyFactory mergePolicyFactory = compactionInfo.first;
Map<String, String> mergePolicyFactoryProperties =
compactionInfo.second;
Pair<IFileSplitProvider, AlgebricksPartitionConstraint>
secondarySplitsAndConstraint = metadataProvider
-
.splitProviderAndPartitionConstraintsForFilesIndex(dataset.getDataverseName(),
- dataset.getDatasetName(),
getFilesIndexName(dataset.getDatasetName()), true);
+
.splitProviderAndPartitionConstraintsForFilesIndex(dataset.getDataverseName(),
dataset.getDatasetName(),
+ getFilesIndexName(dataset.getDatasetName()), true);
IFileSplitProvider secondaryFileSplitProvider =
secondarySplitsAndConstraint.first;
ExternalBTreeDataflowHelperFactory indexDataflowHelperFactory = new
ExternalBTreeDataflowHelperFactory(
- mergePolicyFactory, mergePolicyFactoryProperties, new
SecondaryIndexOperationTrackerProvider(
- dataset.getDatasetId()),
AsterixRuntimeComponentsProvider.RUNTIME_PROVIDER,
- LSMBTreeIOOperationCallbackFactory.INSTANCE,
storageProperties.getBloomFilterFalsePositiveRate(),
- ExternalDatasetsRegistry.INSTANCE.getDatasetVersion(dataset),
true);
+ mergePolicyFactory, mergePolicyFactoryProperties,
+ new
SecondaryIndexOperationTrackerProvider(dataset.getDatasetId()),
+ AsterixRuntimeComponentsProvider.RUNTIME_PROVIDER,
LSMBTreeIOOperationCallbackFactory.INSTANCE,
+ storageProperties.getBloomFilterFalsePositiveRate(),
+ ExternalDatasetsRegistry.INSTANCE.getDatasetVersion(dataset),
true, false, null, null);
FilesIndexDescription filesIndexDescription = new
FilesIndexDescription();
LSMTreeIndexCompactOperatorDescriptor compactOp = new
LSMTreeIndexCompactOperatorDescriptor(spec,
AsterixRuntimeComponentsProvider.RUNTIME_PROVIDER,
AsterixRuntimeComponentsProvider.RUNTIME_PROVIDER,
diff --git
a/asterix-app/src/main/java/org/apache/asterix/file/IndexOperations.java
b/asterix-app/src/main/java/org/apache/asterix/file/IndexOperations.java
index c5870a6..ada369a 100644
--- a/asterix-app/src/main/java/org/apache/asterix/file/IndexOperations.java
+++ b/asterix-app/src/main/java/org/apache/asterix/file/IndexOperations.java
@@ -56,7 +56,7 @@
public static JobSpecification
buildSecondaryIndexCreationJobSpec(CompiledCreateIndexStatement createIndexStmt,
ARecordType recType, ARecordType enforcedType, AqlMetadataProvider
metadataProvider)
- throws AsterixException, AlgebricksException {
+ throws AsterixException, AlgebricksException {
SecondaryIndexOperationsHelper secondaryIndexHelper =
SecondaryIndexOperationsHelper
.createIndexOperationsHelper(createIndexStmt.getIndexType(),
createIndexStmt.getDataverseName(),
createIndexStmt.getDatasetName(),
createIndexStmt.getIndexName(),
@@ -68,7 +68,7 @@
public static JobSpecification
buildSecondaryIndexLoadingJobSpec(CompiledCreateIndexStatement createIndexStmt,
ARecordType recType, ARecordType enforcedType, AqlMetadataProvider
metadataProvider)
- throws AsterixException, AlgebricksException {
+ throws AsterixException, AlgebricksException {
SecondaryIndexOperationsHelper secondaryIndexHelper =
SecondaryIndexOperationsHelper
.createIndexOperationsHelper(createIndexStmt.getIndexType(),
createIndexStmt.getDataverseName(),
createIndexStmt.getDatasetName(),
createIndexStmt.getIndexName(),
@@ -109,13 +109,15 @@
// The index drop operation should be persistent regardless of temp
datasets or permanent dataset.
IndexDropOperatorDescriptor btreeDrop = new
IndexDropOperatorDescriptor(spec,
AsterixRuntimeComponentsProvider.RUNTIME_PROVIDER,
AsterixRuntimeComponentsProvider.RUNTIME_PROVIDER,
- splitsAndConstraint.first, new
LSMBTreeDataflowHelperFactory(new AsterixVirtualBufferCacheProvider(
- dataset.getDatasetId()), compactionInfo.first,
compactionInfo.second,
+ splitsAndConstraint.first,
+ new LSMBTreeDataflowHelperFactory(new
AsterixVirtualBufferCacheProvider(dataset.getDatasetId()),
+ compactionInfo.first, compactionInfo.second,
new
SecondaryIndexOperationTrackerProvider(dataset.getDatasetId()),
AsterixRuntimeComponentsProvider.RUNTIME_PROVIDER,
LSMBTreeIOOperationCallbackFactory.INSTANCE,
- storageProperties.getBloomFilterFalsePositiveRate(),
false, null, null, null, null, !temp));
- AlgebricksPartitionConstraintHelper
- .setPartitionConstraintInJobSpec(spec, btreeDrop,
splitsAndConstraint.second);
+ storageProperties.getBloomFilterFalsePositiveRate(),
false, null, null, null, null, !temp,
+ false, null, null));
+
AlgebricksPartitionConstraintHelper.setPartitionConstraintInJobSpec(spec,
btreeDrop,
+ splitsAndConstraint.second);
spec.addRoot(btreeDrop);
return spec;
@@ -123,7 +125,7 @@
public static JobSpecification
buildSecondaryIndexCompactJobSpec(CompiledIndexCompactStatement
indexCompactStmt,
ARecordType recType, ARecordType enforcedType, AqlMetadataProvider
metadataProvider, Dataset dataset)
- throws AsterixException, AlgebricksException {
+ throws AsterixException, AlgebricksException {
SecondaryIndexOperationsHelper secondaryIndexHelper =
SecondaryIndexOperationsHelper
.createIndexOperationsHelper(indexCompactStmt.getIndexType(),
indexCompactStmt.getDataverseName(),
indexCompactStmt.getDatasetName(),
indexCompactStmt.getIndexName(),
diff --git
a/asterix-app/src/main/java/org/apache/asterix/file/SecondaryBTreeOperationsHelper.java
b/asterix-app/src/main/java/org/apache/asterix/file/SecondaryBTreeOperationsHelper.java
index 7c14e5d..09dd4f5 100644
---
a/asterix-app/src/main/java/org/apache/asterix/file/SecondaryBTreeOperationsHelper.java
+++
b/asterix-app/src/main/java/org/apache/asterix/file/SecondaryBTreeOperationsHelper.java
@@ -30,6 +30,7 @@
import org.apache.asterix.common.exceptions.AsterixException;
import
org.apache.asterix.common.ioopcallbacks.LSMBTreeIOOperationCallbackFactory;
import
org.apache.asterix.common.ioopcallbacks.LSMBTreeWithBuddyIOOperationCallbackFactory;
+import
org.apache.asterix.dataflow.data.nontagged.valueproviders.AqlOrdinalPrimitiveValueProviderFactory;
import org.apache.asterix.metadata.declared.AqlMetadataProvider;
import org.apache.asterix.metadata.entities.Index;
import org.apache.asterix.metadata.external.IndexingConstants;
@@ -71,6 +72,7 @@
import
org.apache.hyracks.storage.am.lsm.btree.dataflow.ExternalBTreeWithBuddyDataflowHelperFactory;
import
org.apache.hyracks.storage.am.lsm.btree.dataflow.LSMBTreeDataflowHelperFactory;
import
org.apache.hyracks.storage.am.lsm.common.dataflow.LSMTreeIndexCompactOperatorDescriptor;
+import org.apache.hyracks.storage.am.statistics.common.SynopsisType;
import org.apache.hyracks.storage.common.file.ILocalResourceFactoryProvider;
import org.apache.hyracks.storage.common.file.LocalResource;
@@ -96,12 +98,14 @@
secondaryBTreeFields, secondaryFilterFields);
localResourceFactoryProvider = new
PersistentLocalResourceFactoryProvider(localResourceMetadata,
LocalResource.LSMBTreeResource);
- indexDataflowHelperFactory = new LSMBTreeDataflowHelperFactory(new
AsterixVirtualBufferCacheProvider(
- dataset.getDatasetId()), mergePolicyFactory,
mergePolicyFactoryProperties,
- new
SecondaryIndexOperationTrackerProvider(dataset.getDatasetId()),
+ indexDataflowHelperFactory = new LSMBTreeDataflowHelperFactory(
+ new
AsterixVirtualBufferCacheProvider(dataset.getDatasetId()), mergePolicyFactory,
+ mergePolicyFactoryProperties, new
SecondaryIndexOperationTrackerProvider(dataset.getDatasetId()),
AsterixRuntimeComponentsProvider.RUNTIME_PROVIDER,
LSMBTreeIOOperationCallbackFactory.INSTANCE,
storageProperties.getBloomFilterFalsePositiveRate(),
false, filterTypeTraits, filterCmpFactories,
- secondaryBTreeFields, secondaryFilterFields,
!dataset.getDatasetDetails().isTemp());
+ secondaryBTreeFields, secondaryFilterFields,
!dataset.getDatasetDetails().isTemp(),
+ storageProperties.getStatisticsSynopsisType() !=
SynopsisType.None, secondaryTypeTraits,
+ AqlOrdinalPrimitiveValueProviderFactory.INSTANCE);
} else {
// External dataset local resource and dataflow helper
int[] buddyBreeFields = new int[] { numSecondaryKeys };
@@ -115,7 +119,9 @@
AsterixRuntimeComponentsProvider.RUNTIME_PROVIDER,
LSMBTreeWithBuddyIOOperationCallbackFactory.INSTANCE,
storageProperties.getBloomFilterFalsePositiveRate(),
buddyBreeFields,
-
ExternalDatasetsRegistry.INSTANCE.getDatasetVersion(dataset), true);
+
ExternalDatasetsRegistry.INSTANCE.getDatasetVersion(dataset), true,
+ storageProperties.getStatisticsSynopsisType() !=
SynopsisType.None, secondaryTypeTraits,
+ AqlOrdinalPrimitiveValueProviderFactory.INSTANCE);
}
TreeIndexCreateOperatorDescriptor secondaryIndexCreateOp = new
TreeIndexCreateOperatorDescriptor(spec,
AsterixRuntimeComponentsProvider.RUNTIME_PROVIDER,
AsterixRuntimeComponentsProvider.RUNTIME_PROVIDER,
@@ -163,11 +169,14 @@
// Create secondary BTree bulk load op.
AbstractTreeIndexOperatorDescriptor secondaryBulkLoadOp;
ExternalBTreeWithBuddyDataflowHelperFactory dataflowHelperFactory
= new ExternalBTreeWithBuddyDataflowHelperFactory(
- mergePolicyFactory, mergePolicyFactoryProperties, new
SecondaryIndexOperationTrackerProvider(
- dataset.getDatasetId()),
AsterixRuntimeComponentsProvider.RUNTIME_PROVIDER,
+ mergePolicyFactory, mergePolicyFactoryProperties,
+ new
SecondaryIndexOperationTrackerProvider(dataset.getDatasetId()),
+ AsterixRuntimeComponentsProvider.RUNTIME_PROVIDER,
LSMBTreeWithBuddyIOOperationCallbackFactory.INSTANCE,
storageProperties.getBloomFilterFalsePositiveRate(), new
int[] { numSecondaryKeys },
-
ExternalDatasetsRegistry.INSTANCE.getDatasetVersion(dataset), true);
+
ExternalDatasetsRegistry.INSTANCE.getDatasetVersion(dataset), true,
+ storageProperties.getStatisticsSynopsisType() !=
SynopsisType.None, secondaryTypeTraits,
+ AqlOrdinalPrimitiveValueProviderFactory.INSTANCE);
IOperatorDescriptor root;
if (externalFiles != null) {
// Transaction load
@@ -222,19 +231,21 @@
AsterixStorageProperties storageProperties =
propertiesProvider.getStorageProperties();
boolean temp = dataset.getDatasetDetails().isTemp();
// Create secondary BTree bulk load op.
- TreeIndexBulkLoadOperatorDescriptor secondaryBulkLoadOp =
createTreeIndexBulkLoadOp(
- spec,
- numSecondaryKeys,
+ TreeIndexBulkLoadOperatorDescriptor secondaryBulkLoadOp =
createTreeIndexBulkLoadOp(spec, numSecondaryKeys,
new LSMBTreeDataflowHelperFactory(new
AsterixVirtualBufferCacheProvider(dataset.getDatasetId()),
mergePolicyFactory, mergePolicyFactoryProperties,
new
SecondaryIndexOperationTrackerProvider(dataset.getDatasetId()),
AsterixRuntimeComponentsProvider.RUNTIME_PROVIDER,
- LSMBTreeIOOperationCallbackFactory.INSTANCE,
storageProperties
- .getBloomFilterFalsePositiveRate(), false,
filterTypeTraits, filterCmpFactories,
- secondaryBTreeFields, secondaryFilterFields,
!temp), GlobalConfig.DEFAULT_TREE_FILL_FACTOR);
+ LSMBTreeIOOperationCallbackFactory.INSTANCE,
+
storageProperties.getBloomFilterFalsePositiveRate(), false, filterTypeTraits,
+ filterCmpFactories, secondaryBTreeFields,
secondaryFilterFields, !temp,
+ storageProperties.getStatisticsSynopsisType() !=
SynopsisType.None, secondaryTypeTraits,
+ AqlOrdinalPrimitiveValueProviderFactory.INSTANCE),
+ GlobalConfig.DEFAULT_TREE_FILL_FACTOR);
AlgebricksMetaOperatorDescriptor metaOp = new
AlgebricksMetaOperatorDescriptor(spec, 1, 0,
- new IPushRuntimeFactory[] { new SinkRuntimeFactory() },
new RecordDescriptor[] { secondaryRecDesc });
+ new IPushRuntimeFactory[] { new SinkRuntimeFactory() },
+ new RecordDescriptor[] { secondaryRecDesc });
// Connect the operators.
spec.connect(new OneToOneConnectorDescriptor(spec), keyProviderOp,
0, primaryScanOp, 0);
spec.connect(new OneToOneConnectorDescriptor(spec), sourceOp, 0,
asterixAssignOp, 0);
@@ -268,13 +279,16 @@
compactOp = new LSMTreeIndexCompactOperatorDescriptor(spec,
AsterixRuntimeComponentsProvider.RUNTIME_PROVIDER,
AsterixRuntimeComponentsProvider.RUNTIME_PROVIDER,
secondaryFileSplitProvider, secondaryTypeTraits,
- secondaryComparatorFactories,
secondaryBloomFilterKeyFields, new LSMBTreeDataflowHelperFactory(
- new
AsterixVirtualBufferCacheProvider(dataset.getDatasetId()), mergePolicyFactory,
- mergePolicyFactoryProperties, new
SecondaryIndexOperationTrackerProvider(
- dataset.getDatasetId()),
AsterixRuntimeComponentsProvider.RUNTIME_PROVIDER,
+ secondaryComparatorFactories,
secondaryBloomFilterKeyFields,
+ new LSMBTreeDataflowHelperFactory(new
AsterixVirtualBufferCacheProvider(dataset.getDatasetId()),
+ mergePolicyFactory, mergePolicyFactoryProperties,
+ new
SecondaryIndexOperationTrackerProvider(dataset.getDatasetId()),
+ AsterixRuntimeComponentsProvider.RUNTIME_PROVIDER,
LSMBTreeIOOperationCallbackFactory.INSTANCE,
storageProperties.getBloomFilterFalsePositiveRate(), false, filterTypeTraits,
- filterCmpFactories, secondaryBTreeFields,
secondaryFilterFields, !temp),
+ filterCmpFactories, secondaryBTreeFields,
secondaryFilterFields, !temp,
+ storageProperties.getStatisticsSynopsisType() !=
SynopsisType.None, secondaryTypeTraits,
+ AqlOrdinalPrimitiveValueProviderFactory.INSTANCE),
NoOpOperationCallbackFactory.INSTANCE);
} else {
// External dataset
@@ -285,9 +299,11 @@
new
ExternalBTreeWithBuddyDataflowHelperFactory(mergePolicyFactory,
mergePolicyFactoryProperties,
new
SecondaryIndexOperationTrackerProvider(dataset.getDatasetId()),
AsterixRuntimeComponentsProvider.RUNTIME_PROVIDER,
-
LSMBTreeWithBuddyIOOperationCallbackFactory.INSTANCE, storageProperties
- .getBloomFilterFalsePositiveRate(), new
int[] { numSecondaryKeys },
-
ExternalDatasetsRegistry.INSTANCE.getDatasetVersion(dataset), true),
+
LSMBTreeWithBuddyIOOperationCallbackFactory.INSTANCE,
+
storageProperties.getBloomFilterFalsePositiveRate(), new int[] {
numSecondaryKeys },
+
ExternalDatasetsRegistry.INSTANCE.getDatasetVersion(dataset), true,
+ storageProperties.getStatisticsSynopsisType() !=
SynopsisType.None, secondaryTypeTraits,
+ AqlOrdinalPrimitiveValueProviderFactory.INSTANCE),
NoOpOperationCallbackFactory.INSTANCE);
}
AlgebricksPartitionConstraintHelper.setPartitionConstraintInJobSpec(spec,
compactOp,
@@ -301,7 +317,7 @@
@SuppressWarnings("rawtypes")
protected void setSecondaryRecDescAndComparators(IndexType indexType,
List<List<String>> secondaryKeyFields,
List<IAType> secondaryKeyTypes, int gramLength,
AqlMetadataProvider metadataProvider)
- throws AlgebricksException, AsterixException {
+ throws AlgebricksException, AsterixException {
secondaryFieldAccessEvalFactories = new
ICopyEvaluatorFactory[numSecondaryKeys + numFilterFields];
secondaryComparatorFactories = new
IBinaryComparatorFactory[numSecondaryKeys + numPrimaryKeys];
secondaryBloomFilterKeyFields = new int[numSecondaryKeys];
diff --git
a/asterix-app/src/main/java/org/apache/asterix/file/SecondaryIndexOperationsHelper.java
b/asterix-app/src/main/java/org/apache/asterix/file/SecondaryIndexOperationsHelper.java
index 0cc137b..4486751 100644
---
a/asterix-app/src/main/java/org/apache/asterix/file/SecondaryIndexOperationsHelper.java
+++
b/asterix-app/src/main/java/org/apache/asterix/file/SecondaryIndexOperationsHelper.java
@@ -152,10 +152,10 @@
}
public static SecondaryIndexOperationsHelper
createIndexOperationsHelper(IndexType indexType, String dataverseName,
- String datasetName, String indexName, List<List<String>>
secondaryKeyFields,
- List<IAType> secondaryKeyTypes, boolean isEnforced, int
gramLength, AqlMetadataProvider metadataProvider,
+ String datasetName, String indexName, List<List<String>>
secondaryKeyFields, List<IAType> secondaryKeyTypes,
+ boolean isEnforced, int gramLength, AqlMetadataProvider
metadataProvider,
PhysicalOptimizationConfig physOptConf, ARecordType recType,
ARecordType enforcedType)
- throws AsterixException, AlgebricksException {
+ throws AsterixException, AlgebricksException {
IAsterixPropertiesProvider asterixPropertiesProvider =
AsterixAppContextInfo.getInstance();
SecondaryIndexOperationsHelper indexOperationsHelper = null;
switch (indexType) {
@@ -286,8 +286,8 @@
throw new AlgebricksException(e);
}
primaryRecFields[i] =
serdeProvider.getSerializerDeserializer(keyType);
- primaryComparatorFactories[i] =
AqlBinaryComparatorFactoryProvider.INSTANCE.getBinaryComparatorFactory(
- keyType, true);
+ primaryComparatorFactories[i] =
AqlBinaryComparatorFactoryProvider.INSTANCE
+ .getBinaryComparatorFactory(keyType, true);
primaryTypeTraits[i] =
AqlTypeTraitProvider.INSTANCE.getTypeTrait(keyType);
primaryBloomFilterKeyFields[i] = i;
}
@@ -300,8 +300,8 @@
List<List<String>> secondaryKeyFields, List<IAType>
secondaryKeyTypes, int gramLength,
AqlMetadataProvider metadataProvider) throws AlgebricksException,
AsterixException;
- protected AbstractOperatorDescriptor
createDummyKeyProviderOp(JobSpecification spec) throws AsterixException,
- AlgebricksException {
+ protected AbstractOperatorDescriptor
createDummyKeyProviderOp(JobSpecification spec)
+ throws AsterixException, AlgebricksException {
// Build dummy tuple containing one field with a dummy value inside.
ArrayTupleBuilder tb = new ArrayTupleBuilder(1);
DataOutput dos = tb.getDataOutput();
@@ -345,12 +345,12 @@
primaryFileSplitProvider, primaryRecDesc.getTypeTraits(),
primaryComparatorFactories,
primaryBloomFilterKeyFields, lowKeyFields, highKeyFields,
true, true,
new LSMBTreeDataflowHelperFactory(new
AsterixVirtualBufferCacheProvider(dataset.getDatasetId()),
- mergePolicyFactory, mergePolicyFactoryProperties, new
PrimaryIndexOperationTrackerProvider(
- dataset.getDatasetId()),
AsterixRuntimeComponentsProvider.RUNTIME_PROVIDER,
- LSMBTreeIOOperationCallbackFactory.INSTANCE,
storageProperties
- .getBloomFilterFalsePositiveRate(), true,
filterTypeTraits, filterCmpFactories,
- primaryBTreeFields, primaryFilterFields, !temp),
false, false, null,
- searchCallbackFactory, null, null);
+ mergePolicyFactory, mergePolicyFactoryProperties,
+ new
PrimaryIndexOperationTrackerProvider(dataset.getDatasetId()),
+ AsterixRuntimeComponentsProvider.RUNTIME_PROVIDER,
LSMBTreeIOOperationCallbackFactory.INSTANCE,
+ storageProperties.getBloomFilterFalsePositiveRate(),
true, filterTypeTraits, filterCmpFactories,
+ primaryBTreeFields, primaryFilterFields, !temp, false,
null, null),
+ false, false, null, searchCallbackFactory, null, null);
AlgebricksPartitionConstraintHelper.setPartitionConstraintInJobSpec(spec,
primarySearchOp,
primaryPartitionConstraint);
@@ -433,7 +433,7 @@
protected TreeIndexBulkLoadOperatorDescriptor
createTreeIndexBulkLoadOp(JobSpecification spec,
int numSecondaryKeyFields, IIndexDataflowHelperFactory
dataflowHelperFactory, float fillFactor)
- throws MetadataException, AlgebricksException {
+ throws MetadataException, AlgebricksException {
int[] fieldPermutation = new int[numSecondaryKeyFields +
numPrimaryKeys + numFilterFields];
for (int i = 0; i < fieldPermutation.length; i++) {
fieldPermutation[i] = i;
@@ -541,7 +541,7 @@
protected ExternalIndexBulkModifyOperatorDescriptor
createExternalIndexBulkModifyOp(JobSpecification spec,
int numSecondaryKeyFields, IIndexDataflowHelperFactory
dataflowHelperFactory, float fillFactor)
- throws MetadataException, AlgebricksException {
+ throws MetadataException, AlgebricksException {
int[] fieldPermutation = new int[numSecondaryKeyFields +
numPrimaryKeys];
for (int i = 0; i < numSecondaryKeyFields + numPrimaryKeys; i++) {
fieldPermutation[i] = i;
diff --git a/asterix-app/src/main/resources/asterix-build-configuration.xml
b/asterix-app/src/main/resources/asterix-build-configuration.xml
index 8d0b7f3..d758aed 100644
--- a/asterix-app/src/main/resources/asterix-build-configuration.xml
+++ b/asterix-app/src/main/resources/asterix-build-configuration.xml
@@ -92,6 +92,13 @@
(Default = 8)
</description>
</property>
+ <property>
+ <name>storage.statistics.synopsis.type</name>
+ <value>Wavelet</value>
+ <description>The type of synopsis used for collecting dataset
statistics.
+ (Default = None)
+ </description>
+ </property>
<property>
<name>plot.activate</name>
<value>false</value>
diff --git
a/asterix-common/src/main/java/org/apache/asterix/common/config/AsterixStorageProperties.java
b/asterix-common/src/main/java/org/apache/asterix/common/config/AsterixStorageProperties.java
index 7511145..55d1934 100644
---
a/asterix-common/src/main/java/org/apache/asterix/common/config/AsterixStorageProperties.java
+++
b/asterix-common/src/main/java/org/apache/asterix/common/config/AsterixStorageProperties.java
@@ -18,6 +18,8 @@
*/
package org.apache.asterix.common.config;
+import org.apache.hyracks.storage.am.statistics.common.SynopsisType;
+
public class AsterixStorageProperties extends AbstractAsterixProperties {
private static final String STORAGE_BUFFERCACHE_PAGESIZE_KEY =
"storage.buffercache.pagesize";
@@ -46,6 +48,9 @@
private static final String STORAGE_LSM_BLOOMFILTER_FALSEPOSITIVERATE_KEY
= "storage.lsm.bloomfilter.falsepositiverate";
private static double STORAGE_LSM_BLOOMFILTER_FALSEPOSITIVERATE_DEFAULT =
0.01;
+
+ private static final String STORAGE_STATISTICS_SYNOPSIS_TYPE_KEY =
"storage.statistics.synopsis.type";
+ private static String STORAGE_STATISTICS_SYNOPSIS_TYPE_DEFAULT =
SynopsisType.None.name();
public AsterixStorageProperties(AsterixPropertiesAccessor accessor) {
super(accessor);
@@ -81,10 +86,9 @@
}
public int getMetadataMemoryComponentNumPages() {
- return accessor
- .getProperty(STORAGE_METADATA_MEMORYCOMPONENT_NUMPAGES_KEY,
- STORAGE_METADATA_MEMORYCOMPONENT_NUMPAGES_DEFAULT,
- PropertyInterpreters.getIntegerPropertyInterpreter());
+ return
accessor.getProperty(STORAGE_METADATA_MEMORYCOMPONENT_NUMPAGES_KEY,
+ STORAGE_METADATA_MEMORYCOMPONENT_NUMPAGES_DEFAULT,
+ PropertyInterpreters.getIntegerPropertyInterpreter());
}
public int getMemoryComponentsNum() {
@@ -101,4 +105,9 @@
return
accessor.getProperty(STORAGE_LSM_BLOOMFILTER_FALSEPOSITIVERATE_KEY,
STORAGE_LSM_BLOOMFILTER_FALSEPOSITIVERATE_DEFAULT,
PropertyInterpreters.getDoublePropertyInterpreter());
}
+
+ public SynopsisType getStatisticsSynopsisType() {
+ return
SynopsisType.valueOf(accessor.getProperty(STORAGE_STATISTICS_SYNOPSIS_TYPE_KEY,
+ STORAGE_STATISTICS_SYNOPSIS_TYPE_DEFAULT,
PropertyInterpreters.getStringPropertyInterpreter()));
+ }
}
\ No newline at end of file
diff --git
a/asterix-external-data/src/main/java/org/apache/asterix/external/indexing/dataflow/HDFSLookupAdapterFactory.java
b/asterix-external-data/src/main/java/org/apache/asterix/external/indexing/dataflow/HDFSLookupAdapterFactory.java
index 505e1a9..a72e5a9 100644
---
a/asterix-external-data/src/main/java/org/apache/asterix/external/indexing/dataflow/HDFSLookupAdapterFactory.java
+++
b/asterix-external-data/src/main/java/org/apache/asterix/external/indexing/dataflow/HDFSLookupAdapterFactory.java
@@ -119,7 +119,8 @@
public static Pair<IOperatorDescriptor, AlgebricksPartitionConstraint>
buildExternalDataLookupRuntime(
JobSpecification jobSpec, Dataset dataset, Index secondaryIndex,
int[] ridIndexes, boolean retainInput,
IVariableTypeEnvironment typeEnv, List<LogicalVariable>
outputVars, IOperatorSchema opSchema,
- JobGenContext context, AqlMetadataProvider metadataProvider,
boolean retainNull) throws AlgebricksException {
+ JobGenContext context, AqlMetadataProvider metadataProvider,
boolean retainNull)
+ throws AlgebricksException {
// Get data type
IAType itemType = null;
@@ -149,11 +150,12 @@
boolean temp = dataset.getDatasetDetails().isTemp();
// Create the file index data flow helper
ExternalBTreeDataflowHelperFactory indexDataflowHelperFactory = new
ExternalBTreeDataflowHelperFactory(
- compactionInfo.first, compactionInfo.second, new
SecondaryIndexOperationTrackerProvider(
- dataset.getDatasetId()),
AsterixRuntimeComponentsProvider.RUNTIME_PROVIDER,
- LSMBTreeIOOperationCallbackFactory.INSTANCE,
metadataProvider.getStorageProperties()
- .getBloomFilterFalsePositiveRate(),
ExternalDatasetsRegistry.INSTANCE.getAndLockDatasetVersion(
- dataset, metadataProvider), !temp);
+ compactionInfo.first, compactionInfo.second,
+ new
SecondaryIndexOperationTrackerProvider(dataset.getDatasetId()),
+ AsterixRuntimeComponentsProvider.RUNTIME_PROVIDER,
LSMBTreeIOOperationCallbackFactory.INSTANCE,
+
metadataProvider.getStorageProperties().getBloomFilterFalsePositiveRate(),
+
ExternalDatasetsRegistry.INSTANCE.getAndLockDatasetVersion(dataset,
metadataProvider), !temp, false,
+ null, null);
// Create the out record descriptor, appContext and fileSplitProvider
for the files index
RecordDescriptor outRecDesc = JobGenHelper.mkRecordDescriptor(typeEnv,
opSchema, context);
@@ -172,9 +174,9 @@
// Create the operator
ExternalLoopkupOperatorDiscriptor op = new
ExternalLoopkupOperatorDiscriptor(jobSpec, adapterFactory,
outRecDesc, indexDataflowHelperFactory, retainInput,
appContext.getIndexLifecycleManagerProvider(),
- appContext.getStorageManagerInterface(), spPc.first,
dataset.getDatasetId(), metadataProvider
-
.getStorageProperties().getBloomFilterFalsePositiveRate(),
searchOpCallbackFactory, retainNull,
- context.getNullWriterFactory());
+ appContext.getStorageManagerInterface(), spPc.first,
dataset.getDatasetId(),
+
metadataProvider.getStorageProperties().getBloomFilterFalsePositiveRate(),
searchOpCallbackFactory,
+ retainNull, context.getNullWriterFactory());
// Return value
return new Pair<IOperatorDescriptor,
AlgebricksPartitionConstraint>(op, spPc.second);
diff --git
a/asterix-metadata/src/main/java/org/apache/asterix/metadata/bootstrap/MetadataBootstrap.java
b/asterix-metadata/src/main/java/org/apache/asterix/metadata/bootstrap/MetadataBootstrap.java
index c068657..b5a0273 100644
---
a/asterix-metadata/src/main/java/org/apache/asterix/metadata/bootstrap/MetadataBootstrap.java
+++
b/asterix-metadata/src/main/java/org/apache/asterix/metadata/bootstrap/MetadataBootstrap.java
@@ -402,7 +402,7 @@
.createMergePolicy(GlobalConfig.DEFAULT_COMPACTION_POLICY_PROPERTIES,
dataLifecycleManager),
opTracker, runtimeContext.getLSMIOScheduler(),
LSMBTreeIOOperationCallbackFactory.INSTANCE.createIOOperationCallback(),
index.isPrimaryIndex(),
- null, null, null, null, true);
+ null, null, null, null, true, false, null);
lsmBtree.create();
resourceID = runtimeContext.getResourceIdFactory().createId();
ILocalResourceMetadata localResourceMetadata = new
LSMBTreeLocalResourceMetadata(typeTraits,
@@ -426,7 +426,7 @@
GlobalConfig.DEFAULT_COMPACTION_POLICY_PROPERTIES, dataLifecycleManager),
opTracker, runtimeContext.getLSMIOScheduler(),
LSMBTreeIOOperationCallbackFactory.INSTANCE.createIOOperationCallback(),
index.isPrimaryIndex(),
- null, null, null, null, true);
+ null, null, null, null, true, false, null);
dataLifecycleManager.register(path, lsmBtree);
}
}
@@ -444,7 +444,7 @@
}
public static void startDDLRecovery() throws RemoteException,
ACIDException, MetadataException {
- //#. clean up any record which has pendingAdd/DelOp flag
+ //#. clean up any record which has pendingAdd/DelOp flag
// as traversing all records from DATAVERSE_DATASET to
DATASET_DATASET, and then to INDEX_DATASET.
String dataverseName = null;
String datasetName = null;
diff --git
a/asterix-metadata/src/main/java/org/apache/asterix/metadata/declared/AqlMetadataProvider.java
b/asterix-metadata/src/main/java/org/apache/asterix/metadata/declared/AqlMetadataProvider.java
index d31dfcf..bc0c2a0 100644
---
a/asterix-metadata/src/main/java/org/apache/asterix/metadata/declared/AqlMetadataProvider.java
+++
b/asterix-metadata/src/main/java/org/apache/asterix/metadata/declared/AqlMetadataProvider.java
@@ -55,6 +55,7 @@
import org.apache.asterix.common.parse.IParseFileSplitsDecl;
import org.apache.asterix.common.transactions.IRecoveryManager.ResourceType;
import org.apache.asterix.common.transactions.JobId;
+import
org.apache.asterix.dataflow.data.nontagged.valueproviders.AqlOrdinalPrimitiveValueProviderFactory;
import
org.apache.asterix.dataflow.data.nontagged.valueproviders.AqlPrimitiveValueProviderFactory;
import org.apache.asterix.formats.base.IDataFormat;
import org.apache.asterix.formats.nontagged.AqlBinaryComparatorFactoryProvider;
@@ -180,6 +181,7 @@
import
org.apache.hyracks.storage.am.lsm.rtree.dataflow.LSMRTreeDataflowHelperFactory;
import
org.apache.hyracks.storage.am.rtree.dataflow.RTreeSearchOperatorDescriptor;
import org.apache.hyracks.storage.am.rtree.frames.RTreePolicyType;
+import org.apache.hyracks.storage.am.statistics.common.SynopsisType;
public class AqlMetadataProvider implements IMetadataProvider<AqlSourceId,
String> {
public static final String TEMP_DATASETS_STORAGE_FOLDER = "temp";
@@ -349,8 +351,8 @@
// querying an external dataset
Dataset dataset = ((DatasetDataSource)
dataSource).getDataset();
String itemTypeName = dataset.getItemTypeName();
- IAType itemType =
MetadataManager.INSTANCE.getDatatype(mdTxnCtx, dataset.getDataverseName(),
- itemTypeName).getDatatype();
+ IAType itemType = MetadataManager.INSTANCE
+ .getDatatype(mdTxnCtx, dataset.getDataverseName(),
itemTypeName).getDatatype();
ExternalDatasetDetails edd = (ExternalDatasetDetails)
dataset.getDatasetDetails();
IAdapterFactory adapterFactory =
getConfiguredAdapterFactory(dataset, edd.getAdapter(),
edd.getProperties(), itemType, false, null);
@@ -395,8 +397,8 @@
.getSerializerDeserializer(feedOutputType);
RecordDescriptor feedDesc = new RecordDescriptor(new
ISerializerDeserializer[] { payloadSerde });
- FeedPolicy feedPolicy = (FeedPolicy) ((AqlDataSource)
dataSource).getProperties().get(
- BuiltinFeedPolicies.CONFIG_FEED_POLICY_KEY);
+ FeedPolicy feedPolicy = (FeedPolicy) ((AqlDataSource)
dataSource).getProperties()
+ .get(BuiltinFeedPolicies.CONFIG_FEED_POLICY_KEY);
if (feedPolicy == null) {
throw new AlgebricksException("Feed not configured with a
policy");
}
@@ -404,8 +406,8 @@
FeedConnectionId feedConnectionId = new
FeedConnectionId(feedDataSource.getId().getDataverseName(),
feedDataSource.getId().getDatasourceName(),
feedDataSource.getTargetDataset());
feedCollector = new FeedCollectOperatorDescriptor(jobSpec,
feedConnectionId,
- feedDataSource.getSourceFeedId(), (ARecordType)
feedOutputType, feedDesc,
- feedPolicy.getProperties(), feedDataSource.getLocation());
+ feedDataSource.getSourceFeedId(), feedOutputType,
feedDesc, feedPolicy.getProperties(),
+ feedDataSource.getLocation());
return new Pair<IOperatorDescriptor,
AlgebricksPartitionConstraint>(feedCollector,
determineLocationConstraint(feedDataSource));
@@ -435,8 +437,8 @@
if
(activity.getDataverseName().equals(feedDataSource.getSourceFeedId().getDataverse())
&& activity.getFeedName()
.equals(feedDataSource.getSourceFeedId().getFeedName())) {
- locations =
activity.getFeedActivityDetails().get(
-
FeedActivityDetails.COMPUTE_LOCATIONS);
+ locations =
activity.getFeedActivityDetails()
+
.get(FeedActivityDetails.COMPUTE_LOCATIONS);
locationArray = locations.split(",");
break;
}
@@ -490,8 +492,8 @@
private Pair<IOperatorDescriptor, AlgebricksPartitionConstraint>
buildLoadableDatasetScan(JobSpecification jobSpec,
LoadableDataSource alds, IAdapterFactory adapterFactory,
RecordDescriptor rDesc, boolean isPKAutoGenerated,
List<List<String>> primaryKeys, ARecordType recType, int pkIndex)
throws AlgebricksException {
- if
(!(adapterFactory.getSupportedOperations().equals(SupportedOperation.READ) ||
adapterFactory
-
.getSupportedOperations().equals(SupportedOperation.READ_WRITE))) {
+ if
(!(adapterFactory.getSupportedOperations().equals(SupportedOperation.READ)
+ ||
adapterFactory.getSupportedOperations().equals(SupportedOperation.READ_WRITE)))
{
throw new AlgebricksException(" External dataset adapter does not
support read operation");
}
ExternalDataScanOperatorDescriptor dataScanner = new
ExternalDataScanOperatorDescriptor(jobSpec, rDesc,
@@ -597,13 +599,13 @@
public Pair<IOperatorDescriptor, AlgebricksPartitionConstraint>
buildExternalDatasetDataScannerRuntime(
JobSpecification jobSpec, IAType itemType, IAdapterFactory
adapterFactory, IDataFormat format)
- throws AlgebricksException {
+ throws AlgebricksException {
if (itemType.getTypeTag() != ATypeTag.RECORD) {
throw new AlgebricksException("Can only scan datasets of
records.");
}
- if
(!(adapterFactory.getSupportedOperations().equals(SupportedOperation.READ) ||
adapterFactory
-
.getSupportedOperations().equals(SupportedOperation.READ_WRITE))) {
+ if
(!(adapterFactory.getSupportedOperations().equals(SupportedOperation.READ)
+ ||
adapterFactory.getSupportedOperations().equals(SupportedOperation.READ_WRITE)))
{
throw new AlgebricksException(" External dataset adapter does not
support read operation");
}
@@ -659,8 +661,8 @@
case EXTERNAL:
String libraryName = primaryFeed.getAdaptorName().trim()
.split(FeedConstants.NamingConstants.LIBRARY_NAME_SEPARATOR)[0];
- feedIngestor = new FeedIntakeOperatorDescriptor(jobSpec,
primaryFeed, libraryName, adapterFactory
- .getClass().getName(), factoryOutput.second,
policyAccessor);
+ feedIngestor = new FeedIntakeOperatorDescriptor(jobSpec,
primaryFeed, libraryName,
+ adapterFactory.getClass().getName(),
factoryOutput.second, policyAccessor);
break;
}
@@ -691,11 +693,11 @@
IBinaryComparatorFactory[] comparatorFactories;
String itemTypeName = dataset.getItemTypeName();
- ARecordType itemType = (ARecordType)
MetadataManager.INSTANCE.getDatatype(mdTxnCtx,
- dataset.getDataverseName(), itemTypeName).getDatatype();
+ ARecordType itemType = (ARecordType) MetadataManager.INSTANCE
+ .getDatatype(mdTxnCtx, dataset.getDataverseName(),
itemTypeName).getDatatype();
ITypeTraits[] filterTypeTraits =
DatasetUtils.computeFilterTypeTraits(dataset, itemType);
- IBinaryComparatorFactory[] filterCmpFactories =
DatasetUtils.computeFilterBinaryComparatorFactories(
- dataset, itemType,
context.getBinaryComparatorFactoryProvider());
+ IBinaryComparatorFactory[] filterCmpFactories =
DatasetUtils.computeFilterBinaryComparatorFactories(dataset,
+ itemType, context.getBinaryComparatorFactoryProvider());
int[] filterFields = null;
int[] btreeFields = null;
@@ -768,34 +770,39 @@
txnSubsystemProvider,
ResourceType.LSM_BTREE);
}
}
- Pair<ILSMMergePolicyFactory, Map<String, String>> compactionInfo =
DatasetUtils.getMergePolicyFactory(
- dataset, mdTxnCtx);
+ Pair<ILSMMergePolicyFactory, Map<String, String>> compactionInfo =
DatasetUtils
+ .getMergePolicyFactory(dataset, mdTxnCtx);
AsterixRuntimeComponentsProvider rtcProvider =
AsterixRuntimeComponentsProvider.RUNTIME_PROVIDER;
BTreeSearchOperatorDescriptor btreeSearchOp;
if (dataset.getDatasetType() == DatasetType.INTERNAL) {
btreeSearchOp = new BTreeSearchOperatorDescriptor(jobSpec,
outputRecDesc,
appContext.getStorageManagerInterface(),
appContext.getIndexLifecycleManagerProvider(),
spPc.first, typeTraits, comparatorFactories,
bloomFilterKeyFields, lowKeyFields, highKeyFields,
- lowKeyInclusive, highKeyInclusive, new
LSMBTreeDataflowHelperFactory(
- new
AsterixVirtualBufferCacheProvider(dataset.getDatasetId()), compactionInfo.first,
- compactionInfo.second, isSecondary ? new
SecondaryIndexOperationTrackerProvider(
- dataset.getDatasetId()) : new
PrimaryIndexOperationTrackerProvider(
- dataset.getDatasetId()), rtcProvider,
- LSMBTreeIOOperationCallbackFactory.INSTANCE,
+ lowKeyInclusive, highKeyInclusive,
+ new LSMBTreeDataflowHelperFactory(new
AsterixVirtualBufferCacheProvider(dataset.getDatasetId()),
+ compactionInfo.first, compactionInfo.second,
+ isSecondary ? new
SecondaryIndexOperationTrackerProvider(dataset.getDatasetId())
+ : new
PrimaryIndexOperationTrackerProvider(dataset.getDatasetId()),
+ rtcProvider,
LSMBTreeIOOperationCallbackFactory.INSTANCE,
storageProperties.getBloomFilterFalsePositiveRate(), !isSecondary,
filterTypeTraits,
- filterCmpFactories, btreeFields, filterFields,
!temp), retainInput, retainNull,
- context.getNullWriterFactory(), searchCallbackFactory,
minFilterFieldIndexes,
- maxFilterFieldIndexes);
+ filterCmpFactories, btreeFields, filterFields,
!temp,
+
getStorageProperties().getStatisticsSynopsisType() != SynopsisType.None,
typeTraits,
+
AqlOrdinalPrimitiveValueProviderFactory.INSTANCE),
+ retainInput, retainNull,
context.getNullWriterFactory(), searchCallbackFactory,
+ minFilterFieldIndexes, maxFilterFieldIndexes);
} else {
// External dataset <- use the btree with buddy btree->
// Be Careful of Key Start Index ?
int[] buddyBreeFields = new int[] { numSecondaryKeys };
ExternalBTreeWithBuddyDataflowHelperFactory
indexDataflowHelperFactory = new ExternalBTreeWithBuddyDataflowHelperFactory(
- compactionInfo.first, compactionInfo.second, new
SecondaryIndexOperationTrackerProvider(
- dataset.getDatasetId()),
AsterixRuntimeComponentsProvider.RUNTIME_PROVIDER,
- LSMBTreeWithBuddyIOOperationCallbackFactory.INSTANCE,
getStorageProperties()
- .getBloomFilterFalsePositiveRate(),
buddyBreeFields,
-
ExternalDatasetsRegistry.INSTANCE.getAndLockDatasetVersion(dataset, this),
!temp);
+ compactionInfo.first, compactionInfo.second,
+ new
SecondaryIndexOperationTrackerProvider(dataset.getDatasetId()),
+ AsterixRuntimeComponentsProvider.RUNTIME_PROVIDER,
+ LSMBTreeWithBuddyIOOperationCallbackFactory.INSTANCE,
+
getStorageProperties().getBloomFilterFalsePositiveRate(), buddyBreeFields,
+
ExternalDatasetsRegistry.INSTANCE.getAndLockDatasetVersion(dataset, this),
!temp,
+ getStorageProperties().getStatisticsSynopsisType() !=
SynopsisType.None, typeTraits,
+ AqlOrdinalPrimitiveValueProviderFactory.INSTANCE);
btreeSearchOp = new
ExternalBTreeSearchOperatorDescriptor(jobSpec, outputRecDesc, rtcProvider,
rtcProvider, spPc.first, typeTraits,
comparatorFactories, bloomFilterKeyFields, lowKeyFields,
highKeyFields, lowKeyInclusive, highKeyInclusive,
indexDataflowHelperFactory, retainInput,
@@ -858,17 +865,15 @@
Index secondaryIndex = MetadataManager.INSTANCE.getIndex(mdTxnCtx,
dataset.getDataverseName(),
dataset.getDatasetName(), indexName);
if (secondaryIndex == null) {
- throw new AlgebricksException("Code generation error: no index
" + indexName + " for dataset "
- + dataset.getDatasetName());
+ throw new AlgebricksException(
+ "Code generation error: no index " + indexName + " for
dataset " + dataset.getDatasetName());
}
List<List<String>> secondaryKeyFields =
secondaryIndex.getKeyFieldNames();
List<IAType> secondaryKeyTypes = secondaryIndex.getKeyFieldTypes();
int numSecondaryKeys = secondaryKeyFields.size();
if (numSecondaryKeys != 1) {
- throw new AlgebricksException(
- "Cannot use "
- + numSecondaryKeys
- + " fields as a key for the R-tree index.
There can be only one field as a key for the R-tree index.");
+ throw new AlgebricksException("Cannot use " + numSecondaryKeys
+ + " fields as a key for the R-tree index. There can be
only one field as a key for the R-tree index.");
}
Pair<IAType, Boolean> keyTypePair =
Index.getNonNullableOpenFieldType(secondaryKeyTypes.get(0),
secondaryKeyFields.get(0), recType);
@@ -905,8 +910,8 @@
}
ITypeTraits[] filterTypeTraits =
DatasetUtils.computeFilterTypeTraits(dataset, recType);
- IBinaryComparatorFactory[] filterCmpFactories =
DatasetUtils.computeFilterBinaryComparatorFactories(
- dataset, recType,
context.getBinaryComparatorFactoryProvider());
+ IBinaryComparatorFactory[] filterCmpFactories =
DatasetUtils.computeFilterBinaryComparatorFactories(dataset,
+ recType, context.getBinaryComparatorFactoryProvider());
int[] filterFields = null;
int[] rtreeFields = null;
if (filterTypeTraits != null) {
@@ -919,8 +924,8 @@
}
IAType nestedKeyType =
NonTaggedFormatUtil.getNestedSpatialType(keyType.getTypeTag());
- Pair<ILSMMergePolicyFactory, Map<String, String>> compactionInfo =
DatasetUtils.getMergePolicyFactory(
- dataset, mdTxnCtx);
+ Pair<ILSMMergePolicyFactory, Map<String, String>> compactionInfo =
DatasetUtils
+ .getMergePolicyFactory(dataset, mdTxnCtx);
ISearchOperationCallbackFactory searchCallbackFactory = temp ?
NoOpOperationCallbackFactory.INSTANCE
: new SecondaryIndexSearchOperationCallbackFactory();
@@ -928,17 +933,19 @@
if (dataset.getDatasetType() == DatasetType.INTERNAL) {
rtreeSearchOp = new RTreeSearchOperatorDescriptor(jobSpec,
outputRecDesc,
appContext.getStorageManagerInterface(),
appContext.getIndexLifecycleManagerProvider(),
- spPc.first, typeTraits, comparatorFactories,
keyFields, new LSMRTreeDataflowHelperFactory(
- valueProviderFactories, RTreePolicyType.RTREE,
primaryComparatorFactories,
+ spPc.first, typeTraits, comparatorFactories, keyFields,
+ new
LSMRTreeDataflowHelperFactory(valueProviderFactories, RTreePolicyType.RTREE,
+ primaryComparatorFactories,
new
AsterixVirtualBufferCacheProvider(dataset.getDatasetId()), compactionInfo.first,
- compactionInfo.second, new
SecondaryIndexOperationTrackerProvider(
- dataset.getDatasetId()),
AsterixRuntimeComponentsProvider.RUNTIME_PROVIDER,
- LSMRTreeIOOperationCallbackFactory.INSTANCE,
proposeLinearizer(
- nestedKeyType.getTypeTag(),
comparatorFactories.length),
+ compactionInfo.second,
+ new
SecondaryIndexOperationTrackerProvider(dataset.getDatasetId()),
+
AsterixRuntimeComponentsProvider.RUNTIME_PROVIDER,
+ LSMRTreeIOOperationCallbackFactory.INSTANCE,
+ proposeLinearizer(nestedKeyType.getTypeTag(),
comparatorFactories.length),
storageProperties.getBloomFilterFalsePositiveRate(), rtreeFields, btreeFields,
- filterTypeTraits, filterCmpFactories,
filterFields, !temp), retainInput, retainNull,
- context.getNullWriterFactory(), searchCallbackFactory,
minFilterFieldIndexes,
- maxFilterFieldIndexes);
+ filterTypeTraits, filterCmpFactories,
filterFields, !temp),
+ retainInput, retainNull,
context.getNullWriterFactory(), searchCallbackFactory,
+ minFilterFieldIndexes, maxFilterFieldIndexes);
} else {
// External Dataset
@@ -954,8 +961,8 @@
// Create the operator
rtreeSearchOp = new
ExternalRTreeSearchOperatorDescriptor(jobSpec, outputRecDesc,
appContext.getStorageManagerInterface(),
appContext.getIndexLifecycleManagerProvider(),
- spPc.first, typeTraits, comparatorFactories,
keyFields, indexDataflowHelperFactory,
- retainInput, retainNull,
context.getNullWriterFactory(), searchCallbackFactory);
+ spPc.first, typeTraits, comparatorFactories,
keyFields, indexDataflowHelperFactory, retainInput,
+ retainNull, context.getNullWriterFactory(),
searchCallbackFactory);
}
return new Pair<IOperatorDescriptor,
AlgebricksPartitionConstraint>(rtreeSearchOp, spPc.second);
@@ -1034,8 +1041,8 @@
}
String tName = dataset.getItemTypeName();
IAType itemType = MetadataManager.INSTANCE.getDatatype(mdTxnCtx,
aqlId.getDataverseName(), tName).getDatatype();
- AqlDataSourceType datasourceType =
dataset.getDatasetType().equals(DatasetType.EXTERNAL) ?
AqlDataSourceType.EXTERNAL_DATASET
- : AqlDataSourceType.INTERNAL_DATASET;
+ AqlDataSourceType datasourceType =
dataset.getDatasetType().equals(DatasetType.EXTERNAL)
+ ? AqlDataSourceType.EXTERNAL_DATASET :
AqlDataSourceType.INTERNAL_DATASET;
return new DatasetDataSource(aqlId, aqlId.getDataverseName(),
aqlId.getDatasourceName(), itemType,
datasourceType);
}
@@ -1102,8 +1109,8 @@
String indexName = primaryIndex.getIndexName();
String itemTypeName = dataset.getItemTypeName();
- ARecordType itemType = (ARecordType)
MetadataManager.INSTANCE.getDatatype(mdTxnCtx,
- dataset.getDataverseName(), itemTypeName).getDatatype();
+ ARecordType itemType = (ARecordType) MetadataManager.INSTANCE
+ .getDatatype(mdTxnCtx, dataset.getDataverseName(),
itemTypeName).getDatatype();
ITypeTraits[] typeTraits =
DatasetUtils.computeTupleTypeTraits(dataset, itemType);
IBinaryComparatorFactory[] comparatorFactories =
DatasetUtils.computeKeysBinaryComparatorFactories(dataset,
itemType, context.getBinaryComparatorFactoryProvider());
@@ -1115,8 +1122,8 @@
long numElementsHint = getCardinalityPerPartitionHint(dataset);
ITypeTraits[] filterTypeTraits =
DatasetUtils.computeFilterTypeTraits(dataset, itemType);
- IBinaryComparatorFactory[] filterCmpFactories =
DatasetUtils.computeFilterBinaryComparatorFactories(
- dataset, itemType,
context.getBinaryComparatorFactoryProvider());
+ IBinaryComparatorFactory[] filterCmpFactories =
DatasetUtils.computeFilterBinaryComparatorFactories(dataset,
+ itemType, context.getBinaryComparatorFactoryProvider());
int[] filterFields = DatasetUtils.createFilterFields(dataset);
int[] btreeFields =
DatasetUtils.createBTreeFieldsWhenThereisAFilter(dataset);
@@ -1125,18 +1132,21 @@
// right callback
// (ex. what's the expected behavior when there is an error during
// bulkload?)
- Pair<ILSMMergePolicyFactory, Map<String, String>> compactionInfo =
DatasetUtils.getMergePolicyFactory(
- dataset, mdTxnCtx);
+ Pair<ILSMMergePolicyFactory, Map<String, String>> compactionInfo =
DatasetUtils
+ .getMergePolicyFactory(dataset, mdTxnCtx);
TreeIndexBulkLoadOperatorDescriptor btreeBulkLoad = new
TreeIndexBulkLoadOperatorDescriptor(spec, null,
appContext.getStorageManagerInterface(),
appContext.getIndexLifecycleManagerProvider(),
splitsAndConstraint.first, typeTraits,
comparatorFactories, bloomFilterKeyFields, fieldPermutation,
GlobalConfig.DEFAULT_TREE_FILL_FACTOR, false,
numElementsHint, true,
new LSMBTreeDataflowHelperFactory(new
AsterixVirtualBufferCacheProvider(dataset.getDatasetId()),
- compactionInfo.first, compactionInfo.second, new
PrimaryIndexOperationTrackerProvider(
- dataset.getDatasetId()),
AsterixRuntimeComponentsProvider.RUNTIME_PROVIDER,
+ compactionInfo.first, compactionInfo.second,
+ new
PrimaryIndexOperationTrackerProvider(dataset.getDatasetId()),
+ AsterixRuntimeComponentsProvider.RUNTIME_PROVIDER,
LSMBTreeIOOperationCallbackFactory.INSTANCE,
storageProperties.getBloomFilterFalsePositiveRate(), true, filterTypeTraits,
- filterCmpFactories, btreeFields, filterFields,
!temp));
+ filterCmpFactories, btreeFields, filterFields,
!temp,
+ storageProperties.getStatisticsSynopsisType() !=
SynopsisType.None, typeTraits,
+ AqlOrdinalPrimitiveValueProviderFactory.INSTANCE));
return new Pair<IOperatorDescriptor,
AlgebricksPartitionConstraint>(btreeBulkLoad,
splitsAndConstraint.second);
} catch (MetadataException me) {
@@ -1148,13 +1158,13 @@
IDataSource<AqlSourceId> dataSource, IOperatorSchema
propagatedSchema, IVariableTypeEnvironment typeEnv,
List<LogicalVariable> keys, LogicalVariable payload,
List<LogicalVariable> additionalNonKeyFields,
RecordDescriptor recordDesc, JobGenContext context,
JobSpecification spec, boolean bulkload)
- throws AlgebricksException {
+ throws AlgebricksException {
String datasetName = dataSource.getId().getDatasourceName();
Dataset dataset = findDataset(dataSource.getId().getDataverseName(),
datasetName);
if (dataset == null) {
- throw new AlgebricksException("Unknown dataset " + datasetName + "
in dataverse "
- + dataSource.getId().getDataverseName());
+ throw new AlgebricksException(
+ "Unknown dataset " + datasetName + " in dataverse " +
dataSource.getId().getDataverseName());
}
boolean temp = dataset.getDatasetDetails().isTemp();
isTemporaryDatasetWriteJob = isTemporaryDatasetWriteJob && temp;
@@ -1183,8 +1193,8 @@
String indexName = primaryIndex.getIndexName();
String itemTypeName = dataset.getItemTypeName();
- ARecordType itemType = (ARecordType)
MetadataManager.INSTANCE.getDatatype(mdTxnCtx,
- dataSource.getId().getDataverseName(),
itemTypeName).getDatatype();
+ ARecordType itemType = (ARecordType) MetadataManager.INSTANCE
+ .getDatatype(mdTxnCtx,
dataSource.getId().getDataverseName(), itemTypeName).getDatatype();
ITypeTraits[] typeTraits =
DatasetUtils.computeTupleTypeTraits(dataset, itemType);
@@ -1203,24 +1213,28 @@
}
ITypeTraits[] filterTypeTraits =
DatasetUtils.computeFilterTypeTraits(dataset, itemType);
- IBinaryComparatorFactory[] filterCmpFactories =
DatasetUtils.computeFilterBinaryComparatorFactories(
- dataset, itemType,
context.getBinaryComparatorFactoryProvider());
+ IBinaryComparatorFactory[] filterCmpFactories =
DatasetUtils.computeFilterBinaryComparatorFactories(dataset,
+ itemType, context.getBinaryComparatorFactoryProvider());
int[] filterFields = DatasetUtils.createFilterFields(dataset);
int[] btreeFields =
DatasetUtils.createBTreeFieldsWhenThereisAFilter(dataset);
TransactionSubsystemProvider txnSubsystemProvider = new
TransactionSubsystemProvider();
- IModificationOperationCallbackFactory modificationCallbackFactory
= temp ? new TempDatasetPrimaryIndexModificationOperationCallbackFactory(
- jobId, datasetId, primaryKeyFields, txnSubsystemProvider,
indexOp, ResourceType.LSM_BTREE)
+ IModificationOperationCallbackFactory modificationCallbackFactory
= temp
+ ? new
TempDatasetPrimaryIndexModificationOperationCallbackFactory(jobId, datasetId,
+ primaryKeyFields, txnSubsystemProvider, indexOp,
ResourceType.LSM_BTREE)
: new
PrimaryIndexModificationOperationCallbackFactory(jobId, datasetId,
primaryKeyFields,
txnSubsystemProvider, indexOp,
ResourceType.LSM_BTREE);
- Pair<ILSMMergePolicyFactory, Map<String, String>> compactionInfo =
DatasetUtils.getMergePolicyFactory(
- dataset, mdTxnCtx);
- IIndexDataflowHelperFactory idfh = new
LSMBTreeDataflowHelperFactory(new AsterixVirtualBufferCacheProvider(
- datasetId), compactionInfo.first, compactionInfo.second,
new PrimaryIndexOperationTrackerProvider(
- dataset.getDatasetId()),
AsterixRuntimeComponentsProvider.RUNTIME_PROVIDER,
- LSMBTreeIOOperationCallbackFactory.INSTANCE,
storageProperties.getBloomFilterFalsePositiveRate(),
- true, filterTypeTraits, filterCmpFactories, btreeFields,
filterFields, !temp);
+ Pair<ILSMMergePolicyFactory, Map<String, String>> compactionInfo =
DatasetUtils
+ .getMergePolicyFactory(dataset, mdTxnCtx);
+ IIndexDataflowHelperFactory idfh = new
LSMBTreeDataflowHelperFactory(
+ new AsterixVirtualBufferCacheProvider(datasetId),
compactionInfo.first, compactionInfo.second,
+ new
PrimaryIndexOperationTrackerProvider(dataset.getDatasetId()),
+ AsterixRuntimeComponentsProvider.RUNTIME_PROVIDER,
LSMBTreeIOOperationCallbackFactory.INSTANCE,
+ storageProperties.getBloomFilterFalsePositiveRate(), true,
filterTypeTraits, filterCmpFactories,
+ btreeFields, filterFields, !temp,
+ storageProperties.getStatisticsSynopsisType() !=
SynopsisType.None, typeTraits,
+ AqlOrdinalPrimitiveValueProviderFactory.INSTANCE);
IOperatorDescriptor op;
if (bulkload) {
long numElementsHint = getCardinalityPerPartitionHint(dataset);
@@ -1246,7 +1260,7 @@
IDataSource<AqlSourceId> dataSource, IOperatorSchema
propagatedSchema, IVariableTypeEnvironment typeEnv,
List<LogicalVariable> keys, LogicalVariable payload,
List<LogicalVariable> additionalNonKeyFields,
RecordDescriptor recordDesc, JobGenContext context,
JobSpecification spec, boolean bulkload)
- throws AlgebricksException {
+ throws AlgebricksException {
return getInsertOrDeleteRuntime(IndexOperation.INSERT, dataSource,
propagatedSchema, typeEnv, keys, payload,
additionalNonKeyFields, recordDesc, context, spec, bulkload);
}
@@ -1284,14 +1298,14 @@
AsterixTupleFilterFactory filterFactory =
createTupleFilterFactory(inputSchemas, typeEnv, filterExpr, context);
switch (secondaryIndex.getIndexType()) {
case BTREE: {
- return getBTreeDmlRuntime(dataverseName, datasetName,
indexName, propagatedSchema, typeEnv,
- primaryKeys, secondaryKeys, additionalNonKeyFields,
filterFactory, recordDesc, context, spec,
- indexOp, bulkload);
+ return getBTreeDmlRuntime(dataverseName, datasetName,
indexName, propagatedSchema, typeEnv, primaryKeys,
+ secondaryKeys, additionalNonKeyFields, filterFactory,
recordDesc, context, spec, indexOp,
+ bulkload);
}
case RTREE: {
- return getRTreeDmlRuntime(dataverseName, datasetName,
indexName, propagatedSchema, typeEnv,
- primaryKeys, secondaryKeys, additionalNonKeyFields,
filterFactory, recordDesc, context, spec,
- indexOp, bulkload);
+ return getRTreeDmlRuntime(dataverseName, datasetName,
indexName, propagatedSchema, typeEnv, primaryKeys,
+ secondaryKeys, additionalNonKeyFields, filterFactory,
recordDesc, context, spec, indexOp,
+ bulkload);
}
case SINGLE_PARTITION_WORD_INVIX:
case SINGLE_PARTITION_NGRAM_INVIX:
@@ -1302,8 +1316,8 @@
indexOp, secondaryIndex.getIndexType(), bulkload);
}
default: {
- throw new AlgebricksException("Insert and delete not
implemented for index type: "
- + secondaryIndex.getIndexType());
+ throw new AlgebricksException(
+ "Insert and delete not implemented for index type: " +
secondaryIndex.getIndexType());
}
}
}
@@ -1374,7 +1388,7 @@
IVariableTypeEnvironment typeEnv, List<LogicalVariable>
primaryKeys, List<LogicalVariable> secondaryKeys,
AsterixTupleFilterFactory filterFactory, RecordDescriptor
recordDesc, JobGenContext context,
JobSpecification spec, IndexOperation indexOp, IndexType
indexType, boolean bulkload)
- throws AlgebricksException {
+ throws AlgebricksException {
// Sanity checks.
if (primaryKeys.size() > 1) {
@@ -1549,7 +1563,8 @@
tokenizerOp = new BinaryTokenizerOperatorDescriptor(spec,
tokenKeyPairRecDesc, tokenizerFactory, docField,
keyFields, isPartitioned, true);
- return new Pair<IOperatorDescriptor,
AlgebricksPartitionConstraint>(tokenizerOp, splitsAndConstraint.second);
+ return new Pair<IOperatorDescriptor,
AlgebricksPartitionConstraint>(tokenizerOp,
+ splitsAndConstraint.second);
} catch (MetadataException e) {
throw new AlgebricksException(e);
@@ -1564,7 +1579,7 @@
IOperatorSchema[] inputSchemas, IVariableTypeEnvironment typeEnv,
List<LogicalVariable> primaryKeys,
List<LogicalVariable> secondaryKeys, List<LogicalVariable>
additionalNonKeyFields,
ILogicalExpression filterExpr, RecordDescriptor recordDesc,
JobGenContext context, JobSpecification spec)
- throws AlgebricksException {
+ throws AlgebricksException {
return getIndexInsertOrDeleteRuntime(IndexOperation.DELETE,
dataSourceIndex, propagatedSchema, inputSchemas,
typeEnv, primaryKeys, secondaryKeys, additionalNonKeyFields,
filterExpr, recordDesc, context, spec,
false);
@@ -1572,7 +1587,7 @@
private AsterixTupleFilterFactory
createTupleFilterFactory(IOperatorSchema[] inputSchemas,
IVariableTypeEnvironment typeEnv, ILogicalExpression filterExpr,
JobGenContext context)
- throws AlgebricksException {
+ throws AlgebricksException {
// No filtering condition.
if (filterExpr == null) {
return null;
@@ -1641,8 +1656,8 @@
dataset.getDatasetName(), indexName);
ITypeTraits[] filterTypeTraits =
DatasetUtils.computeFilterTypeTraits(dataset, recType);
- IBinaryComparatorFactory[] filterCmpFactories =
DatasetUtils.computeFilterBinaryComparatorFactories(
- dataset, recType,
context.getBinaryComparatorFactoryProvider());
+ IBinaryComparatorFactory[] filterCmpFactories =
DatasetUtils.computeFilterBinaryComparatorFactories(dataset,
+ recType, context.getBinaryComparatorFactoryProvider());
int[] filterFields = null;
int[] btreeFields = null;
if (filterTypeTraits != null) {
@@ -1662,15 +1677,15 @@
Pair<IAType, Boolean> keyPairType =
Index.getNonNullableOpenFieldType(secondaryKeyTypes.get(i),
secondaryKeyNames.get(i), recType);
IAType keyType = keyPairType.first;
- comparatorFactories[i] =
AqlBinaryComparatorFactoryProvider.INSTANCE.getBinaryComparatorFactory(
- keyType, true);
+ comparatorFactories[i] =
AqlBinaryComparatorFactoryProvider.INSTANCE.getBinaryComparatorFactory(keyType,
+ true);
typeTraits[i] =
AqlTypeTraitProvider.INSTANCE.getTypeTrait(keyType);
}
List<List<String>> partitioningKeys =
DatasetUtils.getPartitioningKeys(dataset);
for (List<String> partitioningKey : partitioningKeys) {
IAType keyType = recType.getSubFieldType(partitioningKey);
- comparatorFactories[i] =
AqlBinaryComparatorFactoryProvider.INSTANCE.getBinaryComparatorFactory(
- keyType, true);
+ comparatorFactories[i] =
AqlBinaryComparatorFactoryProvider.INSTANCE.getBinaryComparatorFactory(keyType,
+ true);
typeTraits[i] =
AqlTypeTraitProvider.INSTANCE.getTypeTrait(keyType);
++i;
}
@@ -1683,19 +1698,23 @@
JobId jobId = ((JobEventListenerFactory)
spec.getJobletEventListenerFactory()).getJobId();
int datasetId = dataset.getDatasetId();
TransactionSubsystemProvider txnSubsystemProvider = new
TransactionSubsystemProvider();
- IModificationOperationCallbackFactory modificationCallbackFactory
= temp ? new TempDatasetSecondaryIndexModificationOperationCallbackFactory(
- jobId, datasetId, modificationCallbackPrimaryKeyFields,
txnSubsystemProvider, indexOp,
- ResourceType.LSM_BTREE) : new
SecondaryIndexModificationOperationCallbackFactory(jobId, datasetId,
- modificationCallbackPrimaryKeyFields,
txnSubsystemProvider, indexOp, ResourceType.LSM_BTREE);
+ IModificationOperationCallbackFactory modificationCallbackFactory
= temp
+ ? new
TempDatasetSecondaryIndexModificationOperationCallbackFactory(jobId, datasetId,
+ modificationCallbackPrimaryKeyFields,
txnSubsystemProvider, indexOp, ResourceType.LSM_BTREE)
+ : new
SecondaryIndexModificationOperationCallbackFactory(jobId, datasetId,
+ modificationCallbackPrimaryKeyFields,
txnSubsystemProvider, indexOp,
+ ResourceType.LSM_BTREE);
- Pair<ILSMMergePolicyFactory, Map<String, String>> compactionInfo =
DatasetUtils.getMergePolicyFactory(
- dataset, mdTxnCtx);
- IIndexDataflowHelperFactory idfh = new
LSMBTreeDataflowHelperFactory(new AsterixVirtualBufferCacheProvider(
- datasetId), compactionInfo.first, compactionInfo.second,
+ Pair<ILSMMergePolicyFactory, Map<String, String>> compactionInfo =
DatasetUtils
+ .getMergePolicyFactory(dataset, mdTxnCtx);
+ IIndexDataflowHelperFactory idfh = new
LSMBTreeDataflowHelperFactory(
+ new AsterixVirtualBufferCacheProvider(datasetId),
compactionInfo.first, compactionInfo.second,
new
SecondaryIndexOperationTrackerProvider(dataset.getDatasetId()),
AsterixRuntimeComponentsProvider.RUNTIME_PROVIDER,
LSMBTreeIOOperationCallbackFactory.INSTANCE,
storageProperties.getBloomFilterFalsePositiveRate(),
false, filterTypeTraits, filterCmpFactories,
- btreeFields, filterFields, !temp);
+ btreeFields, filterFields, !temp,
+ storageProperties.getStatisticsSynopsisType() !=
SynopsisType.None, typeTraits,
+ AqlOrdinalPrimitiveValueProviderFactory.INSTANCE);
IOperatorDescriptor op;
if (bulkload) {
long numElementsHint = getCardinalityPerPartitionHint(dataset);
@@ -1707,14 +1726,17 @@
op = new AsterixLSMTreeInsertDeleteOperatorDescriptor(spec,
recordDesc,
appContext.getStorageManagerInterface(),
appContext.getIndexLifecycleManagerProvider(),
splitsAndConstraint.first, typeTraits,
comparatorFactories, bloomFilterKeyFields,
- fieldPermutation, indexOp, new
LSMBTreeDataflowHelperFactory(
- new
AsterixVirtualBufferCacheProvider(datasetId), compactionInfo.first,
- compactionInfo.second, new
SecondaryIndexOperationTrackerProvider(
- dataset.getDatasetId()),
AsterixRuntimeComponentsProvider.RUNTIME_PROVIDER,
+ fieldPermutation, indexOp,
+ new LSMBTreeDataflowHelperFactory(new
AsterixVirtualBufferCacheProvider(datasetId),
+ compactionInfo.first, compactionInfo.second,
+ new
SecondaryIndexOperationTrackerProvider(dataset.getDatasetId()),
+
AsterixRuntimeComponentsProvider.RUNTIME_PROVIDER,
LSMBTreeIOOperationCallbackFactory.INSTANCE,
storageProperties.getBloomFilterFalsePositiveRate(), false, filterTypeTraits,
- filterCmpFactories, btreeFields, filterFields,
!temp), filterFactory,
- modificationCallbackFactory, false, indexName);
+ filterCmpFactories, btreeFields, filterFields,
!temp,
+ storageProperties.getStatisticsSynopsisType()
!= SynopsisType.None, typeTraits,
+
AqlOrdinalPrimitiveValueProviderFactory.INSTANCE),
+ filterFactory, modificationCallbackFactory, false,
indexName);
}
return new Pair<IOperatorDescriptor,
AlgebricksPartitionConstraint>(op, splitsAndConstraint.second);
} catch (MetadataException e) {
@@ -1853,8 +1875,8 @@
secondaryKeyType.getTypeTag(), indexType,
secondaryIndex.getGramLength());
ITypeTraits[] filterTypeTraits =
DatasetUtils.computeFilterTypeTraits(dataset, recType);
- IBinaryComparatorFactory[] filterCmpFactories =
DatasetUtils.computeFilterBinaryComparatorFactories(
- dataset, recType,
context.getBinaryComparatorFactoryProvider());
+ IBinaryComparatorFactory[] filterCmpFactories =
DatasetUtils.computeFilterBinaryComparatorFactories(dataset,
+ recType, context.getBinaryComparatorFactoryProvider());
int[] filterFields = null;
int[] invertedIndexFields = null;
@@ -1884,18 +1906,20 @@
JobId jobId = ((JobEventListenerFactory)
spec.getJobletEventListenerFactory()).getJobId();
int datasetId = dataset.getDatasetId();
TransactionSubsystemProvider txnSubsystemProvider = new
TransactionSubsystemProvider();
- IModificationOperationCallbackFactory modificationCallbackFactory
= temp ? new TempDatasetSecondaryIndexModificationOperationCallbackFactory(
- jobId, datasetId, modificationCallbackPrimaryKeyFields,
txnSubsystemProvider, indexOp,
- ResourceType.LSM_INVERTED_INDEX) : new
SecondaryIndexModificationOperationCallbackFactory(jobId,
- datasetId, modificationCallbackPrimaryKeyFields,
txnSubsystemProvider, indexOp,
- ResourceType.LSM_INVERTED_INDEX);
+ IModificationOperationCallbackFactory modificationCallbackFactory
= temp
+ ? new
TempDatasetSecondaryIndexModificationOperationCallbackFactory(jobId, datasetId,
+ modificationCallbackPrimaryKeyFields,
txnSubsystemProvider, indexOp,
+ ResourceType.LSM_INVERTED_INDEX)
+ : new
SecondaryIndexModificationOperationCallbackFactory(jobId, datasetId,
+ modificationCallbackPrimaryKeyFields,
txnSubsystemProvider, indexOp,
+ ResourceType.LSM_INVERTED_INDEX);
- Pair<ILSMMergePolicyFactory, Map<String, String>> compactionInfo =
DatasetUtils.getMergePolicyFactory(
- dataset, mdTxnCtx);
+ Pair<ILSMMergePolicyFactory, Map<String, String>> compactionInfo =
DatasetUtils
+ .getMergePolicyFactory(dataset, mdTxnCtx);
IIndexDataflowHelperFactory indexDataFlowFactory;
if (!isPartitioned) {
- indexDataFlowFactory = new
LSMInvertedIndexDataflowHelperFactory(new AsterixVirtualBufferCacheProvider(
- datasetId), compactionInfo.first,
compactionInfo.second,
+ indexDataFlowFactory = new
LSMInvertedIndexDataflowHelperFactory(
+ new AsterixVirtualBufferCacheProvider(datasetId),
compactionInfo.first, compactionInfo.second,
new
SecondaryIndexOperationTrackerProvider(dataset.getDatasetId()),
AsterixRuntimeComponentsProvider.RUNTIME_PROVIDER,
LSMInvertedIndexIOOperationCallbackFactory.INSTANCE,
@@ -1992,8 +2016,8 @@
IAType nestedKeyType =
NonTaggedFormatUtil.getNestedSpatialType(spatialType.getTypeTag());
IPrimitiveValueProviderFactory[] valueProviderFactories = new
IPrimitiveValueProviderFactory[numSecondaryKeys];
for (i = 0; i < numSecondaryKeys; i++) {
- comparatorFactories[i] =
AqlBinaryComparatorFactoryProvider.INSTANCE.getBinaryComparatorFactory(
- nestedKeyType, true);
+ comparatorFactories[i] =
AqlBinaryComparatorFactoryProvider.INSTANCE
+ .getBinaryComparatorFactory(nestedKeyType, true);
typeTraits[i] =
AqlTypeTraitProvider.INSTANCE.getTypeTrait(nestedKeyType);
valueProviderFactories[i] =
AqlPrimitiveValueProviderFactory.INSTANCE;
}
@@ -2015,8 +2039,8 @@
}
ITypeTraits[] filterTypeTraits =
DatasetUtils.computeFilterTypeTraits(dataset, recType);
- IBinaryComparatorFactory[] filterCmpFactories =
DatasetUtils.computeFilterBinaryComparatorFactories(
- dataset, recType,
context.getBinaryComparatorFactoryProvider());
+ IBinaryComparatorFactory[] filterCmpFactories =
DatasetUtils.computeFilterBinaryComparatorFactories(dataset,
+ recType, context.getBinaryComparatorFactoryProvider());
int[] filterFields = null;
int[] rtreeFields = null;
if (filterTypeTraits != null) {
@@ -2032,17 +2056,19 @@
JobId jobId = ((JobEventListenerFactory)
spec.getJobletEventListenerFactory()).getJobId();
int datasetId = dataset.getDatasetId();
TransactionSubsystemProvider txnSubsystemProvider = new
TransactionSubsystemProvider();
- IModificationOperationCallbackFactory modificationCallbackFactory
= temp ? new TempDatasetSecondaryIndexModificationOperationCallbackFactory(
- jobId, datasetId, modificationCallbackPrimaryKeyFields,
txnSubsystemProvider, indexOp,
- ResourceType.LSM_RTREE) : new
SecondaryIndexModificationOperationCallbackFactory(jobId, datasetId,
- modificationCallbackPrimaryKeyFields,
txnSubsystemProvider, indexOp, ResourceType.LSM_RTREE);
+ IModificationOperationCallbackFactory modificationCallbackFactory
= temp
+ ? new
TempDatasetSecondaryIndexModificationOperationCallbackFactory(jobId, datasetId,
+ modificationCallbackPrimaryKeyFields,
txnSubsystemProvider, indexOp, ResourceType.LSM_RTREE)
+ : new
SecondaryIndexModificationOperationCallbackFactory(jobId, datasetId,
+ modificationCallbackPrimaryKeyFields,
txnSubsystemProvider, indexOp,
+ ResourceType.LSM_RTREE);
- Pair<ILSMMergePolicyFactory, Map<String, String>> compactionInfo =
DatasetUtils.getMergePolicyFactory(
- dataset, mdTxnCtx);
+ Pair<ILSMMergePolicyFactory, Map<String, String>> compactionInfo =
DatasetUtils
+ .getMergePolicyFactory(dataset, mdTxnCtx);
IIndexDataflowHelperFactory idfh = new
LSMRTreeDataflowHelperFactory(valueProviderFactories,
- RTreePolicyType.RTREE, primaryComparatorFactories, new
AsterixVirtualBufferCacheProvider(
- dataset.getDatasetId()), compactionInfo.first,
compactionInfo.second,
- new
SecondaryIndexOperationTrackerProvider(dataset.getDatasetId()),
+ RTreePolicyType.RTREE, primaryComparatorFactories,
+ new
AsterixVirtualBufferCacheProvider(dataset.getDatasetId()), compactionInfo.first,
+ compactionInfo.second, new
SecondaryIndexOperationTrackerProvider(dataset.getDatasetId()),
AsterixRuntimeComponentsProvider.RUNTIME_PROVIDER,
LSMRTreeIOOperationCallbackFactory.INSTANCE,
proposeLinearizer(nestedKeyType.getTypeTag(),
comparatorFactories.length),
storageProperties.getBloomFilterFalsePositiveRate(),
rtreeFields, btreeFields, filterTypeTraits,
@@ -2059,15 +2085,16 @@
appContext.getStorageManagerInterface(),
appContext.getIndexLifecycleManagerProvider(),
splitsAndConstraint.first, typeTraits,
comparatorFactories, null, fieldPermutation, indexOp,
new
LSMRTreeDataflowHelperFactory(valueProviderFactories, RTreePolicyType.RTREE,
- primaryComparatorFactories, new
AsterixVirtualBufferCacheProvider(dataset
- .getDatasetId()),
compactionInfo.first, compactionInfo.second,
+ primaryComparatorFactories,
+ new
AsterixVirtualBufferCacheProvider(dataset.getDatasetId()), compactionInfo.first,
+ compactionInfo.second,
new
SecondaryIndexOperationTrackerProvider(dataset.getDatasetId()),
AsterixRuntimeComponentsProvider.RUNTIME_PROVIDER,
- LSMRTreeIOOperationCallbackFactory.INSTANCE,
proposeLinearizer(
- nestedKeyType.getTypeTag(),
comparatorFactories.length), storageProperties
- .getBloomFilterFalsePositiveRate(),
rtreeFields, btreeFields, filterTypeTraits,
- filterCmpFactories, filterFields, !temp),
filterFactory,
- modificationCallbackFactory, false, indexName);
+ LSMRTreeIOOperationCallbackFactory.INSTANCE,
+ proposeLinearizer(nestedKeyType.getTypeTag(),
comparatorFactories.length),
+
storageProperties.getBloomFilterFalsePositiveRate(), rtreeFields, btreeFields,
+ filterTypeTraits, filterCmpFactories,
filterFields, !temp),
+ filterFactory, modificationCallbackFactory, false,
indexName);
}
return new Pair<IOperatorDescriptor,
AlgebricksPartitionConstraint>(op, splitsAndConstraint.second);
} catch (MetadataException | IOException e) {
@@ -2257,8 +2284,8 @@
try {
type = MetadataManager.INSTANCE.getDatatype(mdTxnCtx, dataverse,
typeName);
} catch (MetadataException e) {
- throw new AlgebricksException("Metadata exception while looking up
type '" + typeName + "' in dataverse '"
- + dataverse + "'", e);
+ throw new AlgebricksException(
+ "Metadata exception while looking up type '" + typeName +
"' in dataverse '" + dataverse + "'", e);
}
if (type == null) {
throw new AlgebricksException("Type name '" + typeName + "'
unknown in dataverse '" + dataverse + "'");
@@ -2368,16 +2395,16 @@
String[] ioDevices =
AsterixClusterProperties.INSTANCE.getIODevices(nd);
if (create) {
for (int j = 0; j < nodeStores.length; j++) {
- File f = new File(ioDevices[0] + File.separator +
nodeStores[j] + File.separator
- + relPathFile);
+ File f = new File(
+ ioDevices[0] + File.separator +
nodeStores[j] + File.separator + relPathFile);
splitArray.add(new FileSplit(nd, new
FileReference(f), 0));
}
} else {
int numIODevices =
AsterixClusterProperties.INSTANCE.getNumberOfIODevices(nd);
for (int j = 0; j < nodeStores.length; j++) {
for (int k = 0; k < numIODevices; k++) {
- File f = new File(ioDevices[0] +
File.separator + nodeStores[j] + File.separator
- + relPathFile);
+ File f = new File(
+ ioDevices[0] + File.separator +
nodeStores[j] + File.separator + relPathFile);
splitArray.add(new FileSplit(nd, new
FileReference(f), 0));
}
}
diff --git
a/asterix-om/src/main/java/org/apache/asterix/dataflow/data/nontagged/valueproviders/AqlOrdinalPrimitiveValueProviderFactory.java
b/asterix-om/src/main/java/org/apache/asterix/dataflow/data/nontagged/valueproviders/AqlOrdinalPrimitiveValueProviderFactory.java
new file mode 100644
index 0000000..88f40f0
--- /dev/null
+++
b/asterix-om/src/main/java/org/apache/asterix/dataflow/data/nontagged/valueproviders/AqlOrdinalPrimitiveValueProviderFactory.java
@@ -0,0 +1,101 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements. See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership. The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied. See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+package org.apache.asterix.dataflow.data.nontagged.valueproviders;
+
+import org.apache.asterix.om.types.ATypeTag;
+import org.apache.asterix.om.types.EnumDeserializer;
+import org.apache.hyracks.algebricks.common.exceptions.NotImplementedException;
+import org.apache.hyracks.storage.am.common.api.IOrdinalPrimitiveValueProvider;
+import
org.apache.hyracks.storage.am.common.api.IOrdinalPrimitiveValueProviderFactory;
+import
org.apache.hyracks.storage.am.rtree.impls.BytePrimitiveValueProviderFactory;
+import
org.apache.hyracks.storage.am.rtree.impls.IntegerPrimitiveValueProviderFactory;
+import
org.apache.hyracks.storage.am.rtree.impls.LongPrimitiveValueProviderFactory;
+import
org.apache.hyracks.storage.am.rtree.impls.ShortPrimitiveValueProviderFactory;
+
+public class AqlOrdinalPrimitiveValueProviderFactory implements
IOrdinalPrimitiveValueProviderFactory {
+
+ private static final long serialVersionUID = 1L;
+
+ public static final AqlOrdinalPrimitiveValueProviderFactory INSTANCE = new
AqlOrdinalPrimitiveValueProviderFactory();
+
+ private AqlOrdinalPrimitiveValueProviderFactory() {
+ }
+
+ @Override
+ public IOrdinalPrimitiveValueProvider
createOrdinalPrimitiveValueProvider() {
+ return new IOrdinalPrimitiveValueProvider() {
+ final IOrdinalPrimitiveValueProvider byteProvider =
BytePrimitiveValueProviderFactory.INSTANCE
+ .createOrdinalPrimitiveValueProvider();
+ final IOrdinalPrimitiveValueProvider shortProvider =
ShortPrimitiveValueProviderFactory.INSTANCE
+ .createOrdinalPrimitiveValueProvider();
+ final IOrdinalPrimitiveValueProvider intProvider =
IntegerPrimitiveValueProviderFactory.INSTANCE
+ .createOrdinalPrimitiveValueProvider();
+ final IOrdinalPrimitiveValueProvider longProvider =
LongPrimitiveValueProviderFactory.INSTANCE
+ .createOrdinalPrimitiveValueProvider();
+ final IOrdinalPrimitiveValueProvider dateTimeProvider =
DateTimePrimitiveValueProviderFactory.INSTANCE
+ .createOrdinalPrimitiveValueProvider();
+ final IOrdinalPrimitiveValueProvider dateProvider =
DatePrimitiveValueProviderFactory.INSTANCE
+ .createOrdinalPrimitiveValueProvider();
+ final IOrdinalPrimitiveValueProvider timeProvider =
TimePrimitiveValueProviderFactory.INSTANCE
+ .createOrdinalPrimitiveValueProvider();
+ final IOrdinalPrimitiveValueProvider dayTimeDurationProvider =
DayTimeDurationPrimitiveValueProviderFactory.INSTANCE
+ .createOrdinalPrimitiveValueProvider();
+ final IOrdinalPrimitiveValueProvider yearMonthDurationProvider =
YearMonthDurationPrimitiveValueProviderFactory.INSTANCE
+ .createOrdinalPrimitiveValueProvider();
+
+ @Override
+ public long getOrdinalValue(byte[] bytes, int offset) {
+
+ ATypeTag tag =
EnumDeserializer.ATYPETAGDESERIALIZER.deserialize(bytes[offset]);
+ switch (tag) {
+ case INT8: {
+ return byteProvider.getOrdinalValue(bytes, offset + 1);
+ }
+ case INT16: {
+ return shortProvider.getOrdinalValue(bytes, offset +
1);
+ }
+ case INT32: {
+ return intProvider.getOrdinalValue(bytes, offset + 1);
+ }
+ case INT64: {
+ return longProvider.getOrdinalValue(bytes, offset + 1);
+ }
+ case DATETIME: {
+ return dateTimeProvider.getOrdinalValue(bytes, offset
+ 1);
+ }
+ case DATE: {
+ return dateProvider.getOrdinalValue(bytes, offset + 1);
+ }
+ case TIME: {
+ return timeProvider.getOrdinalValue(bytes, offset + 1);
+ }
+ case DAYTIMEDURATION: {
+ return dayTimeDurationProvider.getOrdinalValue(bytes,
offset + 1);
+ }
+ case YEARMONTHDURATION: {
+ return
yearMonthDurationProvider.getOrdinalValue(bytes, offset + 1);
+ }
+ default: {
+ throw new NotImplementedException("Value provider for
type " + tag + " is not implemented");
+ }
+ }
+ }
+ };
+ }
+}
diff --git
a/asterix-om/src/main/java/org/apache/asterix/dataflow/data/nontagged/valueproviders/DatePrimitiveValueProviderFactory.java
b/asterix-om/src/main/java/org/apache/asterix/dataflow/data/nontagged/valueproviders/DatePrimitiveValueProviderFactory.java
new file mode 100644
index 0000000..2fb3f19
--- /dev/null
+++
b/asterix-om/src/main/java/org/apache/asterix/dataflow/data/nontagged/valueproviders/DatePrimitiveValueProviderFactory.java
@@ -0,0 +1,45 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements. See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership. The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied. See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+
+package org.apache.asterix.dataflow.data.nontagged.valueproviders;
+
+import
org.apache.asterix.dataflow.data.nontagged.serde.ADateSerializerDeserializer;
+import org.apache.hyracks.storage.am.common.api.IOrdinalPrimitiveValueProvider;
+import
org.apache.hyracks.storage.am.common.api.IOrdinalPrimitiveValueProviderFactory;
+
+public class DatePrimitiveValueProviderFactory implements
IOrdinalPrimitiveValueProviderFactory {
+
+ private static final long serialVersionUID = 1L;
+
+ public static final DatePrimitiveValueProviderFactory INSTANCE = new
DatePrimitiveValueProviderFactory();
+
+ private DatePrimitiveValueProviderFactory() {
+ }
+
+ @Override
+ public IOrdinalPrimitiveValueProvider
createOrdinalPrimitiveValueProvider() {
+ return new IOrdinalPrimitiveValueProvider() {
+ @Override
+ public long getOrdinalValue(byte[] bytes, int offset) {
+ return ADateSerializerDeserializer.getChronon(bytes, offset);
+ }
+ };
+ }
+
+}
diff --git
a/asterix-om/src/main/java/org/apache/asterix/dataflow/data/nontagged/valueproviders/DateTimePrimitiveValueProviderFactory.java
b/asterix-om/src/main/java/org/apache/asterix/dataflow/data/nontagged/valueproviders/DateTimePrimitiveValueProviderFactory.java
new file mode 100644
index 0000000..fa2c6fe
--- /dev/null
+++
b/asterix-om/src/main/java/org/apache/asterix/dataflow/data/nontagged/valueproviders/DateTimePrimitiveValueProviderFactory.java
@@ -0,0 +1,45 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements. See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership. The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied. See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+
+package org.apache.asterix.dataflow.data.nontagged.valueproviders;
+
+import
org.apache.asterix.dataflow.data.nontagged.serde.ADateTimeSerializerDeserializer;
+import org.apache.hyracks.storage.am.common.api.IOrdinalPrimitiveValueProvider;
+import
org.apache.hyracks.storage.am.common.api.IOrdinalPrimitiveValueProviderFactory;
+
+public class DateTimePrimitiveValueProviderFactory implements
IOrdinalPrimitiveValueProviderFactory {
+
+ private static final long serialVersionUID = 1L;
+
+ public static final DateTimePrimitiveValueProviderFactory INSTANCE = new
DateTimePrimitiveValueProviderFactory();
+
+ private DateTimePrimitiveValueProviderFactory() {
+ }
+
+ @Override
+ public IOrdinalPrimitiveValueProvider
createOrdinalPrimitiveValueProvider() {
+ return new IOrdinalPrimitiveValueProvider() {
+ @Override
+ public long getOrdinalValue(byte[] bytes, int offset) {
+ return ADateTimeSerializerDeserializer.getChronon(bytes,
offset);
+ }
+ };
+ }
+
+}
diff --git
a/asterix-om/src/main/java/org/apache/asterix/dataflow/data/nontagged/valueproviders/DayTimeDurationPrimitiveValueProviderFactory.java
b/asterix-om/src/main/java/org/apache/asterix/dataflow/data/nontagged/valueproviders/DayTimeDurationPrimitiveValueProviderFactory.java
new file mode 100644
index 0000000..2d6117f
--- /dev/null
+++
b/asterix-om/src/main/java/org/apache/asterix/dataflow/data/nontagged/valueproviders/DayTimeDurationPrimitiveValueProviderFactory.java
@@ -0,0 +1,45 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements. See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership. The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied. See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+
+package org.apache.asterix.dataflow.data.nontagged.valueproviders;
+
+import
org.apache.asterix.dataflow.data.nontagged.serde.ADayTimeDurationSerializerDeserializer;
+import org.apache.hyracks.storage.am.common.api.IOrdinalPrimitiveValueProvider;
+import
org.apache.hyracks.storage.am.common.api.IOrdinalPrimitiveValueProviderFactory;
+
+public class DayTimeDurationPrimitiveValueProviderFactory implements
IOrdinalPrimitiveValueProviderFactory {
+
+ private static final long serialVersionUID = 1L;
+
+ public static final DayTimeDurationPrimitiveValueProviderFactory INSTANCE
= new DayTimeDurationPrimitiveValueProviderFactory();
+
+ private DayTimeDurationPrimitiveValueProviderFactory() {
+ }
+
+ @Override
+ public IOrdinalPrimitiveValueProvider
createOrdinalPrimitiveValueProvider() {
+ return new IOrdinalPrimitiveValueProvider() {
+ @Override
+ public long getOrdinalValue(byte[] bytes, int offset) {
+ return
ADayTimeDurationSerializerDeserializer.getDayTime(bytes, offset);
+ }
+ };
+ }
+
+}
diff --git
a/asterix-om/src/main/java/org/apache/asterix/dataflow/data/nontagged/valueproviders/TimePrimitiveValueProviderFactory.java
b/asterix-om/src/main/java/org/apache/asterix/dataflow/data/nontagged/valueproviders/TimePrimitiveValueProviderFactory.java
new file mode 100644
index 0000000..a3a6b24
--- /dev/null
+++
b/asterix-om/src/main/java/org/apache/asterix/dataflow/data/nontagged/valueproviders/TimePrimitiveValueProviderFactory.java
@@ -0,0 +1,45 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements. See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership. The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied. See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+
+package org.apache.asterix.dataflow.data.nontagged.valueproviders;
+
+import
org.apache.asterix.dataflow.data.nontagged.serde.ATimeSerializerDeserializer;
+import org.apache.hyracks.storage.am.common.api.IOrdinalPrimitiveValueProvider;
+import
org.apache.hyracks.storage.am.common.api.IOrdinalPrimitiveValueProviderFactory;
+
+public class TimePrimitiveValueProviderFactory implements
IOrdinalPrimitiveValueProviderFactory {
+
+ private static final long serialVersionUID = 1L;
+
+ public static final TimePrimitiveValueProviderFactory INSTANCE = new
TimePrimitiveValueProviderFactory();
+
+ private TimePrimitiveValueProviderFactory() {
+ }
+
+ @Override
+ public IOrdinalPrimitiveValueProvider
createOrdinalPrimitiveValueProvider() {
+ return new IOrdinalPrimitiveValueProvider() {
+ @Override
+ public long getOrdinalValue(byte[] bytes, int offset) {
+ return ATimeSerializerDeserializer.getChronon(bytes, offset);
+ }
+ };
+ }
+
+}
diff --git
a/asterix-om/src/main/java/org/apache/asterix/dataflow/data/nontagged/valueproviders/YearMonthDurationPrimitiveValueProviderFactory.java
b/asterix-om/src/main/java/org/apache/asterix/dataflow/data/nontagged/valueproviders/YearMonthDurationPrimitiveValueProviderFactory.java
new file mode 100644
index 0000000..4543122
--- /dev/null
+++
b/asterix-om/src/main/java/org/apache/asterix/dataflow/data/nontagged/valueproviders/YearMonthDurationPrimitiveValueProviderFactory.java
@@ -0,0 +1,45 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements. See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership. The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied. See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+
+package org.apache.asterix.dataflow.data.nontagged.valueproviders;
+
+import
org.apache.asterix.dataflow.data.nontagged.serde.AYearMonthDurationSerializerDeserializer;
+import org.apache.hyracks.storage.am.common.api.IOrdinalPrimitiveValueProvider;
+import
org.apache.hyracks.storage.am.common.api.IOrdinalPrimitiveValueProviderFactory;
+
+public class YearMonthDurationPrimitiveValueProviderFactory implements
IOrdinalPrimitiveValueProviderFactory {
+
+ private static final long serialVersionUID = 1L;
+
+ public static final YearMonthDurationPrimitiveValueProviderFactory
INSTANCE = new YearMonthDurationPrimitiveValueProviderFactory();
+
+ private YearMonthDurationPrimitiveValueProviderFactory() {
+ }
+
+ @Override
+ public IOrdinalPrimitiveValueProvider
createOrdinalPrimitiveValueProvider() {
+ return new IOrdinalPrimitiveValueProvider() {
+ @Override
+ public long getOrdinalValue(byte[] bytes, int offset) {
+ return
AYearMonthDurationSerializerDeserializer.getYearMonth(bytes, offset);
+ }
+ };
+ }
+
+}
diff --git
a/asterix-om/src/main/java/org/apache/asterix/formats/nontagged/AqlTypeTraitProvider.java
b/asterix-om/src/main/java/org/apache/asterix/formats/nontagged/AqlTypeTraitProvider.java
index 129f14b..ae8d91d 100644
---
a/asterix-om/src/main/java/org/apache/asterix/formats/nontagged/AqlTypeTraitProvider.java
+++
b/asterix-om/src/main/java/org/apache/asterix/formats/nontagged/AqlTypeTraitProvider.java
@@ -31,6 +31,7 @@
private static final ITypeTraits TWOBYTETYPETRAIT = new TypeTrait(2 + 1);
private static final ITypeTraits FOURBYTETYPETRAIT = new TypeTrait(4 + 1);
private static final ITypeTraits EIGHTBYTETYPETRAIT = new TypeTrait(8 + 1);
+ private static final ITypeTraits TWELVEBYTETYPETRAIT = new TypeTrait(12 +
1);
private static final ITypeTraits SIXTEENBYTETYPETRAIT = new TypeTrait(16 +
1);
private static final ITypeTraits SEVENTEENBYTETYPETRAIT = new TypeTrait(17
+ 1);
private static final ITypeTraits THIRTYTWOBYTETYPETRAIT = new TypeTrait(32
+ 1);
@@ -60,8 +61,9 @@
case INT64:
case DOUBLE:
case DATETIME:
- case DURATION:
return EIGHTBYTETYPETRAIT;
+ case DURATION:
+ return TWELVEBYTETYPETRAIT;
case POINT:
case UUID:
return SIXTEENBYTETYPETRAIT;
diff --git
a/asterix-transactions/src/main/java/org/apache/asterix/transaction/management/resource/ExternalBTreeLocalResourceMetadata.java
b/asterix-transactions/src/main/java/org/apache/asterix/transaction/management/resource/ExternalBTreeLocalResourceMetadata.java
index a75428f..ad05709 100644
---
a/asterix-transactions/src/main/java/org/apache/asterix/transaction/management/resource/ExternalBTreeLocalResourceMetadata.java
+++
b/asterix-transactions/src/main/java/org/apache/asterix/transaction/management/resource/ExternalBTreeLocalResourceMetadata.java
@@ -55,7 +55,7 @@
new BaseOperationTracker(datasetID,
runtimeContextProvider.getDatasetLifecycleManager().getDatasetInfo(datasetID)),
runtimeContextProvider.getLSMIOScheduler(),
-
LSMBTreeIOOperationCallbackFactory.INSTANCE.createIOOperationCallback(), -1,
true);
+
LSMBTreeIOOperationCallbackFactory.INSTANCE.createIOOperationCallback(), -1,
true, false, null);
return lsmBTree;
}
}
diff --git
a/asterix-transactions/src/main/java/org/apache/asterix/transaction/management/resource/LSMBTreeLocalResourceMetadata.java
b/asterix-transactions/src/main/java/org/apache/asterix/transaction/management/resource/LSMBTreeLocalResourceMetadata.java
index 88e95dd..376c3b1 100644
---
a/asterix-transactions/src/main/java/org/apache/asterix/transaction/management/resource/LSMBTreeLocalResourceMetadata.java
+++
b/asterix-transactions/src/main/java/org/apache/asterix/transaction/management/resource/LSMBTreeLocalResourceMetadata.java
@@ -75,7 +75,7 @@
runtimeContextProvider.getDatasetLifecycleManager().getDatasetInfo(datasetID)),
runtimeContextProvider.getLSMIOScheduler(),
LSMBTreeIOOperationCallbackFactory.INSTANCE.createIOOperationCallback(),
isPrimary, filterTypeTraits,
- filterCmpFactories, btreeFields, filterFields, true);
+ filterCmpFactories, btreeFields, filterFields, true, false,
null);
return lsmBTree;
}
--
To view, visit https://asterix-gerrit.ics.uci.edu/540
To unsubscribe, visit https://asterix-gerrit.ics.uci.edu/settings
Gerrit-MessageType: newchange
Gerrit-Change-Id: I43711cb94933e155b0f384d83893c8b76128ca59
Gerrit-PatchSet: 1
Gerrit-Project: asterixdb
Gerrit-Branch: master
Gerrit-Owner: Ildar Absalyamov <[email protected]>