Skip to content

Commit

Permalink
GEOS-8188 Jdbcconfig performance: cache by name
Browse files Browse the repository at this point in the history
  • Loading branch information
NielsCharlier committed Jan 12, 2018
1 parent 7047c86 commit fa0ca64
Show file tree
Hide file tree
Showing 6 changed files with 377 additions and 88 deletions.
Original file line number Original file line Diff line number Diff line change
Expand Up @@ -134,20 +134,11 @@ public <T extends StoreInfo> T getStore(String id, Class<T> clazz) {
@Override @Override
public <T extends StoreInfo> T getStoreByName(WorkspaceInfo workspace, String name, public <T extends StoreInfo> T getStoreByName(WorkspaceInfo workspace, String name,
Class<T> clazz) { Class<T> clazz) {

if (workspace == null || workspace == ANY_WORKSPACE) {
Filter filter = equal("name", name); return db.getByIdentity(clazz, "name", name);
if (null != workspace && ANY_WORKSPACE != workspace) { } else {
Filter wsFilter = equal("workspace.id", workspace.getId()); return db.getByIdentity(clazz, "workspace.id", workspace.getId(), "name", name);
filter = and(filter, wsFilter);
}

T store;
try {
store = findUnique(clazz, filter);
} catch (IllegalArgumentException e) {
return null;
} }
return store;
} }


/** /**
Expand Down Expand Up @@ -252,20 +243,11 @@ public <T extends ResourceInfo> T getResource(String id, Class<T> clazz) {
@Override @Override
public <T extends ResourceInfo> T getResourceByName(NamespaceInfo namespace, String name, public <T extends ResourceInfo> T getResourceByName(NamespaceInfo namespace, String name,
Class<T> clazz) { Class<T> clazz) {

if (namespace == null || namespace == ANY_NAMESPACE) {
Filter filter = equal("name", name); return db.getByIdentity(clazz, "name", name);
if (null != namespace && ANY_NAMESPACE != namespace) { } else {
Filter wsFilter = equal("namespace.id", namespace.getId()); return db.getByIdentity(clazz, "namespace.id", namespace.getId(), "name", name);
filter = and(filter, wsFilter);
}

T resource;
try {
resource = findUnique(clazz, filter);
} catch (IllegalArgumentException e) {
return null;
} }
return resource;
} }


/** /**
Expand Down Expand Up @@ -373,7 +355,12 @@ public LayerInfo getLayer(String id) {
*/ */
@Override @Override
public LayerInfo getLayerByName(String name) { public LayerInfo getLayerByName(String name) {
return getByName(name, LayerInfo.class); String resourceId = db.getIdByIdentity(ResourceInfo.class, "name", name);
if (resourceId == null) {
return null;
} else {
return db.getByIdentity(LayerInfo.class, "resource.id", resourceId);
}
} }


/** /**
Expand Down Expand Up @@ -603,26 +590,15 @@ public NamespaceInfo getNamespace(String id) {
*/ */
@Override @Override
public NamespaceInfo getNamespaceByPrefix(String prefix) { public NamespaceInfo getNamespaceByPrefix(String prefix) {
Filter filter = equal("prefix", prefix); return db.getByIdentity(NamespaceInfo.class, "prefix", prefix);
try {
return findUnique(NamespaceInfo.class, filter);
} catch (IllegalArgumentException multipleResults) {
return null;
}
} }


/** /**
* @see org.geoserver.catalog.CatalogFacade#getNamespaceByURI(java.lang.String) * @see org.geoserver.catalog.CatalogFacade#getNamespaceByURI(java.lang.String)
*/ */
@Override @Override
public NamespaceInfo getNamespaceByURI(String uri) { public NamespaceInfo getNamespaceByURI(String uri) {

return db.getByIdentity(NamespaceInfo.class, "URI", uri);
Filter filter = equal("URI", uri);
try {
return findUnique(NamespaceInfo.class, filter);
} catch (IllegalArgumentException e) {
return null;
}
} }


/** /**
Expand Down Expand Up @@ -712,8 +688,6 @@ public WorkspaceInfo getWorkspace(String id) {
*/ */
@Override @Override
public WorkspaceInfo getWorkspaceByName(String name) { public WorkspaceInfo getWorkspaceByName(String name) {
// if ("web".equals(name))
// return null;
return getByName(name, WorkspaceInfo.class); return getByName(name, WorkspaceInfo.class);
} }


Expand Down Expand Up @@ -840,20 +814,12 @@ public StyleInfo getStyleByName(WorkspaceInfo workspace, String name) {
checkNotNull(workspace, checkNotNull(workspace,
"workspace is null. Did you mean CatalogFacade.ANY_WORKSPACE or CatalogFacade.NO_WORKSPACE?"); "workspace is null. Did you mean CatalogFacade.ANY_WORKSPACE or CatalogFacade.NO_WORKSPACE?");
checkNotNull(name, "name"); checkNotNull(name, "name");


Filter nameFilter = equal("name", name); if (workspace == ANY_WORKSPACE) {
Filter wsFilter; return db.getByIdentity(StyleInfo.class, "name", name);
if (workspace == NO_WORKSPACE) {
wsFilter = isNull("workspace.id");
} else if (workspace == ANY_WORKSPACE) {
wsFilter = acceptAll();
} else { } else {
wsFilter = equal("workspace.id", workspace.getId()); return db.getByIdentity(StyleInfo.class, "workspace.id", workspace.getId(), "name", name);
} }

Filter filter = and(nameFilter, wsFilter);
StyleInfo info = findUnique(StyleInfo.class, filter);
return info;
} }


