|
|
@ -96,8 +96,10 @@ public class EcoTable implements ObjectIndex {
|
|
|
|
this.taildef = new Row(cols, NaturalOrder.naturalOrder, -1);
|
|
|
|
this.taildef = new Row(cols, NaturalOrder.naturalOrder, -1);
|
|
|
|
|
|
|
|
|
|
|
|
// initialize table file
|
|
|
|
// initialize table file
|
|
|
|
|
|
|
|
boolean freshFile = false;
|
|
|
|
if (!tablefile.exists()) {
|
|
|
|
if (!tablefile.exists()) {
|
|
|
|
// make new file
|
|
|
|
// make new file
|
|
|
|
|
|
|
|
freshFile = true;
|
|
|
|
FileOutputStream fos = null;
|
|
|
|
FileOutputStream fos = null;
|
|
|
|
try {
|
|
|
|
try {
|
|
|
|
fos = new FileOutputStream(tablefile);
|
|
|
|
fos = new FileOutputStream(tablefile);
|
|
|
@ -167,10 +169,11 @@ public class EcoTable implements ObjectIndex {
|
|
|
|
}
|
|
|
|
}
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
// check consistency
|
|
|
|
// open the file
|
|
|
|
//System.out.print(" -ordering- ..");
|
|
|
|
|
|
|
|
//System.out.flush();
|
|
|
|
|
|
|
|
this.file = new BufferedEcoFS(new EcoFS(tablefile, rowdef.objectsize), this.buffersize);
|
|
|
|
this.file = new BufferedEcoFS(new EcoFS(tablefile, rowdef.objectsize), this.buffersize);
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
// remove doubles
|
|
|
|
|
|
|
|
if (!freshFile) {
|
|
|
|
final ArrayList<Integer[]> doubles = index.removeDoubles();
|
|
|
|
final ArrayList<Integer[]> doubles = index.removeDoubles();
|
|
|
|
//assert index.size() + doubles.size() + fail == i;
|
|
|
|
//assert index.size() + doubles.size() + fail == i;
|
|
|
|
//System.out.println(" -removed " + doubles.size() + " doubles- done.");
|
|
|
|
//System.out.println(" -removed " + doubles.size() + " doubles- done.");
|
|
|
@ -199,11 +202,7 @@ public class EcoTable implements ObjectIndex {
|
|
|
|
removeInFile(top.intValue());
|
|
|
|
removeInFile(top.intValue());
|
|
|
|
}
|
|
|
|
}
|
|
|
|
}
|
|
|
|
}
|
|
|
|
/* try {
|
|
|
|
}
|
|
|
|
assert file.size() == index.size() + doubles.size() + fail : "file.size() = " + file.size() + ", index.size() = " + index.size() + ", doubles.size() = " + doubles.size() + ", fail = " + fail + ", i = " + i;
|
|
|
|
|
|
|
|
} catch (IOException e) {
|
|
|
|
|
|
|
|
e.printStackTrace();
|
|
|
|
|
|
|
|
}*/
|
|
|
|
|
|
|
|
} catch (final FileNotFoundException e) {
|
|
|
|
} catch (final FileNotFoundException e) {
|
|
|
|
// should never happen
|
|
|
|
// should never happen
|
|
|
|
e.printStackTrace();
|
|
|
|
e.printStackTrace();
|
|
|
@ -297,6 +296,7 @@ public class EcoTable implements ObjectIndex {
|
|
|
|
Integer L;
|
|
|
|
Integer L;
|
|
|
|
Row.Entry inconsistentEntry;
|
|
|
|
Row.Entry inconsistentEntry;
|
|
|
|
// iterate over all entries that have inconsistent index references
|
|
|
|
// iterate over all entries that have inconsistent index references
|
|
|
|
|
|
|
|
long lastlog = System.currentTimeMillis();
|
|
|
|
for (final Integer[] is: index.removeDoubles()) {
|
|
|
|
for (final Integer[] is: index.removeDoubles()) {
|
|
|
|
// 'is' is the set of all indexes, that have the same reference
|
|
|
|
// 'is' is the set of all indexes, that have the same reference
|
|
|
|
// we collect that entries now here
|
|
|
|
// we collect that entries now here
|
|
|
@ -318,6 +318,9 @@ public class EcoTable implements ObjectIndex {
|
|
|
|
s = d.last();
|
|
|
|
s = d.last();
|
|
|
|
d.remove(s);
|
|
|
|
d.remove(s);
|
|
|
|
this.removeInFile(s.intValue());
|
|
|
|
this.removeInFile(s.intValue());
|
|
|
|
|
|
|
|
if (System.currentTimeMillis() - lastlog > 30000) {
|
|
|
|
|
|
|
|
Log.logInfo("EcoTable", "removing " + d.size() + " entries in " + this.filename());
|
|
|
|
|
|
|
|
}
|
|
|
|
}
|
|
|
|
}
|
|
|
|
assert file.size() == index.size() + fail : "file.size() = " + file.size() + ", index.size() = " + index.size();
|
|
|
|
assert file.size() == index.size() + fail : "file.size() = " + file.size() + ", index.size() = " + index.size();
|
|
|
|
return report;
|
|
|
|
return report;
|
|
|
|