Multiple oak repositories using an OSGI whiteboard

2014-07-15 Thread Dominique Pfister
Hi,


I'd like to setup two distinct Oak repositories in the same VM, each containing 
an OSGI whiteboard.


Looking at the components inside oak-core that announce their availability 
using this whiteboard and the way the registration is implemented in the OSGI 
whiteboard, I was wondering whether above setup is possible without causing a 
clash in the OSGI service registry. If so, what would be the easiest way to 
create separate "namespaces" where every component is automatically associated 
with its designated whiteboard?


Kind regards

Dominique


RE: Multiple oak repositories using an OSGI whiteboard

2014-07-16 Thread Dominique Pfister
Hi,

Thanks everybody for their responses.

Yes, there is some special code looking up the second repository, and I thought 
about registering the second repository with a separate interface, so it can 
still be bound. My concern, however, is what happens with all the "inner" 
components, that are not directly coupled to the repository but rather 
registered in a whiteboard, and still contribute to the correct functioning.

To be more precise, let's say I'd like to create 1 oak repository of type Tar 
(T) and 1 of type Mongo (M): I give T an OSGI whiteboard, while M gets a 
default implementation that doesn't register its services in OSGI. Let's 
further say that the construction code of T @References an oak OSGI component 
(e.g. SecurityProvider), while M constructs one programmatically (e.g. an 
instance of type SecurityProviderImpl). Would this cause an interference, e.g. 
could the one explicitly built for M also be implicitly used for T?

Thanks
Dominique

From: Carsten Ziegeler 
Sent: Wednesday, July 16, 2014 3:50 PM
To: oak-dev@jackrabbit.apache.org
Subject: Re: Multiple oak repositories using an OSGI whiteboard

As David points out subsystems might help our writing your own service
registry hooks.
If you're not using one of those, you have a flat/shared service registry
and usually services using a repository service just pick up one from the
service registry and that's the one with the highest ranking at the point
of asking the registry. Therefore repository services which are registered
after this point in time are not even considered and there is no rebinding
(unless e.g. DS is used with a greedy reference). As you don't want to
rewrite all the code using a repository service, namespacing is the only
option.
However, the question is, what do you do with this second repository
service? Is there special code just looking up the second repository? Maybe
in that case, the simpler option could be to register the repository with a
different service interface - something like a marker interface
SecondaryRepository etc. (maybe with a better name)

Regards
Carsten


2014-07-16 3:08 GMT-07:00 David Bosschaert :

> Hi Dominique,
>
> You could look into OSGi Application Subsystems (OSGi Enterprise Spec
> 5 chapter 134). Application subsystems provide separate namespaces and
> by default don't share out services. Other subsystem types include
> Feature subsystems (where everything is shared) and Composite
> subsystems where you define explicitly what is shared and what is not.
>
> I wrote a blog a while ago on how to get Apache Aries subsystems
> running on Apache Felix, which might be useful:
>
> http://coderthoughts.blogspot.com/2014/01/osgi-subsytems-on-apache-felix.html
>
> Alternatively you can create your own service namespaces by using OSGi
> Service Registry hooks, but these are a bit more low-level than
> subsystems...
>
> Best regards,
>
> David
>
> On 15 July 2014 21:23, Dominique Pfister  wrote:
> > Hi,
> >
> >
> > I'd like to setup two distinct Oak repositories in the same VM, each
> containing an OSGI whiteboard.
> >
> >
> > Looking at the components inside oak-core that announce their
> availability using this whiteboard and the way the registration is
> implemented in the OSGI whiteboard, I was wondering whether above setup is
> possible without causing a clash in the OSGI service registry. If so, what
> would be the easiest way to create separate "namespaces" where every
> component is automatically associated with its designated whiteboard?
> >
> >
> > Kind regards
> >
> > Dominique
>



--
Carsten Ziegeler
Adobe Research Switzerland
cziege...@apache.org

svn commit r1300904

2012-03-15 Thread Dominique Pfister
Sorry for committing this without a comment (pressed Enter with the wrong 
focus, argh!). Commit message should read:

Author: dpfister
Date: Thu Mar 15 10:48:34 2012
New Revision: 1300904

URL: http://svn.apache.org/viewvc?rev=1300904&view=rev
Log: Simplify RevisionStore interface, add javadoc to describe contract 
regarding lock/unlockHead

Re: svn commit r1300904

2012-03-15 Thread Dominique Pfister
Sensational, thanks a lot!

On Mar 15, 2012, at 12:04 PM, Felix Meschberger wrote:

> Hi,
> 
> You can do:
> 
>  $ svn ps svn:log --revprop -r 1300904 "Log: Simplify RevisionStore 
> interface, add javadoc to describe contract regarding lock/unlockHead"
> 
> This updates/fixes the log message in subversion.
> 
> Regards
> Felix
> 
> Am 15.03.2012 um 11:57 schrieb Dominique Pfister:
> 
>> Sorry for committing this without a comment (pressed Enter with the wrong 
>> focus, argh!). Commit message should read:
>> 
>> Author: dpfister
>> Date: Thu Mar 15 10:48:34 2012
>> New Revision: 1300904
>> 
>> URL: http://svn.apache.org/viewvc?rev=1300904&view=rev
>> Log: Simplify RevisionStore interface, add javadoc to describe contract 
>> regarding lock/unlockHead
> 



Re: On setting component boundaries in Oak

2012-03-15 Thread Dominique Pfister
Hi,

On Mar 15, 2012, at 1:57 PM, Jukka Zitting wrote:

> Hi,
> 
> On Thu, Mar 15, 2012 at 10:19 AM, Stefan Guggisberg
>  wrote:
>> On Thu, Mar 15, 2012 at 9:07 AM, Angela Schreiber  wrote:
 The API and protocol bindings on the top are just some examples.
>>> 
>>> ok... because i am not so sure about a plain WebDAV binding.
>>> imo that one would rather belong on top of the JCR binding.
>>> so, i would rather not have listed here as long as we don't
>>> really plan to build that as it might cause confusion.
> 
> OK, let's drop the WebDAV bit for now from the diagram. As I said,
> it's just an example of what we could do.
> 
>>> well... but this means that the mk implementations that are
>>> currently located in the oak-core module should be moved out
>>> to some different component.
>> 
>> agreed, and that's IMO good. we should allow for alternative
>> mk impls (like we did with the jr pm's) but we also should
>> also designate a default impl (sort of a mk api reference impl).
> 
> Yep. I'd like to see that default MK be as simple as possible, ideally
> just an in-memory implementation designed mostly for testing and as a
> reference point for other implementations.

Of course, it's a good idea to have an in-memory implementation for quick 
testing, but IMO a default implementation should at least store data in a way 
that it survives a restart.

Kind regards
Dominique

Re: Lifetime of revision identifiers

2012-04-03 Thread Dominique Pfister
Hi,

On Apr 2, 2012, at 7:28 PM, Jukka Zitting wrote:

> Hi,
> 
> On Mon, Apr 2, 2012 at 6:34 PM, Stefan Guggisberg
>  wrote:
>> i don't think that we should allow clients to explicitly extend the life span
>> of a specific revision. this would IMO unnecessarily complicate the GC
>> logic and it would allow misbehaved clients to compromise the stability
>> of the mk.
> 
> This would notably complicate things in oak-core and higher up. Any
> large batch operations would have to worry about the underlying
> revisions becoming unavailable unless they are continuously updated to
> the latest head revision.
> 
> I don't think allowing lease extensions would complicate garbage
> collection too much. All I'm asking is that the collector should look
> at the "last access time" instead of the "create time" of a revision
> to determine whether it's still referenceable or not.

Sounds reasonable, as long as you explicitely access the revision first, and 
then the nodes it contains. Things get more complicated if you'd "hang on" to 
some node in some revision and then expect that this revision stays alive.

Regards
Dominique

> 
> BR,
> 
> Jukka Zitting



Re: Lifetime of revision identifiers

2012-04-03 Thread Dominique Pfister
Hi,

I made a second thought, and I'm no longer sure I would allow a revision to be 
reachable by some client interaction. In the current design, the GC will copy 
the head revision to the "to store" plus all the revisions that are either 
newly created (by some commit call coming in later) or still manipulated (by a 
commit that started earlier but where the internal commit builder is still not 
finished). I'd extend this design by copying all revisions that were created in 
some fixed interval (e.g. 10 minutes) before the head revision was created, and 
see whether this will suffice.

Regards
Dominique

On Apr 3, 2012, at 11:05 AM, Dominique Pfister wrote:

> Hi,
> 
> On Apr 2, 2012, at 7:28 PM, Jukka Zitting wrote:
> 
>> Hi,
>> 
>> On Mon, Apr 2, 2012 at 6:34 PM, Stefan Guggisberg
>>  wrote:
>>> i don't think that we should allow clients to explicitly extend the life 
>>> span
>>> of a specific revision. this would IMO unnecessarily complicate the GC
>>> logic and it would allow misbehaved clients to compromise the stability
>>> of the mk.
>> 
>> This would notably complicate things in oak-core and higher up. Any
>> large batch operations would have to worry about the underlying
>> revisions becoming unavailable unless they are continuously updated to
>> the latest head revision.
>> 
>> I don't think allowing lease extensions would complicate garbage
>> collection too much. All I'm asking is that the collector should look
>> at the "last access time" instead of the "create time" of a revision
>> to determine whether it's still referenceable or not.
> 
> Sounds reasonable, as long as you explicitely access the revision first, and 
> then the nodes it contains. Things get more complicated if you'd "hang on" to 
> some node in some revision and then expect that this revision stays alive.
> 
> Regards
> Dominique
> 
>> 
>> BR,
>> 
>> Jukka Zitting
> 



Re: Lifetime of revision identifiers

2012-04-03 Thread Dominique Pfister
Hi,

On Apr 3, 2012, at 11:51 AM, Jukka Zitting wrote:

> Hi,
> 
> On Tue, Apr 3, 2012 at 11:47 AM, Dominique Pfister  wrote:
>> I made a second thought, and I'm no longer sure I would allow
>> a revision to be reachable by some client interaction.
> 
> You'd drop revision identifiers from the MicroKernel interface? That's
> a pretty big design change...

No, I probably did not make myself clear: I would not keep a revision (and all 
its nodes) reachable in terms of garbage collection, simply because it was 
accessed by a client some time ago.

Dominique

> 
> BR,
> 
> Jukka Zitting



Re: Lifetime of revision identifiers

2012-04-03 Thread Dominique Pfister
Hi,

On Apr 3, 2012, at 12:50 PM, Jukka Zitting wrote:

> Hi,
> 
> On Tue, Apr 3, 2012 at 11:56 AM, Dominique Pfister  wrote:
>> On Apr 3, 2012, at 11:51 AM, Jukka Zitting wrote:
>>> You'd drop revision identifiers from the MicroKernel interface? That's
>>> a pretty big design change...
>> 
>> No, I probably did not make myself clear: I would not keep a revision
>> (and all its nodes) reachable in terms of garbage collection, simply
>> because it was accessed by a client some time ago.
> 
> If that's the case, I'm worried about what could happen to code like this:
> 
>String revision = mk.getHeadRevision();
>String root = getNodes("/", revision);
> 
> Suppose someone else makes a commit in between the two calls and the
> garbage collector gets triggered. The result then would be that the
> getNodes() call will fail because the given revision identifier is no
> longer available.

If we have a delay of 10 minutes for revisions getting garbage collected, this 
would imply that 10 minutes passed between the first call and the second call, 
right? This seems rather unlikely.

> 
> And if you consider that an unlikely enough scenario, consider a case
> where I want to then page through a potentially large list of the
> child nodes:
> 
>int page_size = 10;
>long count = getChildNodeCount(root);
>for (long offset = 0; offset < count; offset += page_size) {
>String children = mk.getNodes("/", revision, 1, offset,
> page_size, null);
>}
> 
> That could take a potentially long time, during which the revision
> might well get garbage-collected. How should a client prepare for such
> a situation?

If simply iterating over this large list takes longer than the 10 minutes 
mentioned above, you'd have REALLY have a lot of child nodes. And if the client 
does some work in between (or waits for some other user interaction to continue 
paging), I guess it must be able to handle this situation gracefully. 

I'm just worried about the other extreme: if you have a lot of such clients 
requesting large child node lists on different head revisions, the garbage 
collector will never be able to actually collect a revision and space will run 
out soon.

Dominique

> 
> BR,
> 
> Jukka Zitting



Re: Lifetime of revision identifiers

2012-04-03 Thread Dominique Pfister
On 3.4.12 13:36, Michael Dürig wrote:

> 10 minutes (like any value) seems quite arbitrary to me. I wouldn't want to 
> fix deployments by fiddling around with this. Rather should clients be 
> empowered to specify how long they need a certain revision (e.g. by a lease 
> model as Jukka proposed).

> If a deployment runs out of space because the client application holds on to 
> too many revisions for too long, this can be fixed by optimising the client 
> and adjusting the store size to the actual client's requirements.

I don't like the idea in general, that a server compontent relies on clients to 
behave "well" or things will break. As you said, we don't have any conclusive 
figures yet, how fast things will grow in the revision store. It is just my gut 
feeling, that keeping revisions around as long as they're accessed, will 
generate other problems if we don't have a hard limit on a revision's overall 
lifetime.

Dominique

Re: Lifetime of revision identifiers

2012-04-03 Thread Dominique Pfister
On Apr 3, 2012, at 2:39 PM, Jukka Zitting wrote:

> Hi,
> 
> On Tue, Apr 3, 2012 at 2:31 PM, Dominique Pfister  wrote:
>> As you said, we don't have any conclusive figures yet, how fast
>> things will grow in the revision store.
> 
> How about we revisit this issue in a few weeks once we have initial
> benchmarks in place?

+1 :-)

