Month: September 2014

SQL Locking on SNCOMM DB with MS SQL Server

Recently I was asked by a customer to investigate the poor performance of their Connections 4.5 CR3 environment. They had noticed that the servers were slowing, and eventually Connections ground to a halt.

Checking the System.out logs on the InfraCluster servers revealed that issues were being experienced with process hangs and process queuing.We then traced this back to the Databases, as it appeared like anything that relied on Communities were slowly failing. We found our problem.

The SNCOMM database had a lock from a long running task. Analysing the lock showed that this was the select statement it was running:

@P0 nvarchar(4000))   SELECT       TC.COMMUNITY_UUID as COMMUNITY_UUID,   TC.NAME as NAME,   TC.CREATED as CREATED,   TC.CREATED_BY as CREATED_BY,   TC.LASTMOD as LASTMOD,   TC.LASTMOD_BY as LASTMOD_BY,   TC.LOWER_NAME as LOWER_NAME,   TC.PLAIN_DESCR as PLAIN_DESCR,        '' as IMAGE,        '' as DESCRIPTION,   '' as DESCRIPTIONEX,       TC.MEMBER_COUNT as MEMBER_COUNT,      TC.PEOPLE_COUNT as PEOPLE_COUNT,       TC.GROUP_COUNT as GROUP_COUNT,   TC.COMMUNITY_THEME as COMMUNITY_THEME,       '' as CREATEDBY_DIRECTORY_UUID,   '' as CREATEDBY_DISPLAY,   '' as CREATEDBY_EMAIL,    '' as LASTMODBY_DIRECTORY_UUID,   '' as LASTMODBY_DISPLAY,   '' as LASTMODBY_EMAIL,     TC.COMMUNITY_TYPE as COMMUNITY_TYPE,    TC.HANDLE as HANDLE,     TC.PARENT_UUID as PARENT_UUID,   TC.ORG_ID AS ORG_ID,   TC.INTERNAL_ONLY AS INTERNAL_ONLY,   TC.OWNER AS OWNER,   TC.MEMBER_UPDATED as MEMBER_UPDATED,   TC.REF_UPDATED as REF_UPDATED,   TC.IMAGE_UPDATED as IMAGE_UPDATED,       TC.PRE_MODERATION as PRE_MODERATION,       TC.POST_MODERATION as POST_MODERATION   FROM   SNCOMM.COMMUNITY TC       WHERE      TC.COMMUNITY_UUID=@P0

Removing the lock resolved the issue, everything in the environment “trued” and all was well with the world again.

The customer then did some investigation into what changes were made in the environment. Turns out through some pretty awesome sleuth work that a new user had been brought on that day. This user was added to a Community that had >10 sub-communities. This was the clue..

In Connections 4.5 (unsure which version) a new feature to update the membership of sub-communities when a user was added to the parent community was introduced. Running this code for under 10 sub-communities, no problem. More than 10; LOCK.

PMR was logged and the resulting investigation showed that this was a reproducible error. Bad news is that it also exists in version 5, but this will be resolved in an upcoming fixpack.

 

Increasing the library file size of a Community.

Just had to update the file size of a Community. Sounds easy right??

I swear IBM make this stuff as complex as possible…..

To increase the size limit of a Community, you need it’s UID usually found as the last part in the url.

https://blaf.com./communities/service/html/communityview?communityUuid=2672ad0a-9646-4c2f-8094-3b552322d79e

 But what happens if you aren’t a member of the Community and can’t access it? What happens if all you have is the name?

You need to do this:

Start wsadmin

Launch Communities administration:

>execfile("communitiesAdmin.py")

Then you need to get all communities, and find the name. This is done by:
wsadmin> all=CommunitiesService.fetchAllComm()
wsadmin> CommunitiesListService.filterListByName(all, "community name") 

You will get output like the following:

[{lastModBy=[John User, A6F3CFCB-E9F5-3CEE-CA25-6F1000815F04], created=6/2/13 4:38:17 PM EST, tags=[], type=private, name=APACBlah, uuid=2672ad0a-9646-4c2f-8094-3b552322d79e, memberSize=36, lastMod=10/22/13 2:25:31 PM EST, description= This is a subcommunity for APAC staff who have completed their initial launch training for . , createdBy=[John User, A6F3CFCB-E9F5-3CEE-CA25-6F1000815F04]}]
 You now have the UUID.. but now you need to find the corresponding Library ID. This is done in the Files Admin tool.

Launch files admin,

wsadmin>execfile("filesAdmin.py")
Files Administration initialized.

