From 458de7e54da932519ce0c17e2470c89c5b5a045c Mon Sep 17 00:00:00 2001
From: dugan <dugan@localhost>
Date: Mon, 24 Aug 2009 17:15:51 +0000
Subject: [PATCH] Fix for issue 4188: invalid schema raises exception import exception
---
opends/src/server/org/opends/server/backends/jeb/importLDIF/Importer.java | 344 +++++++++++++++++++++++++++++++-------------------------
1 files changed, 189 insertions(+), 155 deletions(-)
diff --git a/opends/src/server/org/opends/server/backends/jeb/importLDIF/Importer.java b/opends/src/server/org/opends/server/backends/jeb/importLDIF/Importer.java
index 2349132..012588f 100644
--- a/opends/src/server/org/opends/server/backends/jeb/importLDIF/Importer.java
+++ b/opends/src/server/org/opends/server/backends/jeb/importLDIF/Importer.java
@@ -467,43 +467,39 @@
InitializationException, IOException, JebException, DatabaseException,
InterruptedException, ExecutionException
{
- try {
- this.rootContainer = rootContainer;
- this.reader = new LDIFReader(importConfiguration, rootContainer,
- LDIF_READER_BUFFER_SIZE);
- Message message =
- NOTE_JEB_IMPORT_STARTING.get(DirectoryServer.getVersionString(),
- BUILD_ID, REVISION_NUMBER);
- logError(message);
- message = NOTE_JEB_IMPORT_THREAD_COUNT.get(threadCount);
- logError(message);
- RuntimeInformation.logInfo();
- initializeSuffixes();
- long startTime = System.currentTimeMillis();
- processPhaseOne();
- processPhaseTwo();
- setIndexesTrusted();
- switchContainers();
- tempDir.delete();
- long finishTime = System.currentTimeMillis();
- long importTime = (finishTime - startTime);
- float rate = 0;
- if (importTime > 0)
- rate = 1000f * reader.getEntriesRead() / importTime;
- message = NOTE_JEB_IMPORT_FINAL_STATUS.get(reader.getEntriesRead(),
- reader.getEntriesRead(), reader.getEntriesIgnored(), reader
- .getEntriesRejected(), migratedCount, importTime / 1000, rate);
- logError(message);
- }
- catch(Throwable t) {
- System.out.println("here: " + t.getMessage());
- t.printStackTrace();
+ try
+ {
+ this.rootContainer = rootContainer;
+ this.reader = new LDIFReader(importConfiguration, rootContainer,
+ LDIF_READER_BUFFER_SIZE);
+ Message message =
+ NOTE_JEB_IMPORT_STARTING.get(DirectoryServer.getVersionString(),
+ BUILD_ID, REVISION_NUMBER);
+ logError(message);
+ message = NOTE_JEB_IMPORT_THREAD_COUNT.get(threadCount);
+ logError(message);
+ RuntimeInformation.logInfo();
+ initializeSuffixes();
+ long startTime = System.currentTimeMillis();
+ processPhaseOne();
+ processPhaseTwo();
+ setIndexesTrusted();
+ switchContainers();
+ tempDir.delete();
+ long finishTime = System.currentTimeMillis();
+ long importTime = (finishTime - startTime);
+ float rate = 0;
+ if (importTime > 0)
+ rate = 1000f * reader.getEntriesRead() / importTime;
+ message = NOTE_JEB_IMPORT_FINAL_STATUS.get(reader.getEntriesRead(),
+ reader.getEntriesRead(), reader.getEntriesIgnored(), reader
+ .getEntriesRejected(), migratedCount, importTime / 1000, rate);
+ logError(message);
}
finally
{
reader.close();
}
-
return new LDIFImportResult(reader.getEntriesRead(), reader
.getEntriesRejected(), reader.getEntriesIgnored());
}
@@ -708,7 +704,7 @@
}
- /**
+ /**
* Task used to migrate excluded branch.
*/
private final class MigrateExcludedTask extends ImportTask
@@ -743,8 +739,8 @@
// This is the base entry for a branch that was excluded in the
// import so we must migrate all entries in this branch over to
// the new entry container.
- byte[] end =
- StaticUtils.getBytes("," + excludedDN.toNormalizedString());
+ byte[] end = StaticUtils.getBytes("," +
+ excludedDN.toNormalizedString());
end[0] = (byte) (end[0] + 1);
while(status == OperationStatus.SUCCESS &&
@@ -761,6 +757,13 @@
}
}
}
+ catch (Exception e)
+ {
+ message =
+ ERR_JEB_IMPORT_LDIF_MIGRATE_EXCLUDED_TASK_ERR.get(e.getMessage());
+ logError(message);
+ throw e;
+ }
finally
{
cursor.close();
@@ -782,65 +785,73 @@
public Void call() throws Exception
{
- for(Suffix suffix : dnSuffixMap.values()) {
- EntryContainer entryContainer = suffix.getSrcEntryContainer();
- if(entryContainer != null &&
- !suffix.getIncludeBranches().isEmpty()) {
- DatabaseEntry key = new DatabaseEntry();
- DatabaseEntry data = new DatabaseEntry();
- LockMode lockMode = LockMode.DEFAULT;
- OperationStatus status;
- Message message = NOTE_JEB_IMPORT_MIGRATION_START.get(
- "existing", String.valueOf(suffix.getBaseDN()));
- logError(message);
- Cursor cursor =
- entryContainer.getDN2ID().openCursor(null,
- null);
- try {
- status = cursor.getFirst(key, data, lockMode);
- while(status == OperationStatus.SUCCESS &&
+ for(Suffix suffix : dnSuffixMap.values()) {
+ EntryContainer entryContainer = suffix.getSrcEntryContainer();
+ if(entryContainer != null &&
+ !suffix.getIncludeBranches().isEmpty()) {
+ DatabaseEntry key = new DatabaseEntry();
+ DatabaseEntry data = new DatabaseEntry();
+ LockMode lockMode = LockMode.DEFAULT;
+ OperationStatus status;
+ Message message = NOTE_JEB_IMPORT_MIGRATION_START.get(
+ "existing", String.valueOf(suffix.getBaseDN()));
+ logError(message);
+ Cursor cursor =
+ entryContainer.getDN2ID().openCursor(null,
+ null);
+ try {
+ status = cursor.getFirst(key, data, lockMode);
+ while(status == OperationStatus.SUCCESS &&
!importConfiguration.isCancelled()) {
- DN dn = DN.decode(ByteString.wrap(key.getData()));
- if(!suffix.getIncludeBranches().contains(dn)) {
- EntryID id = new EntryID(data);
- Entry entry =
- entryContainer.getID2Entry().get(null,
- id, LockMode.DEFAULT);
- processEntry(entry, rootContainer.getNextEntryID(),suffix);
- migratedCount++;
- status = cursor.getNext(key, data, lockMode);
- } else {
- // This is the base entry for a branch that will be included
- // in the import so we don't want to copy the branch to the
- // new entry container.
+ DN dn = DN.decode(ByteString.wrap(key.getData()));
+ if(!suffix.getIncludeBranches().contains(dn)) {
+ EntryID id = new EntryID(data);
+ Entry entry =
+ entryContainer.getID2Entry().get(null,
+ id, LockMode.DEFAULT);
+ processEntry(entry, rootContainer.getNextEntryID(),suffix);
+ migratedCount++;
+ status = cursor.getNext(key, data, lockMode);
+ } else {
+ // This is the base entry for a branch that will be included
+ // in the import so we don't want to copy the branch to the
+ // new entry container.
- /**
- * Advance the cursor to next entry at the same level in the
- * DIT
- * skipping all the entries in this branch.
- * Set the next starting value to a value of equal length but
- * slightly greater than the previous DN. Since keys are
- * compared in reverse order we must set the first byte
- * (the comma).
- * No possibility of overflow here.
- */
- byte[] begin =
- StaticUtils.getBytes("," + dn.toNormalizedString());
- begin[0] = (byte) (begin[0] + 1);
- key.setData(begin);
- status = cursor.getSearchKeyRange(key, data, lockMode);
- }
+ /**
+ * Advance the cursor to next entry at the same level in the
+ * DIT
+ * skipping all the entries in this branch.
+ * Set the next starting value to a value of equal length but
+ * slightly greater than the previous DN. Since keys are
+ * compared in reverse order we must set the first byte
+ * (the comma).
+ * No possibility of overflow here.
+ */
+ byte[] begin =
+ StaticUtils.getBytes("," + dn.toNormalizedString());
+ begin[0] = (byte) (begin[0] + 1);
+ key.setData(begin);
+ status = cursor.getSearchKeyRange(key, data, lockMode);
}
- } finally {
- cursor.close();
- flushIndexBuffers();
- closeCursors();
}
}
+ catch(Exception e)
+ {
+ message =
+ ERR_JEB_IMPORT_LDIF_MIGRATE_EXISTING_TASK_ERR.get(e.getMessage());
+ logError(message);
+ throw e;
+ }
+ finally
+ {
+ cursor.close();
+ flushIndexBuffers();
+ closeCursors();
+ }
}
+ }
return null;
}
-
}
/**
@@ -859,26 +870,36 @@
*/
public Void call() throws Exception
{
- while (true)
+ try
{
- if (importConfiguration.isCancelled())
+ while (true)
{
- IndexBuffer indexBuffer = IndexBuffer.createIndexBuffer(0);
- freeBufferQueue.add(indexBuffer);
- return null;
+ if (importConfiguration.isCancelled())
+ {
+ IndexBuffer indexBuffer = IndexBuffer.createIndexBuffer(0);
+ freeBufferQueue.add(indexBuffer);
+ return null;
+ }
+ oldEntry = null;
+ Entry entry = reader.readEntry(dnSuffixMap, entryInfo);
+ if (entry == null)
+ {
+ break;
+ }
+ entryID = entryInfo.getEntryID();
+ Suffix suffix = entryInfo.getSuffix();
+ processEntry(entry, suffix);
}
- oldEntry = null;
- Entry entry = reader.readEntry(dnSuffixMap, entryInfo);
- if (entry == null)
- {
- break;
- }
- entryID = entryInfo.getEntryID();
- Suffix suffix = entryInfo.getSuffix();
- processEntry(entry, suffix);
+ flushIndexBuffers();
+ closeCursors();
}
- flushIndexBuffers();
- closeCursors();
+ catch(Exception e)
+ {
+ Message message =
+ ERR_JEB_IMPORT_LDIF_APPEND_REPLACE_TASK_ERR.get(e.getMessage());
+ logError(message);
+ throw e;
+ }
return null;
}
@@ -1040,31 +1061,37 @@
*/
public Void call() throws Exception
{
- try {
- while (true)
+ try
{
- if (importConfiguration.isCancelled())
+ while (true)
{
- IndexBuffer indexBuffer = IndexBuffer.createIndexBuffer(0);
- freeBufferQueue.add(indexBuffer);
- return null;
- }
- Entry entry = reader.readEntry(dnSuffixMap, entryInfo);
+ if (importConfiguration.isCancelled())
+ {
+ IndexBuffer indexBuffer = IndexBuffer.createIndexBuffer(0);
+ freeBufferQueue.add(indexBuffer);
+ return null;
+ }
+ Entry entry = reader.readEntry(dnSuffixMap, entryInfo);
- if (entry == null)
- {
- break;
+ if (entry == null)
+ {
+ break;
+ }
+ EntryID entryID = entryInfo.getEntryID();
+ Suffix suffix = entryInfo.getSuffix();
+ processEntry(entry, entryID, suffix);
}
- EntryID entryID = entryInfo.getEntryID();
- Suffix suffix = entryInfo.getSuffix();
- processEntry(entry, entryID, suffix);
+ flushIndexBuffers();
+ closeCursors();
}
- flushIndexBuffers();
- closeCursors();
- } catch(Throwable t) {
- System.out.println(t.getMessage());
- t.printStackTrace();
- }
+ catch (Exception e)
+ {
+ Message message =
+ ERR_JEB_IMPORT_LDIF_IMPORT_TASK_ERR.get(e.getMessage());
+ logError(message);
+ throw e;
+ }
+
return null;
}
@@ -1424,32 +1451,20 @@
public Void call() throws Exception
{
- try {
byte[] cKey = null;
ImportIDSet cInsertIDSet = null, cDeleteIDSet = null;
Integer cIndexID = null;
- indexMgr.openIndexFile();
- SortedSet<Buffer> bufferSet = initializeBuffers();
- while(!bufferSet.isEmpty())
+ try
{
- Buffer b;
- b = bufferSet.first();
- bufferSet.remove(b);
- if(cKey == null)
+ indexMgr.openIndexFile();
+ SortedSet<Buffer> bufferSet = initializeBuffers();
+ while(!bufferSet.isEmpty())
{
- cIndexID = b.getIndexID();
- cKey = b.getKey();
- cInsertIDSet = b.getInsertIDSet();
- cDeleteIDSet = b.getDeleteIDSet();
- cInsertIDSet.setKey(cKey);
- cDeleteIDSet.setKey(cKey);
- }
- else
- {
- if(b.compare(cKey, cIndexID) != 0)
+ Buffer b;
+ b = bufferSet.first();
+ bufferSet.remove(b);
+ if(cKey == null)
{
- addToDB(cInsertIDSet, cDeleteIDSet, cIndexID);
- indexMgr.incrementKeyCount();
cIndexID = b.getIndexID();
cKey = b.getKey();
cInsertIDSet = b.getInsertIDSet();
@@ -1459,25 +1474,43 @@
}
else
{
- cInsertIDSet.merge(b.getInsertIDSet());
- cDeleteIDSet.merge(b.getDeleteIDSet());
+ if(b.compare(cKey, cIndexID) != 0)
+ {
+ addToDB(cInsertIDSet, cDeleteIDSet, cIndexID);
+ indexMgr.incrementKeyCount();
+ cIndexID = b.getIndexID();
+ cKey = b.getKey();
+ cInsertIDSet = b.getInsertIDSet();
+ cDeleteIDSet = b.getDeleteIDSet();
+ cInsertIDSet.setKey(cKey);
+ cDeleteIDSet.setKey(cKey);
+ }
+ else
+ {
+ cInsertIDSet.merge(b.getInsertIDSet());
+ cDeleteIDSet.merge(b.getDeleteIDSet());
+ }
+ }
+ if(b.hasMoreData())
+ {
+ b.getNextRecord();
+ bufferSet.add(b);
}
}
- if(b.hasMoreData())
+ if(cKey != null)
{
- b.getNextRecord();
- bufferSet.add(b);
+ addToDB(cInsertIDSet, cDeleteIDSet, cIndexID);
}
+ cleanUP();
}
- if(cKey != null)
+ catch (Exception e)
{
- addToDB(cInsertIDSet, cDeleteIDSet, cIndexID);
+ Message message =
+ ERR_JEB_IMPORT_LDIF_INDEX_WRITE_DB_ERR.get(indexMgr.getFileName(),
+ e.getMessage());
+ logError(message);
+ throw e;
}
- cleanUP();
- } catch(Throwable t) {
- System.out.println("db here: " + t.getMessage());
- t.printStackTrace();
- }
return null;
}
@@ -1824,7 +1857,8 @@
dataStream.close();
indexMgr.setFileLength();
}
- catch (IOException e) {
+ catch (IOException e)
+ {
Message message =
ERR_JEB_IMPORT_LDIF_INDEX_FILEWRITER_ERR.get(file.getName(),
e.getMessage());
--
Gitblit v1.10.0