Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Improvements to write performance #31

Merged
merged 21 commits into from
May 3, 2016
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
21 commits
Select commit Hold shift + click to select a range
dcfd95c
First rough steps at replacing SimpleReasoner's incremental mode with…
brianjlowe Nov 23, 2015
1a1606d
5x speedup for add RDF via GUI; 25x speedup for SPARQL API writes. s…
brianjlowe Dec 9, 2015
6e99b1c
reverting a small rearrangement of VClassGroupCache to avoid changing…
brianjlowe Dec 9, 2015
a4649a7
log level change
brianjlowe Dec 9, 2015
f099260
passes sameAs unit tests
brianjlowe Dec 10, 2015
5ae16cf
clean up / remove unneeded methods in SimpleReasoner
brianjlowe Dec 11, 2015
d13fdf8
bulk graph clear from ingest tools
brianjlowe Dec 11, 2015
295ddbf
add/remove ABox portion of mixed RDF through RDFService
brianjlowe Dec 11, 2015
539bffd
change to listener interface to simplify things and avoid sharing the…
brianjlowe Dec 12, 2015
e85e8a4
remove obsolete import
brianjlowe Dec 12, 2015
17fab28
misc. cleanup / minor fixes
brianjlowe Dec 12, 2015
ace972d
minor fixes
brianjlowe Dec 12, 2015
ce1ec11
remove obsolete code
brianjlowe Dec 13, 2015
01281d2
Merge branch 'develop' into writePerformance
brianjlowe Dec 14, 2015
5d33da4
remove obsolete files
brianjlowe Dec 14, 2015
de9d406
moving IndividualURIQueue to its new mavenized home
brianjlowe Dec 14, 2015
6e3a256
fix to allow for batch handling of more complex SPARQL updates
brianjlowe Dec 19, 2015
64cfc4a
improvements to RDFServiceGraph triple batching
brianjlowe Dec 20, 2015
724d8df
Merge branch 'writePerformance-1.8' into writePerformance
brianjlowe Feb 11, 2016
e4a8c4f
move unit test to new location
brianjlowe Feb 11, 2016
97658ad
Merge remote-tracking branch 'upstream/develop' into writePerformance
brianjlowe Feb 11, 2016
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Jump to
Jump to file
Failed to load files.
Diff view
Diff view
Original file line number Diff line number Diff line change
Expand Up @@ -19,6 +19,7 @@
import org.apache.commons.logging.LogFactory;

import com.hp.hpl.jena.query.Dataset;
import com.hp.hpl.jena.query.ReadWrite;
import com.hp.hpl.jena.update.GraphStore;
import com.hp.hpl.jena.update.GraphStoreFactory;
import com.hp.hpl.jena.update.UpdateAction;
Expand Down Expand Up @@ -96,17 +97,26 @@ private UpdateRequest parseUpdateString(HttpServletRequest req)
}

