Tek-Tips is the largest IT community on the Internet today!

Members share and learn making Tek-Tips Forums the best source of peer-reviewed technical information on the Internet!

  • Congratulations strongm on being selected by the Tek-Tips community for having the most helpful posts in the forums last week. Way to Go!

Performance Issue after Upgrade to 10.5 1

Status
Not open for further replies.

Riazpk

Programmer
May 18, 2009
14
AE
Dear All,

We are using LAPI with 9.7.1 and it has been working perfectly fine. After recent upgrade from 9.7.1 to 10.5, we faced serious performance issues. After investigation, it was observed that the listing the documents (lapiDoc.ListObjects)is what taking time (it was taking 3-5 seconds in 971 but started taking 20-30 seconds with 10.5). Further investigation showed the 971 was querying from a view named WebNodes while 10.5 started querying from view WebNodes_en_US which caused performance issues. We had to roll back the upgrade due to this.

Can anyone guide how to resolve the issue (so that API calls to list documents use webnodes view instead of WebNodes_en_US OR any other alternate)?

Thanks.
 
Please switch to content web services as LAPI is deprecated by the Vendor. CS in its new avatar is geared to handle multiple metadata and what you are running against is lapi code is not being tested or updated by OT because it is in retired status.So if you cannot adopt your code to SOAP or REST then you will pretty much be on your own and if you know Oscript you will be able to somehow baby sit the application.In any case lapi.listobjects can understand something which is similar to paging,so if you suspect too many children underneath a node you can limit the retreival something that is akin to a sql query like select * from webnodes where rownum< 20(I assumed Oracle in sql server you have top command).Or if you really do not know how to get off lapi then you can find the descendants of what you are looking for by doing select* from dtreeancestors where ancestorid=<your node id>.The result set will be akin to what lapi.listobjects produces.Also have a DBA look at optimizing your livelink system.They help tremenodusly.

Well, if I called the wrong number, why did you answer the phone?
James Thurber, New Yorker cartoon caption, June 5, 1937
Certified OT Developer,Livelink ECM Champion 2008,Livelink ECM Champion 2010
 
Thanks for the feedback. We have taken it (use of WS) as the long term objective but are looking for some quick solution currently. The result set for the query is one record. The view name that is being used is WebNodes_en_US. The same query against webnodes view runs perfectly fine. I am the DBA and I've already taken all possible optimization steps.
 
The code says you will be able to pass three table/view names to listobjects and you can add new views also like what I am showing
Code:
/*
if I find a Pref in opentext.ini like this
if you do this you have to re-start the server
[LAPI]
EnableListObjects=TRUE
ListObjectsViewWhiteList={'DTree', 'WebNodes', 'WebNodesCatalog'} //you can add any view you make here
ListObjectsSettingSaved=TRUE

*/

List		whiteListEntries = {'DTree', 'WebNodes', 'WebNodesCatalog'} 
then it says if you don't pass in the viewname it will go against WebNodes
if ( .fInArgs.ViewName == "" )	
			.fInArgs.ViewName = 'WebNodes' // Do not Xlate
end
unfortunately I am not seeing the theory you are saying WebNodes_en_US perhaps WebNodes is a synonym for that ?Do you see that from connect logs?

if you had access to a oscripter then this could be set right very easily or try to see if you can work through by specifying dtree.

Well, if I called the wrong number, why did you answer the phone?
James Thurber, New Yorker cartoon caption, June 5, 1937
Certified OT Developer,Livelink ECM Champion 2008,Livelink ECM Champion 2010
 
Thanks a lot for your feedback. Below are the contents of LiveLink's opentext.ini file (LAPI section):

[Lapi]
ListManagedStatus=TRUE
ListManagedStatusTableWhiteList={'Todo','Todo2','Todo201','TodoBase'}
ListManagedStatusQueryBlackList={'COMMIT',';','CREATE','DROP','TRUNCATE','ALTER','INSERT','UPDATE','DELETE','MERGE','GRANT','REVOKE','INTO'}
ListObjectsViewWhiteList={'DTree','WebNodes','WebNodesCatalog'}
ListNodesQueryBlackList={'COMMIT',';','CREATE','DROP','TRUNCATE','ALTER','INSERT','UPDATE','DELETE','MERGE','GRANT','REVOKE','INTO','SET'}
EnableListObjects=TRUE
ListObjectsSettingSaved=TRUE


WebNodes_en_US is a view name and below is the query for the view:

select a.OwnerID, a.DataID, a.ParentID, a.UserID, a.GroupID, a.UPermissions, a.GPermissions, a.WPermissions, a.SPermissions, a.PermID, d.Name, a.DataType, a.SubType, d.DComment, a.DCategory, a.CreateDate, a.ModifyDate, a.ExAtt1, a.Reserved, a.ReservedBy, a.ReservedDate, a.Ordering, a.ChildCount, a.VersionNum, a.AssignedTo, a.Status, a.Priority, a.GIF, a.Catalog, b.FileName, b.FileType, b.DataSize, b.ResSize, b.MimeType, a.OriginDataID, a.Major, dso_OrderRef , f.WND_Owner, f.WND_CreatedBy, f.WND_CreateDate, f.WND_ModifiedBy, f.WND_Version, e.WNF_ReadyDate from DTreeCore a, DVersData b, WebNodesMeta_en_US d, WebNodesFilter e, WebNodesDisplay f, DTreeSubTypeOrderRef dso where a.DataID = b.DocID(+) and a.Deleted = 0 and DECODE( a.Major, NULL, a.VersionNum, a.Major ) = b.Version(+) and a.DataID = d.DataID and b.VerType is NULL and a.DataID = e.DataID(+) and a.DataID = f.DataID(+) and dso.SubType = a.SubType(+)

