From 7f112797da0238ad97e3006b6cf63907ec42372f Mon Sep 17 00:00:00 2001 From: "Endi S. Dewata" Date: Fri, 27 May 2016 03:11:08 +0200 Subject: Fixed hard-coded database name for TPS VLV indexes. The vlv.ldif for TPS has been modified to remove the hard-coded database name and to use customizable parameter instead. The token and activity REST services have been modified to search the database using VLV. The existing database can be fixed using the following procedure: http://pki.fedoraproject.org/wiki/Database_Upgrade_for_PKI_10.3.x#Relocating_VLV_indexes https://fedorahosted.org/pki/ticket/2342 --- .../dogtagpki/server/tps/dbs/ActivityDatabase.java | 2 +- .../dogtagpki/server/tps/dbs/TokenDatabase.java | 2 +- .../dogtagpki/server/tps/rest/ActivityService.java | 34 ++++++++++++---------- .../dogtagpki/server/tps/rest/TokenService.java | 28 +++++++++--------- 4 files changed, 34 insertions(+), 32 deletions(-) (limited to 'base/tps/src') diff --git a/base/tps/src/org/dogtagpki/server/tps/dbs/ActivityDatabase.java b/base/tps/src/org/dogtagpki/server/tps/dbs/ActivityDatabase.java index fdcd4eaff..46ab2128d 100644 --- a/base/tps/src/org/dogtagpki/server/tps/dbs/ActivityDatabase.java +++ b/base/tps/src/org/dogtagpki/server/tps/dbs/ActivityDatabase.java @@ -107,7 +107,7 @@ public class ActivityDatabase extends LDAPDatabase { createFilter(sb, attributes); if (sb.length() == 0) { - sb.append("(id=*)"); + sb.append("(&(tokenID=*)(userID=*))"); // listActivities VLV } return sb.toString(); diff --git a/base/tps/src/org/dogtagpki/server/tps/dbs/TokenDatabase.java b/base/tps/src/org/dogtagpki/server/tps/dbs/TokenDatabase.java index 19f4830b3..f751c66c9 100644 --- a/base/tps/src/org/dogtagpki/server/tps/dbs/TokenDatabase.java +++ b/base/tps/src/org/dogtagpki/server/tps/dbs/TokenDatabase.java @@ -67,7 +67,7 @@ public class TokenDatabase extends LDAPDatabase { createFilter(sb, attributes); if (sb.length() == 0) { - sb.append("(id=*)"); + sb.append("(&(id=*)(userID=*))"); // listTokens VLV } return sb.toString(); diff --git a/base/tps/src/org/dogtagpki/server/tps/rest/ActivityService.java b/base/tps/src/org/dogtagpki/server/tps/rest/ActivityService.java index 6002e7a94..5fb3d1956 100644 --- a/base/tps/src/org/dogtagpki/server/tps/rest/ActivityService.java +++ b/base/tps/src/org/dogtagpki/server/tps/rest/ActivityService.java @@ -21,7 +21,6 @@ package org.dogtagpki.server.tps.rest; import java.io.UnsupportedEncodingException; import java.net.URI; import java.net.URLEncoder; -import java.util.Iterator; import javax.servlet.http.HttpServletRequest; import javax.ws.rs.core.Context; @@ -38,6 +37,7 @@ import org.jboss.resteasy.plugins.providers.atom.Link; import com.netscape.certsrv.apps.CMS; import com.netscape.certsrv.base.BadRequestException; import com.netscape.certsrv.base.PKIException; +import com.netscape.certsrv.dbs.IDBVirtualList; import com.netscape.certsrv.logging.ActivityCollection; import com.netscape.certsrv.logging.ActivityData; import com.netscape.certsrv.logging.ActivityResource; @@ -121,37 +121,39 @@ public class ActivityService extends PKIService implements ActivityResource { TPSSubsystem subsystem = (TPSSubsystem)CMS.getSubsystem(TPSSubsystem.ID); ActivityDatabase database = subsystem.getActivityDatabase(); - Iterator activities = database.findRecords(filter).iterator(); + IDBVirtualList list = database.findRecords(filter, null, "date", size); + int total = list.getSize(); ActivityCollection response = new ActivityCollection(); - int i = 0; - // skip to the start of the page - for ( ; i 0) { - URI uri = uriInfo.getRequestUriBuilder().replaceQueryParam("start", Math.max(start-size, 0)).build(); + URI uri = uriInfo.getRequestUriBuilder().replaceQueryParam("start", Math.max(start - size, 0)).build(); response.addLink(new Link("prev", uri)); } - if (start+size < i) { - URI uri = uriInfo.getRequestUriBuilder().replaceQueryParam("start", start+size).build(); + if (start+size < total) { + URI uri = uriInfo.getRequestUriBuilder().replaceQueryParam("start", start + size).build(); response.addLink(new Link("next", uri)); } return createOKResponse(response); } catch (Exception e) { - e.printStackTrace(); + CMS.debug(e); throw new PKIException(e.getMessage()); } } @@ -170,7 +172,7 @@ public class ActivityService extends PKIService implements ActivityResource { return createOKResponse(createActivityData(database.getRecord(activityID))); } catch (Exception e) { - e.printStackTrace(); + CMS.debug(e); throw new PKIException(e.getMessage()); } } diff --git a/base/tps/src/org/dogtagpki/server/tps/rest/TokenService.java b/base/tps/src/org/dogtagpki/server/tps/rest/TokenService.java index 2104f292b..40022a440 100644 --- a/base/tps/src/org/dogtagpki/server/tps/rest/TokenService.java +++ b/base/tps/src/org/dogtagpki/server/tps/rest/TokenService.java @@ -24,7 +24,6 @@ import java.net.URLEncoder; import java.util.ArrayList; import java.util.Collection; import java.util.HashMap; -import java.util.Iterator; import java.util.Map; import java.util.ResourceBundle; @@ -46,6 +45,7 @@ import com.netscape.certsrv.apps.CMS; import com.netscape.certsrv.base.BadRequestException; import com.netscape.certsrv.base.PKIException; import com.netscape.certsrv.dbs.EDBException; +import com.netscape.certsrv.dbs.IDBVirtualList; import com.netscape.certsrv.ldap.LDAPExceptionConverter; import com.netscape.certsrv.logging.ILogger; import com.netscape.certsrv.tps.token.TokenCollection; @@ -259,31 +259,31 @@ public class TokenService extends PKIService implements TokenResource { TPSSubsystem subsystem = (TPSSubsystem) CMS.getSubsystem(TPSSubsystem.ID); TokenDatabase database = subsystem.getTokenDatabase(); - Iterator tokens = database.findRecords(filter, attributes).iterator(); + IDBVirtualList list = database.findRecords(filter, null, "modifyTimestamp", size); + int total = list.getSize(); TokenCollection response = new TokenCollection(); - int i = 0; - - // skip to the start of the page - for (; i < start && tokens.hasNext(); i++) - tokens.next(); // return entries up to the page size - for (; i < start + size && tokens.hasNext(); i++) { - response.addEntry(createTokenData(tokens.next())); + for (int i = start; i < start + size && i < total; i++) { + TokenRecord record = list.getElementAt(i); + + if (record == null) { + CMS.debug("TokenService: Token record not found"); + throw new PKIException("Token record not found"); + } + + response.addEntry(createTokenData(record)); } - // count the total entries - for (; tokens.hasNext(); i++) - tokens.next(); - response.setTotal(i); + response.setTotal(total); if (start > 0) { URI uri = uriInfo.getRequestUriBuilder().replaceQueryParam("start", Math.max(start - size, 0)).build(); response.addLink(new Link("prev", uri)); } - if (start + size < i) { + if (start + size < total) { URI uri = uriInfo.getRequestUriBuilder().replaceQueryParam("start", start + size).build(); response.addLink(new Link("next", uri)); } -- cgit