[jira] [Created] (OAK-4933) Create a data store implementation that integrates with Microsoft Azure Blob Storage

2016-10-12 Thread Matt Ryan (JIRA)
Matt Ryan created OAK-4933:
--

 Summary: Create a data store implementation that integrates with 
Microsoft Azure Blob Storage
 Key: OAK-4933
 URL: https://issues.apache.org/jira/browse/OAK-4933
 Project: Jackrabbit Oak
  Issue Type: Epic
  Components: blob, core
Reporter: Matt Ryan


This epic proposes the creation of a new type of Oak data store, 
AzureDataStore, that offers an integration between Oak and Microsoft Azure Blob 
Storage.  AzureDataStore would be very similar in purpose and functionality to 
S3DataStore, with a different backend that uses Azure Blob Storage instead of 
S3.

Some initial exploration into this concept can be seen in my github here:  
https://github.com/mattvryan/jackrabbit-oak/tree/azure-blob-store

More info about Azure Blob Storage:
* [Java 
SDK|https://azure.microsoft.com/en-us/documentation/articles/storage-java-how-to-use-blob-storage/]
* [Javadoc|http://azure.github.io/azure-storage-java/]
* [Source|https://github.com/azure/azure-storage-java] (GitHub) - Microsoft's 
Azure Storage Java SDK is open source and Apache licensed
* [Package 
info|https://mvnrepository.com/artifact/com.microsoft.azure/azure-storage] on 
mvnrepository.com

As I see it, the following work would be required:
* Create an AzureDataStore class that extends CachingDataStore
* Create a new backend for Azure Blob Storage
* Comprehensive unit testing of the new data store and backend classes
* Create test "mocks" for the necessary Azure Storage classes to facilitate 
unit testing (they are all final classes and cannot be mocked directly)
* Create SharedAzureDataStore class
* Create AzureDataStoreService class
* Implement similar JMX metrics as exist for S3DataStore
* Combine and refactor existing Oak code with newly added code to make best 
reuse of existing code, etc.
* Integration testing with system configured with AzureDataStore, comparison w/ 
S3DataStore in terms of performance and correctness
* Modify Azure Storage SDK code to make it into a valid OSGi bundle, and submit 
these changes back to that project (currently it is not an OSGi bundle and 
therefore currently has to be embedded)

List isn't purported to be comprehensive of course.



--
This message was sent by Atlassian JIRA
(v6.3.4#6332)


[jira] [Updated] (OAK-4932) DefaultSyncContext.sync(String) could use idp.getIdentity(ExternalIdentityRef)

2016-10-12 Thread Alexander Klimetschek (JIRA)

 [ 
https://issues.apache.org/jira/browse/OAK-4932?page=com.atlassian.jira.plugin.system.issuetabpanels:all-tabpanel
 ]

Alexander Klimetschek updated OAK-4932:
---
Description: 
Instead of 
[idp.getGroup(id)|https://github.com/apache/jackrabbit-oak/blob/08aadf19a5e6b1bb4ca6687623e06140fb1ec5bc/oak-auth-external/src/main/java/org/apache/jackrabbit/oak/spi/security/authentication/external/basic/DefaultSyncContext.java#L291]
 and 
[idp.getUser(id)|https://github.com/apache/jackrabbit-oak/blob/08aadf19a5e6b1bb4ca6687623e06140fb1ec5bc/oak-auth-external/src/main/java/org/apache/jackrabbit/oak/spi/security/authentication/external/basic/DefaultSyncContext.java#L300],
 the implementation of the DefaultSyncHandler could use 
{{ExternalIdentityProvider.getIdentity(ExternalIdentityRef)}}, as it looks up 
the reference right before (based on the {{rep:externalId}}) and fails if not 
present.

h4. Reasoning

Implementing {{getUser/Group(id)}} in an ExternalIdentityProvider can be 
difficult, because you need a way to search the external identity system 
efficiently by the local user id, which might not always be the case, if the 
external system uses another id and is only optimized for that.

h4. Consequences

# The only other place using {{ExternalIdentityProvider.getUser(String)}} is 
the 
[ExternalLoginModule|https://github.com/apache/jackrabbit-oak/blob/52f1e9a84324135e6a79678bbf209d03c0d2d77d/oak-auth-external/src/main/java/org/apache/jackrabbit/oak/spi/security/authentication/external/impl/ExternalLoginModule.java#L217],
 in case the user is pre-authenticated and does not exist locally yet. However, 
this is a specific use case that might not apply to all identity providers, in 
which case they could happily skip implementing this method. A note in the 
javadoc could clarify this for implementors.
# {{ExternalIdentityProvider.getGroup(String)}} would then be used in no other 
place (in the sync code) and could even be deprecated, as I can't imagine 
another application specific use case for it.

  was:
Instead of 
[idp.getGroup(id)|https://github.com/apache/jackrabbit-oak/blob/08aadf19a5e6b1bb4ca6687623e06140fb1ec5bc/oak-auth-external/src/main/java/org/apache/jackrabbit/oak/spi/security/authentication/external/basic/DefaultSyncContext.java#L291]
 and 
[idp.getUser(id)|https://github.com/apache/jackrabbit-oak/blob/08aadf19a5e6b1bb4ca6687623e06140fb1ec5bc/oak-auth-external/src/main/java/org/apache/jackrabbit/oak/spi/security/authentication/external/basic/DefaultSyncContext.java#L300],
 the implementation of the DefaultSyncHandler could use 
{{ExternalIdentityProvider.getIdentity(ExternalIdentityRef)}}, as it looks up 
the reference right before (based on the {{rep:externalId}}) and fails if not 
present.

h4. Reasoning

Implementing {{getUser/Group(id)}} in an ExternalIdentityProvider can be 
difficult, because you need a way to search the external identity system 
efficiently by the local user id, which might not always be the case, if the 
external system uses another id and is only optimized for that.

h4. Consequences

# The only other place using {{ExternalIdentityProvider.getUser(String)}} is 
the 
[ExternalLoginModule|https://github.com/apache/jackrabbit-oak/blob/52f1e9a84324135e6a79678bbf209d03c0d2d77d/oak-auth-external/src/main/java/org/apache/jackrabbit/oak/spi/security/authentication/external/impl/ExternalLoginModule.java#L217],
 in case the user is pre-authenticated and does not exist locally yet. However, 
this is a specific use case that might not apply to all identity providers, in 
which case they could happily skip implementing this method. A note in the 
javadoc could clarify this for implementors.
# {{ExternalIdentityProvider.getGroup(String)}} would then be use in no other 
place (in the sync code) and could even be deprecated, as I can't imagine 
another application specific use case for it.


> DefaultSyncContext.sync(String) could use idp.getIdentity(ExternalIdentityRef)
> --
>
> Key: OAK-4932
> URL: https://issues.apache.org/jira/browse/OAK-4932
> Project: Jackrabbit Oak
>  Issue Type: Improvement
>  Components: auth-external
>Reporter: Alexander Klimetschek
>
> Instead of 
> [idp.getGroup(id)|https://github.com/apache/jackrabbit-oak/blob/08aadf19a5e6b1bb4ca6687623e06140fb1ec5bc/oak-auth-external/src/main/java/org/apache/jackrabbit/oak/spi/security/authentication/external/basic/DefaultSyncContext.java#L291]
>  and 
> [idp.getUser(id)|https://github.com/apache/jackrabbit-oak/blob/08aadf19a5e6b1bb4ca6687623e06140fb1ec5bc/oak-auth-external/src/main/java/org/apache/jackrabbit/oak/spi/security/authentication/external/basic/DefaultSyncContext.java#L300],
>  the implementation of the DefaultSyncHandler could use 
> {{ExternalIdentityProvider.getIdentity(ExternalIdentityRef)}}, as it looks up 
> the 

[jira] [Commented] (OAK-4932) DefaultSyncContext.sync(String) could use idp.getIdentity(ExternalIdentityRef)

2016-10-12 Thread Alexander Klimetschek (JIRA)

[ 
https://issues.apache.org/jira/browse/OAK-4932?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel=15569669#comment-15569669
 ] 

Alexander Klimetschek commented on OAK-4932:


/cc [~tripod] [~djaeggi] [~anchela]

> DefaultSyncContext.sync(String) could use idp.getIdentity(ExternalIdentityRef)
> --
>
> Key: OAK-4932
> URL: https://issues.apache.org/jira/browse/OAK-4932
> Project: Jackrabbit Oak
>  Issue Type: Improvement
>  Components: auth-external
>Reporter: Alexander Klimetschek
>
> Instead of 
> [idp.getGroup(id)|https://github.com/apache/jackrabbit-oak/blob/08aadf19a5e6b1bb4ca6687623e06140fb1ec5bc/oak-auth-external/src/main/java/org/apache/jackrabbit/oak/spi/security/authentication/external/basic/DefaultSyncContext.java#L291]
>  and 
> [idp.getUser(id)|https://github.com/apache/jackrabbit-oak/blob/08aadf19a5e6b1bb4ca6687623e06140fb1ec5bc/oak-auth-external/src/main/java/org/apache/jackrabbit/oak/spi/security/authentication/external/basic/DefaultSyncContext.java#L300],
>  the implementation of the DefaultSyncHandler could use 
> {{ExternalIdentityProvider.getIdentity(ExternalIdentityRef)}}, as it looks up 
> the reference right before (based on the {{rep:externalId}}) and fails if not 
> present.
> h4. Reasoning
> Implementing {{getUser/Group(id)}} in an ExternalIdentityProvider can be 
> difficult, because you need a way to search the external identity system 
> efficiently by the local user id, which might not always be the case, if the 
> external system uses another id and is only optimized for that.
> h4. Consequences
> # The only other place using {{ExternalIdentityProvider.getUser(String)}} is 
> the 
> [ExternalLoginModule|https://github.com/apache/jackrabbit-oak/blob/52f1e9a84324135e6a79678bbf209d03c0d2d77d/oak-auth-external/src/main/java/org/apache/jackrabbit/oak/spi/security/authentication/external/impl/ExternalLoginModule.java#L217],
>  in case the user is pre-authenticated and does not exist locally yet. 
> However, this is a specific use case that might not apply to all identity 
> providers, in which case they could happily skip implementing this method. A 
> note in the javadoc could clarify this for implementors.
> # {{ExternalIdentityProvider.getGroup(String)}} would then be use in no other 
> place (in the sync code) and could even be deprecated, as I can't imagine 
> another application specific use case for it.



--
This message was sent by Atlassian JIRA
(v6.3.4#6332)


[jira] [Created] (OAK-4932) DefaultSyncContext.sync(String) could use idp.getIdentity(ExternalIdentityRef)

2016-10-12 Thread Alexander Klimetschek (JIRA)
Alexander Klimetschek created OAK-4932:
--

 Summary: DefaultSyncContext.sync(String) could use 
idp.getIdentity(ExternalIdentityRef)
 Key: OAK-4932
 URL: https://issues.apache.org/jira/browse/OAK-4932
 Project: Jackrabbit Oak
  Issue Type: Improvement
  Components: auth-external
Reporter: Alexander Klimetschek


Instead of 
[idp.getGroup(id)|https://github.com/apache/jackrabbit-oak/blob/08aadf19a5e6b1bb4ca6687623e06140fb1ec5bc/oak-auth-external/src/main/java/org/apache/jackrabbit/oak/spi/security/authentication/external/basic/DefaultSyncContext.java#L291]
 and 
[idp.getUser(id)|https://github.com/apache/jackrabbit-oak/blob/08aadf19a5e6b1bb4ca6687623e06140fb1ec5bc/oak-auth-external/src/main/java/org/apache/jackrabbit/oak/spi/security/authentication/external/basic/DefaultSyncContext.java#L300],
 the implementation of the DefaultSyncHandler could use 
{{ExternalIdentityProvider.getIdentity(ExternalIdentityRef)}}, as it looks up 
the reference right before (based on the {{rep:externalId}}) and fails if not 
present.

h4. Reasoning

Implementing {{getUser/Group(id)}} in an ExternalIdentityProvider can be 
difficult, because you need a way to search the external identity system 
efficiently by the local user id, which might not always be the case, if the 
external system uses another id and is only optimized for that.

h4. Consequences

# The only other place using {{ExternalIdentityProvider.getUser(String)}} is 
the 
[ExternalLoginModule|https://github.com/apache/jackrabbit-oak/blob/52f1e9a84324135e6a79678bbf209d03c0d2d77d/oak-auth-external/src/main/java/org/apache/jackrabbit/oak/spi/security/authentication/external/impl/ExternalLoginModule.java#L217],
 in case the user is pre-authenticated and does not exist locally yet. However, 
this is a specific use case that might not apply to all identity providers, in 
which case they could happily skip implementing this method. A note in the 
javadoc could clarify this for implementors.
# {{ExternalIdentityProvider.getGroup(String)}} would then be use in no other 
place (in the sync code) and could even be deprecated, as I can't imagine 
another application specific use case for it.



--
This message was sent by Atlassian JIRA
(v6.3.4#6332)


[jira] [Comment Edited] (OAK-4911) Can not read node Property when move code into a Thread (Java)

2016-10-12 Thread amin zamani (JIRA)

[ 
https://issues.apache.org/jira/browse/OAK-4911?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel=15569500#comment-15569500
 ] 

amin zamani edited comment on OAK-4911 at 10/12/16 6:36 PM:


I have now modified the structure of the code:

Now in ONE THREAD A NEW FILE NODE is created but when I try to access the 
property IN THE SAME THREAD I still get the same error. I access in the same 
java thread where I have created the file the properties of the node that I 
just have created before in the same thread. Here the example:

New thread created with following content, it calls only the 
createDocument(...) method and then I get the exception - without a thread i 
don't have the exception:



public Document createDocument(String folderId, CreateDocumentDto createDto) {
try {
Node node = jcrSession.getNodeByIdentifier(folderId);

Binary binary = 
jcrSession.getValueFactory().createBinary(createDto.getContent());
try {
Node file = JcrUtils.getOrCreateByPath(
node,
"",
DO_CREATE_UNIQUE_LEAF,
NodeType.NT_FOLDER,
NodeType.NT_FILE,
DO_AUTO_SAVE);

file.addMixin(NodeType.MIX_VERSIONABLE);

file.addMixin(NodeType.MIX_TITLE);
file.setProperty(Property.JCR_TITLE, createDto.getTitle());
file.setProperty(Property.JCR_DESCRIPTION, 
createDto.getDescription());

file.addMixin(CustomNodeType.NOAH_ENTITY_DOCUMENT);
if (createDto.getDocumentType() != null) {
file.setProperty(CustomProperty.NOAH_DOCUMENT_TYPE_VALUE, 
createDto.getDocumentType().getValue());
file.setProperty(CustomProperty.NOAH_DOCUMENT_TYPE_LABEL, 
createDto.getDocumentType().getLabel());
}
file.setProperty(CustomProperty.NOAH_ENTITY_URL, 
createDto.getEntityUrl());

file.addMixin(CustomNodeType.NOAH_AUDITABLE);
file.setProperty(CustomProperty.NOAH_CREATED_BY, 
SecurityUtil.getCurrentUserLogin());

Node content = JcrUtils.getOrAddNode(file, Node.JCR_CONTENT, 
NodeType.NT_RESOURCE);
content.setProperty(Property.JCR_DATA, binary);
content.setProperty(Property.JCR_MIMETYPE, 
createDto.getContentType());

String previewFileType="";
if(createDto.getPreviewType() != null){
// Ok, we are creating a preview document, so add the 
preview type
file.addMixin(CustomNodeType.NOAH_PREVIEW_DOCUMENT);
System.out.println("Create preview document, set preview 
type:"+createDto.getPreviewType().name());
file.setProperty(CustomProperty.NOAH_PREVIEW_TYPE, 
createDto.getPreviewType().name());
previewFileType = createDto.getPreviewType().name();
}

jcrSession.refresh(true);
jcrSession.save();

jcrSession.refresh(true);
System.out.println("Created "+previewFileType+" document,id: 
"+file.getIdentifier()+" ("+createDto.getTitle()+"),path: "+file.getPath());
LOG.debug("Created "+previewFileType+" document,id: 
"+file.getIdentifier()+" ("+createDto.getTitle()+"),path: "+file.getPath());

Version versionNode = versionFile(file, binary);
jcrSession.refresh(true);
return toDocument(versionNode);

} finally {
binary.dispose();
}
} catch (RepositoryException e) {
throw new RuntimeRepositoryException(e);
}
}
 




was (Author: amin.zam...@westernacher.com):
I have now modified the structure of the code:

Now in a thread a new file node is created but when I try to access the 
property I still get the same error. I access in the same java thread where I 
have created the file the properties of the node that I just have created 
before. Here a little exampe:

new thread created with following content, it calls only the 
createDocument(...) method and then I get the exception - without a thread i 
don't have the exception:



public Document createDocument(String folderId, CreateDocumentDto createDto) {
try {
Node node = jcrSession.getNodeByIdentifier(folderId);

Binary binary = 
jcrSession.getValueFactory().createBinary(createDto.getContent());
try {
Node file = JcrUtils.getOrCreateByPath(
node,
"",
DO_CREATE_UNIQUE_LEAF,
NodeType.NT_FOLDER,

[jira] [Commented] (OAK-4911) Can not read node Property when move code into a Thread (Java)

2016-10-12 Thread amin zamani (JIRA)

[ 
https://issues.apache.org/jira/browse/OAK-4911?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel=15569516#comment-15569516
 ] 

amin zamani commented on OAK-4911:
--

And then we get this error if above method is called :

Caused by: javax.jcr.PathNotFoundException: noah:createdBy not found on 
/jcr:system/jcr:versionStorage/d2/88/43/d28843a2-c666-4936-b08b-e53912da4ecf/1.0/jcr:frozenNode

> Can not read node Property when move code into a Thread (Java)
> --
>
> Key: OAK-4911
> URL: https://issues.apache.org/jira/browse/OAK-4911
> Project: Jackrabbit Oak
>  Issue Type: Bug
>Affects Versions: 1.3.10
> Environment: MAC OS X
>Reporter: amin zamani
> Attachments: java-code.txt
>
>
> Hallo,
> we develop an application and everything is working as it should. We upload 
> documents and for each document a new preview file (node) should be 
> generated. It works well when we execute the code synchron. But because of 
> the fact that the generation of a preview file (like PDF format) can take 
> very long time we decided to move the preview generation code into a usual 
> java thread so that after the user is upload a document the website is 
> responding very quick and does not wait till the preview file is generated 
> but the preview file is generated parallel. 
> No the problem: As soon as I move the same code regarding to the preview file 
> generation into a usual thread (no modifications to the logic, only a thread 
> is bordered to it) suddenly the node path does not exist, this is the error:
> -
> Caused by: javax.jcr.PathNotFoundException: jcr:lastModifiedBy not found on 
> /jcr:system/jcr:versionStorage/7e/f8/5b/7ef85b25-4598-4476-82df-446eb3a08a90/1.0/jcr:frozenNode/jcr:content
>   at 
> org.apache.jackrabbit.oak.jcr.session.NodeImpl$11.perform(NodeImpl.java:631)
>   at 
> org.apache.jackrabbit.oak.jcr.session.NodeImpl$11.perform(NodeImpl.java:625)
>   at 
> org.apache.jackrabbit.oak.jcr.delegate.SessionDelegate.perform(SessionDelegate.java:207)
>   at 
> org.apache.jackrabbit.oak.jcr.session.ItemImpl.perform(ItemImpl.java:112)
>   at 
> org.apache.jackrabbit.oak.jcr.session.NodeImpl.getProperty(NodeImpl.java:625)
>   at 
> com.westernacher.noah.util.content_repository.JcrUtil.getStringProperty(JcrUtil.java:35)
> ---
> In my point of view this is a bug. This is the code that works:
> Example:
> /// 1) User Upload document through browser in our web app..
> // 2) ... document uploaded and saved in OAK CR
> // 3) Now generate the preview:
> updateDocumentPreview(documentId);
> 
> Now the same in a thread that does not work:
> => I have only moved the method "updateDocumentPreview(documentId);" in a 
> Thread (Java 8):
> //Same code as before except the last line replaced by following lines:
> Runnable run = ()-> {updateDocumentPreview(documentId);}
> new Thread(run).start(); //Start the thread to generate a document preview
> --



--
This message was sent by Atlassian JIRA
(v6.3.4#6332)


[jira] [Commented] (OAK-4911) Can not read node Property when move code into a Thread (Java)

2016-10-12 Thread amin zamani (JIRA)

[ 
https://issues.apache.org/jira/browse/OAK-4911?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel=15569513#comment-15569513
 ] 

amin zamani commented on OAK-4911:
--

and then the last method which is called inside of createDocument(..) is 
toDocument(versionNode)
=> In this method the exception is thrown:

private Document toDocument(Node documentNode) {
try {
Node file = null;
String identifier = null;

// flag to show if current node is already versioned
boolean isVersioned = true;

if( documentNode instanceof Version ){ //Versioned node
file = documentNode.getNode(Node.JCR_FROZEN_NODE);
identifier = JcrUtil.getStringProperty(file, 
Property.JCR_FROZEN_UUID);
}else{ //unversioned node
file = documentNode;
isVersioned = false;
identifier = documentNode.getIdentifier();
}

Node fileContent = file.getNode(Property.JCR_CONTENT);
String versionName = documentNode.getName();
ZonedDateTime creationDate = 
DateUtil.toZonedDateTime(file.getProperty(Property.JCR_CREATED).getDate());
ZonedDateTime lastModificationDate = 
DateUtil.toZonedDateTime(JcrUtils.getLastModified(fileContent));
String createdBy = JcrUtil.getStringProperty(file, 
CustomProperty.NOAH_CREATED_BY);
String lastModifiedBy = JcrUtil.getStringProperty(fileContent, 
Property.JCR_LAST_MODIFIED_BY);
String title = JcrUtils.getStringProperty(file, Property.JCR_TITLE, 
null);
String description = JcrUtils.getStringProperty(file, 
Property.JCR_DESCRIPTION, null);
String entityUrl = JcrUtil.getStringProperty(file, 
CustomProperty.NOAH_ENTITY_URL);
String documentTypeValue = JcrUtils.getStringProperty(file, 
CustomProperty.NOAH_DOCUMENT_TYPE_VALUE, null);
String documentTypeLabel = JcrUtils.getStringProperty(file, 
CustomProperty.NOAH_DOCUMENT_TYPE_LABEL, null);
ValueListEntry documentType = isNoneEmpty(documentTypeValue, 
documentTypeLabel) ? new ValueListEntry(documentTypeValue, documentTypeLabel) : 
null;
String contentType = JcrUtil.getStringProperty(fileContent, 
Property.JCR_MIMETYPE);
long fileSize = 
fileContent.getProperty(Property.JCR_DATA).getLength();
String previewType = JcrUtils.getStringProperty(file, 
CustomProperty.NOAH_PREVIEW_TYPE, null);

return new Document(identifier,previewType, versionName, 
creationDate, lastModificationDate, createdBy, lastModifiedBy, title, 
description, entityUrl, documentType, contentType, fileSize);
} catch (RepositoryException e) {
throw new RuntimeRepositoryException(e);
}
}

> Can not read node Property when move code into a Thread (Java)
> --
>
> Key: OAK-4911
> URL: https://issues.apache.org/jira/browse/OAK-4911
> Project: Jackrabbit Oak
>  Issue Type: Bug
>Affects Versions: 1.3.10
> Environment: MAC OS X
>Reporter: amin zamani
> Attachments: java-code.txt
>
>
> Hallo,
> we develop an application and everything is working as it should. We upload 
> documents and for each document a new preview file (node) should be 
> generated. It works well when we execute the code synchron. But because of 
> the fact that the generation of a preview file (like PDF format) can take 
> very long time we decided to move the preview generation code into a usual 
> java thread so that after the user is upload a document the website is 
> responding very quick and does not wait till the preview file is generated 
> but the preview file is generated parallel. 
> No the problem: As soon as I move the same code regarding to the preview file 
> generation into a usual thread (no modifications to the logic, only a thread 
> is bordered to it) suddenly the node path does not exist, this is the error:
> -
> Caused by: javax.jcr.PathNotFoundException: jcr:lastModifiedBy not found on 
> /jcr:system/jcr:versionStorage/7e/f8/5b/7ef85b25-4598-4476-82df-446eb3a08a90/1.0/jcr:frozenNode/jcr:content
>   at 
> org.apache.jackrabbit.oak.jcr.session.NodeImpl$11.perform(NodeImpl.java:631)
>   at 
> org.apache.jackrabbit.oak.jcr.session.NodeImpl$11.perform(NodeImpl.java:625)
>   at 
> org.apache.jackrabbit.oak.jcr.delegate.SessionDelegate.perform(SessionDelegate.java:207)
>   at 
> org.apache.jackrabbit.oak.jcr.session.ItemImpl.perform(ItemImpl.java:112)
>   at 
> org.apache.jackrabbit.oak.jcr.session.NodeImpl.getProperty(NodeImpl.java:625)
>   at 
> com.westernacher.noah.util.content_repository.JcrUtil.getStringProperty(JcrUtil.java:35)
> ---
> In my point of view this is a bug. This is the 

[jira] [Commented] (OAK-4911) Can not read node Property when move code into a Thread (Java)

2016-10-12 Thread amin zamani (JIRA)

[ 
https://issues.apache.org/jira/browse/OAK-4911?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel=15569505#comment-15569505
 ] 

amin zamani commented on OAK-4911:
--

Inside above createDocument at the end the document which was created is 
versioned, the above called "versionFile" method for versioning the document 
has this implementation:

   private Version versionFile(Node file, Binary fileContent) {
try {
VersionManager versionManager = 
file.getSession().getWorkspace().getVersionManager();

versionManager.checkout(file.getPath());

file.getNode(Property.JCR_CONTENT).setProperty(Property.JCR_LAST_MODIFIED, 
Calendar.getInstance());

file.getNode(Property.JCR_CONTENT).setProperty(Property.JCR_LAST_MODIFIED_BY, 
SecurityUtil.getCurrentUserLogin());
file.getNode(Property.JCR_CONTENT).setProperty(Property.JCR_DATA, 
fileContent);

jcrSession.save();
Version version = versionManager.checkin(file.getPath());


versionManager.getVersionHistory(file.getPath()).addVersionLabel(version.getName(),
 NOAH_LAST_VERSION_LABEL, DO_MOVE_LABEL);

return version;
} catch (RepositoryException e) {
throw new RuntimeRepositoryException(e);
}
}

> Can not read node Property when move code into a Thread (Java)
> --
>
> Key: OAK-4911
> URL: https://issues.apache.org/jira/browse/OAK-4911
> Project: Jackrabbit Oak
>  Issue Type: Bug
>Affects Versions: 1.3.10
> Environment: MAC OS X
>Reporter: amin zamani
> Attachments: java-code.txt
>
>
> Hallo,
> we develop an application and everything is working as it should. We upload 
> documents and for each document a new preview file (node) should be 
> generated. It works well when we execute the code synchron. But because of 
> the fact that the generation of a preview file (like PDF format) can take 
> very long time we decided to move the preview generation code into a usual 
> java thread so that after the user is upload a document the website is 
> responding very quick and does not wait till the preview file is generated 
> but the preview file is generated parallel. 
> No the problem: As soon as I move the same code regarding to the preview file 
> generation into a usual thread (no modifications to the logic, only a thread 
> is bordered to it) suddenly the node path does not exist, this is the error:
> -
> Caused by: javax.jcr.PathNotFoundException: jcr:lastModifiedBy not found on 
> /jcr:system/jcr:versionStorage/7e/f8/5b/7ef85b25-4598-4476-82df-446eb3a08a90/1.0/jcr:frozenNode/jcr:content
>   at 
> org.apache.jackrabbit.oak.jcr.session.NodeImpl$11.perform(NodeImpl.java:631)
>   at 
> org.apache.jackrabbit.oak.jcr.session.NodeImpl$11.perform(NodeImpl.java:625)
>   at 
> org.apache.jackrabbit.oak.jcr.delegate.SessionDelegate.perform(SessionDelegate.java:207)
>   at 
> org.apache.jackrabbit.oak.jcr.session.ItemImpl.perform(ItemImpl.java:112)
>   at 
> org.apache.jackrabbit.oak.jcr.session.NodeImpl.getProperty(NodeImpl.java:625)
>   at 
> com.westernacher.noah.util.content_repository.JcrUtil.getStringProperty(JcrUtil.java:35)
> ---
> In my point of view this is a bug. This is the code that works:
> Example:
> /// 1) User Upload document through browser in our web app..
> // 2) ... document uploaded and saved in OAK CR
> // 3) Now generate the preview:
> updateDocumentPreview(documentId);
> 
> Now the same in a thread that does not work:
> => I have only moved the method "updateDocumentPreview(documentId);" in a 
> Thread (Java 8):
> //Same code as before except the last line replaced by following lines:
> Runnable run = ()-> {updateDocumentPreview(documentId);}
> new Thread(run).start(); //Start the thread to generate a document preview
> --



--
This message was sent by Atlassian JIRA
(v6.3.4#6332)


[jira] [Commented] (OAK-4911) Can not read node Property when move code into a Thread (Java)

2016-10-12 Thread amin zamani (JIRA)

[ 
https://issues.apache.org/jira/browse/OAK-4911?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel=15569500#comment-15569500
 ] 

amin zamani commented on OAK-4911:
--

I have now modified the structure of the code:

Now in a thread a new file node is created but when I try to access the 
property I still get the same error. I access in the same java thread where I 
have created the file the properties of the node that I just have created 
before. Here a little exampe:

new thread created with following content, it calls only the 
createDocument(...) method and then I get the exception - without a thread i 
don't have the exception:



public Document createDocument(String folderId, CreateDocumentDto createDto) {
try {
Node node = jcrSession.getNodeByIdentifier(folderId);

Binary binary = 
jcrSession.getValueFactory().createBinary(createDto.getContent());
try {
Node file = JcrUtils.getOrCreateByPath(
node,
"",
DO_CREATE_UNIQUE_LEAF,
NodeType.NT_FOLDER,
NodeType.NT_FILE,
DO_AUTO_SAVE);

file.addMixin(NodeType.MIX_VERSIONABLE);

file.addMixin(NodeType.MIX_TITLE);
file.setProperty(Property.JCR_TITLE, createDto.getTitle());
file.setProperty(Property.JCR_DESCRIPTION, 
createDto.getDescription());

file.addMixin(CustomNodeType.NOAH_ENTITY_DOCUMENT);
if (createDto.getDocumentType() != null) {
file.setProperty(CustomProperty.NOAH_DOCUMENT_TYPE_VALUE, 
createDto.getDocumentType().getValue());
file.setProperty(CustomProperty.NOAH_DOCUMENT_TYPE_LABEL, 
createDto.getDocumentType().getLabel());
}
file.setProperty(CustomProperty.NOAH_ENTITY_URL, 
createDto.getEntityUrl());

file.addMixin(CustomNodeType.NOAH_AUDITABLE);
file.setProperty(CustomProperty.NOAH_CREATED_BY, 
SecurityUtil.getCurrentUserLogin());

Node content = JcrUtils.getOrAddNode(file, Node.JCR_CONTENT, 
NodeType.NT_RESOURCE);
content.setProperty(Property.JCR_DATA, binary);
content.setProperty(Property.JCR_MIMETYPE, 
createDto.getContentType());

String previewFileType="";
if(createDto.getPreviewType() != null){
// Ok, we are creating a preview document, so add the 
preview type
file.addMixin(CustomNodeType.NOAH_PREVIEW_DOCUMENT);
System.out.println("Create preview document, set preview 
type:"+createDto.getPreviewType().name());
file.setProperty(CustomProperty.NOAH_PREVIEW_TYPE, 
createDto.getPreviewType().name());
previewFileType = createDto.getPreviewType().name();
}

jcrSession.refresh(true);
jcrSession.save();

jcrSession.refresh(true);
System.out.println("Created "+previewFileType+" document,id: 
"+file.getIdentifier()+" ("+createDto.getTitle()+"),path: "+file.getPath());
LOG.debug("Created "+previewFileType+" document,id: 
"+file.getIdentifier()+" ("+createDto.getTitle()+"),path: "+file.getPath());

Version versionNode = versionFile(file, binary);
jcrSession.refresh(true);
return toDocument(versionNode);

} finally {
binary.dispose();
}
} catch (RepositoryException e) {
throw new RuntimeRepositoryException(e);
}
}
 



> Can not read node Property when move code into a Thread (Java)
> --
>
> Key: OAK-4911
> URL: https://issues.apache.org/jira/browse/OAK-4911
> Project: Jackrabbit Oak
>  Issue Type: Bug
>Affects Versions: 1.3.10
> Environment: MAC OS X
>Reporter: amin zamani
> Attachments: java-code.txt
>
>
> Hallo,
> we develop an application and everything is working as it should. We upload 
> documents and for each document a new preview file (node) should be 
> generated. It works well when we execute the code synchron. But because of 
> the fact that the generation of a preview file (like PDF format) can take 
> very long time we decided to move the preview generation code into a usual 
> java thread so that after the user is upload a document the website is 
> responding very quick and does not wait till the preview file is generated 
> but the preview file is generated parallel. 
> No the problem: As soon as I move the same code regarding to the preview file 
> generation into a usual thread (no modifications to the 

[jira] [Commented] (OAK-4911) Can not read node Property when move code into a Thread (Java)

2016-10-12 Thread amin zamani (JIRA)

[ 
https://issues.apache.org/jira/browse/OAK-4911?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel=15569437#comment-15569437
 ] 

amin zamani commented on OAK-4911:
--

I have added in each thread before it access the node this statement:

jcrSession.refresh(true);

But same error still exists -;(

> Can not read node Property when move code into a Thread (Java)
> --
>
> Key: OAK-4911
> URL: https://issues.apache.org/jira/browse/OAK-4911
> Project: Jackrabbit Oak
>  Issue Type: Bug
>Affects Versions: 1.3.10
> Environment: MAC OS X
>Reporter: amin zamani
> Attachments: java-code.txt
>
>
> Hallo,
> we develop an application and everything is working as it should. We upload 
> documents and for each document a new preview file (node) should be 
> generated. It works well when we execute the code synchron. But because of 
> the fact that the generation of a preview file (like PDF format) can take 
> very long time we decided to move the preview generation code into a usual 
> java thread so that after the user is upload a document the website is 
> responding very quick and does not wait till the preview file is generated 
> but the preview file is generated parallel. 
> No the problem: As soon as I move the same code regarding to the preview file 
> generation into a usual thread (no modifications to the logic, only a thread 
> is bordered to it) suddenly the node path does not exist, this is the error:
> -
> Caused by: javax.jcr.PathNotFoundException: jcr:lastModifiedBy not found on 
> /jcr:system/jcr:versionStorage/7e/f8/5b/7ef85b25-4598-4476-82df-446eb3a08a90/1.0/jcr:frozenNode/jcr:content
>   at 
> org.apache.jackrabbit.oak.jcr.session.NodeImpl$11.perform(NodeImpl.java:631)
>   at 
> org.apache.jackrabbit.oak.jcr.session.NodeImpl$11.perform(NodeImpl.java:625)
>   at 
> org.apache.jackrabbit.oak.jcr.delegate.SessionDelegate.perform(SessionDelegate.java:207)
>   at 
> org.apache.jackrabbit.oak.jcr.session.ItemImpl.perform(ItemImpl.java:112)
>   at 
> org.apache.jackrabbit.oak.jcr.session.NodeImpl.getProperty(NodeImpl.java:625)
>   at 
> com.westernacher.noah.util.content_repository.JcrUtil.getStringProperty(JcrUtil.java:35)
> ---
> In my point of view this is a bug. This is the code that works:
> Example:
> /// 1) User Upload document through browser in our web app..
> // 2) ... document uploaded and saved in OAK CR
> // 3) Now generate the preview:
> updateDocumentPreview(documentId);
> 
> Now the same in a thread that does not work:
> => I have only moved the method "updateDocumentPreview(documentId);" in a 
> Thread (Java 8):
> //Same code as before except the last line replaced by following lines:
> Runnable run = ()-> {updateDocumentPreview(documentId);}
> new Thread(run).start(); //Start the thread to generate a document preview
> --



--
This message was sent by Atlassian JIRA
(v6.3.4#6332)


[jira] [Created] (OAK-4931) LdapIdentityProvider doesn't use configured custom attributes for all searches

2016-10-12 Thread Manfred Baedke (JIRA)
Manfred Baedke created OAK-4931:
---

 Summary: LdapIdentityProvider doesn't use configured custom 
attributes for all searches
 Key: OAK-4931
 URL: https://issues.apache.org/jira/browse/OAK-4931
 Project: Jackrabbit Oak
  Issue Type: Bug
  Components: auth-ldap
Affects Versions: 1.5.12, 1.4.8
Reporter: Manfred Baedke
Assignee: Manfred Baedke


The list of custom attibutes retrieved when looking up LDAP entries is not used 
for every search. Most notably LdapIdentityProvider.getIdentity() still 
retrieves all user attributes.



--
This message was sent by Atlassian JIRA
(v6.3.4#6332)


[jira] [Created] (OAK-4930) External Principal Management: DynamicSyncContext makes redundant calls to IdentityProvider.getIdentity()

2016-10-12 Thread Manfred Baedke (JIRA)
Manfred Baedke created OAK-4930:
---

 Summary: External Principal Management:  DynamicSyncContext makes 
redundant calls to IdentityProvider.getIdentity()
 Key: OAK-4930
 URL: https://issues.apache.org/jira/browse/OAK-4930
 Project: Jackrabbit Oak
  Issue Type: Improvement
  Components: auth-external
Affects Versions: 1.5.12, 1.2.20, 1.4.8
Reporter: Manfred Baedke
Assignee: Manfred Baedke


When recursively collecting principal names associated with the declared group 
memberships of a given principal, the method 
DynamicSyncContext.collectPrincipalNames() unnecessarily calls 
IdentityProvider.getIdentity() for every declared group reference, though it is 
only necessary when the actual depth of the remaining recursion is >1.



--
This message was sent by Atlassian JIRA
(v6.3.4#6332)


[jira] [Resolved] (OAK-4883) Missing BlobGarbageCollection MBean on standby instance

2016-10-12 Thread Francesco Mari (JIRA)

 [ 
https://issues.apache.org/jira/browse/OAK-4883?page=com.atlassian.jira.plugin.system.issuetabpanels:all-tabpanel
 ]

Francesco Mari resolved OAK-4883.
-
Resolution: Fixed
  Assignee: Francesco Mari  (was: Timothee Maret)

Fixed at r1764475.

> Missing BlobGarbageCollection MBean on standby instance
> ---
>
> Key: OAK-4883
> URL: https://issues.apache.org/jira/browse/OAK-4883
> Project: Jackrabbit Oak
>  Issue Type: Bug
>  Components: segment-tar, segmentmk
>Reporter: Alex Parvulescu
>Assignee: Francesco Mari
>  Labels: gc
> Attachments: OAK-4883.patch, OAK-4883.patch
>
>
> The {{BlobGarbageCollection}} MBean is no longer available on a standby 
> instance, this affects non-shared datastore setups (on a shared datastore 
> you'd only need to run blob gc on the primary).
> This change was introduced by OAK-4089 (and backported to 1.4 branch with 
> OAK-4093).



--
This message was sent by Atlassian JIRA
(v6.3.4#6332)


[jira] [Comment Edited] (OAK-4929) Clean GCMonitor#compacted method arguments

2016-10-12 Thread Alex Parvulescu (JIRA)

[ 
https://issues.apache.org/jira/browse/OAK-4929?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel=15568906#comment-15568906
 ] 

Alex Parvulescu edited comment on OAK-4929 at 10/12/16 2:42 PM:


see here for the complete change diff [0]. while not a complicated change in 
itself, it has a cyclic dependency problem where to be able to push this change 
you'd have to do a sync release of both oak and segment-tar. or at least I 
can't see how to properly split this one. fyi [~mduerig], [~frm].

[edit] please mind the {{SegmentNodeStoreService.java}} change that are 
unrelated, and are coming in via a different patch not yet applied.

[0] 
https://github.com/stillalex/jackrabbit-oak/commit/5e44b487ad59840896d0ae7aef23f4c476f6d372


was (Author: alex.parvulescu):
see here for the complete change diff [0]. while not a complicated change in 
itself, it has a cyclic dependency problem where to be able to push this change 
you'd have to do a sync release of both oak and segment-tar. or at least I 
can't see how to properly split this one. fyi [~mduerig], [~frm].

[0] 
https://github.com/stillalex/jackrabbit-oak/commit/5e44b487ad59840896d0ae7aef23f4c476f6d372

> Clean GCMonitor#compacted method arguments
> --
>
> Key: OAK-4929
> URL: https://issues.apache.org/jira/browse/OAK-4929
> Project: Jackrabbit Oak
>  Issue Type: Technical task
>  Components: core, lucene
>Reporter: Alex Parvulescu
>Assignee: Alex Parvulescu
> Fix For: 1.5.13
>
>
> Subtask of OAK-4283, first step is to remove all arguments from the 
> {{GCMonitor#compacted}} api.



--
This message was sent by Atlassian JIRA
(v6.3.4#6332)


[jira] [Commented] (OAK-4929) Clean GCMonitor#compacted method arguments

2016-10-12 Thread Alex Parvulescu (JIRA)

[ 
https://issues.apache.org/jira/browse/OAK-4929?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel=15568906#comment-15568906
 ] 

Alex Parvulescu commented on OAK-4929:
--

see here for the complete change diff [0]. while not a complicated change in 
itself, it has a cyclic dependency problem where to be able to push this change 
you'd have to do a sync release of both oak and segment-tar. or at least I 
can't see how to properly split this one. fyi [~mduerig], [~frm].

[0] 
https://github.com/stillalex/jackrabbit-oak/commit/5e44b487ad59840896d0ae7aef23f4c476f6d372

> Clean GCMonitor#compacted method arguments
> --
>
> Key: OAK-4929
> URL: https://issues.apache.org/jira/browse/OAK-4929
> Project: Jackrabbit Oak
>  Issue Type: Technical task
>  Components: core, lucene
>Reporter: Alex Parvulescu
>Assignee: Alex Parvulescu
> Fix For: 1.5.13
>
>
> Subtask of OAK-4283, first step is to remove all arguments from the 
> {{GCMonitor#compacted}} api.



--
This message was sent by Atlassian JIRA
(v6.3.4#6332)


[jira] [Commented] (OAK-4348) Cross language search via SMT

2016-10-12 Thread Tommaso Teofili (JIRA)

[ 
https://issues.apache.org/jira/browse/OAK-4348?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel=15568800#comment-15568800
 ] 

Tommaso Teofili commented on OAK-4348:
--

+1 Vikas, it's still work in progress and I definitely agree checking 
{{IndexDefinition}} would save us some unnecessary calls.
Other than that the cost is usually quite cheap (did a test today with a 
Spanish to English language pack) and I couldn't notice the difference while 
performing queries (so I expect it to be in the order of a few milliseconds).

> Cross language search via SMT
> -
>
> Key: OAK-4348
> URL: https://issues.apache.org/jira/browse/OAK-4348
> Project: Jackrabbit Oak
>  Issue Type: New Feature
>  Components: query
>Reporter: Tommaso Teofili
>Assignee: Tommaso Teofili
> Fix For: 1.6
>
>
> It would be interesting to investigate usage of statistical machine 
> translation toolkits (like Apache Joshua) in order to enable cross language 
> search, so that query can be eventually expanded to search over translated 
> terms too.
> Example: 
> - enable spanish to english translation
> - perform full text search for "hola" 
> - query engine looks for translations for "hola"
> - SMT returns "hello"
> - query engine add an additional (UNION) clause for the translated term
> - the query performed by Oak becomes "hello OR hola"
> - both results for english and spanish terms get returned
> This of course should be configurable.
> Note that the integration may happen also via Apache Tika which provides a 
> Translator API.



--
This message was sent by Atlassian JIRA
(v6.3.4#6332)


[jira] [Commented] (OAK-4348) Cross language search via SMT

2016-10-12 Thread Vikas Saurabh (JIRA)

[ 
https://issues.apache.org/jira/browse/OAK-4348?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel=15568742#comment-15568742
 ] 

Vikas Saurabh commented on OAK-4348:


[~teofili], I completely missed checking this out. I think we should check how 
costly is it to consult Joshua. Moreover, even if it's cheap, I think the query 
terms should be enhanced if some property on index def declares to do so - that 
way, we can quit early for un-interesting index defs. wdyt?

> Cross language search via SMT
> -
>
> Key: OAK-4348
> URL: https://issues.apache.org/jira/browse/OAK-4348
> Project: Jackrabbit Oak
>  Issue Type: New Feature
>  Components: query
>Reporter: Tommaso Teofili
>Assignee: Tommaso Teofili
> Fix For: 1.6
>
>
> It would be interesting to investigate usage of statistical machine 
> translation toolkits (like Apache Joshua) in order to enable cross language 
> search, so that query can be eventually expanded to search over translated 
> terms too.
> Example: 
> - enable spanish to english translation
> - perform full text search for "hola" 
> - query engine looks for translations for "hola"
> - SMT returns "hello"
> - query engine add an additional (UNION) clause for the translated term
> - the query performed by Oak becomes "hello OR hola"
> - both results for english and spanish terms get returned
> This of course should be configurable.
> Note that the integration may happen also via Apache Tika which provides a 
> Translator API.



--
This message was sent by Atlassian JIRA
(v6.3.4#6332)


[jira] [Updated] (OAK-4883) Missing BlobGarbageCollection MBean on standby instance

2016-10-12 Thread Timothee Maret (JIRA)

 [ 
https://issues.apache.org/jira/browse/OAK-4883?page=com.atlassian.jira.plugin.system.issuetabpanels:all-tabpanel
 ]

Timothee Maret updated OAK-4883:

Attachment: OAK-4883.patch

Attaching updated patch 

cc [~frm]

> Missing BlobGarbageCollection MBean on standby instance
> ---
>
> Key: OAK-4883
> URL: https://issues.apache.org/jira/browse/OAK-4883
> Project: Jackrabbit Oak
>  Issue Type: Bug
>  Components: segment-tar, segmentmk
>Reporter: Alex Parvulescu
>Assignee: Timothee Maret
>  Labels: gc
> Attachments: OAK-4883.patch, OAK-4883.patch
>
>
> The {{BlobGarbageCollection}} MBean is no longer available on a standby 
> instance, this affects non-shared datastore setups (on a shared datastore 
> you'd only need to run blob gc on the primary).
> This change was introduced by OAK-4089 (and backported to 1.4 branch with 
> OAK-4093).



--
This message was sent by Atlassian JIRA
(v6.3.4#6332)


[jira] [Created] (OAK-4929) Clean GCMonitor#compacted method arguments

2016-10-12 Thread Alex Parvulescu (JIRA)
Alex Parvulescu created OAK-4929:


 Summary: Clean GCMonitor#compacted method arguments
 Key: OAK-4929
 URL: https://issues.apache.org/jira/browse/OAK-4929
 Project: Jackrabbit Oak
  Issue Type: Technical task
  Components: core, lucene
Reporter: Alex Parvulescu
Assignee: Alex Parvulescu


Subtask of OAK-4283, first step is to remove all arguments from the 
{{GCMonitor#compacted}} api.



--
This message was sent by Atlassian JIRA
(v6.3.4#6332)


[jira] [Updated] (OAK-4929) Clean GCMonitor#compacted method arguments

2016-10-12 Thread Alex Parvulescu (JIRA)

 [ 
https://issues.apache.org/jira/browse/OAK-4929?page=com.atlassian.jira.plugin.system.issuetabpanels:all-tabpanel
 ]

Alex Parvulescu updated OAK-4929:
-
Fix Version/s: (was: Segment Tar 0.0.16)
   1.5.13

> Clean GCMonitor#compacted method arguments
> --
>
> Key: OAK-4929
> URL: https://issues.apache.org/jira/browse/OAK-4929
> Project: Jackrabbit Oak
>  Issue Type: Technical task
>  Components: core, lucene
>Reporter: Alex Parvulescu
>Assignee: Alex Parvulescu
> Fix For: 1.5.13
>
>
> Subtask of OAK-4283, first step is to remove all arguments from the 
> {{GCMonitor#compacted}} api.



--
This message was sent by Atlassian JIRA
(v6.3.4#6332)


[jira] [Assigned] (OAK-4283) Align GCMonitor API with implementation

2016-10-12 Thread Alex Parvulescu (JIRA)

 [ 
https://issues.apache.org/jira/browse/OAK-4283?page=com.atlassian.jira.plugin.system.issuetabpanels:all-tabpanel
 ]

Alex Parvulescu reassigned OAK-4283:


Assignee: Alex Parvulescu  (was: Andrei Dulceanu)

> Align GCMonitor API with implementation 
> 
>
> Key: OAK-4283
> URL: https://issues.apache.org/jira/browse/OAK-4283
> Project: Jackrabbit Oak
>  Issue Type: Task
>  Components: segment-tar
>Reporter: Michael Dürig
>Assignee: Alex Parvulescu
>  Labels: api-change, compaction, gc
> Fix For: Segment Tar 0.0.16
>
>
> The argument taken by {{GCMonitor.compacted}} related to parameters of the 
> compaction map. The latter has gone with OAK-3348. We need to come up with a 
> way to adjust this API accordingly. Also it might make sense to broaden the 
> scope of {{GCMonitor}} from its initial intent (logging) to a more general 
> one as this is how it is already used e.g. by the {{RefreshOnGC}} 
> implementation and for OAK-4096. 



--
This message was sent by Atlassian JIRA
(v6.3.4#6332)


[jira] [Comment Edited] (OAK-4450) Properly split the FileStore into read-only and r/w variants

2016-10-12 Thread Alex Parvulescu (JIRA)

[ 
https://issues.apache.org/jira/browse/OAK-4450?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel=15568518#comment-15568518
 ] 

Alex Parvulescu edited comment on OAK-4450 at 10/12/16 12:51 PM:
-

attaching changes needed in oak-run once this is applied and the dependency is 
updated (includes change in pom.xml file needed just to testing this stuff out).


was (Author: alex.parvulescu):
attaching changes needed in oak-run once this is applied and the dependency is 
updated (includes change in pom.xml file needed just to testing this stuff out).
[edit] removed the attachment, I had forgotten to update some code.

> Properly split the FileStore into read-only and r/w variants 
> -
>
> Key: OAK-4450
> URL: https://issues.apache.org/jira/browse/OAK-4450
> Project: Jackrabbit Oak
>  Issue Type: Technical task
>  Components: segment-tar
>Reporter: Michael Dürig
>Assignee: Michael Dürig
>  Labels: technical_debt
> Fix For: Segment Tar 0.0.18
>
> Attachments: OAK-4450-oak-run.patch
>
>
> The {{ReadOnlyFileStore}} class currently simply overrides the {{FileStore}} 
> class replacing all mutator methods with a trivial implementation. This 
> approach however leaks into its ancestor as the read only store needs to pass 
> a flag to the constructor of its super class so some fields can be 
> instantiated properly for the read only case. 
> We should clean this up to properly separate the read only and the r/w store. 
> Most likely we should factor the commonalities into a common, abstract base 
> class.



--
This message was sent by Atlassian JIRA
(v6.3.4#6332)


[jira] [Updated] (OAK-4450) Properly split the FileStore into read-only and r/w variants

2016-10-12 Thread Alex Parvulescu (JIRA)

 [ 
https://issues.apache.org/jira/browse/OAK-4450?page=com.atlassian.jira.plugin.system.issuetabpanels:all-tabpanel
 ]

Alex Parvulescu updated OAK-4450:
-
Attachment: OAK-4450-oak-run.patch

> Properly split the FileStore into read-only and r/w variants 
> -
>
> Key: OAK-4450
> URL: https://issues.apache.org/jira/browse/OAK-4450
> Project: Jackrabbit Oak
>  Issue Type: Technical task
>  Components: segment-tar
>Reporter: Michael Dürig
>Assignee: Michael Dürig
>  Labels: technical_debt
> Fix For: Segment Tar 0.0.18
>
> Attachments: OAK-4450-oak-run.patch
>
>
> The {{ReadOnlyFileStore}} class currently simply overrides the {{FileStore}} 
> class replacing all mutator methods with a trivial implementation. This 
> approach however leaks into its ancestor as the read only store needs to pass 
> a flag to the constructor of its super class so some fields can be 
> instantiated properly for the read only case. 
> We should clean this up to properly separate the read only and the r/w store. 
> Most likely we should factor the commonalities into a common, abstract base 
> class.



--
This message was sent by Atlassian JIRA
(v6.3.4#6332)


[jira] [Comment Edited] (OAK-4450) Properly split the FileStore into read-only and r/w variants

2016-10-12 Thread Alex Parvulescu (JIRA)

[ 
https://issues.apache.org/jira/browse/OAK-4450?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel=15565351#comment-15565351
 ] 

Alex Parvulescu edited comment on OAK-4450 at 10/12/16 12:47 PM:
-

WIP at [0] and [1] [~mduerig], [~frm] feedback appreciated!

[0] 
https://github.com/stillalex/jackrabbit-oak/commit/148296b1ac6f4a96ae24cff60c3116d774052664
[1] 
https://github.com/stillalex/jackrabbit-oak/commit/01fbc8311e467996be5c5116dd445d356af6db9b


was (Author: alex.parvulescu):
WIP at 
https://github.com/stillalex/jackrabbit-oak/commit/148296b1ac6f4a96ae24cff60c3116d774052664
[~mduerig], [~frm] feedback appreciated!

> Properly split the FileStore into read-only and r/w variants 
> -
>
> Key: OAK-4450
> URL: https://issues.apache.org/jira/browse/OAK-4450
> Project: Jackrabbit Oak
>  Issue Type: Technical task
>  Components: segment-tar
>Reporter: Michael Dürig
>Assignee: Michael Dürig
>  Labels: technical_debt
> Fix For: Segment Tar 0.0.18
>
>
> The {{ReadOnlyFileStore}} class currently simply overrides the {{FileStore}} 
> class replacing all mutator methods with a trivial implementation. This 
> approach however leaks into its ancestor as the read only store needs to pass 
> a flag to the constructor of its super class so some fields can be 
> instantiated properly for the read only case. 
> We should clean this up to properly separate the read only and the r/w store. 
> Most likely we should factor the commonalities into a common, abstract base 
> class.



--
This message was sent by Atlassian JIRA
(v6.3.4#6332)


[jira] [Comment Edited] (OAK-4450) Properly split the FileStore into read-only and r/w variants

2016-10-12 Thread Alex Parvulescu (JIRA)

[ 
https://issues.apache.org/jira/browse/OAK-4450?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel=15568518#comment-15568518
 ] 

Alex Parvulescu edited comment on OAK-4450 at 10/12/16 12:13 PM:
-

attaching changes needed in oak-run once this is applied and the dependency is 
updated (includes change in pom.xml file needed just to testing this stuff out).
[edit] removed the attachment, I had forgotten to update some code.


was (Author: alex.parvulescu):
attaching changes needed in oak-run once this is applied and the dependency is 
updated (includes change in pom.xml file needed just to testing this stuff out).

> Properly split the FileStore into read-only and r/w variants 
> -
>
> Key: OAK-4450
> URL: https://issues.apache.org/jira/browse/OAK-4450
> Project: Jackrabbit Oak
>  Issue Type: Technical task
>  Components: segment-tar
>Reporter: Michael Dürig
>Assignee: Michael Dürig
>  Labels: technical_debt
> Fix For: Segment Tar 0.0.18
>
>
> The {{ReadOnlyFileStore}} class currently simply overrides the {{FileStore}} 
> class replacing all mutator methods with a trivial implementation. This 
> approach however leaks into its ancestor as the read only store needs to pass 
> a flag to the constructor of its super class so some fields can be 
> instantiated properly for the read only case. 
> We should clean this up to properly separate the read only and the r/w store. 
> Most likely we should factor the commonalities into a common, abstract base 
> class.



--
This message was sent by Atlassian JIRA
(v6.3.4#6332)


[jira] [Updated] (OAK-4450) Properly split the FileStore into read-only and r/w variants

2016-10-12 Thread Alex Parvulescu (JIRA)

 [ 
https://issues.apache.org/jira/browse/OAK-4450?page=com.atlassian.jira.plugin.system.issuetabpanels:all-tabpanel
 ]

Alex Parvulescu updated OAK-4450:
-
Attachment: (was: OAK-4450-oak-run.patch)

> Properly split the FileStore into read-only and r/w variants 
> -
>
> Key: OAK-4450
> URL: https://issues.apache.org/jira/browse/OAK-4450
> Project: Jackrabbit Oak
>  Issue Type: Technical task
>  Components: segment-tar
>Reporter: Michael Dürig
>Assignee: Michael Dürig
>  Labels: technical_debt
> Fix For: Segment Tar 0.0.18
>
>
> The {{ReadOnlyFileStore}} class currently simply overrides the {{FileStore}} 
> class replacing all mutator methods with a trivial implementation. This 
> approach however leaks into its ancestor as the read only store needs to pass 
> a flag to the constructor of its super class so some fields can be 
> instantiated properly for the read only case. 
> We should clean this up to properly separate the read only and the r/w store. 
> Most likely we should factor the commonalities into a common, abstract base 
> class.



--
This message was sent by Atlassian JIRA
(v6.3.4#6332)


[jira] [Commented] (OAK-4883) Missing BlobGarbageCollection MBean on standby instance

2016-10-12 Thread Timothee Maret (JIRA)

[ 
https://issues.apache.org/jira/browse/OAK-4883?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel=15568540#comment-15568540
 ] 

Timothee Maret commented on OAK-4883:
-

Good catch, you are correct. I'll update the patch against the latest trunk, 
thanks!

> Missing BlobGarbageCollection MBean on standby instance
> ---
>
> Key: OAK-4883
> URL: https://issues.apache.org/jira/browse/OAK-4883
> Project: Jackrabbit Oak
>  Issue Type: Bug
>  Components: segment-tar, segmentmk
>Reporter: Alex Parvulescu
>Assignee: Timothee Maret
>  Labels: gc
> Attachments: OAK-4883.patch
>
>
> The {{BlobGarbageCollection}} MBean is no longer available on a standby 
> instance, this affects non-shared datastore setups (on a shared datastore 
> you'd only need to run blob gc on the primary).
> This change was introduced by OAK-4089 (and backported to 1.4 branch with 
> OAK-4093).



--
This message was sent by Atlassian JIRA
(v6.3.4#6332)


[jira] [Comment Edited] (OAK-4883) Missing BlobGarbageCollection MBean on standby instance

2016-10-12 Thread Francesco Mari (JIRA)

[ 
https://issues.apache.org/jira/browse/OAK-4883?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel=15568522#comment-15568522
 ] 

Francesco Mari edited comment on OAK-4883 at 10/12/16 11:59 AM:


I was bad at line counting. The incriminating line is [this 
one|https://github.com/tmaret/jackrabbit-oak/blob/OAK-4883/oak-segment-tar/src/main/java/org/apache/jackrabbit/oak/segment/SegmentNodeStoreService.java#L340].
 The 'false' literal passed to toBoolean() is not used for comparison, but as a 
default value in case the value for the 'standby' property is not provided or 
invalid. As such, that method will effectively register a NodeStore only if the 
'standby' property is true: that condition should be reversed. The rest of the 
patch is correct, since it always register a BlobGCMBean independently from the 
value of the 'standby' property, disabling observation in the SegmentNodeStore 
if 'standby' is true.


was (Author: frm):
I was bad at line counting. The incriminating line is [this 
one|https://github.com/tmaret/jackrabbit-oak/blob/OAK-4883/oak-segment-tar/src/main/java/org/apache/jackrabbit/oak/segment/SegmentNodeStoreService.java#L340].
 The 'false' literal passed to toBoolean() is not used for comparison, but as a 
default value in case the value for the 'standby' property is not provided or 
invalid. As such, that line will effectively register a NodeStore only if the 
'standby' property is true: that condition should be reverted. The rest of the 
patch is correct, since it always register a BlobGCMBean independently from the 
value of the 'standby' property, disabling observation in the SegmentNodeStore 
if 'standby' is true.

> Missing BlobGarbageCollection MBean on standby instance
> ---
>
> Key: OAK-4883
> URL: https://issues.apache.org/jira/browse/OAK-4883
> Project: Jackrabbit Oak
>  Issue Type: Bug
>  Components: segment-tar, segmentmk
>Reporter: Alex Parvulescu
>Assignee: Timothee Maret
>  Labels: gc
> Attachments: OAK-4883.patch
>
>
> The {{BlobGarbageCollection}} MBean is no longer available on a standby 
> instance, this affects non-shared datastore setups (on a shared datastore 
> you'd only need to run blob gc on the primary).
> This change was introduced by OAK-4089 (and backported to 1.4 branch with 
> OAK-4093).



--
This message was sent by Atlassian JIRA
(v6.3.4#6332)


[jira] [Commented] (OAK-4883) Missing BlobGarbageCollection MBean on standby instance

2016-10-12 Thread Francesco Mari (JIRA)

[ 
https://issues.apache.org/jira/browse/OAK-4883?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel=15568522#comment-15568522
 ] 

Francesco Mari commented on OAK-4883:
-

I was bad at line counting. The incriminating line is [this 
one|https://github.com/tmaret/jackrabbit-oak/blob/OAK-4883/oak-segment-tar/src/main/java/org/apache/jackrabbit/oak/segment/SegmentNodeStoreService.java#L340].
 The 'false' literal passed to toBoolean() is not used for comparison, but as a 
default value in case the value for the 'standby' property is not provided or 
invalid. As such, that line will effectively register a NodeStore only if the 
'standby' property is true: that condition should be reverted. The rest of the 
patch is correct, since it always register a BlobGCMBean independently from the 
value of the 'standby' property, disabling observation in the SegmentNodeStore 
if 'standby' is true.

> Missing BlobGarbageCollection MBean on standby instance
> ---
>
> Key: OAK-4883
> URL: https://issues.apache.org/jira/browse/OAK-4883
> Project: Jackrabbit Oak
>  Issue Type: Bug
>  Components: segment-tar, segmentmk
>Reporter: Alex Parvulescu
>Assignee: Timothee Maret
>  Labels: gc
> Attachments: OAK-4883.patch
>
>
> The {{BlobGarbageCollection}} MBean is no longer available on a standby 
> instance, this affects non-shared datastore setups (on a shared datastore 
> you'd only need to run blob gc on the primary).
> This change was introduced by OAK-4089 (and backported to 1.4 branch with 
> OAK-4093).



--
This message was sent by Atlassian JIRA
(v6.3.4#6332)


[jira] [Updated] (OAK-4450) Properly split the FileStore into read-only and r/w variants

2016-10-12 Thread Alex Parvulescu (JIRA)

 [ 
https://issues.apache.org/jira/browse/OAK-4450?page=com.atlassian.jira.plugin.system.issuetabpanels:all-tabpanel
 ]

Alex Parvulescu updated OAK-4450:
-
Attachment: OAK-4450-oak-run.patch

attaching changes needed in oak-run once this is applied and the dependency is 
updated (includes change in pom.xml file needed just to testing this stuff out).

> Properly split the FileStore into read-only and r/w variants 
> -
>
> Key: OAK-4450
> URL: https://issues.apache.org/jira/browse/OAK-4450
> Project: Jackrabbit Oak
>  Issue Type: Technical task
>  Components: segment-tar
>Reporter: Michael Dürig
>Assignee: Michael Dürig
>  Labels: technical_debt
> Fix For: Segment Tar 0.0.18
>
> Attachments: OAK-4450-oak-run.patch
>
>
> The {{ReadOnlyFileStore}} class currently simply overrides the {{FileStore}} 
> class replacing all mutator methods with a trivial implementation. This 
> approach however leaks into its ancestor as the read only store needs to pass 
> a flag to the constructor of its super class so some fields can be 
> instantiated properly for the read only case. 
> We should clean this up to properly separate the read only and the r/w store. 
> Most likely we should factor the commonalities into a common, abstract base 
> class.



--
This message was sent by Atlassian JIRA
(v6.3.4#6332)


[jira] [Commented] (OAK-1312) Bundle nodes into a document

2016-10-12 Thread Chetan Mehrotra (JIRA)

[ 
https://issues.apache.org/jira/browse/OAK-1312?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel=15568502#comment-15568502
 ] 

Chetan Mehrotra commented on OAK-1312:
--

Opened OAK-4928 to track this

> Bundle nodes into a document
> 
>
> Key: OAK-1312
> URL: https://issues.apache.org/jira/browse/OAK-1312
> Project: Jackrabbit Oak
>  Issue Type: Improvement
>  Components: core, documentmk
>Reporter: Marcel Reutegger
>Assignee: Chetan Mehrotra
>  Labels: performance
> Fix For: 1.6
>
> Attachments: OAK-1312-meta-prop-handling.patch, 
> OAK-1312-review-v1.diff, OAK-1312-review-v2.diff
>
>
> For very fine grained content with many nodes and only few properties per 
> node it would be more efficient to bundle multiple nodes into a single 
> MongoDB document. Mostly reading would benefit because there are less 
> roundtrips to the backend. At the same time storage footprint would be lower 
> because metadata overhead is per document.
> Feature branch - 
> https://github.com/chetanmeh/jackrabbit-oak/compare/trunk...chetanmeh:OAK-1312



--
This message was sent by Atlassian JIRA
(v6.3.4#6332)


[jira] [Resolved] (OAK-4926) o.a.j.o.s.s.c.StandbyClientSyncExecution#isLocal should expect missing segment

2016-10-12 Thread Francesco Mari (JIRA)

 [ 
https://issues.apache.org/jira/browse/OAK-4926?page=com.atlassian.jira.plugin.system.issuetabpanels:all-tabpanel
 ]

Francesco Mari resolved OAK-4926.
-
Resolution: Fixed
  Assignee: Francesco Mari  (was: Timothee Maret)

Fixed at r1764442.

> o.a.j.o.s.s.c.StandbyClientSyncExecution#isLocal should expect missing segment
> --
>
> Key: OAK-4926
> URL: https://issues.apache.org/jira/browse/OAK-4926
> Project: Jackrabbit Oak
>  Issue Type: Bug
>  Components: segment-tar
>Affects Versions: Segment Tar 0.0.14
>Reporter: Timothee Maret
>Assignee: Francesco Mari
> Fix For: Segment Tar 0.0.16
>
> Attachments: OAK-4926.patch, OAK-4926.patch
>
>
> Currently the method 
> {{org.apache.jackrabbit.oak.segment.standby.client.StandbyClientSyncExecution#isLocal}}
>  does invoke
> {code}
> referencedId.getSegment();
> {code}
> in order to read the referenced segment. In case of missing segment, the 
> {{ReferenceId.getSegment}} does throw a SNFE *and* logs an ERROR level 
> statement. The SNFE is needed but not the log statement in this case.



--
This message was sent by Atlassian JIRA
(v6.3.4#6332)


[jira] [Created] (OAK-4928) Use Mongo sub document structure with bundling feature

2016-10-12 Thread Chetan Mehrotra (JIRA)
Chetan Mehrotra created OAK-4928:


 Summary: Use Mongo sub document structure with bundling feature
 Key: OAK-4928
 URL: https://issues.apache.org/jira/browse/OAK-4928
 Project: Jackrabbit Oak
  Issue Type: Improvement
  Components: mongomk
Reporter: Chetan Mehrotra
Assignee: Chetan Mehrotra


The MongoDocumentStore could leverage sub document structure when persisting 
map entries with relative paths. That way many duplicate path prefixes could be 
avoided. It would be MongoDocumentStore specific and transparent to the 
DocumentNodeStore. The UpdateOp and also the in-memory Document representation 
would still have the full relative paths for bundled nodes/properties. In any 
case, this enhancement should be discussed first in a separate issue.

Based on [~mreutegg] 
[comment|https://issues.apache.org/jira/browse/OAK-1312?focusedCommentId=15503050=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel#comment-15503050]



--
This message was sent by Atlassian JIRA
(v6.3.4#6332)


[jira] [Commented] (OAK-4883) Missing BlobGarbageCollection MBean on standby instance

2016-10-12 Thread Timothee Maret (JIRA)

[ 
https://issues.apache.org/jira/browse/OAK-4883?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel=15568482#comment-15568482
 ] 

Timothee Maret commented on OAK-4883:
-

[~frm] I assume you mean that line [0]. If so, it behaves the same as before 
the patch in OAK-4089. A node store instance is build however it is registered 
only if the instance is *not* a primary [1].

The patch keeps the goal of OAK-4089, by not registering the observation 
subsystem as mentioned in [2].

AFAIU, a node store instance is required in order to build the {{BlobGCMBean}}.
I may be wrong about that or maybe there's a way to get the required 
information to build the {{BlobGCMBean}}. If so I'd be happy to update the 
patch.

[0] 
https://github.com/tmaret/jackrabbit-oak/blob/OAK-4883/oak-segment-tar/src/main/java/org/apache/jackrabbit/oak/segment/SegmentNodeStoreService.java#L339
[1] 
https://github.com/tmaret/jackrabbit-oak/blob/OAK-4883/oak-segment-tar/src/main/java/org/apache/jackrabbit/oak/segment/SegmentNodeStoreService.java#L340
[2] 
https://github.com/apache/jackrabbit-oak/blob/2b6c2f5340f3b6485dda5c493f6343d232c883e9/oak-segment/src/main/java/org/apache/jackrabbit/oak/plugins/segment/SegmentNodeStoreService.java#L595

> Missing BlobGarbageCollection MBean on standby instance
> ---
>
> Key: OAK-4883
> URL: https://issues.apache.org/jira/browse/OAK-4883
> Project: Jackrabbit Oak
>  Issue Type: Bug
>  Components: segment-tar, segmentmk
>Reporter: Alex Parvulescu
>Assignee: Timothee Maret
>  Labels: gc
> Attachments: OAK-4883.patch
>
>
> The {{BlobGarbageCollection}} MBean is no longer available on a standby 
> instance, this affects non-shared datastore setups (on a shared datastore 
> you'd only need to run blob gc on the primary).
> This change was introduced by OAK-4089 (and backported to 1.4 branch with 
> OAK-4093).



--
This message was sent by Atlassian JIRA
(v6.3.4#6332)


[jira] [Commented] (OAK-4883) Missing BlobGarbageCollection MBean on standby instance

2016-10-12 Thread Francesco Mari (JIRA)

[ 
https://issues.apache.org/jira/browse/OAK-4883?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel=15568442#comment-15568442
 ] 

Francesco Mari commented on OAK-4883:
-

[~marett], the patch looks incorrect to me. The condition at line 339 allows a 
NodeStore to be registered if the 'standby' configuration property is true, 
while we don't want to register a NodeStore if the instance is supposed to work 
with the standby semantics.

> Missing BlobGarbageCollection MBean on standby instance
> ---
>
> Key: OAK-4883
> URL: https://issues.apache.org/jira/browse/OAK-4883
> Project: Jackrabbit Oak
>  Issue Type: Bug
>  Components: segment-tar, segmentmk
>Reporter: Alex Parvulescu
>Assignee: Timothee Maret
>  Labels: gc
> Attachments: OAK-4883.patch
>
>
> The {{BlobGarbageCollection}} MBean is no longer available on a standby 
> instance, this affects non-shared datastore setups (on a shared datastore 
> you'd only need to run blob gc on the primary).
> This change was introduced by OAK-4089 (and backported to 1.4 branch with 
> OAK-4093).



--
This message was sent by Atlassian JIRA
(v6.3.4#6332)


[jira] [Commented] (OAK-4911) Can not read node Property when move code into a Thread (Java)

2016-10-12 Thread Chetan Mehrotra (JIRA)

[ 
https://issues.apache.org/jira/browse/OAK-4911?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel=15568404#comment-15568404
 ] 

Chetan Mehrotra commented on OAK-4911:
--

I believe what you are observing is write skew [1]. Which session does the 
preview generation thread uses? Is it created after the file is saved or its a 
long living session? If later then you need to do explicit refresh

[1] 
https://jackrabbit.apache.org/oak/docs/differences.html#Session_state_and_refresh_behaviour

> Can not read node Property when move code into a Thread (Java)
> --
>
> Key: OAK-4911
> URL: https://issues.apache.org/jira/browse/OAK-4911
> Project: Jackrabbit Oak
>  Issue Type: Bug
>Affects Versions: 1.3.10
> Environment: MAC OS X
>Reporter: amin zamani
> Attachments: java-code.txt
>
>
> Hallo,
> we develop an application and everything is working as it should. We upload 
> documents and for each document a new preview file (node) should be 
> generated. It works well when we execute the code synchron. But because of 
> the fact that the generation of a preview file (like PDF format) can take 
> very long time we decided to move the preview generation code into a usual 
> java thread so that after the user is upload a document the website is 
> responding very quick and does not wait till the preview file is generated 
> but the preview file is generated parallel. 
> No the problem: As soon as I move the same code regarding to the preview file 
> generation into a usual thread (no modifications to the logic, only a thread 
> is bordered to it) suddenly the node path does not exist, this is the error:
> -
> Caused by: javax.jcr.PathNotFoundException: jcr:lastModifiedBy not found on 
> /jcr:system/jcr:versionStorage/7e/f8/5b/7ef85b25-4598-4476-82df-446eb3a08a90/1.0/jcr:frozenNode/jcr:content
>   at 
> org.apache.jackrabbit.oak.jcr.session.NodeImpl$11.perform(NodeImpl.java:631)
>   at 
> org.apache.jackrabbit.oak.jcr.session.NodeImpl$11.perform(NodeImpl.java:625)
>   at 
> org.apache.jackrabbit.oak.jcr.delegate.SessionDelegate.perform(SessionDelegate.java:207)
>   at 
> org.apache.jackrabbit.oak.jcr.session.ItemImpl.perform(ItemImpl.java:112)
>   at 
> org.apache.jackrabbit.oak.jcr.session.NodeImpl.getProperty(NodeImpl.java:625)
>   at 
> com.westernacher.noah.util.content_repository.JcrUtil.getStringProperty(JcrUtil.java:35)
> ---
> In my point of view this is a bug. This is the code that works:
> Example:
> /// 1) User Upload document through browser in our web app..
> // 2) ... document uploaded and saved in OAK CR
> // 3) Now generate the preview:
> updateDocumentPreview(documentId);
> 
> Now the same in a thread that does not work:
> => I have only moved the method "updateDocumentPreview(documentId);" in a 
> Thread (Java 8):
> //Same code as before except the last line replaced by following lines:
> Runnable run = ()-> {updateDocumentPreview(documentId);}
> new Thread(run).start(); //Start the thread to generate a document preview
> --



--
This message was sent by Atlassian JIRA
(v6.3.4#6332)


[jira] [Commented] (OAK-4916) Add support for excluding commits to BackgroundObserver

2016-10-12 Thread Stefan Egli (JIRA)

[ 
https://issues.apache.org/jira/browse/OAK-4916?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel=15568342#comment-15568342
 ] 

Stefan Egli commented on OAK-4916:
--

One way to do this would be to make the {{BackgroundObserver}} a 
{{FilteringAwareObserver}} such that it could get the 'skip' signal from the 
upstream, new '{{FilteringObserver}}'. It would be another variant to what 
Chetan's composition pattern, however the BackgroundObserver would still have 
to maintain about the same logic in {{contentChanged}} wrt skipped changes as 
now: the goal of prefiltering is to shrink the queue of the BackgroundObserver 
and for that we do have to make some adaptions there. Surely there are other 
variants than what I came up with, but I doubt it's possible without any change 
in the BackgroundObserver.

I'll work on a next iteration based on these 2 feedbacks, Thx!

> Add support for excluding commits to BackgroundObserver
> ---
>
> Key: OAK-4916
> URL: https://issues.apache.org/jira/browse/OAK-4916
> Project: Jackrabbit Oak
>  Issue Type: Technical task
>  Components: core
>Affects Versions: 1.5.11
>Reporter: Stefan Egli
>Assignee: Stefan Egli
> Fix For: 1.6
>
> Attachments: OAK-4916.patch
>
>
> As part of pre-filtering commits it would be useful to have support in the 
> BackgroundObserver (in general) that would allow to exclude certain commits 
> from being added to the (BackgroundObserver's) queue, thus keeping the queue 
> smaller. The actual filtering is up to subclasses.
> The suggested implementation is as follows:
> * a new method {{isExcluded}} is introduced which represents a subclass hook 
> for filtering
> * excluded commits are not added to the queue
> * when multiple commits are excluded subsequently, this is collapsed
> * the first non-excluded commit (ContentChange) added to the queue is marked 
> with the last non-excluded root state as the 'previous root'
> * downstream Observers are notified of the exclusion of a commit via a 
> special CommitInfo {{NOOP_CHANGE}}: this instructs it to exclude this change 
> while at the same time 'fast-forwarding' the root state to the new one.
> ** this extra token is one way of solving the problem that 
> {{Observer.contentChanged}} represents a diff between two states but does not 
> transport the 'from' state explicitly - that is implicitly taken from the 
> previous call to {{contentChanged}}. Thus using such a gap token 
> ({{NOOP_CHANGE}}) seems to be the only way to instruct Observers to skip a 
> change.
> To repeat: whoever extends BackgroundObserver with filtering must be aware of 
> the new {{NOOP_CHANGE}} token. Anyone not doing filtering will not get any 
> {{NOOP_CHANGE}} tokens though.



--
This message was sent by Atlassian JIRA
(v6.3.4#6332)


[jira] [Commented] (OAK-4924) avoid CommitInfo==null in contentChanged call in SegmentNodeStore.refresh

2016-10-12 Thread Chetan Mehrotra (JIRA)

[ 
https://issues.apache.org/jira/browse/OAK-4924?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel=15568339#comment-15568339
 ] 

Chetan Mehrotra commented on OAK-4924:
--

bq. Which means that we can't prefilter async index updates

Supporting that would require following change
# {{AsyncIndexUpdate#mergeWithConcurrencyCheck}} - It should pass a CommitInfo 
with {{CommitContext}} set. See {{MutableRoot}}
# You would need to explicitly include the ChangeCollector ValidatorProvider in 
the {{CompositeHook}}. 

This would then ensure that at least on cluster node where async index runs 
CommitInfo has ChangeSet populated

> avoid CommitInfo==null in contentChanged call in SegmentNodeStore.refresh
> -
>
> Key: OAK-4924
> URL: https://issues.apache.org/jira/browse/OAK-4924
> Project: Jackrabbit Oak
>  Issue Type: Improvement
>  Components: segmentmk
>Affects Versions: 1.5.12
>Reporter: Stefan Egli
>Assignee: Stefan Egli
>
> Currently 
> [SegmentNodeStore.refreshHead|https://github.com/apache/jackrabbit-oak/blob/d82f9b21d02a7eaf856f546e778118161d71b760/oak-segment-tar/src/main/java/org/apache/jackrabbit/oak/segment/SegmentNodeStore.java#L231]
>  calls {{contentChanged}} with null as the CommitInfo. This is problematic 
> for prefiltering (OAK-4796, OAK-4907 et al) as for that a ChangeSet of 
> changed items in a commit is stored in the CommitContext in the CommitInfo.
> Thus it would be useful to not send null but a CommitInfo that has the 
> equivalent meaning of null but is a new object for each call (so that the 
> ChangeSet can be set).
> [~mduerig], [~frm], [~alex.parvulescu] wdyt?



--
This message was sent by Atlassian JIRA
(v6.3.4#6332)


[jira] [Updated] (OAK-4924) avoid CommitInfo==null in contentChanged call in SegmentNodeStore.refresh

2016-10-12 Thread Alex Parvulescu (JIRA)

 [ 
https://issues.apache.org/jira/browse/OAK-4924?page=com.atlassian.jira.plugin.system.issuetabpanels:all-tabpanel
 ]

Alex Parvulescu updated OAK-4924:
-
Fix Version/s: (was: 1.6)

> avoid CommitInfo==null in contentChanged call in SegmentNodeStore.refresh
> -
>
> Key: OAK-4924
> URL: https://issues.apache.org/jira/browse/OAK-4924
> Project: Jackrabbit Oak
>  Issue Type: Improvement
>  Components: segmentmk
>Affects Versions: 1.5.12
>Reporter: Stefan Egli
>Assignee: Stefan Egli
>
> Currently 
> [SegmentNodeStore.refreshHead|https://github.com/apache/jackrabbit-oak/blob/d82f9b21d02a7eaf856f546e778118161d71b760/oak-segment-tar/src/main/java/org/apache/jackrabbit/oak/segment/SegmentNodeStore.java#L231]
>  calls {{contentChanged}} with null as the CommitInfo. This is problematic 
> for prefiltering (OAK-4796, OAK-4907 et al) as for that a ChangeSet of 
> changed items in a commit is stored in the CommitContext in the CommitInfo.
> Thus it would be useful to not send null but a CommitInfo that has the 
> equivalent meaning of null but is a new object for each call (so that the 
> ChangeSet can be set).
> [~mduerig], [~frm], [~alex.parvulescu] wdyt?



--
This message was sent by Atlassian JIRA
(v6.3.4#6332)


[jira] [Commented] (OAK-4907) Collect changes (paths, nts, props..) of a commit in a validator

2016-10-12 Thread Chetan Mehrotra (JIRA)

[ 
https://issues.apache.org/jira/browse/OAK-4907?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel=15568323#comment-15568323
 ] 

Chetan Mehrotra commented on OAK-4907:
--

bq. In theory it should also be OK for the ChangeCollector to add a new 
CommitContext (which it indeed doesn't do now) when it's not there - and in 
this case the check for EMPTY would avoid that.

Yes that would have been ideal. See OAK-4640 for background on why this route 
was not taken

> Collect changes (paths, nts, props..) of a commit in a validator
> 
>
> Key: OAK-4907
> URL: https://issues.apache.org/jira/browse/OAK-4907
> Project: Jackrabbit Oak
>  Issue Type: Technical task
>  Components: core
>Affects Versions: 1.5.11
>Reporter: Stefan Egli
>Assignee: Stefan Egli
> Fix For: 1.6
>
> Attachments: OAK-4907.patch, OAK-4907.v2.patch
>
>
> It would be useful to collect a set of changes of a commit (eg in a 
> validator) that could later be used in an Observer for eg prefiltering.
> Such a change collector should collect paths, nodetypes, properties, 
> node-names (and perhaps more at a later stage) of all changes and store the 
> result in the CommitInfo's CommitContext.
> Note that this is a result of 
> [discussions|https://issues.apache.org/jira/browse/OAK-4796?focusedCommentId=15550962=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel#comment-15550962]
>  around design in OAK-4796



--
This message was sent by Atlassian JIRA
(v6.3.4#6332)


[jira] [Resolved] (OAK-4924) avoid CommitInfo==null in contentChanged call in SegmentNodeStore.refresh

2016-10-12 Thread Stefan Egli (JIRA)

 [ 
https://issues.apache.org/jira/browse/OAK-4924?page=com.atlassian.jira.plugin.system.issuetabpanels:all-tabpanel
 ]

Stefan Egli resolved OAK-4924.
--
Resolution: Invalid
  Assignee: Stefan Egli

Chetan's right, its ok there to pass null (or EMPTY, but that's equivalent and 
only a detail in this context). I was confusing this with assuming that commit 
hooks (thus the ChangeCollector) would be applied afterwards - which it isn't 
of course, it's just a direct notification to the Observers.

Which means that given the ChangeCollector is part of the commit hook execution 
(only), it can't be applied in this case. Which means that we can't prefilter 
async index updates - which is somewhat suboptimal. So if we wanted to fix that 
we'd have to find another solution - but that's independent of this null.

Hence closing this ticket as invalid. Thx!

> avoid CommitInfo==null in contentChanged call in SegmentNodeStore.refresh
> -
>
> Key: OAK-4924
> URL: https://issues.apache.org/jira/browse/OAK-4924
> Project: Jackrabbit Oak
>  Issue Type: Improvement
>  Components: segmentmk
>Affects Versions: 1.5.12
>Reporter: Stefan Egli
>Assignee: Stefan Egli
> Fix For: 1.6
>
>
> Currently 
> [SegmentNodeStore.refreshHead|https://github.com/apache/jackrabbit-oak/blob/d82f9b21d02a7eaf856f546e778118161d71b760/oak-segment-tar/src/main/java/org/apache/jackrabbit/oak/segment/SegmentNodeStore.java#L231]
>  calls {{contentChanged}} with null as the CommitInfo. This is problematic 
> for prefiltering (OAK-4796, OAK-4907 et al) as for that a ChangeSet of 
> changed items in a commit is stored in the CommitContext in the CommitInfo.
> Thus it would be useful to not send null but a CommitInfo that has the 
> equivalent meaning of null but is a new object for each call (so that the 
> ChangeSet can be set).
> [~mduerig], [~frm], [~alex.parvulescu] wdyt?



--
This message was sent by Atlassian JIRA
(v6.3.4#6332)


[jira] [Commented] (OAK-4907) Collect changes (paths, nts, props..) of a commit in a validator

2016-10-12 Thread Stefan Egli (JIRA)

[ 
https://issues.apache.org/jira/browse/OAK-4907?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel=15568297#comment-15568297
 ] 

Stefan Egli commented on OAK-4907:
--

Thx [~chetanm], a few comments on the points:
bq. 1. Instead of special casing for EMPTY ...
I see, I guess while the two variants aren't really equivalent they are both 
not ideal. In theory it should also be OK for the ChangeCollector to add a 
_new_ CommitContext (which it indeed doesn't do now) when it's not there - and 
in this case the check for EMPTY would avoid that. But we don't have that at 
the moment, so I guess we can go with the assumption that 'someone else' sets 
the CommitContext (as is happening in commit() atm). I guess what I'm saying is 
that I find both solutions suboptimal, but I'll go for your variant.
bq. 2. I see following 3 boolean vars always being set to true
good point - now after the dust (of initial development) has settled it's 
indeed obvious that the variables can be combined into one.
bq. 3. Log the limits/config
will do
bq. 4. Keep the child name as instance variable
good idea
bq. 5. Use Iterables#addAll.
good idea
bq. 6. testNull test is failing for me
indeed does for me too - that's due to the late-incoming addition of skipping 
EMPTY
bq. May be we should split this class in two. 
certainly
bq. Also some coverage around overflow case would be good to have
sure


> Collect changes (paths, nts, props..) of a commit in a validator
> 
>
> Key: OAK-4907
> URL: https://issues.apache.org/jira/browse/OAK-4907
> Project: Jackrabbit Oak
>  Issue Type: Technical task
>  Components: core
>Affects Versions: 1.5.11
>Reporter: Stefan Egli
>Assignee: Stefan Egli
> Fix For: 1.6
>
> Attachments: OAK-4907.patch, OAK-4907.v2.patch
>
>
> It would be useful to collect a set of changes of a commit (eg in a 
> validator) that could later be used in an Observer for eg prefiltering.
> Such a change collector should collect paths, nodetypes, properties, 
> node-names (and perhaps more at a later stage) of all changes and store the 
> result in the CommitInfo's CommitContext.
> Note that this is a result of 
> [discussions|https://issues.apache.org/jira/browse/OAK-4796?focusedCommentId=15550962=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel#comment-15550962]
>  around design in OAK-4796



--
This message was sent by Atlassian JIRA
(v6.3.4#6332)


[jira] [Commented] (OAK-4927) FileStore compaction should account for multiple valid checkpoints

2016-10-12 Thread Alex Parvulescu (JIRA)

[ 
https://issues.apache.org/jira/browse/OAK-4927?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel=15568276#comment-15568276
 ] 

Alex Parvulescu commented on OAK-4927:
--

right, simplest fix is to remove the warning (same as OAK-4371), next best 
option is to increase the number that triggers this warning to (at least) 4. 
Also, I don't think you are supposed to run online compaction on 1.4, it's not 
reliable enough.

> FileStore compaction should account for multiple valid checkpoints
> --
>
> Key: OAK-4927
> URL: https://issues.apache.org/jira/browse/OAK-4927
> Project: Jackrabbit Oak
>  Issue Type: Improvement
>  Components: segmentmk
>Affects Versions: 1.4
>Reporter: Chetan Mehrotra
>Assignee: Alex Parvulescu
>Priority: Minor
>  Labels: candidate_oak_1_4
> Fix For: 1.6
>
>
> With Oak 1.4 we have setup which configure multiple async indexers which lead 
> to multiple checkpoint present in the system. OAK-4043 addressed that in 
> oak-run. However currently the 
> {{org.apache.jackrabbit.oak.plugins.segment.file.FileStore#compact}} logs a 
> warning if more than one checkpoint is found. 
> {noformat}
> 22:34:21.797 [main] WARN  o.a.j.o.p.segment.file.FileStore - TarMK GC #0: 
> compaction found 2 checkpoints, you might need to run checkpoint cleanup
> {noformat}
> This warning should be fixed



--
This message was sent by Atlassian JIRA
(v6.3.4#6332)


[jira] [Commented] (OAK-4926) o.a.j.o.s.s.c.StandbyClientSyncExecution#isLocal should expect missing segment

2016-10-12 Thread Timothee Maret (JIRA)

[ 
https://issues.apache.org/jira/browse/OAK-4926?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel=15568265#comment-15568265
 ] 

Timothee Maret commented on OAK-4926:
-

Thanks [~frm] for looking at this and for the suggestion. Please find a 
simplified patch attached.

> o.a.j.o.s.s.c.StandbyClientSyncExecution#isLocal should expect missing segment
> --
>
> Key: OAK-4926
> URL: https://issues.apache.org/jira/browse/OAK-4926
> Project: Jackrabbit Oak
>  Issue Type: Bug
>  Components: segment-tar
>Affects Versions: Segment Tar 0.0.14
>Reporter: Timothee Maret
>Assignee: Timothee Maret
> Fix For: Segment Tar 0.0.16
>
> Attachments: OAK-4926.patch, OAK-4926.patch
>
>
> Currently the method 
> {{org.apache.jackrabbit.oak.segment.standby.client.StandbyClientSyncExecution#isLocal}}
>  does invoke
> {code}
> referencedId.getSegment();
> {code}
> in order to read the referenced segment. In case of missing segment, the 
> {{ReferenceId.getSegment}} does throw a SNFE *and* logs an ERROR level 
> statement. The SNFE is needed but not the log statement in this case.



--
This message was sent by Atlassian JIRA
(v6.3.4#6332)


[jira] [Updated] (OAK-4926) o.a.j.o.s.s.c.StandbyClientSyncExecution#isLocal should expect missing segment

2016-10-12 Thread Timothee Maret (JIRA)

 [ 
https://issues.apache.org/jira/browse/OAK-4926?page=com.atlassian.jira.plugin.system.issuetabpanels:all-tabpanel
 ]

Timothee Maret updated OAK-4926:

Attachment: OAK-4926.patch

> o.a.j.o.s.s.c.StandbyClientSyncExecution#isLocal should expect missing segment
> --
>
> Key: OAK-4926
> URL: https://issues.apache.org/jira/browse/OAK-4926
> Project: Jackrabbit Oak
>  Issue Type: Bug
>  Components: segment-tar
>Affects Versions: Segment Tar 0.0.14
>Reporter: Timothee Maret
>Assignee: Timothee Maret
> Fix For: Segment Tar 0.0.16
>
> Attachments: OAK-4926.patch, OAK-4926.patch
>
>
> Currently the method 
> {{org.apache.jackrabbit.oak.segment.standby.client.StandbyClientSyncExecution#isLocal}}
>  does invoke
> {code}
> referencedId.getSegment();
> {code}
> in order to read the referenced segment. In case of missing segment, the 
> {{ReferenceId.getSegment}} does throw a SNFE *and* logs an ERROR level 
> statement. The SNFE is needed but not the log statement in this case.



--
This message was sent by Atlassian JIRA
(v6.3.4#6332)


[jira] [Resolved] (OAK-4835) Provide generic option to interrupt online revision cleanup

2016-10-12 Thread Alex Parvulescu (JIRA)

 [ 
https://issues.apache.org/jira/browse/OAK-4835?page=com.atlassian.jira.plugin.system.issuetabpanels:all-tabpanel
 ]

Alex Parvulescu resolved OAK-4835.
--
   Resolution: Fixed
Fix Version/s: (was: 1.5.13)
   1.5.12

this issue was tracking the api changes needed for the subtasks to be tackled. 
all the needed changes are in, so marking as fixed (was fixed as a part of 
1.5.12, but it did not make the release notes).

> Provide generic option to interrupt online revision cleanup
> ---
>
> Key: OAK-4835
> URL: https://issues.apache.org/jira/browse/OAK-4835
> Project: Jackrabbit Oak
>  Issue Type: Improvement
>  Components: core
>Reporter: Alex Parvulescu
>Assignee: Alex Parvulescu
>  Labels: compaction, gc, management, monitoring
> Fix For: 1.6, 1.5.12
>
>
> JMX binding for stopping a running compaction process



--
This message was sent by Atlassian JIRA
(v6.3.4#6332)


[jira] [Assigned] (OAK-4835) Provide generic option to interrupt online revision cleanup

2016-10-12 Thread Alex Parvulescu (JIRA)

 [ 
https://issues.apache.org/jira/browse/OAK-4835?page=com.atlassian.jira.plugin.system.issuetabpanels:all-tabpanel
 ]

Alex Parvulescu reassigned OAK-4835:


Assignee: Michael Dürig  (was: Alex Parvulescu)

> Provide generic option to interrupt online revision cleanup
> ---
>
> Key: OAK-4835
> URL: https://issues.apache.org/jira/browse/OAK-4835
> Project: Jackrabbit Oak
>  Issue Type: Improvement
>  Components: core
>Reporter: Alex Parvulescu
>Assignee: Michael Dürig
>  Labels: compaction, gc, management, monitoring
> Fix For: 1.6, 1.5.12
>
>
> JMX binding for stopping a running compaction process



--
This message was sent by Atlassian JIRA
(v6.3.4#6332)


[jira] [Updated] (OAK-4817) QueryEngineSettings without MBean

2016-10-12 Thread Thomas Mueller (JIRA)

 [ 
https://issues.apache.org/jira/browse/OAK-4817?page=com.atlassian.jira.plugin.system.issuetabpanels:all-tabpanel
 ]

Thomas Mueller updated OAK-4817:

Attachment: OAK-4817.patch

OAK-4817.patch

This introduces a new class QueryEngineSettingsMBeanImpl that wraps 
QueryEngineSettings. And QueryEngineSettings no longer extends 
AnnotatedStandardMBean (only QueryEngineSettingsMBeanImpl is). There are wrap() 
and unwrap() methods, to convert a QueryEngineSettings to a 
QueryEngineSettingsMBeanImpl, and back.

[~edivad] and [~chetanm], could you review the patch please?



> QueryEngineSettings without MBean
> -
>
> Key: OAK-4817
> URL: https://issues.apache.org/jira/browse/OAK-4817
> Project: Jackrabbit Oak
>  Issue Type: Improvement
>  Components: query
>Reporter: Thomas Mueller
>Assignee: Thomas Mueller
> Fix For: 1.6
>
> Attachments: OAK-4817.patch
>
>
> QueryEngineSettings is currently an MBean, and constructing a new instance is 
> expensive. This is seem in some oak-core security components. The MBean 
> functionality should be decoupled.



--
This message was sent by Atlassian JIRA
(v6.3.4#6332)


[jira] [Commented] (OAK-4467) Upgrade commons-io to 2.5 and remove ReversedLinesFileReader

2016-10-12 Thread Julian Reschke (JIRA)

[ 
https://issues.apache.org/jira/browse/OAK-4467?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel=15568162#comment-15568162
 ] 

Julian Reschke commented on OAK-4467:
-

Exactly :-).

> Upgrade commons-io to 2.5 and remove ReversedLinesFileReader
> 
>
> Key: OAK-4467
> URL: https://issues.apache.org/jira/browse/OAK-4467
> Project: Jackrabbit Oak
>  Issue Type: Improvement
>  Components: auth-external, blob, commons, core, examples, parent, 
> pojosr, run, segment-tar, segmentmk, webapp
>Reporter: Michael Dürig
>Assignee: Michael Dürig
>  Labels: technical_debt
> Fix For: Segment Tar 0.0.16
>
> Attachments: OAK_4467.patch
>
>
> For OAK-2605 we copied the source of {{ReversedLinesFileReader}} to Oak to 
> get the fix for IO-471 in. As this is now fixed in {{commons-io}} 2.5, I 
> suggest we upgrade our dependency and remove that duplicated class.



--
This message was sent by Atlassian JIRA
(v6.3.4#6332)


[jira] [Commented] (OAK-4467) Upgrade commons-io to 2.5 and remove ReversedLinesFileReader

2016-10-12 Thread JIRA

[ 
https://issues.apache.org/jira/browse/OAK-4467?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel=15568141#comment-15568141
 ] 

Michael Dürig commented on OAK-4467:


I don't think so. This would force all customer still having commons-io 2.4 in 
its container to also bump it to 2.5. 

> Upgrade commons-io to 2.5 and remove ReversedLinesFileReader
> 
>
> Key: OAK-4467
> URL: https://issues.apache.org/jira/browse/OAK-4467
> Project: Jackrabbit Oak
>  Issue Type: Improvement
>  Components: auth-external, blob, commons, core, examples, parent, 
> pojosr, run, segment-tar, segmentmk, webapp
>Reporter: Michael Dürig
>Assignee: Michael Dürig
>  Labels: technical_debt
> Fix For: Segment Tar 0.0.16
>
> Attachments: OAK_4467.patch
>
>
> For OAK-2605 we copied the source of {{ReversedLinesFileReader}} to Oak to 
> get the fix for IO-471 in. As this is now fixed in {{commons-io}} 2.5, I 
> suggest we upgrade our dependency and remove that duplicated class.



--
This message was sent by Atlassian JIRA
(v6.3.4#6332)


[jira] [Commented] (OAK-4467) Upgrade commons-io to 2.5 and remove ReversedLinesFileReader

2016-10-12 Thread Julian Reschke (JIRA)

[ 
https://issues.apache.org/jira/browse/OAK-4467?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel=15568107#comment-15568107
 ] 

Julian Reschke commented on OAK-4467:
-

can't we require commons-io 2.5?

(I'd like to backport so that we can get rid of the workaround in the other 
branches...)

> Upgrade commons-io to 2.5 and remove ReversedLinesFileReader
> 
>
> Key: OAK-4467
> URL: https://issues.apache.org/jira/browse/OAK-4467
> Project: Jackrabbit Oak
>  Issue Type: Improvement
>  Components: auth-external, blob, commons, core, examples, parent, 
> pojosr, run, segment-tar, segmentmk, webapp
>Reporter: Michael Dürig
>Assignee: Michael Dürig
>  Labels: technical_debt
> Fix For: Segment Tar 0.0.16
>
> Attachments: OAK_4467.patch
>
>
> For OAK-2605 we copied the source of {{ReversedLinesFileReader}} to Oak to 
> get the fix for IO-471 in. As this is now fixed in {{commons-io}} 2.5, I 
> suggest we upgrade our dependency and remove that duplicated class.



--
This message was sent by Atlassian JIRA
(v6.3.4#6332)


[jira] [Updated] (OAK-4467) Upgrade commons-io to 2.5 and remove ReversedLinesFileReader

2016-10-12 Thread JIRA

 [ 
https://issues.apache.org/jira/browse/OAK-4467?page=com.atlassian.jira.plugin.system.issuetabpanels:all-tabpanel
 ]

Michael Dürig updated OAK-4467:
---
Labels: technical_debt  (was: candidate_oak_1_2 candidate_oak_1_4 
technical_debt)

> Upgrade commons-io to 2.5 and remove ReversedLinesFileReader
> 
>
> Key: OAK-4467
> URL: https://issues.apache.org/jira/browse/OAK-4467
> Project: Jackrabbit Oak
>  Issue Type: Improvement
>  Components: auth-external, blob, commons, core, examples, parent, 
> pojosr, run, segment-tar, segmentmk, webapp
>Reporter: Michael Dürig
>Assignee: Michael Dürig
>  Labels: technical_debt
> Fix For: Segment Tar 0.0.16
>
> Attachments: OAK_4467.patch
>
>
> For OAK-2605 we copied the source of {{ReversedLinesFileReader}} to Oak to 
> get the fix for IO-471 in. As this is now fixed in {{commons-io}} 2.5, I 
> suggest we upgrade our dependency and remove that duplicated class.



--
This message was sent by Atlassian JIRA
(v6.3.4#6332)


[jira] [Commented] (OAK-4467) Upgrade commons-io to 2.5 and remove ReversedLinesFileReader

2016-10-12 Thread JIRA

[ 
https://issues.apache.org/jira/browse/OAK-4467?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel=15568097#comment-15568097
 ] 

Michael Dürig commented on OAK-4467:


No, I wouldn't do this as this will break consumers who provide still the old 
dependency (commons-io 2.4). 

> Upgrade commons-io to 2.5 and remove ReversedLinesFileReader
> 
>
> Key: OAK-4467
> URL: https://issues.apache.org/jira/browse/OAK-4467
> Project: Jackrabbit Oak
>  Issue Type: Improvement
>  Components: auth-external, blob, commons, core, examples, parent, 
> pojosr, run, segment-tar, segmentmk, webapp
>Reporter: Michael Dürig
>Assignee: Michael Dürig
>  Labels: candidate_oak_1_2, candidate_oak_1_4, technical_debt
> Fix For: Segment Tar 0.0.16
>
> Attachments: OAK_4467.patch
>
>
> For OAK-2605 we copied the source of {{ReversedLinesFileReader}} to Oak to 
> get the fix for IO-471 in. As this is now fixed in {{commons-io}} 2.5, I 
> suggest we upgrade our dependency and remove that duplicated class.



--
This message was sent by Atlassian JIRA
(v6.3.4#6332)


[jira] [Commented] (OAK-2605) Support for additional encodings needed in ReversedLinesFileReader

2016-10-12 Thread JIRA

[ 
https://issues.apache.org/jira/browse/OAK-2605?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel=15568071#comment-15568071
 ] 

Michael Dürig commented on OAK-2605:


?

> Support for additional encodings needed in ReversedLinesFileReader
> --
>
> Key: OAK-2605
> URL: https://issues.apache.org/jira/browse/OAK-2605
> Project: Jackrabbit Oak
>  Issue Type: Bug
>  Components: segmentmk
>Affects Versions: 1.1.7
> Environment: Windows 2012 R2 Japanese
> Windows 2012 R2 Korean
> Windows 2012 R2 Simplified Chinese
> Windows 2012 R2 Traditional Chinese
>Reporter: Leandro Reis
>Assignee: Michael Dürig
> Fix For: 1.1.8
>
> Attachments: OAK-2605.patch
>
>
> I'm working on a product that uses Commons IO via Jackrabbit Oak. In the 
> process of testing the launch of such product on Japanese Windows 2012
> Server R2, I came across the following exception: 
> "(java.io.UnsupportedEncodingException: Encoding windows-31j is not supported 
> yet (feel free to submit a patch))"
> windows-31j is the IANA name for Windows code page 932 (Japanese), and is 
> returned by Charset.defaultCharset(), used in 
> org.apache.commons.io.input.ReversedLinesFileReader [0].
> A patch for this issue was provided in 
> https://issues.apache.org/jira/browse/IO-471 .  
> It also includes changes needed to support Chinese Simplified, Chinese 
> Traditional and Korean.



--
This message was sent by Atlassian JIRA
(v6.3.4#6332)


[jira] [Commented] (OAK-4467) Upgrade commons-io to 2.5 and remove ReversedLinesFileReader

2016-10-12 Thread Julian Reschke (JIRA)

[ 
https://issues.apache.org/jira/browse/OAK-4467?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel=15568065#comment-15568065
 ] 

Julian Reschke commented on OAK-4467:
-

This should be backported, right?

> Upgrade commons-io to 2.5 and remove ReversedLinesFileReader
> 
>
> Key: OAK-4467
> URL: https://issues.apache.org/jira/browse/OAK-4467
> Project: Jackrabbit Oak
>  Issue Type: Improvement
>  Components: auth-external, blob, commons, core, examples, parent, 
> pojosr, run, segment-tar, segmentmk, webapp
>Reporter: Michael Dürig
>Assignee: Michael Dürig
>  Labels: candidate_oak_1_2, candidate_oak_1_4, technical_debt
> Fix For: Segment Tar 0.0.16
>
> Attachments: OAK_4467.patch
>
>
> For OAK-2605 we copied the source of {{ReversedLinesFileReader}} to Oak to 
> get the fix for IO-471 in. As this is now fixed in {{commons-io}} 2.5, I 
> suggest we upgrade our dependency and remove that duplicated class.



--
This message was sent by Atlassian JIRA
(v6.3.4#6332)


[jira] [Updated] (OAK-4467) Upgrade commons-io to 2.5 and remove ReversedLinesFileReader

2016-10-12 Thread Julian Reschke (JIRA)

 [ 
https://issues.apache.org/jira/browse/OAK-4467?page=com.atlassian.jira.plugin.system.issuetabpanels:all-tabpanel
 ]

Julian Reschke updated OAK-4467:

Labels: candidate_oak_1_2 candidate_oak_1_4 technical_debt  (was: 
technical_debt)

> Upgrade commons-io to 2.5 and remove ReversedLinesFileReader
> 
>
> Key: OAK-4467
> URL: https://issues.apache.org/jira/browse/OAK-4467
> Project: Jackrabbit Oak
>  Issue Type: Improvement
>  Components: auth-external, blob, commons, core, examples, parent, 
> pojosr, run, segment-tar, segmentmk, webapp
>Reporter: Michael Dürig
>Assignee: Michael Dürig
>  Labels: candidate_oak_1_2, candidate_oak_1_4, technical_debt
> Fix For: Segment Tar 0.0.16
>
> Attachments: OAK_4467.patch
>
>
> For OAK-2605 we copied the source of {{ReversedLinesFileReader}} to Oak to 
> get the fix for IO-471 in. As this is now fixed in {{commons-io}} 2.5, I 
> suggest we upgrade our dependency and remove that duplicated class.



--
This message was sent by Atlassian JIRA
(v6.3.4#6332)


[jira] [Commented] (OAK-2605) Support for additional encodings needed in ReversedLinesFileReader

2016-10-12 Thread Julian Reschke (JIRA)

[ 
https://issues.apache.org/jira/browse/OAK-2605?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel=15568063#comment-15568063
 ] 

Julian Reschke commented on OAK-2605:
-

trunk: [r1665898|http://svn.apache.org/r1665898] 
[r1665833|http://svn.apache.org/r1665833]


> Support for additional encodings needed in ReversedLinesFileReader
> --
>
> Key: OAK-2605
> URL: https://issues.apache.org/jira/browse/OAK-2605
> Project: Jackrabbit Oak
>  Issue Type: Bug
>  Components: segmentmk
>Affects Versions: 1.1.7
> Environment: Windows 2012 R2 Japanese
> Windows 2012 R2 Korean
> Windows 2012 R2 Simplified Chinese
> Windows 2012 R2 Traditional Chinese
>Reporter: Leandro Reis
>Assignee: Michael Dürig
> Fix For: 1.1.8
>
> Attachments: OAK-2605.patch
>
>
> I'm working on a product that uses Commons IO via Jackrabbit Oak. In the 
> process of testing the launch of such product on Japanese Windows 2012
> Server R2, I came across the following exception: 
> "(java.io.UnsupportedEncodingException: Encoding windows-31j is not supported 
> yet (feel free to submit a patch))"
> windows-31j is the IANA name for Windows code page 932 (Japanese), and is 
> returned by Charset.defaultCharset(), used in 
> org.apache.commons.io.input.ReversedLinesFileReader [0].
> A patch for this issue was provided in 
> https://issues.apache.org/jira/browse/IO-471 .  
> It also includes changes needed to support Chinese Simplified, Chinese 
> Traditional and Korean.



--
This message was sent by Atlassian JIRA
(v6.3.4#6332)


[jira] [Commented] (OAK-4924) avoid CommitInfo==null in contentChanged call in SegmentNodeStore.refresh

2016-10-12 Thread Alex Parvulescu (JIRA)

[ 
https://issues.apache.org/jira/browse/OAK-4924?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel=15568035#comment-15568035
 ] 

Alex Parvulescu commented on OAK-4924:
--

bq. Stefan Egli I think that usage is fine. Similar would be the case if 
DocumentNodeStore where external changes are pushed.
[~chetanm] cold you clarify what usage you are referring to? I'm not sure if 
you are advocating for adding the empty commit info or against it.

> avoid CommitInfo==null in contentChanged call in SegmentNodeStore.refresh
> -
>
> Key: OAK-4924
> URL: https://issues.apache.org/jira/browse/OAK-4924
> Project: Jackrabbit Oak
>  Issue Type: Improvement
>  Components: segmentmk
>Affects Versions: 1.5.12
>Reporter: Stefan Egli
> Fix For: 1.6
>
>
> Currently 
> [SegmentNodeStore.refreshHead|https://github.com/apache/jackrabbit-oak/blob/d82f9b21d02a7eaf856f546e778118161d71b760/oak-segment-tar/src/main/java/org/apache/jackrabbit/oak/segment/SegmentNodeStore.java#L231]
>  calls {{contentChanged}} with null as the CommitInfo. This is problematic 
> for prefiltering (OAK-4796, OAK-4907 et al) as for that a ChangeSet of 
> changed items in a commit is stored in the CommitContext in the CommitInfo.
> Thus it would be useful to not send null but a CommitInfo that has the 
> equivalent meaning of null but is a new object for each call (so that the 
> ChangeSet can be set).
> [~mduerig], [~frm], [~alex.parvulescu] wdyt?



--
This message was sent by Atlassian JIRA
(v6.3.4#6332)


[jira] [Resolved] (OAK-4467) Upgrade commons-io to 2.5 and remove ReversedLinesFileReader

2016-10-12 Thread JIRA

 [ 
https://issues.apache.org/jira/browse/OAK-4467?page=com.atlassian.jira.plugin.system.issuetabpanels:all-tabpanel
 ]

Michael Dürig resolved OAK-4467.

   Resolution: Fixed
Fix Version/s: (was: Segment Tar 0.0.22)
   Segment Tar 0.0.16

Fixed at http://svn.apache.org/viewvc?rev=1764402=rev

> Upgrade commons-io to 2.5 and remove ReversedLinesFileReader
> 
>
> Key: OAK-4467
> URL: https://issues.apache.org/jira/browse/OAK-4467
> Project: Jackrabbit Oak
>  Issue Type: Improvement
>  Components: auth-external, blob, commons, core, examples, parent, 
> pojosr, run, segment-tar, segmentmk, webapp
>Reporter: Michael Dürig
>Assignee: Michael Dürig
>  Labels: technical_debt
> Fix For: Segment Tar 0.0.16
>
> Attachments: OAK_4467.patch
>
>
> For OAK-2605 we copied the source of {{ReversedLinesFileReader}} to Oak to 
> get the fix for IO-471 in. As this is now fixed in {{commons-io}} 2.5, I 
> suggest we upgrade our dependency and remove that duplicated class.



--
This message was sent by Atlassian JIRA
(v6.3.4#6332)


[jira] [Commented] (OAK-4926) o.a.j.o.s.s.c.StandbyClientSyncExecution#isLocal should expect missing segment

2016-10-12 Thread Francesco Mari (JIRA)

[ 
https://issues.apache.org/jira/browse/OAK-4926?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel=15568025#comment-15568025
 ] 

Francesco Mari commented on OAK-4926:
-

I think the patch can be further simplified by using 
{{FileStore.containsSegment()}} instead. [~marett], can you give a try at this 
solution?

> o.a.j.o.s.s.c.StandbyClientSyncExecution#isLocal should expect missing segment
> --
>
> Key: OAK-4926
> URL: https://issues.apache.org/jira/browse/OAK-4926
> Project: Jackrabbit Oak
>  Issue Type: Bug
>  Components: segment-tar
>Affects Versions: Segment Tar 0.0.14
>Reporter: Timothee Maret
>Assignee: Timothee Maret
> Fix For: Segment Tar 0.0.16
>
> Attachments: OAK-4926.patch
>
>
> Currently the method 
> {{org.apache.jackrabbit.oak.segment.standby.client.StandbyClientSyncExecution#isLocal}}
>  does invoke
> {code}
> referencedId.getSegment();
> {code}
> in order to read the referenced segment. In case of missing segment, the 
> {{ReferenceId.getSegment}} does throw a SNFE *and* logs an ERROR level 
> statement. The SNFE is needed but not the log statement in this case.



--
This message was sent by Atlassian JIRA
(v6.3.4#6332)


[jira] [Commented] (OAK-4916) Add support for excluding commits to BackgroundObserver

2016-10-12 Thread JIRA

[ 
https://issues.apache.org/jira/browse/OAK-4916?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel=15567975#comment-15567975
 ] 

Michael Dürig commented on OAK-4916:


Without looking at the code very much, it seems we are overloading 
{{BackgroundObserver}} with too many concerns. That class should only be 
concerned about turning a synchronous observer into an asynchronous one. I 
would prefer a compositional approach here where a pre filtering observer would 
synchronously see all content changes and pass the filtered ones along to the 
background observer.

> Add support for excluding commits to BackgroundObserver
> ---
>
> Key: OAK-4916
> URL: https://issues.apache.org/jira/browse/OAK-4916
> Project: Jackrabbit Oak
>  Issue Type: Technical task
>  Components: core
>Affects Versions: 1.5.11
>Reporter: Stefan Egli
>Assignee: Stefan Egli
> Fix For: 1.6
>
> Attachments: OAK-4916.patch
>
>
> As part of pre-filtering commits it would be useful to have support in the 
> BackgroundObserver (in general) that would allow to exclude certain commits 
> from being added to the (BackgroundObserver's) queue, thus keeping the queue 
> smaller. The actual filtering is up to subclasses.
> The suggested implementation is as follows:
> * a new method {{isExcluded}} is introduced which represents a subclass hook 
> for filtering
> * excluded commits are not added to the queue
> * when multiple commits are excluded subsequently, this is collapsed
> * the first non-excluded commit (ContentChange) added to the queue is marked 
> with the last non-excluded root state as the 'previous root'
> * downstream Observers are notified of the exclusion of a commit via a 
> special CommitInfo {{NOOP_CHANGE}}: this instructs it to exclude this change 
> while at the same time 'fast-forwarding' the root state to the new one.
> ** this extra token is one way of solving the problem that 
> {{Observer.contentChanged}} represents a diff between two states but does not 
> transport the 'from' state explicitly - that is implicitly taken from the 
> previous call to {{contentChanged}}. Thus using such a gap token 
> ({{NOOP_CHANGE}}) seems to be the only way to instruct Observers to skip a 
> change.
> To repeat: whoever extends BackgroundObserver with filtering must be aware of 
> the new {{NOOP_CHANGE}} token. Anyone not doing filtering will not get any 
> {{NOOP_CHANGE}} tokens though.



--
This message was sent by Atlassian JIRA
(v6.3.4#6332)


[jira] [Comment Edited] (OAK-4916) Add support for excluding commits to BackgroundObserver

2016-10-12 Thread Chetan Mehrotra (JIRA)

[ 
https://issues.apache.org/jira/browse/OAK-4916?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel=15567937#comment-15567937
 ] 

Chetan Mehrotra edited comment on OAK-4916 at 10/12/16 7:39 AM:


Somehow not very comfortable with {{NOOP_CHANGE}} based protocol for 
communicating filtering.

May be we introduce new interfaces

# ContentChangeFilter - This would be passed to {{BackgroundObserver}} and 
would be responsible for determining if given change should be included in the 
queue or not. By default {{BackgroundObserver}} would 
{{ContentChangeFilter#DEFAULT}}. Observers which support prefiltering would 
provide there own implementation. This is similar to current proposed approach 
just using composition over inheritence!
{code}
public interface ContentChangeFilter {
ContentChangeFilter DEFAULT = new ContentChangeFilter() {
@Override
public boolean includeChange(CommitInfo info) {
return true
}
};

boolean includeChange(CommitInfo info);
}
{code}
# FilteringAwareObserver - Any observer which allows prefiltering would also 
implement this interface. And instead of {{NOOP_CHANGE}} based convention 
{{BackgroundObserver}} would invoke the {{resetPreviousRoot}} to indicate that 
base root state needs to be adjusted. 
{code}
public interface FilteringAwareObserver extends Observer{
/**
 * Invoked to enable such observers to reset there previous root
 * to given NodeState
 * 
 * @param root previous NodeState root
 */
void resetPreviousRoot(NodeState root);
}
{code}

Another approach would be to make such observer state less i.e. they do not 
track the previous state and we pass in previous state and 
{{BackgroundObserver}} maintains a tuple 

{code}
void contentChanged(@Nullable NodeState before, @Nonnull NodeState after, 
@Nullable CommitInfo info);
{code}

[~mduerig] Would have better thoughts here ;)


was (Author: chetanm):
Somehow not very comfortable with {{NOOP_CHANGE}} based protocol for 
communicating filtering.

May be we introduce new interfaces

# ContentChangeFilter - This would be passed to {{BackgroundObserver}} and 
would be responsible for determining if given change should be included in the 
queue or not. By default {{BackgroundObserver}} would 
{{ContentChangeFilter#DEFAULT}}. Observers which support prefiltering would 
provide there own implementation. Kind of composition over inheritence
{code}
public interface ContentChangeFilter {
ContentChangeFilter DEFAULT = new ContentChangeFilter() {
@Override
public boolean includeChange(CommitInfo info) {
return true
}
};

boolean includeChange(CommitInfo info);
}
{code}
# FilteringAwareObserver - Any observer which allows prefiltering would also 
implement this interface. And instead of {{NOOP_CHANGE}} based convention 
{{BackgroundObserver}} would invoke the {{resetPreviousRoot}} to indicate that 
base root state needs to be adjusted. 
{code}
public interface FilteringAwareObserver extends Observer{
/**
 * Invoked to enable such observers to reset there previous root
 * to given NodeState
 * 
 * @param root previous NodeState root
 */
void resetPreviousRoot(NodeState root);
}
{code}

Another approach would be to make such observer state less i.e. they do not 
track the previous state and we pass in previous state and 
{{BackgroundObserver}} maintains a tuple 

{code}
void contentChanged(@Nullable NodeState before, @Nonnull NodeState after, 
@Nullable CommitInfo info);
{code}

[~mduerig] Would have better thoughts here ;)

> Add support for excluding commits to BackgroundObserver
> ---
>
> Key: OAK-4916
> URL: https://issues.apache.org/jira/browse/OAK-4916
> Project: Jackrabbit Oak
>  Issue Type: Technical task
>  Components: core
>Affects Versions: 1.5.11
>Reporter: Stefan Egli
>Assignee: Stefan Egli
> Fix For: 1.6
>
> Attachments: OAK-4916.patch
>
>
> As part of pre-filtering commits it would be useful to have support in the 
> BackgroundObserver (in general) that would allow to exclude certain commits 
> from being added to the (BackgroundObserver's) queue, thus keeping the queue 
> smaller. The actual filtering is up to subclasses.
> The suggested implementation is as follows:
> * a new method {{isExcluded}} is introduced which represents a subclass hook 
> for filtering
> * excluded commits are not added to the queue
> * when multiple commits are excluded subsequently, this is collapsed
> * the first non-excluded commit (ContentChange) added to the queue is marked 
> with the last non-excluded root state as the 'previous root'
> * downstream Observers are notified of the exclusion of a commit via a 
> special CommitInfo 

[jira] [Commented] (OAK-4916) Add support for excluding commits to BackgroundObserver

2016-10-12 Thread Chetan Mehrotra (JIRA)

[ 
https://issues.apache.org/jira/browse/OAK-4916?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel=15567937#comment-15567937
 ] 

Chetan Mehrotra commented on OAK-4916:
--

Somehow not very comfortable with {{NOOP_CHANGE}} based protocol for 
communicating filtering.

May be we introduce new interfaces

# ContentChangeFilter - This would be passed to {{BackgroundObserver}} and 
would be responsible for determining if given change should be included in the 
queue or not. By default {{BackgroundObserver}} would 
{{ContentChangeFilter#DEFAULT}}. Observers which support prefiltering would 
provide there own implementation. Kind of composition over inheritence
{code}
public interface ContentChangeFilter {
ContentChangeFilter DEFAULT = new ContentChangeFilter() {
@Override
public boolean includeChange(CommitInfo info) {
return true
}
};

boolean includeChange(CommitInfo info);
}
{code}
# FilteringAwareObserver - Any observer which allows prefiltering would also 
implement this interface. And instead of {{NOOP_CHANGE}} based convention 
{{BackgroundObserver}} would invoke the {{resetPreviousRoot}} to indicate that 
base root state needs to be adjusted. 
{code}
public interface FilteringAwareObserver extends Observer{
/**
 * Invoked to enable such observers to reset there previous root
 * to given NodeState
 * 
 * @param root previous NodeState root
 */
void resetPreviousRoot(NodeState root);
}
{code}

Another approach would be to make such observer state less i.e. they do not 
track the previous state and we pass in previous state and 
{{BackgroundObserver}} maintains a tuple 

{code}
void contentChanged(@Nullable NodeState before, @Nonnull NodeState after, 
@Nullable CommitInfo info);
{code}

[~mduerig] Would have better thoughts here ;)

> Add support for excluding commits to BackgroundObserver
> ---
>
> Key: OAK-4916
> URL: https://issues.apache.org/jira/browse/OAK-4916
> Project: Jackrabbit Oak
>  Issue Type: Technical task
>  Components: core
>Affects Versions: 1.5.11
>Reporter: Stefan Egli
>Assignee: Stefan Egli
> Fix For: 1.6
>
> Attachments: OAK-4916.patch
>
>
> As part of pre-filtering commits it would be useful to have support in the 
> BackgroundObserver (in general) that would allow to exclude certain commits 
> from being added to the (BackgroundObserver's) queue, thus keeping the queue 
> smaller. The actual filtering is up to subclasses.
> The suggested implementation is as follows:
> * a new method {{isExcluded}} is introduced which represents a subclass hook 
> for filtering
> * excluded commits are not added to the queue
> * when multiple commits are excluded subsequently, this is collapsed
> * the first non-excluded commit (ContentChange) added to the queue is marked 
> with the last non-excluded root state as the 'previous root'
> * downstream Observers are notified of the exclusion of a commit via a 
> special CommitInfo {{NOOP_CHANGE}}: this instructs it to exclude this change 
> while at the same time 'fast-forwarding' the root state to the new one.
> ** this extra token is one way of solving the problem that 
> {{Observer.contentChanged}} represents a diff between two states but does not 
> transport the 'from' state explicitly - that is implicitly taken from the 
> previous call to {{contentChanged}}. Thus using such a gap token 
> ({{NOOP_CHANGE}}) seems to be the only way to instruct Observers to skip a 
> change.
> To repeat: whoever extends BackgroundObserver with filtering must be aware of 
> the new {{NOOP_CHANGE}} token. Anyone not doing filtering will not get any 
> {{NOOP_CHANGE}} tokens though.



--
This message was sent by Atlassian JIRA
(v6.3.4#6332)


[jira] [Commented] (OAK-4924) avoid CommitInfo==null in contentChanged call in SegmentNodeStore.refresh

2016-10-12 Thread Chetan Mehrotra (JIRA)

[ 
https://issues.apache.org/jira/browse/OAK-4924?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel=15567829#comment-15567829
 ] 

Chetan Mehrotra commented on OAK-4924:
--

[~egli] I think that usage is fine. Similar would be the case if 
DocumentNodeStore where external changes are pushed. 

And in any case from this call onwards the CommitInfo should not be modified 
and mutable state should be build up at time of commit itself. And that is done 
in the {{merge}} call where commit info is passed from caller code and for JCR 
commits the MutableRoot sets up the CommitContext

> avoid CommitInfo==null in contentChanged call in SegmentNodeStore.refresh
> -
>
> Key: OAK-4924
> URL: https://issues.apache.org/jira/browse/OAK-4924
> Project: Jackrabbit Oak
>  Issue Type: Improvement
>  Components: segmentmk
>Affects Versions: 1.5.12
>Reporter: Stefan Egli
> Fix For: 1.6
>
>
> Currently 
> [SegmentNodeStore.refreshHead|https://github.com/apache/jackrabbit-oak/blob/d82f9b21d02a7eaf856f546e778118161d71b760/oak-segment-tar/src/main/java/org/apache/jackrabbit/oak/segment/SegmentNodeStore.java#L231]
>  calls {{contentChanged}} with null as the CommitInfo. This is problematic 
> for prefiltering (OAK-4796, OAK-4907 et al) as for that a ChangeSet of 
> changed items in a commit is stored in the CommitContext in the CommitInfo.
> Thus it would be useful to not send null but a CommitInfo that has the 
> equivalent meaning of null but is a new object for each call (so that the 
> ChangeSet can be set).
> [~mduerig], [~frm], [~alex.parvulescu] wdyt?



--
This message was sent by Atlassian JIRA
(v6.3.4#6332)


[jira] [Commented] (OAK-4907) Collect changes (paths, nts, props..) of a commit in a validator

2016-10-12 Thread Chetan Mehrotra (JIRA)

[ 
https://issues.apache.org/jira/browse/OAK-4907?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel=15567808#comment-15567808
 ] 

Chetan Mehrotra commented on OAK-4907:
--

Patch looks good and test coverage is good!. 

Some minor comments

# Instead of special casing for EMPTY it would be better to check if the 
{{CommitInfo}} has {{CommitContext}} set. If yes then validator can opt in 
otherwise opt out. And then {{CollectorSupport}} can just refer to 
{{CommitContext}}
{code}
if (info == null || info == CommitInfo.EMPTY) {
// then we cannot do change-collecting, as we can't store
// it in the info
return null;
}
{code}
# I see following 3 boolean vars always being set to true. May be replace 3 
with single var like {{changed}}
{code}
// record a change at the current path (which is the 
parent of this property)
addParentPathOnLeave = true;
// and with the current node name
addParentNodeNameOnLeave = true;
// additionally, add parent's nodeType on leave too
addParentNodeTypeOnLeave = true;
{code}
# Log the limits/config at info level in activate method
# Keep the child name as instance variable to avoid computing it again
{code}
if (addParentNodeNameOnLeave) {
support.getParentNodeNames().add(getName(path));
}
{code}
# Use {{Iterables#addAll}}. This avoid creating unnecessary list instance and 
is bit optimized for collection based iterable (which is the case here). Doing 
all this would ensure that overhead of validator is minimal!
{code}
support.getParentNodeTypes().addAll(Lists.newArrayList(parentNodeOrNull.getNames("jcr:mixinTypes")));
{code}
# {{testNull}} test is failing for me

h4. ChangeSet

May be we should split this class in two. 

*ChangeSetBuilder*
{code}
public class ChangeSetBuilder {
private final int maxItems;
private final int maxPathDepth;
private final Set parentPaths = Sets.newHashSet();

private boolean parentPathOverflow;

public ChangeSetBuilder(int maxItems, int maxPathDepth) {
this.maxItems = maxItems;
this.maxPathDepth = maxPathDepth;
}

public ChangeSetBuilder addParentPath(String path){
if (parentPaths.size() > maxItems){
parentPathOverflow = true;
parentPaths.clear();
}

if (!parentPathOverflow) {
parentPaths.add(path);
}
return this;
}

public ChangeSet build(){
return new ChangeSet(...)
}
}
{code}

This class
* Just collects the changes and take care of limits
* Is mutable
* Used by Validator and not to be used by clients

*ChangeSet*

{code}
public class ChangeSet {

@CheckForNull
public Set getParentPaths() {

}
}
{code}

* Immutable class 
* Has accessors marked with {{CheckForNull}}. With null being an indication 
that this information was not collected and observer should do the hard work

{noformat}
 * To limit memory usage, the ChangeSet has a limit on the number of items, 
each,
 * that it collects. If one of those items reach the limit this is called
 * an 'overflow' and the corresponding item type is marked as having 
'overflown'.
 * Downstream Observers should thus check if a particular item has overflown
 * or not.
 {noformat}

 This can be updated to indicate "how" overflow case can be determined i.e. by 
checking if the set returned is null

Also some coverage around overflow case would be good to have

> Collect changes (paths, nts, props..) of a commit in a validator
> 
>
> Key: OAK-4907
> URL: https://issues.apache.org/jira/browse/OAK-4907
> Project: Jackrabbit Oak
>  Issue Type: Technical task
>  Components: core
>Affects Versions: 1.5.11
>Reporter: Stefan Egli
>Assignee: Stefan Egli
> Fix For: 1.6
>
> Attachments: OAK-4907.patch, OAK-4907.v2.patch
>
>
> It would be useful to collect a set of changes of a commit (eg in a 
> validator) that could later be used in an Observer for eg prefiltering.
> Such a change collector should collect paths, nodetypes, properties, 
> node-names (and perhaps more at a later stage) of all changes and store the 
> result in the CommitInfo's CommitContext.
> Note that this is a result of 
> [discussions|https://issues.apache.org/jira/browse/OAK-4796?focusedCommentId=15550962=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel#comment-15550962]
>  around design in OAK-4796



--
This message was sent by Atlassian JIRA
(v6.3.4#6332)


[jira] [Commented] (OAK-4927) FileStore compaction should account for multiple valid checkpoints

2016-10-12 Thread JIRA

[ 
https://issues.apache.org/jira/browse/OAK-4927?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel=15567806#comment-15567806
 ] 

Michael Dürig commented on OAK-4927:


For Segment Tar we removed that check and the warning that goes along with it. 
See OAK-4371.

> FileStore compaction should account for multiple valid checkpoints
> --
>
> Key: OAK-4927
> URL: https://issues.apache.org/jira/browse/OAK-4927
> Project: Jackrabbit Oak
>  Issue Type: Improvement
>  Components: segmentmk
>Affects Versions: 1.4
>Reporter: Chetan Mehrotra
>Assignee: Alex Parvulescu
>Priority: Minor
>  Labels: candidate_oak_1_4
> Fix For: 1.6
>
>
> With Oak 1.4 we have setup which configure multiple async indexers which lead 
> to multiple checkpoint present in the system. OAK-4043 addressed that in 
> oak-run. However currently the 
> {{org.apache.jackrabbit.oak.plugins.segment.file.FileStore#compact}} logs a 
> warning if more than one checkpoint is found. 
> {noformat}
> 22:34:21.797 [main] WARN  o.a.j.o.p.segment.file.FileStore - TarMK GC #0: 
> compaction found 2 checkpoints, you might need to run checkpoint cleanup
> {noformat}
> This warning should be fixed



--
This message was sent by Atlassian JIRA
(v6.3.4#6332)


[jira] [Resolved] (OAK-4902) Blob GC completion time should be logged in millis

2016-10-12 Thread Amit Jain (JIRA)

 [ 
https://issues.apache.org/jira/browse/OAK-4902?page=com.atlassian.jira.plugin.system.issuetabpanels:all-tabpanel
 ]

Amit Jain resolved OAK-4902.

   Resolution: Fixed
Fix Version/s: 1.5.13

Done with http://svn.apache.org/viewvc?rev=1764388=rev

> Blob GC completion time should be logged in millis
> --
>
> Key: OAK-4902
> URL: https://issues.apache.org/jira/browse/OAK-4902
> Project: Jackrabbit Oak
>  Issue Type: Improvement
>  Components: blob
>Reporter: Amit Jain
>Assignee: Amit Jain
>Priority: Minor
> Fix For: 1.6, 1.5.13
>
>
> MarkSweepGarbageCollector logs the completion time with changing units 
> depending on the time taken - ms, s, min, h etc. This makes it difficult to 
> write scripts to grep the completion time. So, additionally the completion 
> time should also log in milliseconds.



--
This message was sent by Atlassian JIRA
(v6.3.4#6332)


[jira] [Commented] (OAK-4827) Backport OAK-3415 into 1.2.x

2016-10-12 Thread Chetan Mehrotra (JIRA)

[ 
https://issues.apache.org/jira/browse/OAK-4827?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel=15567723#comment-15567723
 ] 

Chetan Mehrotra commented on OAK-4827:
--

[~dominique.jaeggi] Going forward it would be helpful if we can also update the 
fix version field in issue being backported

Also unless backport involves lots of work we can avoid opening separate task 
for backport work. This reduces noise in release notes

> Backport OAK-3415 into 1.2.x
> 
>
> Key: OAK-4827
> URL: https://issues.apache.org/jira/browse/OAK-4827
> Project: Jackrabbit Oak
>  Issue Type: Task
>  Components: core
>Affects Versions: 1.2.19
>Reporter: Alex COLLIGNON
>Assignee: Dominique Jäggi
> Fix For: 1.2.20
>
>
> The ask is to backport the log improvement tracked under OAK-3415 into the 
> 1.2.x branch.



--
This message was sent by Atlassian JIRA
(v6.3.4#6332)


[jira] [Updated] (OAK-3415) AccessControlValidator: checkValidAccessControlledNode should mention node name in error message

2016-10-12 Thread Chetan Mehrotra (JIRA)

 [ 
https://issues.apache.org/jira/browse/OAK-3415?page=com.atlassian.jira.plugin.system.issuetabpanels:all-tabpanel
 ]

Chetan Mehrotra updated OAK-3415:
-
Fix Version/s: 1.2.20

> AccessControlValidator: checkValidAccessControlledNode should mention node 
> name in error message
> 
>
> Key: OAK-3415
> URL: https://issues.apache.org/jira/browse/OAK-3415
> Project: Jackrabbit Oak
>  Issue Type: Wish
>  Components: core
>Reporter: Axel Hanikel
>Assignee: angela
>Priority: Minor
> Fix For: 1.4, 1.3.9, 1.2.20
>
> Attachments: OAK-3415.patch
>
>
> In order to make troubleshooting easier, the 
> {{AccessControlValidator#checkValidAccessControlledNode}} should mention the 
> offending node name in the error message.



--
This message was sent by Atlassian JIRA
(v6.3.4#6332)