We then need to find the ID of the corresponding Library. This is found by issuing the following command,

wsadmin>FilesLibraryService.getByExternalContainerId("2672ad0a-9646-4c2f-8094-3b552322d79e")
APAC staff who have completed their initial launch training for the project., createDate=Sun Jun 02 16:38:18 EST 2013, policyId=00000000-0000-0000-0000-000000000001,
externalContainerId=2672ad0a-9646-4c2f-8094-3b552322d79e, themeName=default, label=We251c6a45e07_482a_b5c7_a13bbb0654ca, title=APACBlah,
ownerUserId=00000000-0000-0000-0000-000000000000, type=community, id=9e1b8069-a132-4ea6-a32c-948634a520cc, externalInstanceId=We251c6a45e07_482a_b5c7_a13bbb0654ca, lastUpdate=Mon Oct 21 17:08:37 EST 2013}

We then need to create the new Policy

Create a new policy, i.e we need to create a policy for 1 Gb of files in the community.

Use the following command. Anything over 2 GB needs an L at the end. format of (name, size)

wsadmin>FilesPolicyService.add("1 GB", 1073741824) 

A policy will be created, and an id given. Take note of this ID.

A policy was added with the new id 82e5ae13-efa7-4cc7-bb37-1b8d68b521cc

Now you need to apply the new policy to the Community. Format of command is (ID,Policy)

 wsadmin>FilesLibraryService.assignPolicy("9e1b8069-a132-4ea6-a32c-948634a520cc","82e5ae13-efa7-4cc7-bb37-1b8d68b521cc")
The policy with the id 82e5ae13-efa7-4cc7-bb37-1b8d68b521cc is now assigned to the library with the id 9e1b8069-a132-4ea6-a32c-948634a520cc .

 Simple hey????

A tick box on the Community administration page would kill you?

OAuth2 error in Activity stream popout

I’ve just finished with installing IBM Docs; an install post will follow shortly.

Users were reporting issues of the Activity stream popout failing with “An error has occurred”

Selecting more details, reveals the following.

000002a7 BasicOAuth2Re W BasicOAuth2Request exception
java.lang.NullPointerException
at java.util.zip.InflaterInputStream.<init>(InflaterInputStream.java:77)
at java.util.zip.GZIPInputStream.<init>(GZIPInputStream.java:65)
at java.util.zip.GZIPInputStream.<init>(GZIPInputStream.java:76)

I then backtraced the changes we had made. As the issue referred to GZIP, I thought of compression and what changes I’d made in the installation of Docs.

One step of this installation is to modify the httpd.conf file on the IBM HTTP Server to enable compression for various data streams. This is done by invoking the mod_deflate directive.

The main winners when this form of compression is enabled is the end user on a low bandwidth connection. Users on a local LAN the benefits aren’t as drastic, but it’s still a good idea.

For example, text can be compressed by up to 70%. That baeing said, some types of data don’t lend well to compression, i.e jpg, pdf, etc.

Read here for IBM’s technote on enabling mod_deflate.

Anyway, back to my error.  I had added the following  changes to our httpd.conf file as part of the docs install. Please note these are all commented out.

#AddOutputFilterByType DEFLATE application/atom+xml 
  #AddOutputFilterByType DEFLATE application/atomcat+xml 
  #AddOutputFilterByType DEFLATE application/javascript 
  #AddOutputFilterByType DEFLATE application/json 
  #AddOutputFilterByType DEFLATE application/octet-stream 
  #AddOutputFilterByType DEFLATE application/xhtml+xml 
  #AddOutputFilterByType DEFLATE text/css 
  #AddOutputFilterByType DEFLATE text/plain 
  #AddOutputFilterByType DEFLATE text/xml 
  #AddOutputFilterByType DEFLATE text/xsl

By a method of deduction, we worked out that the “application/octet-stream” was the culprit for killing the Activity stream popout. We’ve disabled this entry, and all works again.

Hope this saves someone half a day of stuffing around!

Updating Connections 5 WAS to 8.5.5.3

Connections 5 runs on WebSphere Application Server 8.5.x.

We recently deployed on the 8.5.5.2 release, but as part of keeping the WAS stack as up to date as possible, I updated to the recent release 8.5.5.3. We were experiencing an error that is resolved in the update.

Details on this fix are located here

Just to save time, if you are going to do the same, uninstall fix IFP119108, or you’ll get the error below when you go to update using IIM.

WASError

Hope this saves time for someone out there.

