From 85d65da981291218ad23c9161a04dfdb5481badc Mon Sep 17 00:00:00 2001
From: ludovicp <ludovicp@localhost>
Date: Mon, 25 Jan 2010 21:17:42 +0000
Subject: [PATCH] Fix for issue #4512 : Add option to display only stats when dumping database
---
opends/src/server/org/opends/server/tools/DBTest.java | 388 ++++++++++++++++++++++++++++---------------------------
1 files changed, 198 insertions(+), 190 deletions(-)
diff --git a/opends/src/server/org/opends/server/tools/DBTest.java b/opends/src/server/org/opends/server/tools/DBTest.java
index 76cb1ec..5bf9364 100644
--- a/opends/src/server/org/opends/server/tools/DBTest.java
+++ b/opends/src/server/org/opends/server/tools/DBTest.java
@@ -229,6 +229,7 @@
StringArgument baseDN;
StringArgument databaseName;
BooleanArgument skipDecode;
+ BooleanArgument statsOnly;
StringArgument maxKeyValue;
StringArgument minKeyValue;
IntegerArgument maxDataSize;
@@ -286,6 +287,10 @@
new BooleanArgument("skipdecode", 'p', "skipDecode",
INFO_DESCRIPTION_DBTEST_SKIP_DECODE.get());
sub.addArgument(skipDecode);
+ statsOnly =
+ new BooleanArgument("statsonly", 'q', "statsOnly",
+ INFO_DESCRIPTION_DBTEST_STATS_ONLY.get());
+ sub.addArgument(statsOnly);
maxKeyValue = new StringArgument("maxkeyvalue", 'K', "maxKeyValue", false,
false, true,
INFO_MAX_KEY_VALUE_PLACEHOLDER.get(),
@@ -531,6 +536,7 @@
subCommand.getArgument("basedn"),
subCommand.getArgument("databasename"),
subCommand.getArgument("skipdecode"),
+ subCommand.getArgument("statsonly"),
subCommand.getArgument("maxkeyvalue"),
subCommand.getArgument("minkeyvalue"),
subCommand.getArgument("maxdatasize"),
@@ -1038,9 +1044,9 @@
private int dumpDatabaseContainer(Argument backendID, Argument baseDN,
Argument databaseName, Argument skipDecode,
+ Argument statsOnly,
Argument maxKeyValue, Argument minKeyValue,
- Argument maxDataSize,
- Argument minDataSize)
+ Argument maxDataSize, Argument minDataSize)
{
Map<LocalDBBackendCfg, BackendImpl> jeBackends = getJEBackends();
BackendImpl backend = null;
@@ -1352,230 +1358,232 @@
}
}
- Message keyLabel = INFO_LABEL_DBTEST_KEY.get();
- Message dataLabel = INFO_LABEL_DBTEST_DATA.get();
-
- String formatedKey = null;
- String formatedData = null;
-
- if(!skipDecode.isPresent())
+ if (!statsOnly.isPresent())
{
- if(databaseContainer instanceof DN2ID)
+ Message keyLabel = INFO_LABEL_DBTEST_KEY.get();
+ Message dataLabel = INFO_LABEL_DBTEST_DATA.get();
+
+ String formatedKey = null;
+ String formatedData = null;
+
+ if(!skipDecode.isPresent())
{
- try
+ if(databaseContainer instanceof DN2ID)
{
- formatedKey = DN.decode(ByteString.wrap(key.getData())).
+ try
+ {
+ formatedKey = DN.decode(ByteString.wrap(key.getData())).
toNormalizedString();
- keyLabel = INFO_LABEL_DBTEST_ENTRY_DN.get();
- }
- catch(Exception e)
- {
- Message message =
+ keyLabel = INFO_LABEL_DBTEST_ENTRY_DN.get();
+ }
+ catch(Exception e)
+ {
+ Message message =
ERR_DBTEST_DECODE_FAIL.get(getExceptionMessage(e));
- printMessage(message);
- }
- formatedData = String.valueOf(
+ printMessage(message);
+ }
+ formatedData = String.valueOf(
JebFormat.entryIDFromDatabase(data.getData()));
- dataLabel = INFO_LABEL_DBTEST_ENTRY_ID.get();
- }
- else if(databaseContainer instanceof ID2Entry)
- {
- formatedKey = String.valueOf(
- JebFormat.entryIDFromDatabase(key.getData()));
- keyLabel = INFO_LABEL_DBTEST_ENTRY_ID.get();
- try
+ dataLabel = INFO_LABEL_DBTEST_ENTRY_ID.get();
+ }
+ else if(databaseContainer instanceof ID2Entry)
{
- formatedData = System.getProperty("line.separator") +
- ID2Entry.entryFromDatabase(
+ formatedKey = String.valueOf(
+ JebFormat.entryIDFromDatabase(key.getData()));
+ keyLabel = INFO_LABEL_DBTEST_ENTRY_ID.get();
+ try
+ {
+ formatedData = System.getProperty("line.separator") +
+ ID2Entry.entryFromDatabase(
ByteString.wrap(data.getData()),
ec.getRootContainer().getCompressedSchema()).
toLDIFString();
- dataLabel = INFO_LABEL_DBTEST_ENTRY.get();
- }
- catch(Exception e)
- {
- Message message =
+ dataLabel = INFO_LABEL_DBTEST_ENTRY.get();
+ }
+ catch(Exception e)
+ {
+ Message message =
ERR_DBTEST_DECODE_FAIL.get(getExceptionMessage(e));
- printMessage(message);
+ printMessage(message);
+ }
}
- }
- else if(databaseContainer instanceof DN2URI)
- {
- try
+ else if(databaseContainer instanceof DN2URI)
{
- formatedKey = DN.decode(ByteString.wrap(
+ try
+ {
+ formatedKey = DN.decode(ByteString.wrap(
key.getData())).toNormalizedString();
- keyLabel = INFO_LABEL_DBTEST_ENTRY_DN.get();
- }
- catch(Exception e)
- {
- Message message =
+ keyLabel = INFO_LABEL_DBTEST_ENTRY_DN.get();
+ }
+ catch(Exception e)
+ {
+ Message message =
ERR_DBTEST_DECODE_FAIL.get(getExceptionMessage(e));
- printMessage(message);
+ printMessage(message);
+ }
+ formatedData = new String(key.getData());
+ dataLabel = INFO_LABEL_DBTEST_URI.get();
}
- formatedData = new String(key.getData());
- dataLabel = INFO_LABEL_DBTEST_URI.get();
- }
- else if(databaseContainer instanceof Index)
- {
- formatedKey = new String(key.getData());
- keyLabel = INFO_LABEL_DBTEST_INDEX_VALUE.get();
+ else if(databaseContainer instanceof Index)
+ {
+ formatedKey = new String(key.getData());
+ keyLabel = INFO_LABEL_DBTEST_INDEX_VALUE.get();
- EntryIDSet idSet = new EntryIDSet(key.getData(),
+ EntryIDSet idSet = new EntryIDSet(key.getData(),
data.getData());
- if(idSet.isDefined())
- {
- int lineCount = 0;
- StringBuilder builder = new StringBuilder();
-
- Iterator<EntryID> i = idSet.iterator();
- while(i.hasNext())
+ if(idSet.isDefined())
{
- builder.append(i.next());
- if(lineCount == 10)
- {
- builder.append(System.getProperty("line.separator"));
- lineCount = 0;
- }
- else
- {
- builder.append(" ");
- lineCount++;
- }
- }
- formatedData = builder.toString();
- }
- else
- {
- formatedData = idSet.toString();
- }
- dataLabel = INFO_LABEL_DBTEST_INDEX_ENTRY_ID_LIST.get();
- }
- else if(databaseContainer instanceof VLVIndex)
- {
- VLVIndex index = (VLVIndex)databaseContainer;
- SortKey[] sortKeys = index.sortOrder.getSortKeys();
+ int lineCount = 0;
+ StringBuilder builder = new StringBuilder();
- int pos = 0;
- byte[] keyBytes = key.getData();
- if(keyBytes.length > 0)
- {
- StringBuilder builder = new StringBuilder();
-
- // Decode the attribute values
- for(SortKey sortKey : sortKeys)
- {
- int valueLength = keyBytes[pos] & 0x7F;
- if (keyBytes[pos++] != valueLength)
+ Iterator<EntryID> i = idSet.iterator();
+ while(i.hasNext())
{
- int numLengthBytes = valueLength;
- valueLength = 0;
- for (int k=0; k < numLengthBytes; k++, pos++)
+ builder.append(i.next());
+ if(lineCount == 10)
{
- valueLength = (valueLength << 8) |
- (keyBytes[pos] & 0xFF);
- }
- }
-
- byte[] valueBytes = new byte[valueLength];
- System.arraycopy(keyBytes, pos, valueBytes, 0,
- valueLength);
- builder.append(sortKey.getAttributeType().getNameOrOID());
- builder.append(": ");
- if(valueBytes.length == 0)
- {
- builder.append("NULL");
- }
- else
- {
- builder.append(new String(valueBytes));
- }
- builder.append(" ");
- pos += valueLength;
- }
-
- byte[] entryIDBytes = new byte[8];
- System.arraycopy(keyBytes, pos, entryIDBytes, 0,
- entryIDBytes.length);
- long entryID = JebFormat.entryIDFromDatabase(entryIDBytes);
-
- formatedKey = System.getProperty("line.separator") +
- String.valueOf(entryID) + ": " + builder.toString();
- }
- else
- {
- formatedKey = "UNBOUNDED";
- }
- keyLabel = INFO_LABEL_DBTEST_VLV_INDEX_LAST_SORT_KEYS.get();
-
- try
- {
- StringBuilder builder = new StringBuilder();
- SortValuesSet svs = new SortValuesSet(key.getData(),
- data.getData(),
- index);
- long[] entryIDs = svs.getEntryIDs();
- for(int i = 0; i < entryIDs.length; i++)
- {
- builder.append(String.valueOf(entryIDs[i]));
- builder.append(": ");
- for(int j = 0; j < sortKeys.length; j++)
- {
- SortKey sortKey = index.sortOrder.getSortKeys()[j];
- ByteString value = svs.getValue(i * sortKeys.length + j);
- builder.append(sortKey.getAttributeType().getNameOrOID());
- builder.append(": ");
- if(value == null)
- {
- builder.append("NULL");
- }
- else if(value.length() == 0)
- {
- builder.append("SIZE-EXCEEDED");
+ builder.append(System.getProperty("line.separator"));
+ lineCount = 0;
}
else
{
- builder.append(value.toString());
+ builder.append(" ");
+ lineCount++;
}
- builder.append(" ");
}
- builder.append(System.getProperty("line.separator"));
+ formatedData = builder.toString();
}
- formatedData = System.getProperty("line.separator") +
- builder.toString();
+ else
+ {
+ formatedData = idSet.toString();
+ }
dataLabel = INFO_LABEL_DBTEST_INDEX_ENTRY_ID_LIST.get();
}
- catch(Exception e)
+ else if(databaseContainer instanceof VLVIndex)
{
- Message message =
+ VLVIndex index = (VLVIndex)databaseContainer;
+ SortKey[] sortKeys = index.sortOrder.getSortKeys();
+
+ int pos = 0;
+ byte[] keyBytes = key.getData();
+ if(keyBytes.length > 0)
+ {
+ StringBuilder builder = new StringBuilder();
+
+ // Decode the attribute values
+ for(SortKey sortKey : sortKeys)
+ {
+ int valueLength = keyBytes[pos] & 0x7F;
+ if (keyBytes[pos++] != valueLength)
+ {
+ int numLengthBytes = valueLength;
+ valueLength = 0;
+ for (int k=0; k < numLengthBytes; k++, pos++)
+ {
+ valueLength = (valueLength << 8) |
+ (keyBytes[pos] & 0xFF);
+ }
+ }
+
+ byte[] valueBytes = new byte[valueLength];
+ System.arraycopy(keyBytes, pos, valueBytes, 0,
+ valueLength);
+ builder.append(sortKey.getAttributeType().getNameOrOID());
+ builder.append(": ");
+ if(valueBytes.length == 0)
+ {
+ builder.append("NULL");
+ }
+ else
+ {
+ builder.append(new String(valueBytes));
+ }
+ builder.append(" ");
+ pos += valueLength;
+ }
+
+ byte[] entryIDBytes = new byte[8];
+ System.arraycopy(keyBytes, pos, entryIDBytes, 0,
+ entryIDBytes.length);
+ long entryID = JebFormat.entryIDFromDatabase(entryIDBytes);
+
+ formatedKey = System.getProperty("line.separator") +
+ String.valueOf(entryID) + ": " + builder.toString();
+ }
+ else
+ {
+ formatedKey = "UNBOUNDED";
+ }
+ keyLabel = INFO_LABEL_DBTEST_VLV_INDEX_LAST_SORT_KEYS.get();
+
+ try
+ {
+ StringBuilder builder = new StringBuilder();
+ SortValuesSet svs = new SortValuesSet(key.getData(),
+ data.getData(),
+ index);
+ long[] entryIDs = svs.getEntryIDs();
+ for(int i = 0; i < entryIDs.length; i++)
+ {
+ builder.append(String.valueOf(entryIDs[i]));
+ builder.append(": ");
+ for(int j = 0; j < sortKeys.length; j++)
+ {
+ SortKey sortKey = index.sortOrder.getSortKeys()[j];
+ ByteString value = svs.getValue(i * sortKeys.length + j);
+ builder.append(sortKey.getAttributeType().getNameOrOID());
+ builder.append(": ");
+ if(value == null)
+ {
+ builder.append("NULL");
+ }
+ else if(value.length() == 0)
+ {
+ builder.append("SIZE-EXCEEDED");
+ }
+ else
+ {
+ builder.append(value.toString());
+ }
+ builder.append(" ");
+ }
+ builder.append(System.getProperty("line.separator"));
+ }
+ formatedData = System.getProperty("line.separator") +
+ builder.toString();
+ dataLabel = INFO_LABEL_DBTEST_INDEX_ENTRY_ID_LIST.get();
+ }
+ catch(Exception e)
+ {
+ Message message =
ERR_DBTEST_DECODE_FAIL.get(getExceptionMessage(e));
- printMessage(message);
+ printMessage(message);
+ }
}
}
- }
- if(formatedKey == null)
- {
- StringBuilder keyBuilder = new StringBuilder();
- StaticUtils.byteArrayToHexPlusAscii(keyBuilder, key.getData(),
- indent);
- formatedKey = System.getProperty("line.separator") +
- keyBuilder.toString();
- }
- if(formatedData == null)
- {
- StringBuilder dataBuilder = new StringBuilder();
- StaticUtils.byteArrayToHexPlusAscii(dataBuilder, data.getData(),
- indent);
- formatedData = System.getProperty("line.separator") +
- dataBuilder.toString();
- }
+ if(formatedKey == null)
+ {
+ StringBuilder keyBuilder = new StringBuilder();
+ StaticUtils.byteArrayToHexPlusAscii(keyBuilder, key.getData(),
+ indent);
+ formatedKey = System.getProperty("line.separator") +
+ keyBuilder.toString();
+ }
+ if(formatedData == null)
+ {
+ StringBuilder dataBuilder = new StringBuilder();
+ StaticUtils.byteArrayToHexPlusAscii(dataBuilder, data.getData(),
+ indent);
+ formatedData = System.getProperty("line.separator") +
+ dataBuilder.toString();
+ }
- out.format("%s (%d bytes): %s%n", keyLabel,
- key.getData().length, formatedKey);
- out.format("%s (%d bytes): %s%n%n", dataLabel,
- data.getData().length, formatedData);
-
+ out.format("%s (%d bytes): %s%n", keyLabel,
+ key.getData().length, formatedKey);
+ out.format("%s (%d bytes): %s%n%n", dataLabel,
+ data.getData().length, formatedData);
+ }
status = cursor.getNext(key, data, lockMode);
count++;
totalKeySize += key.getData().length;
--
Gitblit v1.10.0