Cheers
Dominique

> 
> BR,
> 
> Jukka Zitting



Re: MicroKernel.getInstance

2012-04-11 Thread Dominique Pfister

On Apr 10, 2012, at 6:32 PM, Jukka Zitting wrote:

> Hi,
> 
> On Tue, Apr 10, 2012 at 5:23 PM, Julian Reschke  wrote:
>> Proposal: rename to "locator".
> 
> Alternative proposal: Get rid of MicroKernelFactory entirely.
> 
> Components that need to instantiate a MK implementation should
> directly use the appropriate constructor or other
> implementation-specific instantiation mechanism. That way whoever
> starts the repository or the MK instance is clearly in charge of also
> shutting it down when appropriate. The current approach with the MKF
> and MK.dispose() doesn't properly address that issue.
> 
> URL-based access or other lookups should IMHO only be used for cases
> where the repository has already been initialized and only a reference
> to it is needed. For such cases we should use JNDI, OSGi service
> references, or other existing mechanisms instead of a custom MKF
> interface.
> 
> As an example of using such a solution, see the new
> AbstractMicroKernelIT class in oak-it-mk and the standard Java service
> provider mechanism it leverages.

Sounds fine to me, +1

Cheers
Dominique

> 
> BR,
> 
> Jukka Zitting



Re: Intermittent test failures with -PintegrationTesting

2012-05-22 Thread Dominique Pfister
Hi Michi,

Seen this, too, very rarely though. Anyway, I created an issue for this:

https://issues.apache.org/jira/browse/OAK-107

Cheers
Dominique

On May 21, 2012, at 11:41 PM, Michael Dürig wrote:

