abdullah alamoudi has uploaded a new change for review.

  https://asterix-gerrit.ics.uci.edu/1342

Change subject: Ensure LogManager Doesn't Exceed the Size of the Log Page Queues
......................................................................

Ensure LogManager Doesn't Exceed the Size of the Log Page Queues

Change-Id: If6427576a31090a057ee6a3d25e35eef5cdd86f8
---
M 
asterixdb/asterix-transactions/src/main/java/org/apache/asterix/transaction/management/service/logging/LogManager.java
1 file changed, 13 insertions(+), 7 deletions(-)


  git pull ssh://asterix-gerrit.ics.uci.edu:29418/asterixdb 
refs/changes/42/1342/1

diff --git 
a/asterixdb/asterix-transactions/src/main/java/org/apache/asterix/transaction/management/service/logging/LogManager.java
 
b/asterixdb/asterix-transactions/src/main/java/org/apache/asterix/transaction/management/service/logging/LogManager.java
index 814bcfc..34a11aa 100644
--- 
a/asterixdb/asterix-transactions/src/main/java/org/apache/asterix/transaction/management/service/logging/LogManager.java
+++ 
b/asterixdb/asterix-transactions/src/main/java/org/apache/asterix/transaction/management/service/logging/LogManager.java
@@ -97,8 +97,8 @@
     }
 
     private void initializeLogManager(long nextLogFileId) {
-        emptyQ = new LinkedBlockingQueue<LogBuffer>(numLogPages);
-        flushQ = new LinkedBlockingQueue<LogBuffer>(numLogPages);
+        emptyQ = new LinkedBlockingQueue<>(numLogPages);
+        flushQ = new LinkedBlockingQueue<>(numLogPages);
         for (int i = 0; i < numLogPages; i++) {
             emptyQ.offer(new LogBuffer(txnSubsystem, logPageSize, flushLSN));
         }
@@ -182,6 +182,15 @@
 
     protected void getAndInitNewPage(int logSize) {
         if (logSize > logPageSize) {
+            // before creating a new page, we need to discard of another page 
since our queues have fixed capacity
+            appendPage = null;
+            while (appendPage == null) {
+                try {
+                    appendPage = emptyQ.take();
+                } catch (InterruptedException e) {
+                    //ignore
+                }
+            }
             // for now, alloc a new buffer for each large page
             // TODO: pool large pages
             appendPage = new LogBuffer(txnSubsystem, logSize, flushLSN);
@@ -192,6 +201,7 @@
             while (appendPage == null) {
                 try {
                     appendPage = emptyQ.take();
+                    // TODO: (Discuss!!) if this turns out to be a large page, 
should we replace it?? 
                 } catch (InterruptedException e) {
                     //ignore
                 }
@@ -299,10 +309,6 @@
                 e.printStackTrace();
             }
         }
-    }
-
-    public MutableLong getFlushLSN() {
-        return flushLSN;
     }
 
     private long initializeLogAnchor(long nextLogFileId) {
@@ -440,7 +446,7 @@
                 }
             });
             if (logFileNames != null && logFileNames.length != 0) {
-                logFileIds = new ArrayList<Long>();
+                logFileIds = new ArrayList<>();
                 for (String fileName : logFileNames) {
                     
logFileIds.add(Long.parseLong(fileName.substring(logFilePrefix.length() + 1)));
                 }

-- 
To view, visit https://asterix-gerrit.ics.uci.edu/1342
To unsubscribe, visit https://asterix-gerrit.ics.uci.edu/settings

Gerrit-MessageType: newchange
Gerrit-Change-Id: If6427576a31090a057ee6a3d25e35eef5cdd86f8
Gerrit-PatchSet: 1
Gerrit-Project: asterixdb
Gerrit-Branch: master
Gerrit-Owner: abdullah alamoudi <[email protected]>

Reply via email to