>From Murtadha Hubail <[email protected]>:
Murtadha Hubail has uploaded this change for review. (
https://asterix-gerrit.ics.uci.edu/c/asterixdb/+/17541 )
Change subject: [ASTERIXDB-3188][*DB] Account for cached resource ids in NCs
......................................................................
[ASTERIXDB-3188][*DB] Account for cached resource ids in NCs
- user model changes: no
- storage format changes: no
- interface changes: yes
Details:
- Account for cached resource ids in NC when report
max resource id to CC on registration.
Change-Id: I3286915bcf313a88aaa465fa28ffeb56b3e9a0cd
---
M
hyracks-fullstack/hyracks/hyracks-storage-common/src/main/java/org/apache/hyracks/storage/common/file/ResourceIdFactory.java
M
asterixdb/asterix-metadata/src/main/java/org/apache/asterix/metadata/bootstrap/MetadataIndex.java
M
asterixdb/asterix-metadata/src/main/java/org/apache/asterix/metadata/api/IMetadataIndex.java
M
asterixdb/asterix-metadata/src/main/java/org/apache/asterix/metadata/bootstrap/MetadataBootstrap.java
M
asterixdb/asterix-common/src/main/java/org/apache/asterix/common/utils/NcLocalCounters.java
M
asterixdb/asterix-runtime/src/main/java/org/apache/asterix/runtime/transaction/GlobalResourceIdFactory.java
M
hyracks-fullstack/hyracks/hyracks-storage-common/src/main/java/org/apache/hyracks/storage/common/file/IResourceIdFactory.java
M
asterixdb/asterix-app/src/main/java/org/apache/asterix/app/replication/message/RegistrationTasksResponseMessage.java
8 files changed, 73 insertions(+), 4 deletions(-)
git pull ssh://asterix-gerrit.ics.uci.edu:29418/asterixdb
refs/changes/41/17541/1
diff --git
a/asterixdb/asterix-app/src/main/java/org/apache/asterix/app/replication/message/RegistrationTasksResponseMessage.java
b/asterixdb/asterix-app/src/main/java/org/apache/asterix/app/replication/message/RegistrationTasksResponseMessage.java
index f0f0470..bee5ff9 100644
---
a/asterixdb/asterix-app/src/main/java/org/apache/asterix/app/replication/message/RegistrationTasksResponseMessage.java
+++
b/asterixdb/asterix-app/src/main/java/org/apache/asterix/app/replication/message/RegistrationTasksResponseMessage.java
@@ -70,6 +70,9 @@
}
NcLocalCounters localCounter = success ?
NcLocalCounters.collect(getCcId(),
(NodeControllerService)
appCtx.getServiceContext().getControllerService()) : null;
+ if (localCounter != null) {
+ LOGGER.debug("returning local counters to cc: {}",
localCounter);
+ }
// wrap the returned partitions in a hash set to make it
serializable
Set<Integer> nodeActivePartitions = new
HashSet<>(appCtx.getReplicaManager().getPartitions());
NCLifecycleTaskReportMessage result =
diff --git
a/asterixdb/asterix-common/src/main/java/org/apache/asterix/common/utils/NcLocalCounters.java
b/asterixdb/asterix-common/src/main/java/org/apache/asterix/common/utils/NcLocalCounters.java
index 8956b93..453ff80 100644
---
a/asterixdb/asterix-common/src/main/java/org/apache/asterix/common/utils/NcLocalCounters.java
+++
b/asterixdb/asterix-common/src/main/java/org/apache/asterix/common/utils/NcLocalCounters.java
@@ -25,6 +25,7 @@
import org.apache.hyracks.api.control.CcId;
import org.apache.hyracks.api.exceptions.HyracksDataException;
import org.apache.hyracks.control.nc.NodeControllerService;
+import org.apache.hyracks.storage.common.file.IResourceIdFactory;
public class NcLocalCounters implements Serializable {
private static final long serialVersionUID = 3798954558299915995L;
@@ -41,8 +42,7 @@
public static NcLocalCounters collect(CcId ccId, NodeControllerService
ncs) throws HyracksDataException {
final INcApplicationContext appContext = (INcApplicationContext)
ncs.getApplicationContext();
- long maxResourceId =
Math.max(appContext.getLocalResourceRepository().maxId(),
-
MetadataIndexImmutableProperties.FIRST_AVAILABLE_USER_DATASET_ID);
+ long maxResourceId = getMaxAvailableResourceId(ncs, appContext);
long maxTxnId = appContext.getMaxTxnId();
long maxJobId = ncs.getMaxJobId(ccId);
return new NcLocalCounters(maxResourceId, maxTxnId, maxJobId);
@@ -65,4 +65,13 @@
return "NcLocalCounters{" + "maxResourceId=" + maxResourceId + ",
maxTxnId=" + maxTxnId + ", maxJobId="
+ maxJobId + '}';
}
+
+ private static long getMaxAvailableResourceId(NodeControllerService ncs,
INcApplicationContext appContext)
+ throws HyracksDataException {
+ long maxStorageResourceId =
Math.max(appContext.getLocalResourceRepository().maxId(),
+
MetadataIndexImmutableProperties.FIRST_AVAILABLE_USER_DATASET_ID);
+ IResourceIdFactory resourceIdFactory =
+
appContext.getStorageComponentProvider().getStorageManager().getResourceIdFactory(ncs.getContext());
+ return Math.max(resourceIdFactory.getMaxAvailableId(),
maxStorageResourceId);
+ }
}
diff --git
a/asterixdb/asterix-metadata/src/main/java/org/apache/asterix/metadata/api/IMetadataIndex.java
b/asterixdb/asterix-metadata/src/main/java/org/apache/asterix/metadata/api/IMetadataIndex.java
index 522c2e6..a653c1c 100644
---
a/asterixdb/asterix-metadata/src/main/java/org/apache/asterix/metadata/api/IMetadataIndex.java
+++
b/asterixdb/asterix-metadata/src/main/java/org/apache/asterix/metadata/api/IMetadataIndex.java
@@ -31,6 +31,7 @@
import org.apache.hyracks.api.dataflow.value.ITypeTraits;
import org.apache.hyracks.api.dataflow.value.RecordDescriptor;
import org.apache.hyracks.api.io.FileReference;
+import org.apache.hyracks.storage.common.file.IResourceIdFactory;
/**
* Descriptor interface for a primary or secondary index on metadata datasets.
@@ -85,4 +86,6 @@
boolean isPrimaryIndex();
int[] getPrimaryKeyIndexes();
+
+ IResourceIdFactory getResourceIdFactory();
}
diff --git
a/asterixdb/asterix-metadata/src/main/java/org/apache/asterix/metadata/bootstrap/MetadataBootstrap.java
b/asterixdb/asterix-metadata/src/main/java/org/apache/asterix/metadata/bootstrap/MetadataBootstrap.java
index 8880461..034c0f7 100644
---
a/asterixdb/asterix-metadata/src/main/java/org/apache/asterix/metadata/bootstrap/MetadataBootstrap.java
+++
b/asterixdb/asterix-metadata/src/main/java/org/apache/asterix/metadata/bootstrap/MetadataBootstrap.java
@@ -439,7 +439,7 @@
// other indexes
// This is to be done by having a metadata dataset associated with
each index
IIndexBuilder indexBuilder = new IndexBuilder(ncServiceCtx,
storageComponentProvider.getStorageManager(),
- index::getResourceId, file, dsLocalResourceFactory, true);
+ index.getResourceIdFactory(), file,
dsLocalResourceFactory, true);
indexBuilder.build();
} else {
// Why do we care about metadata dataset's resource ids? why not
assign them ids
diff --git
a/asterixdb/asterix-metadata/src/main/java/org/apache/asterix/metadata/bootstrap/MetadataIndex.java
b/asterixdb/asterix-metadata/src/main/java/org/apache/asterix/metadata/bootstrap/MetadataIndex.java
index c33cac1..3c1d63a 100644
---
a/asterixdb/asterix-metadata/src/main/java/org/apache/asterix/metadata/bootstrap/MetadataIndex.java
+++
b/asterixdb/asterix-metadata/src/main/java/org/apache/asterix/metadata/bootstrap/MetadataIndex.java
@@ -42,6 +42,7 @@
import org.apache.hyracks.api.dataflow.value.ITypeTraits;
import org.apache.hyracks.api.dataflow.value.RecordDescriptor;
import org.apache.hyracks.api.io.FileReference;
+import org.apache.hyracks.storage.common.file.IResourceIdFactory;
/**
* Descriptor for a primary or secondary index on metadata datasets.
@@ -287,4 +288,19 @@
public int[] getPrimaryKeyIndexes() {
return primaryKeyIndexes;
}
+
+ @Override
+ public IResourceIdFactory getResourceIdFactory() {
+ return new IResourceIdFactory() {
+ @Override
+ public long createId() {
+ return getResourceId();
+ }
+
+ @Override
+ public long getMaxAvailableId() {
+ return resourceId;
+ }
+ };
+ }
}
diff --git
a/asterixdb/asterix-runtime/src/main/java/org/apache/asterix/runtime/transaction/GlobalResourceIdFactory.java
b/asterixdb/asterix-runtime/src/main/java/org/apache/asterix/runtime/transaction/GlobalResourceIdFactory.java
index 2bd4f81..3cbc17f 100644
---
a/asterixdb/asterix-runtime/src/main/java/org/apache/asterix/runtime/transaction/GlobalResourceIdFactory.java
+++
b/asterixdb/asterix-runtime/src/main/java/org/apache/asterix/runtime/transaction/GlobalResourceIdFactory.java
@@ -97,6 +97,16 @@
}
}
+ public long getMaxAvailableId() {
+ long next;
+ try {
+ next = resourceIds.lastLong();
+ } catch (Exception e) {
+ next = -1;
+ }
+ return next;
+ }
+
protected void requestNewBlock() throws Exception {
// queue is empty; request a new block
ResourceIdRequestMessage msg = new ResourceIdRequestMessage(nodeId,
RESOURCE_ID_BLOCK_SIZE);
diff --git
a/hyracks-fullstack/hyracks/hyracks-storage-common/src/main/java/org/apache/hyracks/storage/common/file/IResourceIdFactory.java
b/hyracks-fullstack/hyracks/hyracks-storage-common/src/main/java/org/apache/hyracks/storage/common/file/IResourceIdFactory.java
index 9f67540..9a906a1 100644
---
a/hyracks-fullstack/hyracks/hyracks-storage-common/src/main/java/org/apache/hyracks/storage/common/file/IResourceIdFactory.java
+++
b/hyracks-fullstack/hyracks/hyracks-storage-common/src/main/java/org/apache/hyracks/storage/common/file/IResourceIdFactory.java
@@ -20,7 +20,6 @@
import org.apache.hyracks.api.exceptions.HyracksDataException;
-@FunctionalInterface
public interface IResourceIdFactory {
/**
@@ -28,4 +27,10 @@
* @throws Exception
*/
long createId() throws HyracksDataException;
+
+ /**
+ * Gets the maximum currently available id in this factory or -1 if no id
is available
+ * @return the maximum currently available id in this factory
+ */
+ long getMaxAvailableId();
}
diff --git
a/hyracks-fullstack/hyracks/hyracks-storage-common/src/main/java/org/apache/hyracks/storage/common/file/ResourceIdFactory.java
b/hyracks-fullstack/hyracks/hyracks-storage-common/src/main/java/org/apache/hyracks/storage/common/file/ResourceIdFactory.java
index 625d247..6be28e0 100644
---
a/hyracks-fullstack/hyracks/hyracks-storage-common/src/main/java/org/apache/hyracks/storage/common/file/ResourceIdFactory.java
+++
b/hyracks-fullstack/hyracks/hyracks-storage-common/src/main/java/org/apache/hyracks/storage/common/file/ResourceIdFactory.java
@@ -31,4 +31,9 @@
public long createId() {
return id.getAndIncrement();
}
+
+ @Override
+ public long getMaxAvailableId() {
+ return id.get();
+ }
}
--
To view, visit https://asterix-gerrit.ics.uci.edu/c/asterixdb/+/17541
To unsubscribe, or for help writing mail filters, visit
https://asterix-gerrit.ics.uci.edu/settings
Gerrit-Project: asterixdb
Gerrit-Branch: master
Gerrit-Change-Id: I3286915bcf313a88aaa465fa28ffeb56b3e9a0cd
Gerrit-Change-Number: 17541
Gerrit-PatchSet: 1
Gerrit-Owner: Murtadha Hubail <[email protected]>
Gerrit-MessageType: newchange