> 
> Hi,
> 
> About every third build fails for me:
> 
> ---
> Test set: org.apache.jackrabbit.mk.store.DefaultRevisionStoreTest
> ---
> Tests run: 4, Failures: 0, Errors: 1, Skipped: 0, Time elapsed: 1.723 
> sec <<< FAILURE!
> testConcurrentMergeGC(org.apache.jackrabbit.mk.store.DefaultRevisionStoreTest)
>  
>  Time elapsed: 0.737 sec  <<< ERROR!
> org.apache.jackrabbit.mk.api.MicroKernelException: 
> java.lang.RuntimeException: Unexpected error
>   at 
> org.apache.jackrabbit.mk.core.MicroKernelImpl.merge(MicroKernelImpl.java:504)
>   at 
> org.apache.jackrabbit.mk.store.DefaultRevisionStoreTest.testConcurrentMergeGC(DefaultRevisionStoreTest.java:184)
>   at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
>   at 
> sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39)
>   at 
> sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25)
>   at java.lang.reflect.Method.invoke(Method.java:597)
>   at 
> org.junit.runners.model.FrameworkMethod$1.runReflectiveCall(FrameworkMethod.java:45)
>   at 
> org.junit.internal.runners.model.ReflectiveCallable.run(ReflectiveCallable.java:15)
>   at 
> org.junit.runners.model.FrameworkMethod.invokeExplosively(FrameworkMethod.java:42)
>   at 
> org.junit.internal.runners.statements.InvokeMethod.evaluate(InvokeMethod.java:20)
>   at 
> org.junit.internal.runners.statements.RunBefores.evaluate(RunBefores.java:28)
>   at 
> org.junit.internal.runners.statements.RunAfters.evaluate(RunAfters.java:30)
>   at org.junit.runners.ParentRunner.runLeaf(ParentRunner.java:263)
>   at 
> org.junit.runners.BlockJUnit4ClassRunner.runChild(BlockJUnit4ClassRunner.java:68)
>   at 
> org.junit.runners.BlockJUnit4ClassRunner.runChild(BlockJUnit4ClassRunner.java:47)
>   at org.junit.runners.ParentRunner$3.run(ParentRunner.java:231)
>   at org.junit.runners.ParentRunner$1.schedule(ParentRunner.java:60)
>   at org.junit.runners.ParentRunner.runChildren(ParentRunner.java:229)
>   at org.junit.runners.ParentRunner.access$000(ParentRunner.java:50)
>   at org.junit.runners.ParentRunner$2.evaluate(ParentRunner.java:222)
>   at org.junit.runners.ParentRunner.run(ParentRunner.java:300)
>   at 
> org.apache.maven.surefire.junit4.JUnit4TestSet.execute(JUnit4TestSet.java:53)
>   at 
> org.apache.maven.surefire.junit4.JUnit4Provider.executeTestSet(JUnit4Provider.java:123)
>   at 
> org.apache.maven.surefire.junit4.JUnit4Provider.invoke(JUnit4Provider.java:104)
>   at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
>   at 
> sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39)
>   at 
> sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25)
>   at java.lang.reflect.Method.invoke(Method.java:597)
>   at 
> org.apache.maven.surefire.util.ReflectionUtils.invokeMethodWithArray(ReflectionUtils.java:164)
>   at 
> org.apache.maven.surefire.booter.ProviderFactory$ProviderProxy.invoke(ProviderFactory.java:110)
>   at 
> org.apache.maven.surefire.booter.SurefireStarter.invokeProvider(SurefireStarter.java:172)
>   at 
> org.apache.maven.surefire.booter.SurefireStarter.runSuitesInProcessWhenForked(SurefireStarter.java:104)
>   at 
> org.apache.maven.surefire.booter.ForkedBooter.main(ForkedBooter.java:70)
> Caused by: java.lang.RuntimeException: Unexpected error
>   at 
> org.apache.jackrabbit.mk.store.StoredNodeAsState$3.getNode(StoredNodeAsState.java:176)
>   at 
> org.apache.jackrabbit.mk.store.StoredNodeAsState.getChildNode(StoredNodeAsState.java:120)
>   at 
> org.apache.jackrabbit.mk.store.DefaultRevisionStore$3.childNodeChanged(DefaultRevisionStore.java:476)
>   at 
> org.apache.jackrabbit.mk.model.AbstractNode.diff(AbstractNode.java:126)
>   at 
> org.apache.jackrabbit.mk.store.DefaultRevisionStore.compare(DefaultRevisionStore.java:443)
>   at org.apache.jackrabbit.mk.model.NodeDelta.(NodeDelta.java:68)
>   at 
> org.apache.jackrabbit.mk.model.CommitBuilder.mergeNode(CommitBuilder.java:371)
>   at 
> org.apache.jackrabbit.mk.model.CommitBuilder.mergeTree(CommitBuilder.java:363)
>   at 
> org.apache.jackrabbit.mk.model.CommitBuilder.doMerge(CommitBuilder.java:216)
>   at 
> org.apache.jackrabbit.mk.core.MicroKernelImpl.merge(MicroKernelImpl.java:502)
>   ... 32 more
> Caused by: org.apache.jackrabbit.mk.store.NotFoundException: 
> 0a9706e6ec0320c779cd6f775910826e79c97f58
>   at 
> org.apache.jackrabbit.mk.persistence.InMemPersistence.readNode(InMemPersistence.

Re: The revenge of OAK-53 part II: IT failure

2012-05-23 Thread Dominique Pfister
Hi Michi,

On May 23, 2012, at 1:38 PM, Michael Dürig wrote:

> Didn't see it again up to now. I'll keep an eye on it. Is there any log 
> data that would be helpful if this occurs again?

Unfortunately not (yet), if it reappears, I'll add a logger to the mk 
subproject and log messages in the server.

Cheers
Dominique

> 
> Michael
> 
>> 
>> cheers
>> stefan
>> 
>>> 
>>> Michael
>>> 
>>> 
 
 cheers
 stefan
 
>at
> 
> org.apache.jackrabbit.mk.client.Client.toMicroKernelException(Client.java:372)
>at org.apache.jackrabbit.mk.client.Client.write(Client.java:353)
>at
> 
> org.apache.jackrabbit.mk.test.MicroKernelIT.testBlobs(MicroKernelIT.java:855)
>at
> 
> org.apache.jackrabbit.mk.test.MicroKernelIT.testBlobs(MicroKernelIT.java:843)
>at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
>at
> 
> sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39)
>at
> 
> sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25)
>at java.lang.reflect.Method.invoke(Method.java:597)
>at
> 
> org.junit.runners.model.FrameworkMethod$1.runReflectiveCall(FrameworkMethod.java:45)
>at
> 
> org.junit.internal.runners.model.ReflectiveCallable.run(ReflectiveCallable.java:15)
>at
> 
> org.junit.runners.model.FrameworkMethod.invokeExplosively(FrameworkMethod.java:42)
>at
> 
> org.junit.internal.runners.statements.InvokeMethod.evaluate(InvokeMethod.java:20)
>at
> 
> org.junit.internal.runners.statements.RunBefores.evaluate(RunBefores.java:28)
>at
> 
> org.junit.internal.runners.statements.RunAfters.evaluate(RunAfters.java:30)
>at org.junit.runners.ParentRunner.runLeaf(ParentRunner.java:263)
>at
> 
> org.junit.runners.BlockJUnit4ClassRunner.runChild(BlockJUnit4ClassRunner.java:68)
>at
> 
> org.junit.runners.BlockJUnit4ClassRunner.runChild(BlockJUnit4ClassRunner.java:47)
>at org.junit.runners.ParentRunner$3.run(ParentRunner.java:231)
>at org.junit.runners.ParentRunner$1.schedule(ParentRunner.java:60)
>at
> org.junit.runners.ParentRunner.runChildren(ParentRunner.java:229)
>at org.junit.runners.ParentRunner.access$000(ParentRunner.java:50)
>at
> org.junit.runners.ParentRunner$2.evaluate(ParentRunner.java:222)
>at org.junit.runners.ParentRunner.run(ParentRunner.java:300)
>at org.junit.runners.Suite.runChild(Suite.java:128)
>at org.junit.runners.Suite.runChild(Suite.java:24)
>at org.junit.runners.ParentRunner$3.run(ParentRunner.java:231)
>at org.junit.runners.ParentRunner$1.schedule(ParentRunner.java:60)
>at
> org.junit.runners.ParentRunner.runChildren(ParentRunner.java:229)
>at org.junit.runners.ParentRunner.access$000(ParentRunner.java:50)
>at
> org.junit.runners.ParentRunner$2.evaluate(ParentRunner.java:222)
>at org.junit.runners.ParentRunner.run(ParentRunner.java:300)
>at org.junit.runners.Suite.runChild(Suite.java:128)
>at org.junit.runners.Suite.runChild(Suite.java:24)
>at org.junit.runners.ParentRunner$3.run(ParentRunner.java:231)
>at org.junit.runners.ParentRunner$1.schedule(ParentRunner.java:60)
>at
> org.junit.runners.ParentRunner.runChildren(ParentRunner.java:229)
>at org.junit.runners.ParentRunner.access$000(ParentRunner.java:50)
>at
> org.junit.runners.ParentRunner$2.evaluate(ParentRunner.java:222)
>at org.junit.runners.ParentRunner.run(ParentRunner.java:300)
>at org.junit.runners.Suite.runChild(Suite.java:128)
>at org.junit.runners.Suite.runChild(Suite.java:24)
>at org.junit.runners.ParentRunner$3.run(ParentRunner.java:231)
>at org.junit.runners.ParentRunner$1.schedule(ParentRunner.java:60)
>at
> org.junit.runners.ParentRunner.runChildren(ParentRunner.java:229)
>at org.junit.runners.ParentRunner.access$000(ParentRunner.java:50)
>at
> org.junit.runners.ParentRunner$2.evaluate(ParentRunner.java:222)
>at org.junit.runners.ParentRunner.run(ParentRunner.java:300)
>at
> 
> org.apache.maven.surefire.junit4.JUnit4Provider.execute(JUnit4Provider.java:236)
>at
> 
> org.apache.maven.surefire.junit4.JUnit4Provider.executeTestSet(JUnit4Provider.java:134)
>at
> 
> org.apache.maven.surefire.junit4.JUnit4Provider.invoke(JUnit4Provider.java:113)
>at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
>at
> 
> sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39)

Re: The revenge of OAK-53 part II: IT failure

2012-05-24 Thread Dominique Pfister
Hi Michi,

And you're sure you built and installed the latest oak-mk package, and are not 
accidentally refering to an old one that doesn't contain the fix made in 
OAK-12, namely to BoundaryInputStream?

Cheers
Dominique

On May 24, 2012, at 11:43 AM, Michael Dürig wrote:

> 
> Hi Dominique,
> 
> On 23.5.12 13:45, Dominique Pfister wrote:
>> Hi Michi,
>> 
>> On May 23, 2012, at 1:38 PM, Michael Dürig wrote:
>> 
>>> Didn't see it again up to now. I'll keep an eye on it. Is there any log
>>> data that would be helpful if this occurs again?
>> 
>> Unfortunately not (yet), if it reappears, I'll add a logger to the mk 
>> subproject and log messages in the server.
> 
> This just happens again. The output form the Maven build is
> 
> ---
>  T E S T S
> ---
> Running org.apache.jackrabbit.mk.test.EverythingIT
> java.io.IOException: Bad HTTP request line: 9?)c??:O?+?w
> 
> ?c9???'td???>a"Y??#0??ˀ??+??4¨?:?0?1
> 
>  #`#
> at org.apache.jackrabbit.mk.server.Request.parse(Request.java:72)
> at 
> org.apache.jackrabbit.mk.server.HttpProcessor.process(HttpProcessor.java:100)
> at 
> org.apache.jackrabbit.mk.server.HttpProcessor.process(HttpProcessor.java:75)
> at org.apache.jackrabbit.mk.server.Server.process(Server.java:169)
> at org.apache.jackrabbit.mk.server.Server$2.run(Server.java:131)
> at 
> java.util.concurrent.ThreadPoolExecutor$Worker.runTask(ThreadPoolExecutor.java:886)
> at 
> java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:908)
> at java.lang.Thread.run(Thread.java:680)
> Tests run: 72, Failures: 0, Errors: 1, Skipped: 0, Time elapsed: 15.639 
> sec <<< FAILURE!
> 
> Results :
> 
> Tests in error:
>   testBlobs[1](org.apache.jackrabbit.mk.test.MicroKernelIT): 
> java.net.SocketException: Broken pipe
> 
> Tests run: 72, Failures: 0, Errors: 1, Skipped: 0
> 
> 
> Stack trace from the logs:
> 
> ---
> Test set: org.apache.jackrabbit.mk.test.EverythingIT
> ---
> Tests run: 72, Failures: 0, Errors: 1, Skipped: 0, Time elapsed: 15.64 
> sec <<< FAILURE!
> testBlobs[1](org.apache.jackrabbit.mk.test.MicroKernelIT)  Time elapsed: 
> 4.259 sec  <<< ERROR!
> org.apache.jackrabbit.mk.api.MicroKernelException: 
> java.net.SocketException: Broken pipe
>   at 
> org.apache.jackrabbit.mk.client.Client.toMicroKernelException(Client.java:372)
>   at org.apache.jackrabbit.mk.client.Client.write(Client.java:353)
>   at 
> org.apache.jackrabbit.mk.test.MicroKernelIT.testBlobs(MicroKernelIT.java:855)
>   at 
> org.apache.jackrabbit.mk.test.MicroKernelIT.testBlobs(MicroKernelIT.java:843)
>   at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
>   at 
> sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39)
>   at 
> sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25)
>   at java.lang.reflect.Method.invoke(Method.java:597)
>   at 
> org.junit.runners.model.FrameworkMethod$1.runReflectiveCall(FrameworkMethod.java:45)
>   at 
> org.junit.internal.runners.model.ReflectiveCallable.run(ReflectiveCallable.java:15)
>   at 
> org.junit.runners.model.FrameworkMethod.invokeExplosively(FrameworkMethod.java:42)
>   at 
> org.junit.internal.runners.statements.InvokeMethod.evaluate(InvokeMethod.java:20)
>   at 
> org.junit.internal.runners.statements.RunBefores.evaluate(RunBefores.java:28)
>   at 
> org.junit.internal.runners.statements.RunAfters.evaluate(RunAfters.java:30)
>   at org.junit.runners.ParentRunner.runLeaf(ParentRunner.java:263)
>   at 
> org.junit.runners.BlockJUnit4ClassRunner.runChild(BlockJUnit4ClassRunner.java:68)
>   at 
> org.junit.runners.BlockJUnit4ClassRunner.runChild(BlockJUnit4ClassRunner.java:47)
>   at org.junit.runners.ParentRunner$3.run(ParentRunner.java:231)
>   at org.junit.runners.ParentRunner$1.schedule(ParentRunner.java:60)
>   at org.junit.runners.ParentRunner.runChildren(ParentRunner.java:229)
>   at org.junit.runners.ParentRunner.access$000(ParentRunner.java:50)
>   at org.junit.runners.ParentRunner$2.evaluate(ParentRunner.java:222)
>   at org.junit.runners.ParentRunner.run(ParentRunner.java:300)
>   at org.junit.runners.Suite.runChild(Suite.java:128)
>   at org.junit.runners.Suite.runChild(Suite.java:24)
>   at org.junit.runners.ParentRunner$