Here is how we are calling ListObjects function:

status = lapiDoc.ListObjects(0, root, null, qStr, LAPI_DOCUMENTS.PERM_FULL, childs);

Do you suggest any change to this? Thanks
 
I suspect something is wrong with your 10.5 setup because I am able to call lapi without any problem for list objects program at bottom.webnodes_en_us did not work until i added the view in the ListObjectsViewWhiteList={'DTree','WebNodes','WebNodes_en_us','WebNodesCatalog'}.
Did you get a upgrade successful in your 971-10.5 attempt or was the upgrade tweaked like it would have failed then an admin would have tweaked the dbupgarde and put it going that kind.I have done several LL upgardes starting from version 8 onwards and since I know its code it is not considered a good upgrade until you see the message "the db upgrade completed successfully".Sometimes people have the tendencies to not involve OT support and they do things that gives them LL systems that will fail tremendously.In my system I have webnodes,and webnodes_en_us and they have different columns that is all.Both worked.I just wrote a query saying list folders and keep the list to less than 10 just for testing and 9 came all the time.If you use yoyr 10.5 system and had extended logging while running does it have a bunch of trace files?
Another aspect I thought about your original statement is how would listobjects not working prevent a company from going with an upgrade.List objects is just a simple way of finding objects within livelink.So if listobjects did not work one could simply write sql and find the dataid's,or one could create a Live report and do it all lapi ways.

Code:
using System;
using System.Collections.Generic;

using System.Text;

using com.opentext.api;

namespace LAPITEST
{
    class Program
    {
        static void Main(string[] args)
        {

            LLSession session = new LLSession("myserver", 2099, "", "Admin", "livelink", null);
            LAPI_DOCUMENTS lapiDocuments = new LAPI_DOCUMENTS(session);
             LLValue entInfo = new LLValue().setAssoc();
             LLValue children = new LLValue().setTable();
            if (lapiDocuments.AccessEnterpriseWS(entInfo) != 0)
            {
                Console.WriteLine("BAD PROGRAMMER IS THIS HOW YOU CODE");
            }
            else
            {
                Console.WriteLine("LAPI WORKS IT IS EASY");
            }

          //if (lapiDocuments.ListObjects(0, 2000, "webnodes", "SUBTYPE=0 and ROWNUM <10", 0, children) == 0)
           if (lapiDocuments.ListObjects(0, 2000, "webnodes_en_us", "SUBTYPE=0 and ROWNUM <10", 0, children) == 0)
          //  if (lapiDocuments.ListObjects(0, 2000, "", "SUBTYPE=0 and ROWNUM <10", 0, children) == 0)
            {
                Console.WriteLine("LAPILISTOBJECTS WORKED IN 10.5");
                Console.WriteLine(children.toString("NAME"));
                Console.WriteLine(children.size().ToString());
                Console.ReadLine();
            }
            else
            {
                Console.WriteLine("LAPILISTOBJECTSDOES NOT WORK  10.5");
                Console.ReadLine();
            }




           
        }
    }
}


Well, if I called the wrong number, why did you answer the phone?
James Thurber, New Yorker cartoon caption, June 5, 1937
Certified OT Developer,Livelink ECM Champion 2008,Livelink ECM Champion 2010
 
Thank you for the insights.

The upgrade was done by one of OT partners and as per them it was successful.

Just to add, I found following line in opentext.ini file; not sure whether it will be helpful for investigating current case though:

[MultilingualMetadata]
LanguageCode=en_US


So do you mean we can try out by explicitly specifying the view name from which to retrieve the data like below?

status = lapiDoc.ListObjects(0, root, 'webnodes', qStr, LAPI_DOCUMENTS.PERM_FULL, childs);


Also please pardon my ignorance but where to run the code you posted in your previous post? The Live report only accepts SQL query.

Regards,
 
If you omit the view name webnodes will be used if you use a viewname then that will be used provided you have put that in the Opentext.ini
The code above is a simple console project in c # which I used to walk through the list objects code so I can look at in oscript. If your source code is in Java or other languages make the adjustment but the syntax of the language is like that.BTW livelink cannot be installed without choosing a default metadata language so that is what that key is about. If slowness of query persist you should engage Opentext support or try to look at thread and connect logs and look at timings logs to see what is causing the slow down. I also just meant that if listobjects is a call that did not work there are so many other ways to get the dataids in livelink that is all😀

Well, if I called the wrong number, why did you answer the phone?
James Thurber, New Yorker cartoon caption, June 5, 1937
Certified OT Developer,Livelink ECM Champion 2008,Livelink ECM Champion 2010
 
Apologies for the delay. We tried the sample code you provided and it worked exactly the same way as you described. This is confusing because for your code, if we omit view name, webnodes is being used but for the web service we have (calling LAPI), it is not the case.

I also tried putting view name explicitly while making call to function but got some errors.

What are the other possible ways to get the dataids in the LiveLink other than calling listobjects?

Thanks.
 
As I said there is probably environmental differences/code differences/patch differences/multi language differences /load balancer differences in your install than mine,but AFAIK the code should execute on those lines.You should have OT look at your thread and connect logs or change your code to do SOAP or REST.BTW ListObjects just traverses a container nodeid and provides children so your clinet application can do somethings to it.A simple database query or view can be executed,you can get dataids using search,you can call lapi command in a live report,you can keep dataids you want in a csv so many things are possible if you explore them.

Well, if I called the wrong number, why did you answer the phone?
James Thurber, New Yorker cartoon caption, June 5, 1937
Certified OT Developer,Livelink ECM Champion 2008,Livelink ECM Champion 2010
 
Status
Not open for further replies.

Part and Inventory Search

Sponsor

Back
Top