Problem
Attempting to view the Search Criteria for an Enterprise Vault (EV) Discovery Accelerator (DA) Search only displays a blank screen. This behaviour occurs for Searches after being Accepted (In Review), Searches that have completed but have not been Accepted (Pending Acceptance) or Searches that are currently running (Active). Attempting to change tabs or change to a different Case may cause the Client to not respond. If left in an unresponsive state, the Client may self-recover but display the same symptom if attempting to perform any DA function, or may display a System.OutOfMemoryException
error.
Additionally, attempting to edit Search Attributes, also known as Custom Attributes, may result in the DA Client appearing unresponsive or not displaying any information.
Error Message
Error: Exception of type 'System.OutOfMemoryException' was thrown.
Cause
This issue is most often seen after an upgrade. Reviewing the Details tab in the Task Manager on the DA Client computer may provide more information. If the Memory Commit Size column (needs to be added to the columns list) shows the AcceleratorClient.exe process consuming a large amount of memory, typically over 1.3 GB to 1.5 GB, this could indicate the Client is attempting to cache excessive amounts of data provided by the DA server. There are 2 known causes for this: (1) an unknown issue with IIS/ASP.NET, or (2) an issue with the XML data used by the Search Criteria.
For example, when Application-level Custom Attributes are created in the DA Client under Configuration | Search Attributes, they are used by all Searches in all Cases from that point-in-time forward and their information is written to the Configuration database in XML format. If this information is corrupt, malformed, is in an XML format that is no longer recognised, or has been created using an imported template (similar to \Program Files (x86)\Enterprise Vault Business Accelerator\AdditionalIndexAttributes.xml) and that import XML file is no longer available, attempting to view an existing Search's Criteria can cause the process to go into a loop as it attempts to load the XML data.
Solution
To resolve any unknown IIS.ASP.NET issues, DA could be moved to another server or the DisableLazyContentPropagation Registry key could be implemented, as follows.
Warning: Incorrect use of the Windows Registry editor may prevent the operating system from functioning properly. Great care should be taken when making changes to a Windows Registry. Registry modifications should only be carried out by persons experienced in the use of the Registry editor application. It is recommended that a complete backup of the Registry be made prior to making any Registry changes.
Note: This option has the potential to slow ASP processing as every ASP page update must wait for all data to be refreshed. This option should be tested to ensure its effects are understood.
1. On the Accelerator server, open the Registry editor (regedit.exe) while logged on with an account that has local administrator privileges.
2. Navigate to the following location: HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\ASP.
3. If the Parameters key does not exist, right click on the ASP key, select New, then select Key and enter Parameters for the key name.
4. If the DisableLazyContentPropagation key does not exist, right click on the Parameters key and select New, then DWORD value, then enter DisableLazyContentPropagation as the name of the new DWORD (may have to rename the value).
5. Right click on the new DisableLazyContentPropagation value, click Modify, select Decimal for the Base options, then enter 1 into the Value Data field to enable the setting.
6. Click OK to save the change.
When completed, the registry entry should look similar to the following:
HKEY_LOCAL_MACHINE
SYSTEM
CurrentControlSet
Services
ASP
Parameters
DisableLazyContentPropagation REG_DWORD 0x00000001 (1)
7. Close the Registry editor.
8. Reset IIS by entering IISRESET at a Command Prompt, restart the Enterprise Vault Accelerator Manager Service on the Accelerator server, then close and relaunch any Clients as needed.
To change the behavior back to the default, change the DisableLazyContentPropagation value to 0, then reset IIS, restart the Enterprise Vault Accelerator Manager Service on the Accelerator server, then close and relaunch any Clients as needed
To resolve any Search Criteria XML data issues, review any Application-level Custom Attributes, remove them and re-create them:
1. Review the current Application-level Custom Attributes and settings per Attribute under Configuration | Search Attributes.
2. Delete all listed Custom Attributes.
3. Create new Custom Attributes as needed.
This process does not require any service stops/start/restarts, nor will it affect any existing active Searches. If any Scheduled Searches exist, they may need to be disabled and new Scheduled Searches recreated, however, this will not be known until Scheduled Searches are run after deleting and recreating the Application-level Custom Attributes.
If attempting to select a Custom Attribute for deletion causes the DA Client to appear unresponsive, please gather the information below and contact technical support for assistance.
Obtain a listing of all Custom Attributes for all Customers connected to a Configuration database. Run the following query against the Configuration database (no edits required) and save the output for reference. Can output the results to file under Query | Results To | Results To File. For easier reading, execute the query and save as a .csv file: Right-click in the results | Save Results As | Leave the Save as type as CSV (Comma delimited) (*.csv) | Provide a location and filename | Save.
CREATE TABLE #CustomAttributes (
[CustomerID] int,
[CustomerName] nvarchar(1000),
[SQLServer] nvarchar(1000),
[CustomerDatabaseName] nvarchar(1000),
[CaseID] int,
[CustomAttributeName] nvarchar(1000),
[IndexAttribute] nvarchar(100),
[Type] nvarchar(1000),
[Size] int,
[DefaultValue] nvarchar(1000),
[ErrorMessage] nvarchar(1000),
[Mandatory] nvarchar(100),
[Description] nvarchar(1000),
[NumItemByColumns] int,
[MultipleSelection] nvarchar(100),
[DataType] nvarchar(1000),
[Associativity] int
);
DECLARE
@CustomerID int,
@CustomerName nvarchar(1000),
@SQLServer nvarchar(1000),
@CustomerDatabaseName nvarchar(1000),
@CaseID int,
@CustomAttributeName nvarchar(1000),
@IndexAttribute nvarchar(100),
@Type nvarchar(1000),
@Size int,
@DefaultValue nvarchar(1000),
@ErrorMessage nvarchar(1000),
@Mandatory nvarchar(100),
@Description nvarchar(1000),
@NumItemByColumns int,
@MultipleSelection nvarchar(100),
@DataType nvarchar(1000),
@Associativity int;
DECLARE @ConfigurationID int = 351; -- Do not edit
DECLARE @CustID int, @CseID int, @CustName nvarchar(1000), @Server nvarchar(1000), @InitialCatalog nvarchar(500);
DECLARE CustomAttributes CURSOR FOR
SELECT CustomerID, CaseID FROM tblConfiguration WHERE ConfigurationID = @ConfigurationID ORDER BY CustomerID;
OPEN CustomAttributes;
FETCH NEXT FROM CustomAttributes INTO @CustID, @CseID;
WHILE @@FETCH_STATUS = 0
BEGIN;
SELECT @CustName = Name, @Server = Server, @InitialCatalog = InitialCatalog
FROM tblCustomer WHERE CustomerID = @CustID;
DECLARE @idoc1 int;
DECLARE @CustomAttributesXML nvarchar(max);
SET @CustomAttributesXML = (SELECT Val
FROM tblConfiguration
WHERE ConfigurationID = @ConfigurationID
AND CustomerID = @CustID
AND CaseID = @CseID);
EXEC sp_xml_preparedocument
@idoc1 OUTPUT,
@CustomAttributesXML,
'<root xmlns:a="http://tempuri.org/CustomAttributeDS.xsd" xmlns:d3p1="http://tempuri.org/CustomAttributeDS.xsd"></root>';
SELECT
@CustID AS 'CustomerID'
, @CustName AS 'CustomerName'
, @Server AS 'SQLServer'
, @InitialCatalog AS 'CustomerDatabaseName'
, @CseID AS 'CaseID'
, a.[d3p1:Name] AS 'CustomAttributeName'
, a.[d3p1:IndexerName] AS 'IndexAttribute'
, CASE a.[d3p1:Type]
WHEN 0 THEN 'Single Line'
WHEN 1 THEN 'Multiple Lines'
WHEN 2 THEN 'Checkboxes'
WHEN 3 THEN 'Radio buttons'
WHEN 4 THEN 'List box'
WHEN 5 THEN 'Drop down list box'
ELSE (CONVERT(nvarchar(100), a.[d3p1:Type]))
END AS 'Type'
, a.[d3p1:Size] AS 'Size'
, a.[d3p1:DefaultValue] AS 'DefaultValue'
, a.[d3p1:ErrorMessage] AS 'ErrorMessage'
, a.[d3p1:Mandatory] AS 'Mandatory'
, a.[d3p1:Description] AS 'Description'
, a.[d3p1:NumItemByColumns] AS 'NumItemByColumns'
, a.[d3p1:MultipleSelection] 'MultipleSelection'
, CASE a.[d3p1:DataType]
WHEN 0 THEN 'String'
WHEN 1 THEN 'Number'
WHEN 2 THEN 'Date'
ELSE (CONVERT(nvarchar(100), a.[d3p1:DataType]))
END AS 'DataType'
, a.[d3p1:Associativity] AS 'Associativity'
INTO #CustomAttributesTemp
FROM
OPENXML (@idoc1, N'a:CustomAttributeDS/a:CustomAttributes/a:CustomAttribute', 1000)
WITH (
[d3p1:Name] nvarchar(250),
[d3p1:IndexerName] nvarchar(1000),
[d3p1:Type] int,
[d3p1:Size] int,
[d3p1:DefaultValue] nvarchar(250),
[d3p1:ErrorMessage] nvarchar(1000),
[d3p1:Mandatory] nvarchar(100),
[d3p1:NumItemByColumns] int,
[d3p1:MultipleSelection] nvarchar(100),
[d3p1:DataType] int,
[d3p1:Associativity] int,
[d3p1:Description] nvarchar(100)
) AS a;
DECLARE @CustomAttribName nvarchar(1000);
DECLARE CopyToTable CURSOR FOR
SELECT
CustomerID, CustomerName, SQLServer, CustomerDatabaseName, CaseID, CustomAttributeName, IndexAttribute, Type, Size, DefaultValue, ErrorMessage, Mandatory, Description, NumItemByColumns, MultipleSelection, DataType, Associativity
FROM #CustomAttributesTemp;
OPEN CopyToTable;
FETCH NEXT FROM CopyToTable INTO @CustomerID, @CustomerName, @SQLServer, @CustomerDatabaseName, @CaseID, @CustomAttributeName, @IndexAttribute, @Type, @Size, @DefaultValue, @ErrorMessage, @Mandatory, @Description, @NumItemByColumns, @MultipleSelection, @DataType, @Associativity;
WHILE @@FETCH_STATUS = 0
BEGIN;
INSERT INTO #CustomAttributes
(CustomerID, CustomerName, SQLServer, CustomerDatabaseName, CaseID, CustomAttributeName, IndexAttribute, Type, Size, DefaultValue, ErrorMessage, Mandatory, Description, NumItemByColumns, MultipleSelection, DataType, Associativity)
VALUES (@CustomerID, @CustomerName, @SQLServer, @CustomerDatabaseName, @CaseID, @CustomAttributeName, @IndexAttribute, @Type, @Size, @DefaultValue, @ErrorMessage, @Mandatory, @Description, @NumItemByColumns, @MultipleSelection, @DataType, @Associativity);
FETCH NEXT FROM CopyToTable INTO @CustomerID, @CustomerName, @SQLServer, @CustomerDatabaseName, @CaseID, @CustomAttributeName, @IndexAttribute, @Type, @Size, @DefaultValue, @ErrorMessage, @Mandatory, @Description, @NumItemByColumns, @MultipleSelection, @DataType, @Associativity;
END;
CLOSE CopyToTable;
DEALLOCATE CopyToTable;
DROP TABLE #CustomAttributesTemp;
FETCH NEXT FROM CustomAttributes INTO @CustID, @CseID;
END;
CLOSE CustomAttributes;
DEALLOCATE CustomAttributes;
-- Final Output below
SELECT
CustomerID
, CustomerName
, SQLServer
, CustomerDatabaseName
, CaseID
, CustomAttributeName
, IndexAttribute
, Type
--, Size
, DefaultValue
, ErrorMessage
, Mandatory
, Description
--, NumItemByColumns
, MultipleSelection
, DataType
--, Associativity
FROM #CustomAttributes;
-- Final Output above
DROP TABLE #CustomAttributes;