Re: The revenge of OAK-53 part II: IT failure

2012-05-24 Thread Dominique Pfister
Hm, I just ran this test another couple of times, but am still unable to 
reproduce it. I noticed that your EverythingIT test run takes almost twice as 
much time than mine, which might hint at some timing-related problem. 

Berofe adding some logging output to the server to find out what causes this 
problem, may I ask you to try the following: comment line 72 in oak-mk's 
HttpProcessor.java:

72: socket.setSoTimeout(INITIAL_SO_TIMEOUT);

and re-run the test? This is just a wild guess, but perhaps the initial socket 
timeout of 1 second is too aggressive for the transfer of 32MB-sized blob.

Dominique

On May 24, 2012, at 12:14 PM, Michael Dürig wrote:

> 
> 
> On 24.5.12 10:59, Dominique Pfister wrote:
>> Hi Michi,
>> 
>> And you're sure you built and installed the latest oak-mk package, and are 
>> not accidentally refering to an old one that doesn't contain the fix made in 
>> OAK-12, namely to BoundaryInputStream?
> 
> I think so. I did svn up and mvn clean install -PintegrationTesting just 
> a couple of hours ago.
> 
> Michael
> 
>> 
>> Cheers
>> Dominique
>> 
>> On May 24, 2012, at 11:43 AM, Michael Dürig wrote:
>> 
>>> 
>>> Hi Dominique,
>>> 
>>> On 23.5.12 13:45, Dominique Pfister wrote:
>>>> Hi Michi,
>>>> 
>>>> On May 23, 2012, at 1:38 PM, Michael Dürig wrote:
>>>> 
>>>>> Didn't see it again up to now. I'll keep an eye on it. Is there any log
>>>>> data that would be helpful if this occurs again?
>>>> 
>>>> Unfortunately not (yet), if it reappears, I'll add a logger to the mk 
>>>> subproject and log messages in the server.
>>> 
>>> This just happens again. The output form the Maven build is
>>> 
>>> ---
>>>  T E S T S
>>> ---
>>> Running org.apache.jackrabbit.mk.test.EverythingIT
>>> java.io.IOException: Bad HTTP request line: 9?)c??:O?+?w
>>> 
>>> ?c9???'td???>a"Y??#0??ˀ??+??4¨?:?0?1
>>> 
>>>  #`#
>>> at org.apache.jackrabbit.mk.server.Request.parse(Request.java:72)
>>> at
>>> org.apache.jackrabbit.mk.server.HttpProcessor.process(HttpProcessor.java:100)
>>> at
>>> org.apache.jackrabbit.mk.server.HttpProcessor.process(HttpProcessor.java:75)
>>> at org.apache.jackrabbit.mk.server.Server.process(Server.java:169)
>>> at org.apache.jackrabbit.mk.server.Server$2.run(Server.java:131)
>>> at
>>> java.util.concurrent.ThreadPoolExecutor$Worker.runTask(ThreadPoolExecutor.java:886)
>>> at
>>> java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:908)
>>> at java.lang.Thread.run(Thread.java:680)
>>> Tests run: 72, Failures: 0, Errors: 1, Skipped: 0, Time elapsed: 15.639
>>> sec<<<  FAILURE!
>>> 
>>> Results :
>>> 
>>> Tests in error:
>>>   testBlobs[1](org.apache.jackrabbit.mk.test.MicroKernelIT):
>>> java.net.SocketException: Broken pipe
>>> 
>>> Tests run: 72, Failures: 0, Errors: 1, Skipped: 0
>>> 
>>> 
>>> Stack trace from the logs:
>>> 
>>> ---
>>> Test set: org.apache.jackrabbit.mk.test.EverythingIT
>>> ---
>>> Tests run: 72, Failures: 0, Errors: 1, Skipped: 0, Time elapsed: 15.64
>>> sec<<<  FAILURE!
>>> testBlobs[1](org.apache.jackrabbit.mk.test.MicroKernelIT)  Time elapsed:
>>> 4.259 sec<<<  ERROR!
>>> org.apache.jackrabbit.mk.api.MicroKernelException:
>>> java.net.SocketException: Broken pipe
>>> at
>>> org.apache.jackrabbit.mk.client.Client.toMicroKernelException(Client.java:372)
>>> at org.apache.jackrabbit.mk.client.Client.write(Client.java:353)
>>> at
>>> org.apache.jackrabbit.mk.test.MicroKernelIT.testBlobs(MicroKernelIT.java:855)
>>> at
>>> org.apache.jackrabbit.mk.test.MicroKernelIT.testBlobs(MicroKernelIT.java:843)
>>> at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
>>> at
>>> sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39)
>>> at
>>> sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25)
>>> at java.lang.reflect.Method.invoke(Method.

Re: ConcurrentModificationException during gc run

2012-07-04 Thread Dominique Pfister
Hi Michi,

Yes, Tom experienced the same issue yesterday. I'm gonna have a look.

Thanks
Dominique

On Jul 4, 2012, at 11:23 AM, Michael Dürig wrote:

> 
> Hi,
> 
> I got a ConcurrentModificationException while checking the 0.3 release. 
> This didn't cause any test case to fail but was printed to the console.
> 
> Michael
> 
> Running org.apache.jackrabbit.oak.jcr.JcrTckTest
> java.util.ConcurrentModificationException
>   at java.util.TreeMap$PrivateEntryIterator.nextEntry(TreeMap.java:1100)
>   at java.util.TreeMap$EntryIterator.next(TreeMap.java:1136)
>   at java.util.TreeMap$EntryIterator.next(TreeMap.java:1131)
>   at 
> org.apache.jackrabbit.mk.store.DefaultRevisionStore.markBranches(DefaultRevisionStore.java:561)
>   at 
> org.apache.jackrabbit.mk.store.DefaultRevisionStore.gc(DefaultRevisionStore.java:497)
>   at 
> org.apache.jackrabbit.mk.store.DefaultRevisionStore$2.run(DefaultRevisionStore.java:159)
>   at 
> java.util.concurrent.Executors$RunnableAdapter.call(Executors.java:441)
>   at 
> java.util.concurrent.FutureTask$Sync.innerRunAndReset(FutureTask.java:317)
>   at java.util.concurrent.FutureTask.runAndReset(FutureTask.java:150)
>   at 
> java.util.concurrent.ScheduledThreadPoolExecutor$ScheduledFutureTask.access$101(ScheduledThreadPoolExecutor.java:98)
>   at 
> java.util.concurrent.ScheduledThreadPoolExecutor$ScheduledFutureTask.runPeriodic(ScheduledThreadPoolExecutor.java:180)
>   at 
> java.util.concurrent.ScheduledThreadPoolExecutor$ScheduledFutureTask.run(ScheduledThreadPoolExecutor.java:204)
>   at 
> java.util.concurrent.ThreadPoolExecutor$Worker.runTask(ThreadPoolExecutor.java:886)
>   at 
> java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:908)
>   at java.lang.Thread.run(Thread.java:680)



