>From Peeyush Gupta <[email protected]>:

Peeyush Gupta has uploaded this change for review. ( 
https://asterix-gerrit.ics.uci.edu/c/asterixdb/+/20652?usp=email )


Change subject: [NO ISSUE][*DB][STO] Fix IndexOutOfBoundsException when 
flushPtr is 0
......................................................................

[NO ISSUE][*DB][STO] Fix IndexOutOfBoundsException when flushPtr is 0

- user model changes: no
- storage format changes: no
- interface changes: no

Ext-ref: MB-69729
Change-Id: I8a3761d0ab3759694af51f77bf8bfa9cbbcb8d1d
---
A 
asterixdb/asterix-app/src/test/resources/optimizerts/results/array-index/atomic-and-array-queries/query8.plan.rej
A 
asterixdb/asterix-app/src/test/resources/optimizerts/results/array-index/atomic-and-array-queries/query9.plan.rej
M 
asterixdb/asterix-common/src/main/java/org/apache/asterix/common/context/GlobalVirtualBufferCache.java
3 files changed, 265 insertions(+), 1 deletion(-)



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

diff --git 
a/asterixdb/asterix-app/src/test/resources/optimizerts/results/array-index/atomic-and-array-queries/query8.plan.rej
 
b/asterixdb/asterix-app/src/test/resources/optimizerts/results/array-index/atomic-and-array-queries/query8.plan.rej
new file mode 100644
index 0000000..fa37eb9
--- /dev/null
+++ 
b/asterixdb/asterix-app/src/test/resources/optimizerts/results/array-index/atomic-and-array-queries/query8.plan.rej
@@ -0,0 +1,118 @@
+diff 
a/asterixdb/asterix-app/src/test/resources/optimizerts/results/array-index/atomic-and-array-queries/query8.plan
 
b/asterixdb/asterix-app/src/test/resources/optimizerts/results/array-index/atomic-and-array-queries/query8.plan
   (rejected hunks)
+@@ -9,63 +9,65 @@
+         project ([$$D2, $$D1, $$50])
+         -- STREAM_PROJECT  |PARTITIONED|
+           subplan {
+-                    aggregate [$$50] <- [non-empty-stream()]
++                    aggregate [$$50] <- [non-empty-stream()] [cardinality: 
0.0, doc-size: 0.0, op-cost: 0.0, total-cost: 0.0]
+                     -- AGGREGATE  |LOCAL|
+-                      select (and(eq($$69, to-bigint($$70)), eq($$67, 
to-bigint($$68))))
++                      select (and(eq($$69, to-bigint($$70)), eq($$67, 
to-bigint($$68)))) [cardinality: 0.0, doc-size: 0.0, op-cost: 0.0, total-cost: 
0.0]
+                       -- STREAM_SELECT  |LOCAL|
+-                        assign [$$69, $$67] <- [$$D1I.getField("field2"), 
$$D1I.getField("field3")] project: [$$70, $$68, $$69, $$67]
++                        assign [$$69, $$67] <- [$$D1I.getField("field2"), 
$$D1I.getField("field3")] project: [$$70, $$68, $$69, $$67] [cardinality: 0.0, 
doc-size: 0.0, op-cost: 0.0, total-cost: 0.0]
+                         -- ASSIGN  |LOCAL|
+-                          unnest $$D1I <- scan-collection($$66) project: 
[$$70, $$68, $$D1I]
++                          unnest $$D1I <- scan-collection($$66) project: 
[$$70, $$68, $$D1I] [cardinality: 0.0, doc-size: 0.0, op-cost: 0.0, total-cost: 
0.0]
+                           -- UNNEST  |LOCAL|
+-                            project ([$$70, $$68, $$66])
++                            project ([$$70, $$68, $$66]) [cardinality: 0.0, 
doc-size: 0.0, op-cost: 0.0, total-cost: 0.0]
+                             -- STREAM_PROJECT  |LOCAL|
+-                              nested tuple source
++                              nested tuple source [cardinality: 0.0, 
doc-size: 0.0, op-cost: 0.0, total-cost: 0.0]
+                               -- NESTED_TUPLE_SOURCE  |LOCAL|
+                  }
+           -- SUBPLAN  |PARTITIONED|
+-            assign [$$66] <- [$$D1.getField("items")]
+-            -- ASSIGN  |PARTITIONED|
+-              project ([$$D2, $$70, $$68, $$D1])
+-              -- STREAM_PROJECT  |PARTITIONED|
+-                exchange
+-                -- ONE_TO_ONE_EXCHANGE  |PARTITIONED|
+-                  unnest-map [$$59, $$D1] <- index-search("Dataset1", 0, 
"Default", "TestDataverse", "Dataset1", true, false, 1, $$77, 1, $$77, true, 
true, true)
+-                  -- BTREE_SEARCH  |PARTITIONED|
+-                    exchange
+-                    -- ONE_TO_ONE_EXCHANGE  |PARTITIONED|
+-                      project ([$$77, $$D2, $$70, $$68])
+-                      -- STREAM_PROJECT  |PARTITIONED|
+-                        exchange
+-                        -- ONE_TO_ONE_EXCHANGE  |PARTITIONED|
+-                          distinct ([$$77, $$78])
+-                          -- PRE_SORTED_DISTINCT_BY  |PARTITIONED|
+-                            exchange
+-                            -- ONE_TO_ONE_EXCHANGE  |PARTITIONED|
+-                              order (ASC, $$77) (ASC, $$78)
+-                              -- STABLE_SORT [$$77(ASC), $$78(ASC)]  
|PARTITIONED|
+-                                exchange
+-                                -- ONE_TO_ONE_EXCHANGE  |PARTITIONED|
+-                                  project ([$$D2, $$70, $$68, $$77, $$78])
+-                                  -- STREAM_PROJECT  |PARTITIONED|
+-                                    exchange
+-                                    -- ONE_TO_ONE_EXCHANGE  |PARTITIONED|
+-                                      unnest-map [$$73, $$74, $$75, $$76, 
$$77] <- index-search("d1Idx", 0, "Default", "TestDataverse", "Dataset1", true, 
true, 4, $$61, $$71, $$72, $$63, 4, $$61, $$71, $$72, $$63, true, true, true)
+-                                      -- BTREE_SEARCH  |PARTITIONED|
+-                                        exchange
+-                                        -- BROADCAST_EXCHANGE  |PARTITIONED|
+-                                          running-aggregate [$$78] <- 
[create-query-uid()]
+-                                          -- RUNNING_AGGREGATE  |PARTITIONED|
+-                                            assign [$$72, $$71] <- 
[to-bigint($$68), to-bigint($$70)]
+-                                            -- ASSIGN  |PARTITIONED|
+-                                              assign [$$63, $$61, $$70, $$68] 
<- [to-bigint($$D2.getField("field4")), to-bigint($$D2.getField("field1")), 
$$D2.getField("field2"), $$D2.getField("field3")]
++            select (and(eq($$D1.getField("field4"), $$63), 
eq($$D1.getField("field1"), $$61))) project: [$$D2, $$D1, $$70, $$68, $$66]
++            -- STREAM_SELECT  |PARTITIONED|
++              assign [$$66] <- [$$D1.getField("items")]
++              -- ASSIGN  |PARTITIONED|
++                project ([$$D2, $$70, $$68, $$63, $$61, $$D1])
++                -- STREAM_PROJECT  |PARTITIONED|
++                  exchange
++                  -- ONE_TO_ONE_EXCHANGE  |PARTITIONED|
++                    unnest-map [$$59, $$D1] <- index-search("Dataset1", 0, 
"Default", "TestDataverse", "Dataset1", true, false, 1, $$77, 1, $$77, true, 
true, true)
++                    -- BTREE_SEARCH  |PARTITIONED|
++                      exchange
++                      -- ONE_TO_ONE_EXCHANGE  |PARTITIONED|
++                        project ([$$77, $$D2, $$70, $$68, $$63, $$61])
++                        -- STREAM_PROJECT  |PARTITIONED|
++                          exchange
++                          -- ONE_TO_ONE_EXCHANGE  |PARTITIONED|
++                            distinct ([$$77, $$78])
++                            -- PRE_SORTED_DISTINCT_BY  |PARTITIONED|
++                              exchange
++                              -- ONE_TO_ONE_EXCHANGE  |PARTITIONED|
++                                order (ASC, $$77) (ASC, $$78)
++                                -- STABLE_SORT [$$77(ASC), $$78(ASC)]  
|PARTITIONED|
++                                  exchange
++                                  -- ONE_TO_ONE_EXCHANGE  |PARTITIONED|
++                                    project ([$$D2, $$70, $$68, $$63, $$61, 
$$77, $$78])
++                                    -- STREAM_PROJECT  |PARTITIONED|
++                                      exchange
++                                      -- ONE_TO_ONE_EXCHANGE  |PARTITIONED|
++                                        unnest-map [$$73, $$74, $$75, $$76, 
$$77] <- index-search("d1Idx", 0, "Default", "TestDataverse", "Dataset1", true, 
true, 4, $$61, $$71, $$72, $$63, 4, $$61, $$71, $$72, $$63, true, true, true)
++                                        -- BTREE_SEARCH  |PARTITIONED|
++                                          exchange
++                                          -- BROADCAST_EXCHANGE  |PARTITIONED|
++                                            running-aggregate [$$78] <- 
[create-query-uid()]
++                                            -- RUNNING_AGGREGATE  
|PARTITIONED|
++                                              assign [$$72, $$71] <- 
[to-bigint($$68), to-bigint($$70)]
+                                               -- ASSIGN  |PARTITIONED|
+-                                                project ([$$D2])
+-                                                -- STREAM_PROJECT  
|PARTITIONED|
+-                                                  exchange
+-                                                  -- ONE_TO_ONE_EXCHANGE  
|PARTITIONED|
+-                                                    data-scan []<-[$$58, 
$$D2] <- TestDataverse.Dataset2
+-                                                    -- DATASOURCE_SCAN  
|PARTITIONED|
+-                                                      exchange
+-                                                      -- ONE_TO_ONE_EXCHANGE  
|PARTITIONED|
+-                                                        empty-tuple-source
+-                                                        -- EMPTY_TUPLE_SOURCE 
 |PARTITIONED|
++                                                assign [$$63, $$61, $$70, 
$$68] <- [to-bigint($$D2.getField("field4")), 
to-bigint($$D2.getField("field1")), $$D2.getField("field2"), 
$$D2.getField("field3")]
++                                                -- ASSIGN  |PARTITIONED|
++                                                  project ([$$D2])
++                                                  -- STREAM_PROJECT  
|PARTITIONED|
++                                                    exchange
++                                                    -- ONE_TO_ONE_EXCHANGE  
|PARTITIONED|
++                                                      data-scan []<-[$$58, 
$$D2] <- TestDataverse.Dataset2
++                                                      -- DATASOURCE_SCAN  
|PARTITIONED|
++                                                        exchange
++                                                        -- 
ONE_TO_ONE_EXCHANGE  |PARTITIONED|
++                                                          empty-tuple-source
++                                                          -- 
EMPTY_TUPLE_SOURCE  |PARTITIONED|
diff --git 
a/asterixdb/asterix-app/src/test/resources/optimizerts/results/array-index/atomic-and-array-queries/query9.plan.rej
 
b/asterixdb/asterix-app/src/test/resources/optimizerts/results/array-index/atomic-and-array-queries/query9.plan.rej
new file mode 100644
index 0000000..2e6b131
--- /dev/null
+++ 
b/asterixdb/asterix-app/src/test/resources/optimizerts/results/array-index/atomic-and-array-queries/query9.plan.rej
@@ -0,0 +1,146 @@
+diff 
a/asterixdb/asterix-app/src/test/resources/optimizerts/results/array-index/atomic-and-array-queries/query9.plan
 
b/asterixdb/asterix-app/src/test/resources/optimizerts/results/array-index/atomic-and-array-queries/query9.plan
   (rejected hunks)
+@@ -9,82 +9,84 @@
+         project ([$$D2, $$D1, $$72])
+         -- STREAM_PROJECT  |PARTITIONED|
+           subplan {
+-                    aggregate [$$72] <- [non-empty-stream()]
++                    aggregate [$$72] <- [non-empty-stream()] [cardinality: 
0.0, doc-size: 0.0, op-cost: 0.0, total-cost: 0.0]
+                     -- AGGREGATE  |LOCAL|
+-                      select ($$70)
++                      select ($$70) [cardinality: 0.0, doc-size: 0.0, 
op-cost: 0.0, total-cost: 0.0]
+                       -- STREAM_SELECT  |LOCAL|
+-                        project ([$$70])
++                        project ([$$70]) [cardinality: 0.0, doc-size: 0.0, 
op-cost: 0.0, total-cost: 0.0]
+                         -- STREAM_PROJECT  |LOCAL|
+                           subplan {
+-                                    aggregate [$$70] <- [non-empty-stream()]
++                                    aggregate [$$70] <- [non-empty-stream()] 
[cardinality: 0.0, doc-size: 0.0, op-cost: 0.0, total-cost: 0.0]
+                                     -- AGGREGATE  |LOCAL|
+-                                      select (and(eq($$96, to-bigint($$97)), 
eq($$94, to-bigint($$95)), eq($$92, to-bigint($$93))))
++                                      select (and(eq($$96, to-bigint($$97)), 
eq($$94, to-bigint($$95)), eq($$92, to-bigint($$93)))) [cardinality: 0.0, 
doc-size: 0.0, op-cost: 0.0, total-cost: 0.0]
+                                       -- STREAM_SELECT  |LOCAL|
+-                                        assign [$$96, $$94, $$92] <- 
[$$DII.getField("field2"), $$DII.getField("field3"), 
$$DII.getField("field3_notindexed")] project: [$$97, $$95, $$93, $$96, $$94, 
$$92]
++                                        assign [$$96, $$94, $$92] <- 
[$$DII.getField("field2"), $$DII.getField("field3"), 
$$DII.getField("field3_notindexed")] project: [$$97, $$95, $$93, $$96, $$94, 
$$92] [cardinality: 0.0, doc-size: 0.0, op-cost: 0.0, total-cost: 0.0]
+                                         -- ASSIGN  |LOCAL|
+-                                          unnest $$DII <- 
scan-collection($$91) project: [$$97, $$95, $$93, $$DII]
++                                          unnest $$DII <- 
scan-collection($$91) project: [$$97, $$95, $$93, $$DII] [cardinality: 0.0, 
doc-size: 0.0, op-cost: 0.0, total-cost: 0.0]
+                                           -- UNNEST  |LOCAL|
+-                                            project ([$$97, $$95, $$93, $$91])
++                                            project ([$$97, $$95, $$93, 
$$91]) [cardinality: 0.0, doc-size: 0.0, op-cost: 0.0, total-cost: 0.0]
+                                             -- STREAM_PROJECT  |LOCAL|
+-                                              nested tuple source
++                                              nested tuple source 
[cardinality: 0.0, doc-size: 0.0, op-cost: 0.0, total-cost: 0.0]
+                                               -- NESTED_TUPLE_SOURCE  |LOCAL|
+-                                 }
++                                 } [cardinality: 0.0, doc-size: 0.0, op-cost: 
0.0, total-cost: 0.0]
+                           -- SUBPLAN  |LOCAL|
+-                            select (eq($$89, to-bigint($$90))) project: 
[$$97, $$95, $$93, $$91]
++                            select (eq($$89, to-bigint($$90))) project: 
[$$97, $$95, $$93, $$91] [cardinality: 0.0, doc-size: 0.0, op-cost: 0.0, 
total-cost: 0.0]
+                             -- STREAM_SELECT  |LOCAL|
+-                              assign [$$91, $$89] <- 
[$$DOI.getField("inner_items"), $$DOI.getField("field2_notindexed")] project: 
[$$97, $$95, $$93, $$90, $$91, $$89]
++                              assign [$$91, $$89] <- 
[$$DOI.getField("inner_items"), $$DOI.getField("field2_notindexed")] project: 
[$$97, $$95, $$93, $$90, $$91, $$89] [cardinality: 0.0, doc-size: 0.0, op-cost: 
0.0, total-cost: 0.0]
+                               -- ASSIGN  |LOCAL|
+-                                unnest $$DOI <- scan-collection($$88) 
project: [$$97, $$95, $$93, $$90, $$DOI]
++                                unnest $$DOI <- scan-collection($$88) 
project: [$$97, $$95, $$93, $$90, $$DOI] [cardinality: 0.0, doc-size: 0.0, 
op-cost: 0.0, total-cost: 0.0]
+                                 -- UNNEST  |LOCAL|
+-                                  project ([$$97, $$95, $$93, $$90, $$88])
++                                  project ([$$97, $$95, $$93, $$90, $$88]) 
[cardinality: 0.0, doc-size: 0.0, op-cost: 0.0, total-cost: 0.0]
+                                   -- STREAM_PROJECT  |LOCAL|
+-                                    nested tuple source
++                                    nested tuple source [cardinality: 0.0, 
doc-size: 0.0, op-cost: 0.0, total-cost: 0.0]
+                                     -- NESTED_TUPLE_SOURCE  |LOCAL|
+                  }
+           -- SUBPLAN  |PARTITIONED|
+-            assign [$$88] <- [$$D1.getField("outer_items")]
+-            -- ASSIGN  |PARTITIONED|
+-              project ([$$D2, $$97, $$95, $$93, $$90, $$D1])
+-              -- STREAM_PROJECT  |PARTITIONED|
+-                exchange
+-                -- ONE_TO_ONE_EXCHANGE  |PARTITIONED|
+-                  unnest-map [$$81, $$D1] <- index-search("Dataset1", 0, 
"Default", "TestDataverse", "Dataset1", true, false, 1, $$108, 1, $$108, true, 
true, true)
+-                  -- BTREE_SEARCH  |PARTITIONED|
+-                    exchange
+-                    -- ONE_TO_ONE_EXCHANGE  |PARTITIONED|
+-                      project ([$$108, $$D2, $$97, $$95, $$93, $$90])
+-                      -- STREAM_PROJECT  |PARTITIONED|
+-                        exchange
+-                        -- ONE_TO_ONE_EXCHANGE  |PARTITIONED|
+-                          distinct ([$$108, $$109])
+-                          -- PRE_SORTED_DISTINCT_BY  |PARTITIONED|
+-                            exchange
+-                            -- ONE_TO_ONE_EXCHANGE  |PARTITIONED|
+-                              order (ASC, $$108) (ASC, $$109)
+-                              -- STABLE_SORT [$$108(ASC), $$109(ASC)]  
|PARTITIONED|
+-                                exchange
+-                                -- ONE_TO_ONE_EXCHANGE  |PARTITIONED|
+-                                  project ([$$D2, $$97, $$95, $$93, $$90, 
$$108, $$109])
+-                                  -- STREAM_PROJECT  |PARTITIONED|
+-                                    exchange
+-                                    -- ONE_TO_ONE_EXCHANGE  |PARTITIONED|
+-                                      unnest-map [$$104, $$105, $$106, $$107, 
$$108] <- index-search("d1Idx", 0, "Default", "TestDataverse", "Dataset1", 
true, true, 4, $$83, $$100, $$101, $$85, 4, $$83, $$100, $$101, $$85, true, 
true, true)
+-                                      -- BTREE_SEARCH  |PARTITIONED|
+-                                        exchange
+-                                        -- BROADCAST_EXCHANGE  |PARTITIONED|
+-                                          running-aggregate [$$109] <- 
[create-query-uid()]
+-                                          -- RUNNING_AGGREGATE  |PARTITIONED|
+-                                            assign [$$101, $$100] <- 
[to-bigint($$95), to-bigint($$97)]
+-                                            -- ASSIGN  |PARTITIONED|
+-                                              assign [$$85, $$83, $$97, $$95, 
$$93, $$90] <- [to-bigint($$D2.getField("field4")), 
to-bigint($$D2.getField("field1")), $$D2.getField("field2"), 
$$D2.getField("field3"), $$D2.getField("field3_notindexed"), 
$$D2.getField("field2_notindexed")]
++            select (and(eq($$D1.getField("field4"), $$85), 
eq($$D1.getField("field1"), $$83))) project: [$$D2, $$D1, $$97, $$95, $$93, 
$$90, $$88]
++            -- STREAM_SELECT  |PARTITIONED|
++              assign [$$88] <- [$$D1.getField("outer_items")]
++              -- ASSIGN  |PARTITIONED|
++                project ([$$D2, $$97, $$95, $$93, $$90, $$85, $$83, $$D1])
++                -- STREAM_PROJECT  |PARTITIONED|
++                  exchange
++                  -- ONE_TO_ONE_EXCHANGE  |PARTITIONED|
++                    unnest-map [$$81, $$D1] <- index-search("Dataset1", 0, 
"Default", "TestDataverse", "Dataset1", true, false, 1, $$108, 1, $$108, true, 
true, true)
++                    -- BTREE_SEARCH  |PARTITIONED|
++                      exchange
++                      -- ONE_TO_ONE_EXCHANGE  |PARTITIONED|
++                        project ([$$108, $$D2, $$97, $$95, $$93, $$90, $$85, 
$$83])
++                        -- STREAM_PROJECT  |PARTITIONED|
++                          exchange
++                          -- ONE_TO_ONE_EXCHANGE  |PARTITIONED|
++                            distinct ([$$108, $$109])
++                            -- PRE_SORTED_DISTINCT_BY  |PARTITIONED|
++                              exchange
++                              -- ONE_TO_ONE_EXCHANGE  |PARTITIONED|
++                                order (ASC, $$108) (ASC, $$109)
++                                -- STABLE_SORT [$$108(ASC), $$109(ASC)]  
|PARTITIONED|
++                                  exchange
++                                  -- ONE_TO_ONE_EXCHANGE  |PARTITIONED|
++                                    project ([$$D2, $$97, $$95, $$93, $$90, 
$$85, $$83, $$108, $$109])
++                                    -- STREAM_PROJECT  |PARTITIONED|
++                                      exchange
++                                      -- ONE_TO_ONE_EXCHANGE  |PARTITIONED|
++                                        unnest-map [$$104, $$105, $$106, 
$$107, $$108] <- index-search("d1Idx", 0, "Default", "TestDataverse", 
"Dataset1", true, true, 4, $$83, $$100, $$101, $$85, 4, $$83, $$100, $$101, 
$$85, true, true, true)
++                                        -- BTREE_SEARCH  |PARTITIONED|
++                                          exchange
++                                          -- BROADCAST_EXCHANGE  |PARTITIONED|
++                                            running-aggregate [$$109] <- 
[create-query-uid()]
++                                            -- RUNNING_AGGREGATE  
|PARTITIONED|
++                                              assign [$$101, $$100] <- 
[to-bigint($$95), to-bigint($$97)]
+                                               -- ASSIGN  |PARTITIONED|
+-                                                project ([$$D2])
+-                                                -- STREAM_PROJECT  
|PARTITIONED|
+-                                                  exchange
+-                                                  -- ONE_TO_ONE_EXCHANGE  
|PARTITIONED|
+-                                                    data-scan []<-[$$80, 
$$D2] <- TestDataverse.Dataset2
+-                                                    -- DATASOURCE_SCAN  
|PARTITIONED|
+-                                                      exchange
+-                                                      -- ONE_TO_ONE_EXCHANGE  
|PARTITIONED|
+-                                                        empty-tuple-source
+-                                                        -- EMPTY_TUPLE_SOURCE 
 |PARTITIONED|