EDIT…It appears that IBM have decided not to support Connections on this version of WAS.

So if you need to update to resolve an issue in the WAS stack, beware…

Updating a user’s personal library quota in Connections Files

I get asked quite a bit on how to do some routine things in Customers environments. You’d think the simple task of increasing a users File quota would be pretty straight forward. Unfortunately, it’s more complex and convoluted then it should be. I can only hope the upcoming versions of Connections start integrating the great Administration tools that are available from BP’s out there into the Core product.

Overview of the process 

  1. Create a policy – refer to this blog on how to create a policy.
  2. Find the user
  3. Find the library belonging to the user
  4. Apply the policy to the Library

Start up wsadmin on the Deployment manager

D:\>cd IBM\WebSphere\AppServer\profiles\Dmgr01\bin
D:\IBM\WebSphere\AppServer\profiles\Dmgr01\bin>wsadmin.bat -lang jython -user <connectionsadminuser> -password <connectionsadminuserpassword>-port 8879
WASX7209I: Connected to process “dmgr” on node CellManager01 using SOAP connector; The type of process is: DeploymentManager
WASX7031I: For help, enter: “print Help.help()”

Start Files Administration, and connect to a node
wsadmin>execfile(“filesAdmin.py”)
1: WebSphere:name=FilesSchedulerMBean,process=Cluster2_server1,platform=dynamicproxy,node=Node01,version=8.0.0.5,type=LotusConnections,mbeanIdentifier=FilesSchedulerMBean,cell=Cell01,spec=1.0
2: WebSphere:name=FilesSchedulerMBean,process=Cluster2_server2,platform=dynamicproxy,node=Node01,version=8.0.0.5,type=LotusConnections,mbeanIdentifier=FilesSchedulerMBean,cell=Cell01,spec=1.0
Which service do you want to connect to?
1

Connecting to WebSphere:name=FilesAdminService,type=LotusConnections,cell=Cell01,node=Node01,*
Files Administration initialized.

Find the users ID, notated below in bold by using their email address.
wsadmin>FilesMemberService.getByEmail(“userwhoneedsmorespace@blah.com”)
{directoryGroupLastUpdate=Tue Sep 09 12:48:02 EST 2014, lastVisit=Tue Sep 09 12:46:01 EST 2014, communityLastUpdate=Tue Sep 09 12:48:02 EST 2014, createDate=Thu Jul 04 16:50:43 EST
2013, id=97ea886e-fa34-415f-9883-2658af528bb6, name=User Who, email=userwhoneedsmorespace@blah.com, directoryLastUpdate=Tue Sep 09 12:46:01 EST 2014, isOprhan=false}

Take note of the value in “id=” . This is the internal representation of the user in the Files Application.

In this case it is  “id=97ea886e-fa34-415f-9883-2658af528bb6″

Use the ID, and find the users Library ID

wsadmin>FilesLibraryService.getPersonalByOwnerId(“97ea886e-fa34-415f-9883-2658af528bb6”)
{maximumSize=524288000, size=524174032, percentUsed=0.9997826232910156, summary=, createDate=Thu Jul 04 16:50:43 EST 2013, policyId=00000000-0000-0000-0000-000000000000, externalContainerId=null, themeName=, label=036841EC-8E19-4118-986A-B55B53BA663A, title=User Who, ownerUserId=97ea886e-fa34-415f-9883-2658af528bb6, type=personal, id=021b4d54-c47a-41ca-97d3-46b301b3bc34, externalInstanceId=null, lastUpdate=Thu Jul 04 16:50:43 EST 2013}

Note that some pretty interesting information is displayed, i.e Policy currently applied “policyId”, Current percent used “percentUsed” etc. The bit we are interested in is the id of the Library, which in this case is “id=021b4d54-c47a-41ca-97d3-46b301b3bc34″.

Assign the policy to the Library

I had already created a policy for 1GB, and taken note of it’s ID. For completeness, it was “d60abd07-5d86-45b3-8500-20ce95596bd5”

Syntax of the command is FilesLibraryService.assignPolicy(“LibraryID”,”PolicyID”)

wsadmin>FilesLibraryService.assignPolicy(“021b4d54-c47a-41ca-97d3-46b301b3bc34″,”d60abd07-5d86-45b3-8500-20ce95596bd5”)

If complete, you’ll get a confirmation, like below.
The policy with the id d60abd07-5d86-45b3-8500-20ce95596bd5 is now assigned to the library with the id 021b4d54-c47a-41ca-97d3-46b301b3bc34″)