Re: Test failure: testSelector(org.apache.jackrabbit.test.api.query.qom.SelectorTest

2012-07-25 Thread Dominique Pfister
Hi,

On Jul 25, 2012, at 11:01 AM, Jukka Zitting wrote:

> Hi,
> 
> On Wed, Jul 25, 2012 at 10:48 AM, Michael Dürig  wrote:
>> While running the integration tests locally I got the following failure.
>> Seems to be a transient issue since it went away on the 2nd try.
> 
> I've noticed something similar every now and then. I suspect it's a
> consequence of the garbage collector being too aggressive in
> reclaiming old revisions that are still being referenced by the test
> cases.

The garbage collector currently keeps commits that were created within 60 
minutes of the current head commit's creation time: do the integration tests 
run for such a long time?

Dominique

> 
> BR,
> 
> Jukka Zitting



Re: [VOTE] Accept MongoMK contribution (Was: [jira] [Created] (OAK-293) MongoDB-based MicroKernel)

2012-09-13 Thread Dominique Pfister
And here's my:

+1

Kind regards
Dominique

On Sep 13, 2012, at 5:09 PM, Jukka Zitting wrote:

> Hi,
> 
> On Thu, Sep 6, 2012 at 9:37 PM, Philipp Marx (JIRA)  wrote:
>> Summary: MongoDB-based MicroKernel
> 
> This is a pretty major new feature so I'd like us to vote on whether
> we want to take over the maintenance and further development of this
> code. If we agree, I'd also suggest that we invite Philipp Marx as the
> original author of this code to join us as a Jackrabbit committer and
> PMC member.
> 
> So, please vote on accepting this "MongoMK" contribution and granting
> committer and  PMC member status Philipp Marx. This vote is open for
> the next 72 hours.
> 
>[ ] +1 Accept the MongoMK contribution and grant committer and PMC
> member status to Philipp Marx
>[ ] -1 Don't accept the codebase and/or grant committership, because...
> 
> My vote is +1.
> 
> BR,
> 
> Jukka Zitting



EditorProvider after Oak construction

2014-01-09 Thread Dominique Pfister
Hi,

I’m working on an application packaged as an OSGI bundle that would perform 
some validation and store some auxiliary data in a node whenever a stream is 
saved in one of its properties, so I’m thinking on creating some CommitHook (or 
an EditorProvider) that would be able to compute the auxiliary property. 

Now comes the problem: in my setup, the Oak repository is created with some 
Hooks/Providers on startup, and AFAICS only Observer’s can be added/removed 
after that, is this correct?

Thanks
Dominique

Re: EditorProvider after Oak construction

2014-01-09 Thread Dominique Pfister
Hi Jukka,

On Jan 9, 2014, at 4:39 PM, Jukka Zitting  wrote:

> Hi,
> 
> On Thu, Jan 9, 2014 at 10:29 AM, Dominique Pfister  wrote:
>> I’m working on an application packaged as an OSGI bundle that would perform 
>> some validation and
>> store some auxiliary data in a node whenever a stream is saved in one of its 
>> properties, so I’m
>> thinking on creating some CommitHook (or an EditorProvider) that would be 
>> able to compute
>> the auxiliary property.
> 
> An EditorProvider is probably better for this case, as it adds less
> overhead than a full CommitHook.
> 
>> Now comes the problem: in my setup, the Oak repository is created with some 
>> Hooks/Providers
>> on startup, and AFAICS only Observer’s can be added/removed after that, is 
>> this correct?
> 
> If you expose your EditorProvider as an OSGi service, Oak should
> automatically pick it up and apply it to any new commits. At least
> that's the intention; I'm not sure if the OSGi binding yet does that.

Great news, that’s exactly what I hoped for!

Cheers
Dominique

> 
> BR,
> 
> Jukka Zitting



Re: EditorProvider after Oak construction

2014-01-09 Thread Dominique Pfister
Hi again,

My enthusiasm might have been a bit premature: there is actually a 
WhiteboardEditorProvider in Oak that will invoke all registered OSGI services 
of type EditorProvider, but it is unused (in contrast to e.g. 
WhiteboardAuthorizableActionProvider). Would a simple registration of this 
“special” EditorProvider in Oak.with(…) fix it?

Thanks
Dominique

On Jan 9, 2014, at 4:54 PM, Dominique Pfister 
mailto:dpfis...@adobe.com>> wrote:

Hi Jukka,

On Jan 9, 2014, at 4:39 PM, Jukka Zitting 
mailto:jukka.zitt...@gmail.com>> wrote:

Hi,

On Thu, Jan 9, 2014 at 10:29 AM, Dominique Pfister 
mailto:dpfis...@adobe.com>> wrote:
I’m working on an application packaged as an OSGI bundle that would perform 
some validation and
store some auxiliary data in a node whenever a stream is saved in one of its 
properties, so I’m
thinking on creating some CommitHook (or an EditorProvider) that would be able 
to compute
the auxiliary property.

An EditorProvider is probably better for this case, as it adds less
overhead than a full CommitHook.

Now comes the problem: in my setup, the Oak repository is created with some 
Hooks/Providers
on startup, and AFAICS only Observer’s can be added/removed after that, is this 
correct?

If you expose your EditorProvider as an OSGi service, Oak should
automatically pick it up and apply it to any new commits. At least
that's the intention; I'm not sure if the OSGi binding yet does that.

Great news, that’s exactly what I hoped for!

Cheers
Dominique


BR,

Jukka Zitting



[jira] [Commented] (OAK-78) waitForCommit() test failure for MK remoting

2012-04-30 Thread Dominique Pfister (JIRA)

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

Dominique Pfister commented on OAK-78:
--

OK, but I'd expect that a change in a class's behavior will also update the 
associated javadoc.

Removed obsolete description in revision 1332128.

> waitForCommit() test failure for MK remoting
> 
>
> Key: OAK-78
> URL: https://issues.apache.org/jira/browse/OAK-78
> Project: Jackrabbit Oak
>  Issue Type: Bug
>  Components: mk
>Reporter: Jukka Zitting
>Assignee: Jukka Zitting
>Priority: Minor
> Fix For: 0.2
>
>
> The .mk.client.Client class is synchronized, which makes it fail the new 
> waitForCommit() integration test.
> There doesn't seem to be any need for synchronization in Client (the server 
> should in any case be thread-safe), so I think we should just unsynchronize 
> the Client method.

--
This message is automatically generated by JIRA.
If you think it was sent incorrectly, please contact your JIRA administrators: 
https://issues.apache.org/jira/secure/ContactAdministrators!default.jspa
For more information on JIRA, see: http://www.atlassian.com/software/jira




[jira] [Created] (OAK-82) Running MicroKernelIT test with the InMem persistence creates a lot of GC threads

2012-05-03 Thread Dominique Pfister (JIRA)
Dominique Pfister created OAK-82:


 Summary: Running MicroKernelIT test with the InMem persistence 
creates a lot of GC threads
 Key: OAK-82
 URL: https://issues.apache.org/jira/browse/OAK-82
 Project: Jackrabbit Oak
  Issue Type: Bug
Affects Versions: 0.1
Reporter: Dominique Pfister
Priority: Minor
 Fix For: 0.2


This is caused by MicroKernelImplFixture not disposing the MK instances it 
created

--
This message is automatically generated by JIRA.
If you think it was sent incorrectly, please contact your JIRA administrators: 
https://issues.apache.org/jira/secure/ContactAdministrators!default.jspa
For more information on JIRA, see: http://www.atlassian.com/software/jira




[jira] [Resolved] (OAK-82) Running MicroKernelIT test with the InMem persistence creates a lot of GC threads

2012-05-03 Thread Dominique Pfister (JIRA)

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

Dominique Pfister resolved OAK-82.
--

Resolution: Fixed

Fixed in revision 139.

> Running MicroKernelIT test with the InMem persistence creates a lot of GC 
> threads
> -
>
> Key: OAK-82
> URL: https://issues.apache.org/jira/browse/OAK-82
> Project: Jackrabbit Oak
>  Issue Type: Bug
>Affects Versions: 0.1
>        Reporter: Dominique Pfister
>Priority: Minor
> Fix For: 0.2
>
>
> This is caused by MicroKernelImplFixture not disposing the MK instances it 
> created

--
This message is automatically generated by JIRA.
If you think it was sent incorrectly, please contact your JIRA administrators: 
https://issues.apache.org/jira/secure/ContactAdministrators!default.jspa
For more information on JIRA, see: http://www.atlassian.com/software/jira




[jira] [Commented] (OAK-56) File system abstraction

2012-05-03 Thread Dominique Pfister (JIRA)

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

Dominique Pfister commented on OAK-56:
--

> On a related note, what's the status of the related o.a.j.mk.fs code in 
> oak-core? Unless we need more of the > functionality than we currently do 
> (one-liners in MicroKernelFactory and NodeMapInDb), I'd rather replace it > 
> with Commons IO or even just plain Java IO.

I'd replace it with Commons IO and its FileUtils features: this is already in 
use in other projects (such as Jackrabbit itself) and much better tested.

> If, as it sounds like, the code will mostly be needed for the MicroKernel 
> implementation, we should at least > move the o.a.j.mk.fs package from 
> oak-core to oak-mk.

I don't see a need for this in the MicroKernel implementation: instead of 
moving it back into this project, I'd rather move it to oak-commons and rename 
the package to o.a.j.commons.fs, if Tom insists on keeping it.