++                                                assign [$$85, $$83, $$97, 
$$95, $$93, $$90] <- [to-bigint($$D2.getField("field4")), 
to-bigint($$D2.getField("field1")), $$D2.getField("field2"), 
$$D2.getField("field3"), $$D2.getField("field3_notindexed"), 
$$D2.getField("field2_notindexed")]
++                                                -- ASSIGN  |PARTITIONED|
++                                                  project ([$$D2])
++                                                  -- STREAM_PROJECT  
|PARTITIONED|
++                                                    exchange
++                                                    -- ONE_TO_ONE_EXCHANGE  
|PARTITIONED|
++                                                      data-scan []<-[$$80, 
$$D2] <- TestDataverse.Dataset2
++                                                      -- DATASOURCE_SCAN  
|PARTITIONED|
++                                                        exchange
++                                                        -- 
ONE_TO_ONE_EXCHANGE  |PARTITIONED|
++                                                          empty-tuple-source
++                                                          -- 
EMPTY_TUPLE_SOURCE  |PARTITIONED|
diff --git 
a/asterixdb/asterix-common/src/main/java/org/apache/asterix/common/context/GlobalVirtualBufferCache.java
 
b/asterixdb/asterix-common/src/main/java/org/apache/asterix/common/context/GlobalVirtualBufferCache.java
index 12c660d..f30f64f 100644
--- 
a/asterixdb/asterix-common/src/main/java/org/apache/asterix/common/context/GlobalVirtualBufferCache.java
+++ 
b/asterixdb/asterix-common/src/main/java/org/apache/asterix/common/context/GlobalVirtualBufferCache.java
@@ -145,7 +145,7 @@
                     }
                     if (primaryIndexes.isEmpty()) {
                         flushPtr = 0;
-                    } else if (flushPtr >= pos) {
+                    } else if (flushPtr >= pos && flushPtr > 0) {
                         // If the removed index is before flushPtr, we should 
decrement flushPtr by 1 so that
                         // it still points to the same index.
                         flushPtr = (flushPtr - 1) % primaryIndexes.size();

--
To view, visit https://asterix-gerrit.ics.uci.edu/c/asterixdb/+/20652?usp=email
To unsubscribe, or for help writing mail filters, visit 
https://asterix-gerrit.ics.uci.edu/settings?usp=email

Gerrit-MessageType: newchange
Gerrit-Project: asterixdb
Gerrit-Branch: neo
Gerrit-Change-Id: I8a3761d0ab3759694af51f77bf8bfa9cbbcb8d1d
Gerrit-Change-Number: 20652
Gerrit-PatchSet: 1
Gerrit-Owner: Peeyush Gupta <[email protected]>

Reply via email to