​Julian is correct. I didn't notice the try INSIDE the finally block!! That
is definitely a problem.

To be clear, it's better to have the save() and the logout() in two
completely different finally blocks, so that if the first one fails, the
second one still runs.​

Best regards,
Clay Ferguson
[email protected]


On Tue, Jan 10, 2017 at 2:56 AM, Julian Sedding <[email protected]> wrote:

> If I read the code correctly, you only logout the session in a catch
> block. Assuming the code is otherwise sane, that would indicate a
> session leak, because most sessions are not logged out. That could
> also explain the gradual slowdown over two days.
>
> You have to always logout JCR sessions that you create via
> repository.login(...). As Clay mentioned, you should use a
> try..finally construct with logout in the finally block.
>
> Regards
> Julian
>
> On Tue, Jan 10, 2017 at 6:18 AM, Clay Ferguson <[email protected]> wrote:
> > * First determine if the time is being spent in the streaming, or the JCR
> > saving, so you know what problem to solve
> >
> > * Use System.currentMillis() or whatever to capture the begin+end times
> of
> > different sections, and subtract them to get the time. Then keep
> > a running total of those times. Then at end log out the total times, to
> see
> > what part is slow (low tech profiler!)
> >
> > * Close your stream in a finally block.
> >
> > * User Buffered stream (input stream)
> >
> > * Don't save 1000s of times into the same session if you can avoid it.
> > Create new sessions every 100th time or so and close out the previous
> > session to be sure
> > it isn't draining resources.
> >
> > * Print amount of free memory after calling GC(), like every 100th file,
> to
> > see if it's leaking, running low. (again low-tech profiler!)
> >
> >
> > Best regards,
> > Clay Ferguson
> > [email protected]
> >
> >
> > On Mon, Jan 9, 2017 at 12:03 PM, ravindar.singh
> > <[email protected]> wrote:
> >>
> >> Please check the below code. correct me if any thing wrong.
> >>
> >> After restarting the server it is quit normal then 1 day later it is
> >> taking
> >> 2 min to upload the file.
> >>
> >> private void contentStroe(UploadParameters repContent, List<ProjectProp>
> >> configParams,
> >>             String workspace, String table) throws Exception{
> >>         Session repSession = null;
> >>         Repository repository = null;
> >>         try{
> >>             String path = repContent.getModule();
> >>             Map<String, Object> nodeProps = repContent.getParams();
> >>             for(ProjectProp prop: configParams){
> >>                 if("1".equals(prop.getMppFolderYn())){
> >>                     Object value =
> >> nodeProps.get(prop.getMppParameterName());
> >>                     if(value!=null)
> >>                         path += "/" + value.toString();
> >>                 }
> >>             }
> >>             logger.info("Path => "+path);
> >>             Calendar cal = Calendar.getInstance();
> >>             DateFormat dateFormat = new SimpleDateFormat("yyyy/MM/dd
> >> HH:mm:ss");
> >>             repository = getRepository();
> >>             repSession = repository.login(new SimpleCredentials("admin",
> >> "admin".toCharArray()), workspace);
> >>             Node folderNode = repSession.getRootNode();
> >>             String[] docPath = path.split("/");
> >>             long docSize = 0;
> >>             String docExtn = "", docVersion = "";
> >>             for(String nodes : docPath){
> >>                 if (folderNode.hasNode(nodes)) {
> >>                     folderNode = folderNode.getNode(nodes);
> >>                 } else {
> >>                     boolean versioned = isVersioned(folderNode);
> >>                     if(versioned)
> >>                         folderNode.checkout();
> >>                     Node subFolderNode = folderNode.addNode(nodes);
> >>                     subFolderNode.addMixin("mix:referenceable");
> >>                     subFolderNode.addMixin("mix:versionable");
> >>                     subFolderNode.setProperty("Created",
> >> dateFormat.format(cal.getTime()));
> >>                     subFolderNode.setProperty("CreatedBy",
> >> repContent.getUpdUser());
> >>                     repSession.save();
> >>                     if(versioned)
> >>                         folderNode.checkin();
> >>                     subFolderNode.checkin();
> >>                     folderNode = folderNode.getNode(nodes);
> >>                 }
> >>             }
> >>
> >>             if(repContent.getUpdFile()!=null){
> >>                 String name = repContent.getUpdFileName();
> >>                 docExtn = name.substring(name.lastIndexOf(".")+1);
> >>             }
> >>             repContent.setDocName(repContent.getDocName()+"."+docExtn);
> >>             logger.info("File Store
> >> Path=>"+path+"/"+repContent.getDocName());
> >>             if (folderNode.hasNode(repContent.getDocName())) {
> >>                 boolean versioned = isVersioned(folderNode);
> >>                 if(versioned)
> >>                     folderNode.checkout();
> >>                 Node fileNode =
> >> folderNode.getNode(repContent.getDocName());
> >>                 boolean fileversioned = isVersioned(fileNode);
> >>                 if(fileversioned)
> >>                     fileNode.checkout();
> >>                 fileNode.setProperty("lastModified",
> >> dateFormat.format(cal.getTime()));
> >>                 fileNode.setProperty("UpdateBy",
> repContent.getUpdUser());
> >>                 docSize = addRepoContents(repSession, fileNode,
> >> repContent,
> >> configParams);
> >>                 repSession.save();
> >>                 if(versioned)
> >>                     folderNode.checkin();
> >>                 if(fileversioned)
> >>                     fileNode.checkin();
> >>                 VersionManager versionManager =
> >> repSession.getWorkspace().getVersionManager();
> >>                 VersionHistory hist =
> >> versionManager.getVersionHistory("/"+path+"/"+repContent.getDocName());
> >>                 for (VersionIterator it = hist.getAllVersions();
> >> it.hasNext();) {
> >>                     Version version = (Version) it.next();
> >>                     logger.info("Version1 Name=>"+version.getName());
> >>                     docVersion = version.getName();
> >>                 }
> >>             } else {
> >>                 boolean versioned = isVersioned(folderNode);
> >>                 if(versioned)
> >>                     folderNode.checkout();
> >>                 Node fileNode =
> >> folderNode.addNode(repContent.getDocName());
> >>                 fileNode.addMixin("mix:referenceable");
> >>                 fileNode.addMixin("mix:versionable");
> >>                 fileNode.setProperty("Created",
> >> dateFormat.format(cal.getTime()));
> >>                 fileNode.setProperty("CreatedBy",
> >> repContent.getUpdUser());
> >>                 fileNode.setProperty("deleteOption", "Y");
> >>                 fileNode.setProperty("versioning", "Y");
> >>                 docSize = addRepoContents(repSession, fileNode,
> >> repContent,
> >> configParams);
> >>                 repSession.save();
> >>                 if(versioned)
> >>                     folderNode.checkin();
> >>                 fileNode.checkin();
> >>                 VersionManager versionManager =
> >> repSession.getWorkspace().getVersionManager();
> >>                 VersionHistory hist =
> >> versionManager.getVersionHistory("/"+path+"/"+repContent.getDocName());
> >>                 for (VersionIterator it = hist.getAllVersions();
> >> it.hasNext();) {
> >>                     Version version = (Version) it.next();
> >>                     logger.info("Version Name=>"+version.getName());
> >>                     docVersion = version.getName();
> >>                 }
> >>             }
> >>             repSession.save();
> >>             dao.insertDocDetails(table, repContent, configParams,
> >> docVersion, path, docSize, docExtn);
> >>         } catch (Exception e) {
> >>             throw e;
> >>         } finally {
> >>             if(repSession!=null){
> >>                 try{
> >>                     repSession.save();
> >>                 }catch(Exception e){logger.error("Exception in Session
> >> Save
> >> {}", e);}
> >>                 *repSession.logout();*
> >>                 repSession = null;
> >>                 repository = null;
> >>             }
> >>         }
> >>     }
> >>
> >>     private long addRepoContents(Session repSession, Node fileNode,
> >> UploadParameters repContent,
> >>             List<ProjectProp> configParams) throws Exception{
> >>         byte[] updFile = repContent.getUpdFileByte();
> >>         long res = 0;
> >>         if(updFile!=null){
> >>             res = updFile.length;
> >>             ByteArrayInputStream fileContentStream = new
> >> ByteArrayInputStream(updFile);
> >>             Binary fileContent =
> >> repSession.getValueFactory().createBinary(fileContentStream);
> >>             fileNode.setProperty("mimeType",
> >> repContent.getUpdFileContentType());
> >>             fileNode.setProperty("size", res);
> >>             fileNode.setProperty("data", fileContent);
> >>             fileContentStream.close();
> >>             fileNode.setProperty("fileName",
> repContent.getUpdFileName());
> >>             logger.info("File Name: "+repContent.getUpdFileName()+";
> File
> >> Size: "+res+"; File Content Type: "+repContent.
> getUpdFileContentType());
> >>
> >>             fileNode.setProperty("Category", repContent.getCategory());
> >>             fileNode.setProperty("DocCode", repContent.getDocCode());
> >>             fileNode.setProperty("DocName", repContent.getDocName());
> >>             fileNode.setProperty("DocRemarks",
> repContent.getRemarks());
> >>
> >>             logger.info("Additional Params:");
> >>             Map<String, Object> nodeProps = repContent.getParams();
> >>             for (ProjectProp props : configParams) {
> >>                 Object value = nodeProps.get(props.
> getMppParameterName());
> >>                 logger.info("Name: "+props.getMppParameterName());
> >>                 logger.info("Type: "+props.getMppDataType());
> >>                 logger.info("Value: "+value);
> >>                 if("C".equals(props.getMppDataType())){
> >>                     fileNode.setProperty(props.getMppParameterDesc(),
> >> String.valueOf(value));
> >>                 } else if("N".equals(props.getMppDataType())) {
> >>                     fileNode.setProperty(props.getMppParameterDesc(),
> >> Long.valueOf(value==null?"0":value.toString()));
> >>                 } else if("D".equals(props.getMppDataType())) {
> >>                     fileNode.setProperty(props.getMppParameterDesc(),
> >> (Calendar)value);
> >>                 }
> >>             }
> >>         }
> >>         return res;
> >>     }
> >>
> >>
> >>
> >> --
> >> View this message in context:
> >> http://jackrabbit.510166.n4.nabble.com/Slowness-while-multiple-uploads-
> tp4666061p4666070.html
> >> Sent from the Jackrabbit - Dev mailing list archive at Nabble.com.
> >
> >
>

Reply via email to