> File system abstraction
> ---
>
> Key: OAK-56
> URL: https://issues.apache.org/jira/browse/OAK-56
> Project: Jackrabbit Oak
>  Issue Type: Improvement
>  Components: core, mk
>Reporter: Thomas Mueller
>Assignee: Thomas Mueller
>Priority: Minor
>
> A file system abstraction allows to add new features (cross cutting concerns) 
> in a modular way, for example:
> - detection and special behavior of out-of-disk space situation
> - profiling and statistics over JMX
> - re-try on file system problems
> - encryption
> - file system monitoring
> - replication / real-time backup on the file system level (for clustering)
> - caching (improved performance for CRX)
> - allows to easily switch to faster file system APIs (FileChannel, memory 
> mapped files)
> - debugging (for example, logging all file system operations)
> - allows to implement s3 / hadoop / mongodb / ... file systems - not only by 
> us but from 3th party, possibly the end user
> - zip file system (for example to support read-only, compressed repositories)
> - testing: simulating out of disk space and out of memory (ensure the 
> repository doesn't corrupt in this case)
> - testing: simulate very large files (using an in-memory file system)
> - splitting very large files in 2 gb blocks (FAT and other file systems that 
> don't support large files)
> - data compression (if needed)

--
This message is automatically generated by JIRA.
If you think it was sent incorrectly, please contact your JIRA administrators: 
https://issues.apache.org/jira/secure/ContactAdministrators!default.jspa
For more information on JIRA, see: http://www.atlassian.com/software/jira




[jira] [Commented] (OAK-56) File system abstraction

2012-05-03 Thread Dominique Pfister (JIRA)

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

Dominique Pfister commented on OAK-56:
--

> commons and rename the package to o.a.j.commons.fs

Sorry, should be o.a.j.oak.commons.fs, of course.

> File system abstraction
> ---
>
> Key: OAK-56
> URL: https://issues.apache.org/jira/browse/OAK-56
> Project: Jackrabbit Oak
>  Issue Type: Improvement
>  Components: core, mk
>Reporter: Thomas Mueller
>Assignee: Thomas Mueller
>Priority: Minor
>
> A file system abstraction allows to add new features (cross cutting concerns) 
> in a modular way, for example:
> - detection and special behavior of out-of-disk space situation
> - profiling and statistics over JMX
> - re-try on file system problems
> - encryption
> - file system monitoring
> - replication / real-time backup on the file system level (for clustering)
> - caching (improved performance for CRX)
> - allows to easily switch to faster file system APIs (FileChannel, memory 
> mapped files)
> - debugging (for example, logging all file system operations)
> - allows to implement s3 / hadoop / mongodb / ... file systems - not only by 
> us but from 3th party, possibly the end user
> - zip file system (for example to support read-only, compressed repositories)
> - testing: simulating out of disk space and out of memory (ensure the 
> repository doesn't corrupt in this case)
> - testing: simulate very large files (using an in-memory file system)
> - splitting very large files in 2 gb blocks (FAT and other file systems that 
> don't support large files)
> - data compression (if needed)

--
This message is automatically generated by JIRA.
If you think it was sent incorrectly, please contact your JIRA administrators: 
https://issues.apache.org/jira/secure/ContactAdministrators!default.jspa
For more information on JIRA, see: http://www.atlassian.com/software/jira




[jira] [Commented] (OAK-82) Running MicroKernelIT test with the InMem persistence creates a lot of GC threads

2012-05-07 Thread Dominique Pfister (JIRA)

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

Dominique Pfister commented on OAK-82:
--

Oops, that rationale slipped my attention even though it was explicitly 
documented: thanks for fixing that!

> Running MicroKernelIT test with the InMem persistence creates a lot of GC 
> threads
> -
>
> Key: OAK-82
> URL: https://issues.apache.org/jira/browse/OAK-82
> Project: Jackrabbit Oak
>  Issue Type: Bug
>Affects Versions: 0.1
>    Reporter: Dominique Pfister
>Priority: Minor
> Fix For: 0.2.1
>
>
> This is caused by MicroKernelImplFixture not disposing the MK instances it 
> created

--
This message is automatically generated by JIRA.
If you think it was sent incorrectly, please contact your JIRA administrators: 
https://issues.apache.org/jira/secure/ContactAdministrators!default.jspa
For more information on JIRA, see: http://www.atlassian.com/software/jira




[jira] [Updated] (OAK-107) testConcurrentMergeGC fails intermittently

2012-05-22 Thread Dominique Pfister (JIRA)

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

Dominique Pfister updated OAK-107:
--

Attachment: stacktrace

> testConcurrentMergeGC fails intermittently
> --
>
> Key: OAK-107
> URL: https://issues.apache.org/jira/browse/OAK-107
> Project: Jackrabbit Oak
>  Issue Type: Bug
>Affects Versions: 0.2.1
>    Reporter: Dominique Pfister
> Attachments: stacktrace
>
>


--
This message is automatically generated by JIRA.
If you think it was sent incorrectly, please contact your JIRA administrators: 
https://issues.apache.org/jira/secure/ContactAdministrators!default.jspa
For more information on JIRA, see: http://www.atlassian.com/software/jira




[jira] [Created] (OAK-107) testConcurrentMergeGC fails intermittently

2012-05-22 Thread Dominique Pfister (JIRA)
Dominique Pfister created OAK-107:
-

 Summary: testConcurrentMergeGC fails intermittently
 Key: OAK-107
 URL: https://issues.apache.org/jira/browse/OAK-107
 Project: Jackrabbit Oak
  Issue Type: Bug
Affects Versions: 0.2.1
Reporter: Dominique Pfister
 Attachments: stacktrace



--
This message is automatically generated by JIRA.
If you think it was sent incorrectly, please contact your JIRA administrators: 
https://issues.apache.org/jira/secure/ContactAdministrators!default.jspa
For more information on JIRA, see: http://www.atlassian.com/software/jira




[jira] [Updated] (OAK-107) testConcurrentMergeGC fails intermittently

2012-05-22 Thread Dominique Pfister (JIRA)

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

Dominique Pfister updated OAK-107:
--

Attachment: (was: stacktrace)

> testConcurrentMergeGC fails intermittently
> --
>
> Key: OAK-107
> URL: https://issues.apache.org/jira/browse/OAK-107
> Project: Jackrabbit Oak
>  Issue Type: Bug
>Affects Versions: 0.2.1
>    Reporter: Dominique Pfister
> Attachments: stacktrace.txt
>
>


--
This message is automatically generated by JIRA.
If you think it was sent incorrectly, please contact your JIRA administrators: 
https://issues.apache.org/jira/secure/ContactAdministrators!default.jspa
For more information on JIRA, see: http://www.atlassian.com/software/jira




[jira] [Updated] (OAK-107) testConcurrentMergeGC fails intermittently

2012-05-22 Thread Dominique Pfister (JIRA)

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

Dominique Pfister updated OAK-107:
--

Attachment: stacktrace.txt

> testConcurrentMergeGC fails intermittently
> --
>
> Key: OAK-107
> URL: https://issues.apache.org/jira/browse/OAK-107
> Project: Jackrabbit Oak
>  Issue Type: Bug
>Affects Versions: 0.2.1
>    Reporter: Dominique Pfister
> Attachments: stacktrace.txt
>
>


--
This message is automatically generated by JIRA.
If you think it was sent incorrectly, please contact your JIRA administrators: 
https://issues.apache.org/jira/secure/ContactAdministrators!default.jspa
For more information on JIRA, see: http://www.atlassian.com/software/jira




[jira] [Updated] (OAK-138) Move client/server package in oak-mk to separate project

2012-06-12 Thread Dominique Pfister (JIRA)

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

Dominique Pfister updated OAK-138:
--

Description: 
As a further cleanup step in OAK-13, I'd like to move the packages 
o.a.j.mk.client and o.a.j.mk.server and referenced classes in oak-mk to a 
separate project, e.g. oak-mk-remote.

This new project will then be added as a dependency to:

oak-core
oak-run
oak-it-mk

  was:
As a further cleanup step in OAK-13, I'd like to move the packages 
o.a.j.oak.mk.client and o.a.j.oak.mk.server and referenced classes in oak-mk to 
a separate project, e.g. oak-mk-remote.

This new project will then be added as a dependency to:

oak-core
oak-run
oak-it-mk


> Move client/server package in oak-mk to separate project
> 
>
> Key: OAK-138
> URL: https://issues.apache.org/jira/browse/OAK-138
> Project: Jackrabbit Oak
>  Issue Type: Improvement
>  Components: core, it, mk, run
>Affects Versions: 0.3
>Reporter: Dominique Pfister
>Assignee: Dominique Pfister
>
> As a further cleanup step in OAK-13, I'd like to move the packages 
> o.a.j.mk.client and o.a.j.mk.server and referenced classes in oak-mk to a 
> separate project, e.g. oak-mk-remote.
> This new project will then be added as a dependency to:
> oak-core
> oak-run
> oak-it-mk

--
This message is automatically generated by JIRA.
If you think it was sent incorrectly, please contact your JIRA administrators: 
https://issues.apache.org/jira/secure/ContactAdministrators!default.jspa
For more information on JIRA, see: http://www.atlassian.com/software/jira




[jira] [Created] (OAK-138) Move client/server package in oak-mk to separate project

2012-06-12 Thread Dominique Pfister (JIRA)
Dominique Pfister created OAK-138:
-

 Summary: Move client/server package in oak-mk to separate project
 Key: OAK-138
 URL: https://issues.apache.org/jira/browse/OAK-138
 Project: Jackrabbit Oak
  Issue Type: Improvement
  Components: core, it, mk, run
Affects Versions: 0.3
Reporter: Dominique Pfister
Assignee: Dominique Pfister


As a further cleanup step in OAK-13, I'd like to move the packages 
o.a.j.oak.mk.client and o.a.j.oak.mk.server and referenced classes in oak-mk to 
a separate project, e.g. oak-mk-remote.

This new project will then be added as a dependency to:

oak-core
oak-run
oak-it-mk

--
This message is automatically generated by JIRA.
If you think it was sent incorrectly, please contact your JIRA administrators: 
https://issues.apache.org/jira/secure/ContactAdministrators!default.jspa
For more information on JIRA, see: http://www.atlassian.com/software/jira




[jira] [Commented] (OAK-138) Move client/server package in oak-mk to separate project

2012-06-12 Thread Dominique Pfister (JIRA)

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

Dominique Pfister commented on OAK-138:
---

-1 to merging as well: I prefer having an oak-mk-remote project with a concise 
name and a precise focus.

> The log wrapper is a somewhat similar implementation.

Hm, is there some other similarity besides that log wrapper and 
o.a.j.mk.client.Client both implement the MicroKernel interface?


> Move client/server package in oak-mk to separate project
> 
>
> Key: OAK-138
> URL: https://issues.apache.org/jira/browse/OAK-138
> Project: Jackrabbit Oak
>  Issue Type: Improvement
>  Components: core, it, mk, run
>Affects Versions: 0.3
>    Reporter: Dominique Pfister
>Assignee: Dominique Pfister
>
> As a further cleanup step in OAK-13, I'd like to move the packages 
> o.a.j.mk.client and o.a.j.mk.server and referenced classes in oak-mk to a 
> separate project, e.g. oak-mk-remote.
> This new project will then be added as a dependency to:
> oak-core
> oak-run
> oak-it-mk

--
This message is automatically generated by JIRA.
If you think it was sent incorrectly, please contact your JIRA administrators: 
https://issues.apache.org/jira/secure/ContactAdministrators!default.jspa
For more information on JIRA, see: http://www.atlassian.com/software/jira




[jira] [Commented] (OAK-138) Move client/server package in oak-mk to separate project

2012-06-13 Thread Dominique Pfister (JIRA)

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

Dominique Pfister commented on OAK-138:
---

@Thomas: I agree that other MK implementations may benefit from such a 
refactoring into at least one project (e.g. oak-mk-commons or oak-mk-base). 
Nevertheless, this issue is about moving the remote classes into a separate 
project, as oak-mk does not depend on them (opposed to data store, jsop or 
cache), so IMHO this is a topic for another issue.

I think Jukka's right about the requirement for a separate MK API project, 
therefore:

+1 for oak-mk-remote
+1 for oak-mk-api

> Move client/server package in oak-mk to separate project
> 
>
> Key: OAK-138
> URL: https://issues.apache.org/jira/browse/OAK-138
> Project: Jackrabbit Oak
>  Issue Type: Improvement
>  Components: core, it, mk, run
>Affects Versions: 0.3
>Reporter: Dominique Pfister
>Assignee: Dominique Pfister
>
> As a further cleanup step in OAK-13, I'd like to move the packages 
> o.a.j.mk.client and o.a.j.mk.server and referenced classes in oak-mk to a 
> separate project, e.g. oak-mk-remote.
> This new project will then be added as a dependency to:
> oak-core
> oak-run
> oak-it-mk

--
This message is automatically generated by JIRA.
If you think it was sent incorrectly, please contact your JIRA administrators: 
https://issues.apache.org/jira/secure/ContactAdministrators!default.jspa
For more information on JIRA, see: http://www.atlassian.com/software/jira




[jira] [Resolved] (OAK-138) Move client/server package in oak-mk to separate project

2012-06-19 Thread Dominique Pfister (JIRA)

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

Dominique Pfister resolved OAK-138.
---

Resolution: Fixed

Added a separate oak-mk-api component, and refactored client/server to 
oak-mk-remote, as discussed.

> Move client/server package in oak-mk to separate project
> 
>
> Key: OAK-138
> URL: https://issues.apache.org/jira/browse/OAK-138
> Project: Jackrabbit Oak
>  Issue Type: Improvement
>  Components: core, it, mk, run
>Affects Versions: 0.3
>        Reporter: Dominique Pfister
>    Assignee: Dominique Pfister
>
> As a further cleanup step in OAK-13, I'd like to move the packages 
> o.a.j.mk.client and o.a.j.mk.server and referenced classes in oak-mk to a 
> separate project, e.g. oak-mk-remote.
> This new project will then be added as a dependency to:
> oak-core
> oak-run
> oak-it-mk

--
This message is automatically generated by JIRA.
If you think it was sent incorrectly, please contact your JIRA administrators: 
https://issues.apache.org/jira/secure/ContactAdministrators!default.jspa
For more information on JIRA, see: http://www.atlassian.com/software/jira




[jira] [Commented] (OAK-114) MicroKernel API: specify retention policy for old revisions

2012-07-05 Thread Dominique Pfister (JIRA)

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

Dominique Pfister commented on OAK-114:
---

The javadoc is possibly not clear enough: a revision returned by 
getHeadRevision remains accessible for _at least_ 10 minutes or _even longer_ 
if it is still the head revision, regardless of the time it was committed. So 
in Jukka's snippet above, the getNodes call wouldn't fail, because only 10 
minutes passed.

Anyway, I think we really need some performance figures first, before we can 
decide whether this policy is too aggressive. OTOH, the current GC logic is 
quite small and straightforward, so it shouldn't be difficult to change it at a 
later time if need arises.

> MicroKernel API: specify retention policy for old revisions
> ---
>
> Key: OAK-114
> URL: https://issues.apache.org/jira/browse/OAK-114
> Project: Jackrabbit Oak
>  Issue Type: Improvement
>  Components: mk
>Reporter: Stefan Guggisberg
>Assignee: Stefan Guggisberg
> Attachments: OAK-114.patch
>
>
> the MicroKernel API javadoc should specify the minimal guaranteed retention 
> period for old revisions. 

--
This message is automatically generated by JIRA.
If you think it was sent incorrectly, please contact your JIRA administrators: 
https://issues.apache.org/jira/secure/ContactAdministrators!default.jspa
For more information on JIRA, see: http://www.atlassian.com/software/jira




[jira] [Comment Edited] (OAK-114) MicroKernel API: specify retention policy for old revisions

2012-07-05 Thread Dominique Pfister (JIRA)

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

Dominique Pfister edited comment on OAK-114 at 7/5/12 8:30 AM:
---

The javadoc is possibly not clear enough: a revision returned by 
getHeadRevision remains accessible for _at least_ 10 minutes or _even longer_ 
if it is still the head revision, regardless of the time it was committed. So 
in Jukka's snippet above, the getNodes call wouldn't fail, because only 5 
minutes passed.

Anyway, I think we really need some performance figures first, before we can 
decide whether this policy is too aggressive. OTOH, the current GC logic is 
quite small and straightforward, so it shouldn't be difficult to change it at a 
later time if need arises.

  was (Author: dpfister):
The javadoc is possibly not clear enough: a revision returned by 
getHeadRevision remains accessible for _at least_ 10 minutes or _even longer_ 
if it is still the head revision, regardless of the time it was committed. So 
in Jukka's snippet above, the getNodes call wouldn't fail, because only 10 
minutes passed.

Anyway, I think we really need some performance figures first, before we can 
decide whether this policy is too aggressive. OTOH, the current GC logic is 
quite small and straightforward, so it shouldn't be difficult to change it at a 
later time if need arises.
  
> MicroKernel API: specify retention policy for old revisions
> ---
>
> Key: OAK-114
> URL: https://issues.apache.org/jira/browse/OAK-114
> Project: Jackrabbit Oak
>  Issue Type: Improvement
>  Components: mk
>Reporter: Stefan Guggisberg
>Assignee: Stefan Guggisberg
> Attachments: OAK-114.patch
>
>
> the MicroKernel API javadoc should specify the minimal guaranteed retention 
> period for old revisions. 

--
This message is automatically generated by JIRA.
If you think it was sent incorrectly, please contact your JIRA administrators: 
https://issues.apache.org/jira/secure/ContactAdministrators!default.jspa
For more information on JIRA, see: http://www.atlassian.com/software/jira




[jira] [Commented] (OAK-114) MicroKernel API: specify retention policy for old revisions

2012-07-05 Thread Dominique Pfister (JIRA)

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

Dominique Pfister commented on OAK-114:
---

bq.{quote} If we are keeping track of when a particular revision was last 
returned by getHeadRevision, wouldn't it be simple to use the same mechanism to 
also keep track of when revisions are returned from or passed to other 
MicroKernel methods? I don't see how that would imply any more "complex state 
management" than what's already needed.{quote}

If we just remember the earliest revision returned by getHeadRevision, we need 
just one field and the next GC cycle can skip all revisions committed later. If 
we remember all revisions accessed, we'll end up with some possibly sparse list 
of revisions, and the GC cycle would need to re-link these revisions - modify 
parent commit, re-calculate diff - to get a consistent view.

bq.{quote} The benefit of switching from "last returned as head revision" to 
"last accessed/seen" for figuring out when a revision is still needed is that 
we can allow unused revisions expire much faster. With the "last accessed/seen" 
pattern there'll be no problem with an expiry time of just a few seconds, which 
would in most cases allow the garbage collector to be much more aggressive than 
with the 10 minute time proposed here.{quote}

I can see the advantage, but this would leave the door open for some bogus 
polling client that keeps some very old revision alive, which I'd like to avoid.


> MicroKernel API: specify retention policy for old revisions
> ---
>
> Key: OAK-114
> URL: https://issues.apache.org/jira/browse/OAK-114
> Project: Jackrabbit Oak
>  Issue Type: Improvement
>  Components: mk
>Reporter: Stefan Guggisberg
>Assignee: Stefan Guggisberg
> Attachments: OAK-114.patch
>
>
> the MicroKernel API javadoc should specify the minimal guaranteed retention 
> period for old revisions. 

--
This message is automatically generated by JIRA.
If you think it was sent incorrectly, please contact your JIRA administrators: 
https://issues.apache.org/jira/secure/ContactAdministrators!default.jspa
For more information on JIRA, see: http://www.atlassian.com/software/jira




[jira] [Comment Edited] (OAK-114) MicroKernel API: specify retention policy for old revisions

2012-07-05 Thread Dominique Pfister (JIRA)

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

Dominique Pfister edited comment on OAK-114 at 7/5/12 3:24 PM:
---

bq. If we are keeping track of when a particular revision was last returned by 
getHeadRevision, wouldn't it be simple to use the same mechanism to also keep 
track of when revisions are returned from or passed to other MicroKernel 
methods? I don't see how that would imply any more "complex state management" 
than what's already needed.

If we just remember the earliest revision returned by getHeadRevision, we need 
just one field and the next GC cycle can skip all revisions committed later. If 
we remember all revisions accessed, we'll end up with some possibly sparse list 
of revisions, and the GC cycle would need to re-link these revisions - modify 
parent commit, re-calculate diff - to get a consistent view.

bq. The benefit of switching from "last returned as head revision" to "last 
accessed/seen" for figuring out when a revision is still needed is that we can 
allow unused revisions expire much faster. With the "last accessed/seen" 
pattern there'll be no problem with an expiry time of just a few seconds, which 
would in most cases allow the garbage collector to be much more aggressive than 
with the 10 minute time proposed here.

I can see the advantage, but this would leave the door open for some bogus 
polling client that keeps some very old revision alive, which I'd like to avoid.


  was (Author: dpfister):
bq.{quote} If we are keeping track of when a particular revision was last 
returned by getHeadRevision, wouldn't it be simple to use the same mechanism to 
also keep track of when revisions are returned from or passed to other 
MicroKernel methods? I don't see how that would imply any more "complex state 
management" than what's already needed.{quote}

If we just remember the earliest revision returned by getHeadRevision, we need 
just one field and the next GC cycle can skip all revisions committed later. If 
we remember all revisions accessed, we'll end up with some possibly sparse list 
of revisions, and the GC cycle would need to re-link these revisions - modify 
parent commit, re-calculate diff - to get a consistent view.

bq.{quote} The benefit of switching from "last returned as head revision" to 
"last accessed/seen" for figuring out when a revision is still needed is that 
we can allow unused revisions expire much faster. With the "last accessed/seen" 
pattern there'll be no problem with an expiry time of just a few seconds, which 
would in most cases allow the garbage collector to be much more aggressive than 
with the 10 minute time proposed here.{quote}

I can see the advantage, but this would leave the door open for some bogus 
polling client that keeps some very old revision alive, which I'd like to avoid.

  
> MicroKernel API: specify retention policy for old revisions
> ---
>
> Key: OAK-114
> URL: https://issues.apache.org/jira/browse/OAK-114
> Project: Jackrabbit Oak
>  Issue Type: Improvement
>  Components: mk
>Reporter: Stefan Guggisberg
>Assignee: Stefan Guggisberg
> Attachments: OAK-114.patch
>
>
> the MicroKernel API javadoc should specify the minimal guaranteed retention 
> period for old revisions. 

--
This message is automatically generated by JIRA.
If you think it was sent incorrectly, please contact your JIRA administrators: 
https://issues.apache.org/jira/secure/ContactAdministrators!default.jspa
For more information on JIRA, see: http://www.atlassian.com/software/jira




[jira] [Resolved] (OAK-187) ConcurrentModificationException during gc run

2012-07-25 Thread Dominique Pfister (JIRA)

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

Dominique Pfister resolved OAK-187.
---

Resolution: Fixed
  Assignee: Dominique Pfister

Fixed in revision 1365621.

> ConcurrentModificationException during gc run
> -
>
> Key: OAK-187
> URL: https://issues.apache.org/jira/browse/OAK-187
> Project: Jackrabbit Oak
>  Issue Type: Bug
>  Components: mk
>Reporter: Michael Dürig
>        Assignee: Dominique Pfister
>
> I sporadically encounter a {{ConcurrentModificationException}} when building 
> with {{-PintegrationTesting}}. This happens while the {{JcrTckTest}} suite 
> runs and is only printed to the console. No tests fail.
> {code}
> Running org.apache.jackrabbit.oak.jcr.JcrTckIT
> java.util.ConcurrentModificationException
>   at java.util.TreeMap$PrivateEntryIterator.nextEntry(TreeMap.java:1100)
>   at java.util.TreeMap$EntryIterator.next(TreeMap.java:1136)
>   at java.util.TreeMap$EntryIterator.next(TreeMap.java:1131)
>   at 
> org.apache.jackrabbit.mk.store.DefaultRevisionStore.markBranches(DefaultRevisionStore.java:562)
>   at 
> org.apache.jackrabbit.mk.store.DefaultRevisionStore.gc(DefaultRevisionStore.java:498)
>   at 
> org.apache.jackrabbit.mk.store.DefaultRevisionStore$2.run(DefaultRevisionStore.java:160)
>   at 
> java.util.concurrent.Executors$RunnableAdapter.call(Executors.java:441)
>   at 
> java.util.concurrent.FutureTask$Sync.innerRunAndReset(FutureTask.java:317)
>   at java.util.concurrent.FutureTask.runAndReset(FutureTask.java:150)
>   at 
> java.util.concurrent.ScheduledThreadPoolExecutor$ScheduledFutureTask.access$101(ScheduledThreadPoolExecutor.java:98)
>   at 
> java.util.concurrent.ScheduledThreadPoolExecutor$ScheduledFutureTask.runPeriodic(ScheduledThreadPoolExecutor.java:180)
>   at 
> java.util.concurrent.ScheduledThreadPoolExecutor$ScheduledFutureTask.run(ScheduledThreadPoolExecutor.java:204)
>   at 
> java.util.concurrent.ThreadPoolExecutor$Worker.runTask(ThreadPoolExecutor.java:886)
>   at 
> java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:908)
>   at java.lang.Thread.run(Thread.java:680)
> Tests run: 1906, Failures: 0, Errors: 0, Skipped: 0, Time elapsed: 65.443 sec
> {code}

--
This message is automatically generated by JIRA.
If you think it was sent incorrectly, please contact your JIRA administrators: 
https://issues.apache.org/jira/secure/ContactAdministrators!default.jspa
For more information on JIRA, see: http://www.atlassian.com/software/jira




[jira] [Created] (OAK-231) Support for large child node lists.

2012-08-03 Thread Dominique Pfister (JIRA)
Dominique Pfister created OAK-231:
-

 Summary: Support for large child node lists.
 Key: OAK-231
 URL: https://issues.apache.org/jira/browse/OAK-231
 Project: Jackrabbit Oak
  Issue Type: Improvement
  Components: mk
Reporter: Dominique Pfister
Assignee: Dominique Pfister




--
This message is automatically generated by JIRA.
If you think it was sent incorrectly, please contact your JIRA administrators: 
https://issues.apache.org/jira/secure/ContactAdministrators!default.jspa
For more information on JIRA, see: http://www.atlassian.com/software/jira




[jira] [Updated] (OAK-231) Support for large child node lists

2012-08-03 Thread Dominique Pfister (JIRA)

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

Dominique Pfister updated OAK-231:
--

Summary: Support for large child node lists  (was: Support for large child 
node lists.)

> Support for large child node lists
> --
>
> Key: OAK-231
> URL: https://issues.apache.org/jira/browse/OAK-231
> Project: Jackrabbit Oak
>  Issue Type: Improvement
>  Components: mk
>    Reporter: Dominique Pfister
>        Assignee: Dominique Pfister
>


--
This message is automatically generated by JIRA.
If you think it was sent incorrectly, please contact your JIRA administrators: 
https://issues.apache.org/jira/secure/ContactAdministrators!default.jspa
For more information on JIRA, see: http://www.atlassian.com/software/jira




[jira] [Resolved] (OAK-216) Occasional org.apache.jackrabbit.mk.store.NotFoundExceptions

2012-08-22 Thread Dominique Pfister (JIRA)

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

Dominique Pfister resolved OAK-216.
---

Resolution: Fixed
  Assignee: Dominique Pfister

Issue was caused by a wrong assumption in the GC, that all branches are 
uniquely identifiable by their branch root id, which is wrong, as one can 
create two branches of the same commit.

> Occasional org.apache.jackrabbit.mk.store.NotFoundExceptions
> 
>
> Key: OAK-216
> URL: https://issues.apache.org/jira/browse/OAK-216
> Project: Jackrabbit Oak
>  Issue Type: Bug
>  Components: mk
>Reporter: Jukka Zitting
>        Assignee: Dominique Pfister
>
> Every now and then our builds fail with one or another of the JCR TCK tests 
> failing due to a {{org.apache.jackrabbit.mk.store.NotFoundException}} being 
> thrown on some revision in the MicroKernel.
> Since the garbage collector is currently only instructed to remove revisions 
> that are over 60 minutes old, such lost revisions should never occur in 
> normal builds.
> The following change to line 163 of {{DefaultRevisionStore.java}} makes the 
> problem easy to reproduce reliably, which strongly suggests that this problem 
> indeed is caused or at least triggered by the garbage collector:
> {code}
> -}, 60, 60, TimeUnit.SECONDS);
> +}, 1, 1, TimeUnit.SECONDS);
> {code}