private void executeUpdate(HttpServletRequest req, UpdateRequest parsed) {
ServletContext ctx = req.getSession().getServletContext();
VitroRequest vreq = new VitroRequest(req);

SearchIndexer indexer = ApplicationUtils.instance().getSearchIndexer();
indexer.pause();
try {
Dataset ds = new RDFServiceDataset(vreq.getUnfilteredRDFService());
GraphStore graphStore = GraphStoreFactory.create(ds);
Dataset ds = new RDFServiceDataset(vreq.getUnfilteredRDFService());
GraphStore graphStore = GraphStoreFactory.create(ds);
try {
if(indexer != null) {
indexer.pause();
}
if(ds.supportsTransactions()) {
ds.begin(ReadWrite.WRITE);
}
UpdateAction.execute(parsed, graphStore);
} finally {
indexer.unpause();
if(ds.supportsTransactions()) {
ds.commit();
ds.end();
}
if(indexer != null) {
indexer.unpause();
}
}
}

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -73,6 +73,7 @@
import edu.cornell.mannlib.vitro.webapp.rdfservice.ChangeSet;
import edu.cornell.mannlib.vitro.webapp.rdfservice.RDFService;
import edu.cornell.mannlib.vitro.webapp.rdfservice.RDFServiceException;
import edu.cornell.mannlib.vitro.webapp.rdfservice.adapters.VitroModelFactory;
import edu.cornell.mannlib.vitro.webapp.utils.SparqlQueryUtils;
import edu.cornell.mannlib.vitro.webapp.utils.jena.JenaIngestUtils;
import edu.cornell.mannlib.vitro.webapp.utils.jena.JenaIngestUtils.MergeResult;
Expand Down Expand Up @@ -706,14 +707,13 @@ private void doRemoveModel(String modelName, ModelMaker modelMaker) {

private void doClearModel(String modelName, ModelMaker modelMaker) {
Model m = modelMaker.getModel(modelName);
OntModel o = ModelFactory.createOntologyModel(OntModelSpec.OWL_MEM,m);
OntModel o = VitroModelFactory.createOntologyModel(m);
o.enterCriticalSection(Lock.WRITE);
try {
o.removeAll(null,null,null);
o.removeAll();
} finally {
o.leaveCriticalSection();
}
// removeAll() doesn't work with the listeners!
}

private void doLoadRDFData(String modelName, String docLoc, String filePath, String language, ModelMaker modelMaker) {
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -44,6 +44,7 @@
import edu.cornell.mannlib.vitro.webapp.dao.jena.event.EditEvent;
import edu.cornell.mannlib.vitro.webapp.modelaccess.ModelAccess;
import edu.cornell.mannlib.vitro.webapp.modelaccess.ModelAccess.WhichService;
import edu.cornell.mannlib.vitro.webapp.modelaccess.ModelNames;
import edu.cornell.mannlib.vitro.webapp.rdfservice.ChangeSet;
import edu.cornell.mannlib.vitro.webapp.rdfservice.RDFService;
import edu.cornell.mannlib.vitro.webapp.rdfservice.RDFServiceException;
Expand Down Expand Up @@ -202,9 +203,20 @@ public void doPost(HttpServletRequest req,
}
if (aboxModel != null) {
aboxChangeModel = uploadModel.remove(tboxChangeModel);
aboxstmtCount = operateOnModel(request.getUnfilteredWebappDaoFactory(),
aboxModel, aboxChangeModel, ontModelSelector,
remove, makeClassgroups, loginBean.getUserURI());
aboxstmtCount = aboxChangeModel.size();
ByteArrayOutputStream os = new ByteArrayOutputStream();
aboxChangeModel.write(os, "N3");
ByteArrayInputStream in = new ByteArrayInputStream(os.toByteArray());
if(!remove) {
readIntoModel(in, "N3", request.getRDFService(),
ModelNames.ABOX_ASSERTIONS);
} else {
removeFromModel(in, "N3", request.getRDFService(),
ModelNames.ABOX_ASSERTIONS);
}
// operateOnModel(request.getUnfilteredWebappDaoFactory(),
// aboxModel, aboxChangeModel, ontModelSelector,
// remove, makeClassgroups, loginBean.getUserURI());
}
request.setAttribute("uploadDesc", uploadDesc + ". " + verb + " " +
(tboxstmtCount + aboxstmtCount) + " statements.");
Expand All @@ -225,9 +237,19 @@ public void doPost(HttpServletRequest req,
}
}

private static final boolean BEGIN = true;
private static final boolean END = !BEGIN;

private ChangeSet makeChangeSet(RDFService rdfService) {
ChangeSet cs = rdfService.manufactureChangeSet();
cs.addPreChangeEvent(new BulkUpdateEvent(null, BEGIN));
cs.addPostChangeEvent(new BulkUpdateEvent(null, END));
return cs;
}

private void addUsingRDFService(InputStream in, String languageStr,
RDFService rdfService) {
ChangeSet changeSet = rdfService.manufactureChangeSet();
ChangeSet changeSet = makeChangeSet(rdfService);
RDFService.ModelSerializationFormat format =
("RDF/XML".equals(languageStr)
|| "RDF/XML-ABBREV".equals(languageStr))
Expand Down Expand Up @@ -333,7 +355,7 @@ private long operateOnModel(WebappDaoFactory webappDaoFactory,
RDFService rdfService = new RDFServiceModel(mainModel);
ByteArrayOutputStream out = new ByteArrayOutputStream();
changesModel.write(out, "N-TRIPLE");
ChangeSet cs = rdfService.manufactureChangeSet();
ChangeSet cs = makeChangeSet(rdfService);
ByteArrayInputStream in = new ByteArrayInputStream(out.toByteArray());
cs.addRemoval(in, RDFService.ModelSerializationFormat.NTRIPLE, null);
try {
Expand Down Expand Up @@ -398,7 +420,7 @@ private void doLoadRDFData(String modelName,

private void readIntoModel(InputStream in, String language,
RDFService rdfService, String modelName) {
ChangeSet cs = rdfService.manufactureChangeSet();
ChangeSet cs = makeChangeSet(rdfService);
cs.addAddition(in, RDFServiceUtils.getSerializationFormatFromJenaString(
language), modelName);
try {
Expand All @@ -408,6 +430,18 @@ private void readIntoModel(InputStream in, String language,
}
}

private void removeFromModel(InputStream in, String language,
RDFService rdfService, String modelName) {
ChangeSet cs = makeChangeSet(rdfService);
cs.addRemoval(in, RDFServiceUtils.getSerializationFormatFromJenaString(
language), modelName);
try {
rdfService.changeSetUpdate(cs);
} catch (RDFServiceException e) {
throw new RuntimeException(e);
}
}

private void forwardToFileUploadError( String errrorMsg ,
HttpServletRequest req,
HttpServletResponse response)
Expand Down

This file was deleted.

This file was deleted.

Original file line number Diff line number Diff line change
Expand Up @@ -35,8 +35,7 @@ public class ModelContext {
public static void registerListenerForChanges(ServletContext ctx, ModelChangedListener ml){

try {
RDFServiceUtils.getRDFServiceFactory(ctx).registerListener(
new JenaChangeListener(ml));
RDFServiceUtils.getRDFServiceFactory(ctx).registerJenaModelChangedListener(ml);
} catch (RDFServiceException e) {
log.error(e,e);
}
Expand Down