Explorar o código

Merge pull request #12520 from richardkchapman/hpcc21872

HPCC-21872 Old index values returned after index is overwritten

Reviewed-by: Gavin Halliday <ghalliday@hpccsystems.com>
Gavin Halliday %!s(int64=6) %!d(string=hai) anos
pai
achega
18a7e05ae0

+ 1 - 0
ecl/hthor/hthor.cpp

@@ -1172,6 +1172,7 @@ void CHThorIndexWriteActivity::execute()
 
     if(clusterHandler)
         clusterHandler->copyPhysical(file, agent.queryWorkUnit()->getDebugValueBool("__output_cluster_no_copy_physical", false));
+    clearKeyStoreCacheEntry(file->queryFilename());
 
     // Now publish to name services
     StringBuffer dir,base;

+ 1 - 0
roxie/ccd/ccdserver.cpp

@@ -12290,6 +12290,7 @@ public:
             duplicateKeyCount = builder->getDuplicateCount();
             cummulativeDuplicateKeyCount += duplicateKeyCount;
             builder->finish(metadata, &fileCrc);
+            clearKeyStoreCache(false);
         }
     }
 

+ 43 - 0
testing/regress/ecl/indexcachebug.ecl

@@ -0,0 +1,43 @@
+/*##############################################################################
+
+    HPCC SYSTEMS software Copyright (C) 2019 HPCC Systems®.
+
+    Licensed 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.
+############################################################################## */
+
+IMPORT STD;
+
+#onwarning (4523, ignore);
+
+rec := RECORD
+ string15 fname;
+ string15 lname;
+ unsigned age;
+END;
+
+inds1 := DATASET([{ 'Aaron', 'Jones', 100}, {'Adam', 'Smith', 90}, {'Bob', 'Brown', 80}, {'Brian', 'Brown', 70 }, {'Charles', 'Dance', 60}, {'Christopher', 'Gould', 50},  {'David', 'Brokenshire', 40}, {'Edward', 'Green', 30}, {'Egbert', 'Sillyname', 20}, {'Freddy', 'Peters', 10} ], rec, DISTRIBUTED);
+inds2 := DATASET(10, TRANSFORM(rec, SELF.fname := (string)COUNTER; SELF.lname := (string)HASH(COUNTER); SELF.age := 1000-COUNTER));
+
+i := INDEX(inds1, { fname }, { lname, age }, '~myindex');
+i2 := INDEX(inds2, { fname }, { lname, age }, '~myindex');
+
+
+
+SEQUENTIAL(
+ OUTPUT(inds1, , '~ds1', OVERWRITE);
+ OUTPUT(inds2, , '~ds2', OVERWRITE);
+ BUILDINDEX(i, SORTED, OVERWRITE);
+ OUTPUT(i);
+ BUILDINDEX(i2, OVERWRITE);
+ OUTPUT(i2);
+);

+ 32 - 0
testing/regress/ecl/key/indexcachebug.xml

@@ -0,0 +1,32 @@
+<Dataset name='Result 1'>
+</Dataset>
+<Dataset name='Result 2'>
+</Dataset>
+<Dataset name='Result 3'>
+</Dataset>
+<Dataset name='Result 4'>
+ <Row><fname>Aaron          </fname><lname>Jones          </lname><age>100</age></Row>
+ <Row><fname>Adam           </fname><lname>Smith          </lname><age>90</age></Row>
+ <Row><fname>Bob            </fname><lname>Brown          </lname><age>80</age></Row>
+ <Row><fname>Brian          </fname><lname>Brown          </lname><age>70</age></Row>
+ <Row><fname>Charles        </fname><lname>Dance          </lname><age>60</age></Row>
+ <Row><fname>Christopher    </fname><lname>Gould          </lname><age>50</age></Row>
+ <Row><fname>David          </fname><lname>Brokenshire    </lname><age>40</age></Row>
+ <Row><fname>Edward         </fname><lname>Green          </lname><age>30</age></Row>
+ <Row><fname>Egbert         </fname><lname>Sillyname      </lname><age>20</age></Row>
+ <Row><fname>Freddy         </fname><lname>Peters         </lname><age>10</age></Row>
+</Dataset>
+<Dataset name='Result 5'>
+</Dataset>
+<Dataset name='Result 6'>
+ <Row><fname>1              </fname><lname>4280804635     </lname><age>999</age></Row>
+ <Row><fname>10             </fname><lname>4248528966     </lname><age>990</age></Row>
+ <Row><fname>2              </fname><lname>3497243773     </lname><age>998</age></Row>
+ <Row><fname>3              </fname><lname>3720055187     </lname><age>997</age></Row>
+ <Row><fname>4              </fname><lname>1626808383     </lname><age>996</age></Row>
+ <Row><fname>5              </fname><lname>2551174723     </lname><age>995</age></Row>
+ <Row><fname>6              </fname><lname>1985572737     </lname><age>994</age></Row>
+ <Row><fname>7              </fname><lname>647687799      </lname><age>993</age></Row>
+ <Row><fname>8              </fname><lname>2548245530     </lname><age>992</age></Row>
+ <Row><fname>9              </fname><lname>704836619      </lname><age>991</age></Row>
+</Dataset>