>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

Reply via email to