--
This message is automatically generated by JIRA.
If you think it was sent incorrectly, please contact your JIRA administrators: 
https://issues.apache.org/jira/secure/ContactAdministrators!default.jspa
For more information on JIRA, see: http://www.atlassian.com/software/jira




[jira] [Commented] (OAK-5) JCR bindings for Oak

2012-03-12 Thread Dominique Pfister (Commented) (JIRA)

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

Dominique Pfister commented on OAK-5:
-

What about this, Tom: I use Eclipse, too, and if I "mvn eclipse:eclipse" the 
parent project and open it, it will automatically open all submodules (with the 
correct build inter-dependencies) and allow me to move classes from one module 
to the other. Would that work for you?

> JCR bindings for Oak
> 
>
> Key: OAK-5
> URL: https://issues.apache.org/jira/browse/OAK-5
> Project: Jackrabbit Oak
>  Issue Type: New Feature
>Reporter: Jukka Zitting
>  Labels: jcr
> Fix For: 0.1
>
>
> One of the proposed goals for the 0.1 release is at least a basic JCR binding 
> for Oak. Most of that already exists in /jackrabbit/sandbox, we just need to 
> decide where and how to place it in Oak. I think we should either put it all 
> under o.a.j.oak.jcr in oak-core, or create a separate oak-jcr component for 
> the JCR binding.
> As for functionality, it would be nice if the JCR binding was able to do at 
> least the following:
> {code}
> Repository repository = JcrUtils.getRepository(...);
> Session session = repository.login(...);
> try {
> // Create
> session.getRootNode().addNode("hello")
> .setProperty("world",  "hello world");
> session.save();
> // Read
> assertEquals(
> "hello world",
> session.getProperty("/hello/world").getString());
> // Update
> session.getNode("/hello").setProperty("world", "Hello, World!");
> session.save();
> assertEquals(
> "Hello, World!",
> session.getProperty("/hello/world").getString());
> // Delete
> session.getNode("/hello").delete();
> session.save();
> assertTrue(!session.propertyExists("/hello/world"));
> } finally {
> create.logout();
> }
> {code}