@Override @Override
Expand Down Expand Up @@ -1026,14 +992,7 @@ protected void afterSaved(CatalogInfo object, List<String> propertyNames, List o
} }


private <T extends CatalogInfo> T getByName(final String name, final Class<T> clazz) { private <T extends CatalogInfo> T getByName(final String name, final Class<T> clazz) {

return db.getByIdentity(clazz, "name", name);
Filter filter = equal("name", name);

try {
return findUnique(clazz, filter);
} catch (IllegalArgumentException multipleResults) {
return null;
}
} }


private <T extends CatalogInfo> T addInternal(T info) { private <T extends CatalogInfo> T addInternal(T info) {
Expand Down
Original file line number Original file line Diff line number Diff line change
Expand Up @@ -59,7 +59,7 @@ public class JDBCGeoServerFacade implements GeoServerFacade {


private GeoServer geoServer; private GeoServer geoServer;


private final ConfigDatabase db; public final ConfigDatabase db;


private ResourceStore ddResourceStore; private ResourceStore ddResourceStore;


Expand Down Expand Up @@ -243,7 +243,7 @@ public void save(ServiceInfo service) {
public SettingsInfo getSettings(WorkspaceInfo workspace) { public SettingsInfo getSettings(WorkspaceInfo workspace) {
Filter filter = equal("workspace.id", workspace.getId()); Filter filter = equal("workspace.id", workspace.getId());


return get(SettingsInfo.class, filter); return db.get(SettingsInfo.class, filter);


} }


Expand Down Expand Up @@ -372,30 +372,12 @@ private <T extends Info> T findByName(@Nonnull final String name,
filter = and(filter, wsFilter); filter = and(filter, wsFilter);
} }
try { try {
return get(clazz, filter); return db.get(clazz, filter);
} catch (IllegalArgumentException multipleResults) { } catch (IllegalArgumentException multipleResults) {
return null; return null;
} }
} }


public <T extends Info> T get(Class<T> type, Filter filter) throws IllegalArgumentException {

CloseableIterator<T> it = db.query(type, filter, null, 2, (org.opengis.filter.sort.SortBy)null);
T result = null;
try {
if (it.hasNext()) {
result = it.next();
if (it.hasNext()) {
throw new IllegalArgumentException(
"Specified query predicate resulted in more than one object");
}
}
} finally {
it.close();
}
return result;
}

@Override @Override
public void dispose() { public void dispose() {
db.dispose(); db.dispose();
Expand Down

0 comments on commit fa0ca64

Please sign in to comment.