--
This message is automatically generated by JIRA.
If you think it was sent incorrectly, please contact your JIRA administrators: 
https://issues.apache.org/jira/secure/ContactAdministrators!default.jspa
For more information on JIRA, see: http://www.atlassian.com/software/jira




[jira] [Commented] (OAK-13) Cleanup org.apache.jackrabbit.mk

2012-03-14 Thread Dominique Pfister (Commented) (JIRA)

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

Dominique Pfister commented on OAK-13:
--

I can comment on the packages/classes I created:

o.a.j.mk.cluster: there's not much going on here and I can delete that

o.a.j.mk.client/server: these contain code for exposing/accessing an MK 
implementation over HTTP, along with some static resources that provide a very 
simple browser interface, where every method of the MicroKernel interface is 
mapped to some HTML page with a form that can be submitted to actually invoke 
the method on the running MK, which I originally created to get acquainted with 
the MK API. Not sure whether we want to keep this.


> Cleanup org.apache.jackrabbit.mk
> 
>
> Key: OAK-13
> URL: https://issues.apache.org/jira/browse/OAK-13
> Project: Jackrabbit Oak
>  Issue Type: Task
>Reporter: angela
>
> imo we should clean up the org.apache.jackrabbit.mk.* packages that are 
> currently
> located in the oak-core module.
> for me it is really hard to destinguish between code that is really part of 
> the
> productive code base for the oak project and code that is purely experimental
> chunk and leftover.
> in order to become familiar with the code that would be helpful for me and
> anybody else that will contribute to the project.

--
This message is automatically generated by JIRA.
If you think it was sent incorrectly, please contact your JIRA administrators: 
https://issues.apache.org/jira/secure/ContactAdministrators!default.jspa
For more information on JIRA, see: http://www.atlassian.com/software/jira




[jira] [Commented] (OAK-53) exclude longer running tests in the default maven profile

2012-04-10 Thread Dominique Pfister (Commented) (JIRA)

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

Dominique Pfister commented on OAK-53:
--

+1

IMO, long running tests are a PITA, and drives me to make local changes to 
ignore them or even skip the whole test suite. I definitely prefer to exclude 
such tests in the default profile.


> exclude longer running tests in the default maven profile
> -
>
> Key: OAK-53
> URL: https://issues.apache.org/jira/browse/OAK-53
> Project: Jackrabbit Oak
>  Issue Type: Test
>Reporter: Stefan Guggisberg
>
> the current maven build using the default profile takes ~3min on my machine 
> which is IMO way too long.
> 'mvn clean install' should IMO allow quick turn around cycles during 
> development and finish within a couple of seconds.
> requiring the developers to use a custom maven profile dring development (as 
> suggested in OAK-52) is IMO not acceptable. custom profiles are hard to 
> remember when working on different projects. 
>  

--
This message is automatically generated by JIRA.
If you think it was sent incorrectly, please contact your JIRA administrators: 
https://issues.apache.org/jira/secure/ContactAdministrators!default.jspa
For more information on JIRA, see: http://www.atlassian.com/software/jira